Skip to content

Commit 82a7981

Browse files
mmsqevladjdk
andauthored
fix: align BytesToAddress in parseHexAddress (#276)
* fix: align BytesToAddress in parseHexAddress that requires exact 20-byte instead of direct Address conversion * test --------- Co-authored-by: Vlad J <[email protected]>
1 parent 058eb6d commit 82a7981

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

precompiles/common/balance_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func parseHexAddress(event sdk.Event, key string) (common.Address, error) {
8484
return common.Address{}, fmt.Errorf("invalid address %q: %w", attr.Value, err)
8585
}
8686

87-
return common.Address(accAddr.Bytes()), nil
87+
return common.BytesToAddress(accAddr), nil
8888
}
8989

9090
func parseAmount(event sdk.Event) (*uint256.Int, error) {

precompiles/common/balance_handler_test.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import (
55

66
"github.com/ethereum/go-ethereum/common"
77
"github.com/ethereum/go-ethereum/core/tracing"
8+
"github.com/ethereum/go-ethereum/crypto"
89
"github.com/holiman/uint256"
910
"github.com/stretchr/testify/require"
1011

12+
"github.com/cosmos/evm/crypto/ethsecp256k1"
1113
testutil "github.com/cosmos/evm/testutil"
1214
testconstants "github.com/cosmos/evm/testutil/constants"
1315
"github.com/cosmos/evm/x/vm/statedb"
@@ -31,7 +33,11 @@ func setupBalanceHandlerTest(t *testing.T) {
3133
}
3234

3335
func TestParseHexAddress(t *testing.T) {
34-
var accAddr sdk.AccAddress
36+
// account key, use a constant account to keep unit test deterministic.
37+
priv, err := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
38+
require.NoError(t, err)
39+
privKey := &ethsecp256k1.PrivKey{Key: crypto.FromECDSA(priv)}
40+
accAddr := sdk.AccAddress(privKey.PubKey().Address().Bytes())
3541

3642
testCases := []struct {
3743
name string
@@ -46,6 +52,16 @@ func TestParseHexAddress(t *testing.T) {
4652
return sdk.NewEvent("bank", sdk.NewAttribute(banktypes.AttributeKeySpender, accAddr.String()))
4753
},
4854
key: banktypes.AttributeKeySpender,
55+
expAddr: common.BytesToAddress(accAddr),
56+
expError: false,
57+
},
58+
{
59+
name: "valid address - BytesToAddress",
60+
maleate: func() sdk.Event {
61+
return sdk.NewEvent("bank", sdk.NewAttribute(banktypes.AttributeKeySpender, "cosmos1ddjhjcmgv95kutgqqqqqqqqqqqqsjugwrg"))
62+
},
63+
key: banktypes.AttributeKeySpender,
64+
expAddr: common.HexToAddress("0x0000006B6579636861696e2d0000000000000001"),
4965
expError: false,
5066
},
5167
{
@@ -70,10 +86,6 @@ func TestParseHexAddress(t *testing.T) {
7086
t.Run(tc.name, func(t *testing.T) {
7187
setupBalanceHandlerTest(t)
7288

73-
_, addrs, err := testutil.GeneratePrivKeyAddressPairs(1)
74-
require.NoError(t, err)
75-
accAddr = addrs[0]
76-
7789
event := tc.maleate()
7890

7991
addr, err := parseHexAddress(event, tc.key)
@@ -83,7 +95,7 @@ func TestParseHexAddress(t *testing.T) {
8395
}
8496

8597
require.NoError(t, err)
86-
require.Equal(t, common.Address(accAddr.Bytes()), addr)
98+
require.Equal(t, tc.expAddr, addr)
8799
})
88100
}
89101
}
@@ -148,8 +160,8 @@ func TestAfterBalanceChange(t *testing.T) {
148160
require.NoError(t, err)
149161
spenderAcc := addrs[0]
150162
receiverAcc := addrs[1]
151-
spender := common.Address(spenderAcc.Bytes())
152-
receiver := common.Address(receiverAcc.Bytes())
163+
spender := common.BytesToAddress(spenderAcc)
164+
receiver := common.BytesToAddress(receiverAcc)
153165

154166
// initial balance for spender
155167
stateDB.AddBalance(spender, uint256.NewInt(5), tracing.BalanceChangeUnspecified)

tests/integration/precompiles/ics20/test_integration.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func TestPrecompileIntegrationTestSuite(t *testing.T, evmAppCreator ibctesting.A
7373
Expect(err).To(BeNil())
7474
Expect(res.Code).To(BeZero(), "Failed to deploy ICS20 caller contract: %s", res.Log)
7575

76-
ics20CallerAddr = crypto.CreateAddress(common.Address(sender.Bytes()), sentEthTx.AsTransaction().Nonce())
76+
ics20CallerAddr = crypto.CreateAddress(common.BytesToAddress(sender), sentEthTx.AsTransaction().Nonce())
7777
evmAppA := s.chainA.App.(evm.EvmApp)
7878
Expect(isContractDeployed(s.chainA.GetContext(), evmAppA, ics20CallerAddr)).To(BeTrue(), "Contract was not deployed successfully")
7979

@@ -124,7 +124,7 @@ func TestPrecompileIntegrationTestSuite(t *testing.T, evmAppCreator ibctesting.A
124124
sourcePortID := path.EndpointA.ChannelConfig.PortID
125125
sourceChannelID := path.EndpointA.ChannelID
126126
sourceBondDenom := s.chainABondDenom
127-
sender := common.Address(s.chainA.SenderAccount.GetAddress().Bytes())
127+
sender := common.BytesToAddress(s.chainA.SenderAccount.GetAddress())
128128

129129
callArgs := testutiltypes.CallArgs{
130130
ContractABI: ics20CallerContract.ABI,

0 commit comments

Comments
 (0)