Browse Source

Merge pull request #593 from hermeznetwork/fix/addgaspriceresend

When resending an eth tx, always increase gas price
tmp/txsel-fix
arnau 3 years ago
committed by GitHub
parent
commit
1de0b08bac
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 9 deletions
  1. +4
    -3
      coordinator/batch.go
  2. +16
    -6
      coordinator/txmanager.go

+ 4
- 3
coordinator/batch.go

@ -8,6 +8,7 @@ import (
"path"
"time"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/core/types"
"github.com/hermeznetwork/hermez-node/common"
"github.com/hermeznetwork/hermez-node/eth"
@ -90,9 +91,9 @@ type BatchInfo struct {
L2Txs []common.L2Tx
CoordIdxs []common.Idx
ForgeBatchArgs *eth.RollupForgeBatchArgs
// FeesInfo
EthTx *types.Transaction
EthTxErr error
Auth *bind.TransactOpts `json:"-"`
EthTx *types.Transaction
EthTxErr error
// SendTimestamp the time of batch sent to ethereum
SendTimestamp time.Time
Receipt *types.Receipt

+ 16
- 6
coordinator/txmanager.go

@ -182,19 +182,29 @@ func addPerc(v *big.Int, p int64) *big.Int {
r.Mul(r, big.NewInt(p))
// nolint reason: to calculate percentages we divide by 100
r.Div(r, big.NewInt(100)) //nolit:gomnd
// If the increase is 0, force it to be 1 so that a gas increase
// doesn't result in the same value, making the transaction to be equal
// than before.
if r.Cmp(big.NewInt(0)) == 0 {
r = big.NewInt(1)
}
return r.Add(v, r)
}
func (t *TxManager) sendRollupForgeBatch(ctx context.Context, batchInfo *BatchInfo, resend bool) error {
var ethTx *types.Transaction
var err error
auth, err := t.NewAuth(ctx, batchInfo)
if err != nil {
return tracerr.Wrap(err)
}
auth.Nonce = big.NewInt(int64(t.accNextNonce))
var auth *bind.TransactOpts
if resend {
auth.Nonce = big.NewInt(int64(batchInfo.EthTx.Nonce()))
auth = batchInfo.Auth
auth.GasPrice = addPerc(auth.GasPrice, 10)
} else {
auth, err = t.NewAuth(ctx, batchInfo)
if err != nil {
return tracerr.Wrap(err)
}
batchInfo.Auth = auth
auth.Nonce = big.NewInt(int64(t.accNextNonce))
}
for attempt := 0; attempt < t.cfg.EthClientAttempts; attempt++ {
if auth.GasPrice.Cmp(t.cfg.MaxGasPrice) > 0 {

Loading…
Cancel
Save