Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 28 additions & 24 deletions accounts/abi/bind/bind_extra_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,11 @@ import (
"github.com/ava-labs/coreth/params"
"github.com/ava-labs/libevm/common"
"github.com/ava-labs/libevm/crypto"
"github.com/stretchr/testify/require"
)

// TestGetSenderNativeAssetCall checks that the NativeAssetCall proxies the
// caller address This behavior is disabled on the network and is only to test
// previous behavior. Note the test uses [params.TestApricotPhase2Config].
// previous behavior. Note the test uses ApricotPhase2Config.
func TestGetSenderNativeAssetCall(t *testing.T) {
// pragma solidity >=0.8.0 <0.9.0;
// contract GetSenderNativeAssetCall {
Expand All @@ -35,7 +34,7 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
// _sender = msg.sender;
// }
// }
const rawABI = `[
rawABI := `[
{
"inputs": [],
"name": "getSender",
Expand All @@ -52,17 +51,17 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
}
]`
bytecode := common.FromHex(`6080604052348015600f57600080fd5b506101608061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806350c36a521461003b5780635e01eb5a14610045575b600080fd5b610043610063565b005b61004d6100a5565b60405161005a919061010f565b60405180910390f35b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f9826100ce565b9050919050565b610109816100ee565b82525050565b60006020820190506101246000830184610100565b9291505056fea26469706673582212209023ce54f38e749b58f44e8da750354578080ce16df95037b7305ed7e480c36d64736f6c634300081b0033`)
const setSenderMethodName = "setSender"
const getSenderMethodName = "getSender"
setSenderMethodName := "setSender"
getSenderMethodName := "getSender"

parsedABI, err := abi.JSON(bytes.NewReader([]byte(rawABI)))
require.NoError(t, err, "Failed to parse ABI")
if err != nil {
t.Fatalf("Failed to parse ABI: %v", err)
}

// Generate a new random account and a funded simulator
key, err := crypto.GenerateKey()
require.NoError(t, err, "Failed to generate key")
auth, err := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
require.NoError(t, err, "Failed to create transactor")
key, _ := crypto.GenerateKey()
auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
alloc := types.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}
atApricotPhase2 := func(nodeConf *node.Config, ethConf *ethconfig.Config) {
chainConfig := *params.TestApricotPhase2Config
Expand All @@ -74,14 +73,13 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
Backend: b,
Client: b.Client(),
}
t.Cleanup(func() {
err = sim.Close()
require.NoError(t, err, "Failed to close simulator")
})
defer sim.Close()

// Deploy the get/setSender contract
_, _, interactor, err := bind.DeployContract(auth, parsedABI, bytecode, sim)
require.NoError(t, err, "Failed to deploy interactor contract")
if err != nil {
t.Fatalf("Failed to deploy interactor contract: %v", err)
}
sim.Commit(false)

// Setting NativeAssetCall in the transact opts will proxy the call through
Expand All @@ -93,15 +91,21 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
AssetAmount: big.NewInt(0),
},
}
_, err = interactor.Transact(opts, setSenderMethodName)
require.NoError(t, err, "Failed to set sender")
if _, err := interactor.Transact(opts, setSenderMethodName); err != nil {
t.Fatalf("Failed to set sender: %v", err)
}
sim.Commit(true)

var results []any
err = interactor.Call(nil, &results, getSenderMethodName)
require.NoError(t, err, "Failed to get sender")
require.Len(t, results, 1)
addr, ok := results[0].(common.Address)
require.Truef(t, ok, "Expected %T, got %T", common.Address{}, results[0])
require.Equal(t, addr, auth.From, "Address mismatch")
var results []interface{}
if err := interactor.Call(nil, &results, getSenderMethodName); err != nil {
t.Fatalf("Failed to get sender: %v", err)
}
if len(results) != 1 {
t.Fatalf("Expected one result, got %d", len(results))
}
if addr, ok := results[0].(common.Address); !ok {
t.Fatalf("Expected address, got %T", results[0])
} else if addr != auth.From {
t.Fatalf("Address mismatch: have '%v'", addr)
}
}
Loading