github.com/ethereum-optimism/optimism@v1.7.2/op-node/rollup/derive/ecotone_upgrade_transactions_test.go (about) 1 package derive 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/ethereum/go-ethereum/common" 10 "github.com/ethereum/go-ethereum/common/hexutil" 11 "github.com/ethereum/go-ethereum/core/types" 12 13 "github.com/ethereum-optimism/optimism/op-bindings/bindings" 14 ) 15 16 func TestSourcesMatchSpec(t *testing.T) { 17 for _, test := range []struct { 18 source UpgradeDepositSource 19 expectedHash string 20 }{ 21 { 22 source: deployL1BlockSource, 23 expectedHash: "0x877a6077205782ea15a6dc8699fa5ebcec5e0f4389f09cb8eda09488231346f8", 24 }, 25 { 26 source: deployGasPriceOracleSource, 27 expectedHash: "0xa312b4510adf943510f05fcc8f15f86995a5066bd83ce11384688ae20e6ecf42", 28 }, 29 { 30 source: updateL1BlockProxySource, 31 expectedHash: "0x18acb38c5ff1c238a7460ebc1b421fa49ec4874bdf1e0a530d234104e5e67dbc", 32 }, 33 { 34 source: updateGasPriceOracleSource, 35 expectedHash: "0xee4f9385eceef498af0be7ec5862229f426dec41c8d42397c7257a5117d9230a", 36 }, 37 { 38 source: enableEcotoneSource, 39 expectedHash: "0x0c1cb38e99dbc9cbfab3bb80863380b0905290b37eb3d6ab18dc01c1f3e75f93", 40 }, 41 { 42 source: beaconRootsSource, 43 expectedHash: "0x69b763c48478b9dc2f65ada09b3d92133ec592ea715ec65ad6e7f3dc519dc00c", 44 }, 45 } { 46 require.Equal(t, common.HexToHash(test.expectedHash), test.source.SourceHash()) 47 } 48 } 49 50 func toDepositTxn(t *testing.T, data hexutil.Bytes) (common.Address, *types.Transaction) { 51 txn := new(types.Transaction) 52 err := txn.UnmarshalBinary(data) 53 require.NoError(t, err) 54 require.Truef(t, txn.IsDepositTx(), "expected deposit txn, got %v", txn.Type()) 55 require.False(t, txn.IsSystemTx()) 56 57 signer := types.NewLondonSigner(big.NewInt(420)) 58 from, err := signer.Sender(txn) 59 require.NoError(t, err) 60 61 return from, txn 62 } 63 64 func TestEcotoneNetworkTransactions(t *testing.T) { 65 upgradeTxns, err := EcotoneNetworkUpgradeTransactions() 66 require.NoError(t, err) 67 require.Len(t, upgradeTxns, 6) 68 69 deployL1BlockSender, deployL1Block := toDepositTxn(t, upgradeTxns[0]) 70 require.Equal(t, deployL1BlockSender, common.HexToAddress("0x4210000000000000000000000000000000000000")) 71 require.Equal(t, deployL1BlockSource.SourceHash(), deployL1Block.SourceHash()) 72 require.Nil(t, deployL1Block.To()) 73 require.Equal(t, uint64(375_000), deployL1Block.Gas()) 74 require.Equal(t, bindings.L1BlockMetaData.Bin, hexutil.Bytes(deployL1Block.Data()).String()) 75 76 deployGasPriceOracleSender, deployGasPriceOracle := toDepositTxn(t, upgradeTxns[1]) 77 require.Equal(t, deployGasPriceOracleSender, common.HexToAddress("0x4210000000000000000000000000000000000001")) 78 require.Equal(t, deployGasPriceOracleSource.SourceHash(), deployGasPriceOracle.SourceHash()) 79 require.Nil(t, deployGasPriceOracle.To()) 80 require.Equal(t, uint64(1_000_000), deployGasPriceOracle.Gas()) 81 require.Equal(t, bindings.GasPriceOracleMetaData.Bin, hexutil.Bytes(deployGasPriceOracle.Data()).String()) 82 83 updateL1BlockProxySender, updateL1BlockProxy := toDepositTxn(t, upgradeTxns[2]) 84 require.Equal(t, updateL1BlockProxySender, common.Address{}) 85 require.Equal(t, updateL1BlockProxySource.SourceHash(), updateL1BlockProxy.SourceHash()) 86 require.NotNil(t, updateL1BlockProxy.To()) 87 require.Equal(t, *updateL1BlockProxy.To(), common.HexToAddress("0x4200000000000000000000000000000000000015")) 88 require.Equal(t, uint64(50_000), updateL1BlockProxy.Gas()) 89 require.Equal(t, common.FromHex("0x3659cfe600000000000000000000000007dbe8500fc591d1852b76fee44d5a05e13097ff"), updateL1BlockProxy.Data()) 90 91 updateGasPriceOracleSender, updateGasPriceOracle := toDepositTxn(t, upgradeTxns[3]) 92 require.Equal(t, updateGasPriceOracleSender, common.Address{}) 93 require.Equal(t, updateGasPriceOracleSource.SourceHash(), updateGasPriceOracle.SourceHash()) 94 require.NotNil(t, updateGasPriceOracle.To()) 95 require.Equal(t, *updateGasPriceOracle.To(), common.HexToAddress("0x420000000000000000000000000000000000000F")) 96 require.Equal(t, uint64(50_000), updateGasPriceOracle.Gas()) 97 require.Equal(t, common.FromHex("0x3659cfe6000000000000000000000000b528d11cc114e026f138fe568744c6d45ce6da7a"), updateGasPriceOracle.Data()) 98 99 gpoSetEcotoneSender, gpoSetEcotone := toDepositTxn(t, upgradeTxns[4]) 100 require.Equal(t, gpoSetEcotoneSender, common.HexToAddress("0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001")) 101 require.Equal(t, enableEcotoneSource.SourceHash(), gpoSetEcotone.SourceHash()) 102 require.NotNil(t, gpoSetEcotone.To()) 103 require.Equal(t, *gpoSetEcotone.To(), common.HexToAddress("0x420000000000000000000000000000000000000F")) 104 require.Equal(t, uint64(80_000), gpoSetEcotone.Gas()) 105 require.Equal(t, common.FromHex("0x22b90ab3"), gpoSetEcotone.Data()) 106 107 beaconRootsSender, beaconRoots := toDepositTxn(t, upgradeTxns[5]) 108 require.Equal(t, beaconRootsSender, common.HexToAddress("0x0B799C86a49DEeb90402691F1041aa3AF2d3C875")) 109 require.Equal(t, beaconRootsSource.SourceHash(), beaconRoots.SourceHash()) 110 require.Nil(t, beaconRoots.To()) 111 require.Equal(t, uint64(250_000), beaconRoots.Gas()) 112 require.Equal(t, eip4788CreationData, beaconRoots.Data()) 113 require.NotEmpty(t, beaconRoots.Data()) 114 } 115 116 func TestEip4788Params(t *testing.T) { 117 require.Equal(t, EIP4788From, common.HexToAddress("0x0B799C86a49DEeb90402691F1041aa3AF2d3C875")) 118 require.Equal(t, eip4788CreationData, common.FromHex("0x60618060095f395ff33373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500")) 119 require.NotEmpty(t, eip4788CreationData) 120 }