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  }