@@ -2,27 +2,30 @@ package bank2
22
33import (
44 "math/big"
5+ "slices"
56 "strings"
67 "testing"
78
8- "github.com/holiman/uint256"
9- "github.com/stretchr/testify/require"
10-
119 "github.com/ethereum/go-ethereum/accounts/abi"
1210 "github.com/ethereum/go-ethereum/common"
1311 "github.com/ethereum/go-ethereum/core/vm"
12+ "github.com/holiman/uint256"
13+ "github.com/stretchr/testify/require"
14+
15+ _ "embed"
1416
15- "cosmossdk.io/log"
16- sdkmath "cosmossdk.io/math"
17- "cosmossdk.io/store"
1817 cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
18+
1919 dbm "github.com/cosmos/cosmos-db"
20- sdk "github.com/cosmos/cosmos-sdk/types"
21- banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
2220 "github.com/cosmos/evm/testutil/constants"
2321 evmtypes "github.com/cosmos/evm/x/vm/types"
2422
25- _ "embed"
23+ "cosmossdk.io/log"
24+ sdkmath "cosmossdk.io/math"
25+ "cosmossdk.io/store"
26+
27+ sdk "github.com/cosmos/cosmos-sdk/types"
28+ banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
2629)
2730
2831var (
@@ -55,6 +58,7 @@ type TokenInfo struct {
5558}
5659
5760func Setup (t * testing.T , token TokenInfo , mintTo common.Address , mintAmount uint64 ) * vm.EVM {
61+ t .Helper ()
5862 nativeDenom := evmtypes .GetEVMCoinDenom ()
5963
6064 rawdb := dbm .NewMemDB ()
@@ -119,6 +123,7 @@ func TestBankPrecompile(t *testing.T) {
119123 erc20 := ERC20ContractAddress (BankPrecompile , token .Denom )
120124
121125 setup := func (t * testing.T ) * vm.EVM {
126+ t .Helper ()
122127 return Setup (t , token , user1 , amount )
123128 }
124129
@@ -133,38 +138,45 @@ func TestBankPrecompile(t *testing.T) {
133138 {"name" , MethodName , user1 , []byte (token .Denom ), []byte (token .Name ), nil },
134139 {"symbol" , MethodSymbol , user1 , []byte (token .Denom ), []byte (token .Symbol ), nil },
135140 {"decimals" , MethodDecimals , user1 , []byte (token .Denom ), []byte {token .Decimals }, nil },
136- {"totalSupply" , MethodTotalSupply , user1 ,
141+ {
142+ "totalSupply" , MethodTotalSupply , user1 ,
137143 []byte (token .Denom ),
138144 common .LeftPadBytes (new (big.Int ).SetUint64 (amount ).Bytes (), 32 ),
139145 nil ,
140146 },
141- {"balanceOf" , MethodBalanceOf , user1 ,
142- append (user1 .Bytes (), []byte (token .Denom )... ),
147+ {
148+ "balanceOf" , MethodBalanceOf , user1 ,
149+ slices .Concat (user1 .Bytes (), []byte (token .Denom )),
143150 common .LeftPadBytes (new (big.Int ).SetUint64 (amount ).Bytes (), 32 ),
144151 nil ,
145152 },
146- {"balanceOf-empty" , MethodBalanceOf , user2 ,
147- append (user2 .Bytes (), []byte (token .Denom )... ),
153+ {
154+ "balanceOf-empty" , MethodBalanceOf , user2 ,
155+ slices .Concat (user2 .Bytes (), []byte (token .Denom )),
148156 common .LeftPadBytes ([]byte {}, 32 ),
149157 nil ,
150158 },
151- {"transferFrom-owner" , MethodTransferFrom , user1 ,
152- TransferFromInput (user1 , user2 , big .NewInt (100 ), token .Denom ),
159+ {
160+ "transferFrom-owner" , MethodTransferFrom , user1 ,
161+ slices .Concat (user1 .Bytes (), user2 .Bytes (), common .LeftPadBytes (big .NewInt (100 ).Bytes (), 32 ), []byte (token .Denom )),
153162 []byte {1 },
154163 nil ,
155164 },
156- {"transferFrom-erc20" , MethodTransferFrom , erc20 ,
157- TransferFromInput (user1 , user2 , big .NewInt (100 ), token .Denom ),
165+ {
166+ "transferFrom-erc20" , MethodTransferFrom , erc20 ,
167+ slices .Concat (user1 .Bytes (), user2 .Bytes (), common .LeftPadBytes (big .NewInt (100 ).Bytes (), 32 ), []byte (token .Denom )),
158168 []byte {1 },
159169 nil ,
160170 },
161- {"transferFrom-unauthorized" , MethodTransferFrom , user2 ,
162- TransferFromInput (user1 , user2 , big .NewInt (100 ), token .Denom ),
171+ {
172+ "transferFrom-unauthorized" , MethodTransferFrom , user2 ,
173+ slices .Concat (user1 .Bytes (), user2 .Bytes (), common .LeftPadBytes (big .NewInt (100 ).Bytes (), 32 ), []byte (token .Denom )),
163174 nil ,
164175 vm .ErrExecutionReverted ,
165176 },
166- {"transferFrom-insufficient-balance" , MethodTransferFrom , user2 ,
167- TransferFromInput (user2 , user1 , big .NewInt (100 ), token .Denom ),
177+ {
178+ "transferFrom-insufficient-balance" , MethodTransferFrom , user2 ,
179+ slices .Concat (user2 .Bytes (), user1 .Bytes (), common .LeftPadBytes (big .NewInt (100 ).Bytes (), 32 ), []byte (token .Denom )),
168180 nil ,
169181 vm .ErrExecutionReverted ,
170182 },
@@ -177,7 +189,7 @@ func TestBankPrecompile(t *testing.T) {
177189 for _ , tc := range testCases {
178190 t .Run (tc .name , func (t * testing.T ) {
179191 evm := setup (t )
180- input := append ([]byte {byte (tc .method )}, tc .input ... )
192+ input := slices . Concat ([]byte {byte (tc .method )}, tc .input )
181193 ret , _ , err := evm .Call (tc .caller , BankPrecompile , input , GasLimit , uint256 .NewInt (0 ))
182194 if tc .expErr != nil {
183195 require .Equal (t , tc .expErr , err )
@@ -206,6 +218,7 @@ func TestBankERC20(t *testing.T) {
206218 nativeERC20 := ERC20ContractAddress (BankPrecompile , evmtypes .GetEVMCoinDenom ())
207219
208220 setup := func (t * testing.T ) * vm.EVM {
221+ t .Helper ()
209222 evm := Setup (t , token , user1 , amount )
210223 DeployERC20 (t , evm , BankPrecompile , evmtypes .GetEVMCoinDenom ())
211224 return evm
@@ -224,27 +237,32 @@ func TestBankERC20(t *testing.T) {
224237 {"symbol" , "symbol" , zero , erc20 , nil , []interface {}{token .Symbol }, nil },
225238 {"decimals" , "decimals" , zero , erc20 , nil , []interface {}{token .Decimals }, nil },
226239 {"totalSupply" , "totalSupply" , zero , erc20 , nil , []interface {}{bigAmount }, nil },
227- {"balanceOf" , "balanceOf" , zero , erc20 ,
240+ {
241+ "balanceOf" , "balanceOf" , zero , erc20 ,
228242 []interface {}{user1 },
229243 []interface {}{bigAmount },
230244 nil ,
231245 },
232- {"balanceOf-empty" , "balanceOf" , zero , erc20 ,
246+ {
247+ "balanceOf-empty" , "balanceOf" , zero , erc20 ,
233248 []interface {}{user2 },
234249 []interface {}{common .Big0 },
235250 nil ,
236251 },
237- {"transfer" , "transfer" , user1 , erc20 ,
252+ {
253+ "transfer" , "transfer" , user1 , erc20 ,
238254 []interface {}{user2 , big .NewInt (100 )},
239255 []interface {}{true },
240256 nil ,
241257 },
242- {"transfer-insufficient-balance" , "transfer" , user2 , erc20 ,
258+ {
259+ "transfer-insufficient-balance" , "transfer" , user2 , erc20 ,
243260 []interface {}{user1 , big .NewInt (100 )},
244261 nil ,
245262 vm .ErrExecutionReverted ,
246263 },
247- {"native-fail" , "transfer" , user1 , nativeERC20 ,
264+ {
265+ "native-fail" , "transfer" , user1 , nativeERC20 ,
248266 []interface {}{user2 , big .NewInt (100 )},
249267 nil ,
250268 vm .ErrExecutionReverted ,
@@ -261,7 +279,7 @@ func TestBankERC20(t *testing.T) {
261279 input , err := method .Inputs .Pack (tc .input ... )
262280 require .NoError (t , err )
263281
264- ret , _ , err := evm .Call (tc .caller , tc .token , append (method .ID , input ... ), GasLimit , uint256 .NewInt (0 ))
282+ ret , _ , err := evm .Call (tc .caller , tc .token , slices . Concat (method .ID , input ), GasLimit , uint256 .NewInt (0 ))
265283 if tc .expErr != nil {
266284 require .Equal (t , tc .expErr , err )
267285 return
@@ -275,17 +293,10 @@ func TestBankERC20(t *testing.T) {
275293 }
276294}
277295
278- func TransferFromInput (from , to common.Address , amount * big.Int , denom string ) []byte {
279- fixedBuf := make ([]byte , 20 + 20 + 32 ) // from + to + amount
280- copy (fixedBuf [0 :20 ], from .Bytes ())
281- copy (fixedBuf [20 :40 ], to .Bytes ())
282- copy (fixedBuf [40 :72 ], common .LeftPadBytes (amount .Bytes (), 32 ))
283- return append (fixedBuf , []byte (denom )... )
284- }
285-
286296// DeployCreate2 deploys the deterministic contract factory
287297// https://github.com/Arachnid/deterministic-deployment-proxy
288298func DeployCreate2 (t * testing.T , evm * vm.EVM ) {
299+ t .Helper ()
289300 caller := common .HexToAddress ("0x3fAB184622Dc19b6109349B94811493BF2a45362" )
290301 code := common .FromHex ("604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3" )
291302 _ , address , _ , err := evm .Create (caller , code , GasLimit , uint256 .NewInt (0 ))
@@ -294,10 +305,10 @@ func DeployCreate2(t *testing.T, evm *vm.EVM) {
294305}
295306
296307func DeployERC20 (t * testing.T , evm * vm.EVM , bank common.Address , denom string ) {
308+ t .Helper ()
297309 caller := common .BigToAddress (common .Big0 )
298310
299- initcode := append (ERC20Bin , ERC20Constructor (denom , bank )... )
300- input := append (ERC20Salt , initcode ... )
311+ input := slices .Concat (ERC20Salt , ERC20Bin , ERC20Constructor (denom , bank ))
301312 _ , _ , err := evm .Call (caller , Create2FactoryAddress , input , GasLimit , uint256 .NewInt (0 ))
302313 require .NoError (t , err )
303314
0 commit comments