github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/e2e/pool_test.go (about) 1 package e2e 2 3 import ( 4 "context" 5 "math/big" 6 "testing" 7 8 "github.com/0xPolygon/supernets2-node/log" 9 "github.com/0xPolygon/supernets2-node/test/operations" 10 "github.com/ethereum/go-ethereum" 11 "github.com/ethereum/go-ethereum/common" 12 "github.com/ethereum/go-ethereum/core/types" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestRepeatedNonce(t *testing.T) { 17 if testing.Short() { 18 t.Skip() 19 } 20 21 var err error 22 err = operations.Teardown() 23 require.NoError(t, err) 24 25 defer func() { require.NoError(t, operations.Teardown()) }() 26 27 ctx := context.Background() 28 opsCfg := operations.GetDefaultOperationsConfig() 29 opsMan, err := operations.NewManager(ctx, opsCfg) 30 require.NoError(t, err) 31 err = opsMan.Setup() 32 require.NoError(t, err) 33 34 receiverAddr := common.HexToAddress("0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D") 35 amount := big.NewInt(1000) 36 37 for _, network := range networks { 38 log.Debugf(network.Name) 39 client := operations.MustGetClient(network.URL) 40 auth := operations.MustGetAuth(network.PrivateKey, network.ChainID) 41 42 nonce, err := client.NonceAt(ctx, auth.From, nil) 43 require.NoError(t, err) 44 45 gasLimit, err := client.EstimateGas(ctx, ethereum.CallMsg{ 46 From: auth.From, 47 To: &receiverAddr, 48 Value: amount, 49 }) 50 require.NoError(t, err) 51 52 gasPrice, err := client.SuggestGasPrice(ctx) 53 require.NoError(t, err) 54 55 correctNonceTx := types.NewTransaction(nonce, receiverAddr, amount.Add(amount, amount), gasLimit+gasLimit, gasPrice.Add(gasPrice, gasPrice), nil) 56 correctNonceSignedTx, err := auth.Signer(auth.From, correctNonceTx) 57 require.NoError(t, err) 58 59 repeatedNonceTx := types.NewTransaction(nonce, receiverAddr, amount, gasLimit, gasPrice, nil) 60 repeatedNonceSignedTx, err := auth.Signer(auth.From, repeatedNonceTx) 61 require.NoError(t, err) 62 63 log.Debug("sending correct nonce tx") 64 err = client.SendTransaction(ctx, correctNonceSignedTx) 65 require.NoError(t, err) 66 67 log.Debug("sending repeated nonce tx") 68 err = client.SendTransaction(ctx, repeatedNonceSignedTx) 69 require.Equal(t, "replacement transaction underpriced", err.Error()) 70 71 log.Debug("waiting correct nonce tx to be mined") 72 err = operations.WaitTxToBeMined(ctx, client, correctNonceSignedTx, operations.DefaultTimeoutTxToBeMined) 73 require.NoError(t, err) 74 } 75 } 76 77 func TestRepeatedTx(t *testing.T) { 78 if testing.Short() { 79 t.Skip() 80 } 81 82 var err error 83 err = operations.Teardown() 84 require.NoError(t, err) 85 86 defer func() { require.NoError(t, operations.Teardown()) }() 87 88 ctx := context.Background() 89 opsCfg := operations.GetDefaultOperationsConfig() 90 opsMan, err := operations.NewManager(ctx, opsCfg) 91 require.NoError(t, err) 92 err = opsMan.Setup() 93 require.NoError(t, err) 94 95 receiverAddr := common.HexToAddress("0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D") 96 amount := big.NewInt(1000) 97 98 for _, network := range networks { 99 log.Debugf(network.Name) 100 client := operations.MustGetClient(network.URL) 101 auth := operations.MustGetAuth(network.PrivateKey, network.ChainID) 102 103 nonce, err := client.NonceAt(ctx, auth.From, nil) 104 require.NoError(t, err) 105 106 gasLimit, err := client.EstimateGas(ctx, ethereum.CallMsg{ 107 From: auth.From, 108 To: &receiverAddr, 109 Value: amount, 110 }) 111 require.NoError(t, err) 112 113 gasPrice, err := client.SuggestGasPrice(ctx) 114 require.NoError(t, err) 115 116 tx := types.NewTransaction(nonce, receiverAddr, amount, gasLimit, gasPrice, nil) 117 signedTx, err := auth.Signer(auth.From, tx) 118 require.NoError(t, err) 119 120 log.Debug("sending tx") 121 err = client.SendTransaction(ctx, signedTx) 122 require.NoError(t, err) 123 124 log.Debug("re sending tx") 125 err = client.SendTransaction(ctx, signedTx) 126 require.Equal(t, "already known", err.Error()) 127 128 log.Debug("waiting correct nonce tx to be mined") 129 err = operations.WaitTxToBeMined(ctx, client, signedTx, operations.DefaultTimeoutTxToBeMined) 130 require.NoError(t, err) 131 } 132 } 133 134 func TestPendingNonce(t *testing.T) { 135 if testing.Short() { 136 t.Skip() 137 } 138 139 var err error 140 err = operations.Teardown() 141 require.NoError(t, err) 142 143 defer func() { require.NoError(t, operations.Teardown()) }() 144 145 ctx := context.Background() 146 opsCfg := operations.GetDefaultOperationsConfig() 147 opsMan, err := operations.NewManager(ctx, opsCfg) 148 require.NoError(t, err) 149 err = opsMan.Setup() 150 require.NoError(t, err) 151 152 receiverAddr := common.HexToAddress("0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D") 153 amount := big.NewInt(1000) 154 155 for _, network := range networks { 156 log.Debugf(network.Name) 157 client := operations.MustGetClient(network.URL) 158 auth := operations.MustGetAuth(network.PrivateKey, network.ChainID) 159 160 nonce, err := client.NonceAt(ctx, auth.From, nil) 161 require.NoError(t, err) 162 log.Debug("nonce: ", nonce) 163 164 pendingNonce, err := client.PendingNonceAt(ctx, auth.From) 165 require.Equal(t, nonce, pendingNonce) 166 require.NoError(t, err) 167 log.Debug("pending Nonce: ", pendingNonce) 168 169 gasLimit, err := client.EstimateGas(ctx, ethereum.CallMsg{ 170 From: auth.From, 171 To: &receiverAddr, 172 Value: amount, 173 }) 174 require.NoError(t, err) 175 176 gasPrice, err := client.SuggestGasPrice(ctx) 177 require.NoError(t, err) 178 179 for i := 0; i < 10; i++ { 180 txNonce := pendingNonce + uint64(i) 181 log.Debugf("creating transaction with nonce %v: ", txNonce) 182 tx := types.NewTransaction(txNonce, receiverAddr, amount, gasLimit, gasPrice, nil) 183 signedTx, err := auth.Signer(auth.From, tx) 184 require.NoError(t, err) 185 186 log.Debug("sending tx") 187 err = client.SendTransaction(ctx, signedTx) 188 require.NoError(t, err) 189 190 newPendingNonce, err := client.PendingNonceAt(ctx, auth.From) 191 require.NoError(t, err) 192 log.Debug("newPendingNonce: ", newPendingNonce) 193 require.Equal(t, txNonce+1, newPendingNonce) 194 } 195 } 196 }