mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 22:56:43 +00:00
CreateAccessList stateOverrides unit test
This commit is contained in:
parent
9d2b99884b
commit
aad7c05417
1 changed files with 65 additions and 1 deletions
|
|
@ -3278,7 +3278,7 @@ func setupReceiptBackend(t *testing.T, genBlocks int) (*testBackend, []common.Ha
|
|||
// return true;
|
||||
// }
|
||||
// }
|
||||
contract: {Balance: big.NewInt(params.Ether), Code: common.FromHex("0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a9059cbb14610030575b600080fd5b61004a6004803603810190610045919061016a565b610060565b60405161005791906101c5565b60405180910390f35b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516100bf91906101ef565b60405180910390a36001905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b60008060408385031215610181576101806100d1565b5b600061018f8582860161011f565b92505060206101a085828601610155565b9150509250929050565b60008115159050919050565b6101bf816101aa565b82525050565b60006020820190506101da60008301846101b6565b92915050565b6101e981610134565b82525050565b600060208201905061020460008301846101e0565b9291505056fea2646970667358221220b469033f4b77b9565ee84e0a2f04d496b18160d26034d54f9487e57788fd36d564736f6c63430008120033")},
|
||||
contract: {Balance: big.NewInt(params.Ether), Code: common.FromHex("0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a9059cbb14610030575b600080fd5b61004a6004803603810190610045919061016a565b610060565b60405161005791906101c5565b60405180910390f35b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516100bf91906101ef565b60405180910390a36001905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b60008060408385031215610181576101806100d1565b5b600061018f8582860161011f565b92505060206101a085828601610155565b9150509250929050565b60008115159050919050565b6101bf816101aa565b82525050565b60006020820190506101da60008301846101b6565b92915050565b6101e981610134565b82525050565b600060208201905061020460008301846101e0565b9291505056fea2646970667358221220b469033f4b77b9565ee84e0a2f04d496b18160d26034d54f9487e57788fd36d564736f6c63430008120033")},
|
||||
},
|
||||
}
|
||||
signer = types.LatestSignerForChainID(params.TestChainConfig.ChainID)
|
||||
|
|
@ -3529,3 +3529,67 @@ func testRPCResponseWithFile(t *testing.T, testid int, result interface{}, rpc s
|
|||
func addressToHash(a common.Address) common.Hash {
|
||||
return common.BytesToHash(a.Bytes())
|
||||
}
|
||||
|
||||
func TestCreateAccessListWithStateOverrides(t *testing.T) {
|
||||
// Initialize test backend
|
||||
genesis := &core.Genesis{
|
||||
Config: params.TestChainConfig,
|
||||
Alloc: core.GenesisAlloc{
|
||||
common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7"): {Balance: big.NewInt(1000000000000000000)},
|
||||
},
|
||||
}
|
||||
backend := newTestBackend(t, 1, genesis, ethash.NewFaker(), nil)
|
||||
|
||||
// Create a new BlockChainAPI instance
|
||||
api := NewBlockChainAPI(backend)
|
||||
|
||||
// Create test contract code
|
||||
contractCode := common.Hex2Bytes("608060405234801561001057600080fd5b506004361061002b5760003560e01c806360fe47b114610030575b600080fd5b61004a6004803603810190610045919061009d565b61004c565b005b8060008190555050565b600080fd5b6000819050919050565b61007a81610067565b811461008557600080fd5b50565b60008135905061009781610071565b92915050565b6000602082840312156100b3576100b2610062565b5b60006100c184828501610088565b9150509291505056")
|
||||
codeBytes := hexutil.Bytes(contractCode)
|
||||
|
||||
// Create state overrides
|
||||
overrides := &override.StateOverride{
|
||||
common.HexToAddress("0x1234567890123456789012345678901234567890"): override.OverrideAccount{
|
||||
Code: &codeBytes,
|
||||
},
|
||||
}
|
||||
|
||||
// Create transaction arguments
|
||||
from := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7")
|
||||
to := common.HexToAddress("0x1234567890123456789012345678901234567890")
|
||||
data := hexutil.Bytes(common.Hex2Bytes("60fe47b1000000000000000000000000000000000000000000000000000000000000002a")) // set(42)
|
||||
args := TransactionArgs{
|
||||
From: &from,
|
||||
To: &to,
|
||||
Data: &data,
|
||||
}
|
||||
|
||||
// Call CreateAccessList
|
||||
result, err := api.CreateAccessList(context.Background(), args, nil, overrides)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create access list: %v", err)
|
||||
}
|
||||
|
||||
// Verify the result
|
||||
if result == nil {
|
||||
t.Fatal("Expected non-nil result")
|
||||
}
|
||||
if result.Accesslist == nil {
|
||||
t.Fatal("Expected non-nil access list")
|
||||
}
|
||||
if result.GasUsed == 0 {
|
||||
t.Fatal("Expected non-zero gas used")
|
||||
}
|
||||
|
||||
// Verify access list contains the overridden contract address
|
||||
found := false
|
||||
for _, tuple := range *result.Accesslist {
|
||||
if tuple.Address == common.HexToAddress("0x1234567890123456789012345678901234567890") {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Fatal("Access list should contain the overridden contract address")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue