diff --git a/lib/eth/tx.rb b/lib/eth/tx.rb
index <HASH>..<HASH> 100644
--- a/lib/eth/tx.rb
+++ b/lib/eth/tx.rb
@@ -66,8 +66,10 @@ module Eth
     end
 
     def from
-      return @from if @from
-      @from ||= OpenSsl.recover_compact(signature_hash, signature) if signature
+      if signature
+        public_key = OpenSsl.recover_compact(signature_hash, signature)
+        Utils.public_key_to_address(public_key) if public_key
+      end
     end
 
     def signature
diff --git a/spec/eth/tx_spec.rb b/spec/eth/tx_spec.rb
index <HASH>..<HASH> 100644
--- a/spec/eth/tx_spec.rb
+++ b/spec/eth/tx_spec.rb
@@ -137,7 +137,7 @@ describe Eth::Tx, type: :model do
         tx.sign key
       end
 
-      it { is_expected.to eq(key.public_hex) }
+      it { is_expected.to eq(key.address) }
     end
 
     context "when the signature does NOT match" do
@@ -147,7 +147,7 @@ describe Eth::Tx, type: :model do
         tx.r = tx.r + 1
       end
 
-      it { is_expected.not_to eq(key.public_hex) }
+      it { is_expected.not_to eq(key.address) }
     end
 
     context "when the signature is NOT present" do
Tx#from returns an address instead of a public key