github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/e2e/gasless_test.go (about) 1 package e2e 2 3 import ( 4 "context" 5 "fmt" 6 "math/big" 7 "os/exec" 8 "testing" 9 "time" 10 11 "github.com/0xPolygon/supernets2-node/log" 12 "github.com/0xPolygon/supernets2-node/test/operations" 13 "github.com/ethereum/go-ethereum" 14 "github.com/ethereum/go-ethereum/accounts/abi/bind" 15 "github.com/ethereum/go-ethereum/common" 16 "github.com/ethereum/go-ethereum/core/types" 17 "github.com/ethereum/go-ethereum/crypto" 18 "github.com/ethereum/go-ethereum/ethclient" 19 "github.com/stretchr/testify/require" 20 ) 21 22 func TestEthTransferGasless(t *testing.T) { 23 if testing.Short() { 24 t.Skip() 25 } 26 // Edit config 27 out, err := exec.Command("pwd").CombinedOutput() 28 fmt.Println(string(out)) 29 require.NoError(t, err) 30 const path = "../../test/config/test.node.config.toml" 31 require.NoError(t, 32 exec.Command("sed", "-i", "s/DefaultMinGasPriceAllowed = 1000000000/DefaultMinGasPriceAllowed = 0/g", path).Run(), 33 ) 34 require.NoError(t, 35 exec.Command("sed", "-i", "s/EnableL2SuggestedGasPricePolling = true/EnableL2SuggestedGasPricePolling = false/g", path).Run(), 36 ) 37 // Undo edit config 38 defer func() { 39 require.NoError(t, 40 exec.Command("sed", "-i", "s/DefaultMinGasPriceAllowed = 0/DefaultMinGasPriceAllowed = 1000000000/g", path).Run(), 41 ) 42 require.NoError(t, 43 exec.Command("sed", "-i", "s/EnableL2SuggestedGasPricePolling = false/EnableL2SuggestedGasPricePolling = true/g", path).Run(), 44 ) 45 }() 46 47 ctx := context.Background() 48 defer func() { require.NoError(t, operations.Teardown()) }() 49 50 err = operations.Teardown() 51 require.NoError(t, err) 52 opsCfg := operations.GetDefaultOperationsConfig() 53 opsCfg.State.MaxCumulativeGasUsed = 80000000000 54 opsman, err := operations.NewManager(ctx, opsCfg) 55 require.NoError(t, err) 56 err = opsman.Setup() 57 require.NoError(t, err) 58 time.Sleep(5 * time.Second) 59 // Load account with balance on local genesis 60 pk, err := crypto.GenerateKey() 61 require.NoError(t, err) 62 auth, err := bind.NewKeyedTransactorWithChainID(pk, big.NewInt(0).SetUint64(operations.DefaultL2ChainID)) 63 require.NoError(t, err) 64 // Load eth client 65 client, err := ethclient.Dial(operations.DefaultL2NetworkURL) 66 require.NoError(t, err) 67 // Send txs 68 nTxs := 10 69 amount := big.NewInt(0) 70 toAddress := common.HexToAddress("0x70997970C51812dc3A010C7d01b50e0d17dc79C8") 71 senderBalance, err := client.BalanceAt(ctx, auth.From, nil) 72 require.NoError(t, err) 73 senderNonce, err := client.PendingNonceAt(ctx, auth.From) 74 require.NoError(t, err) 75 76 log.Infof("Receiver Addr: %v", toAddress.String()) 77 log.Infof("Sender Addr: %v", auth.From.String()) 78 log.Infof("Sender Balance: %v", senderBalance.String()) 79 log.Infof("Sender Nonce: %v", senderNonce) 80 81 gasLimit, err := client.EstimateGas(ctx, ethereum.CallMsg{From: auth.From, To: &toAddress, Value: amount}) 82 require.NoError(t, err) 83 84 gasPrice := big.NewInt(0) 85 nonce, err := client.PendingNonceAt(ctx, auth.From) 86 require.NoError(t, err) 87 88 txs := make([]*types.Transaction, 0, nTxs) 89 for i := 0; i < nTxs; i++ { 90 tx := types.NewTransaction(nonce+uint64(i), toAddress, amount, gasLimit, gasPrice, nil) 91 txs = append(txs, tx) 92 } 93 94 _, err = operations.ApplyL2Txs(ctx, txs, auth, client, operations.VerifiedConfirmationLevel) 95 require.NoError(t, err) 96 }