Skip to content

Commit

Permalink
fix: include the reason when the redistribution contract call fails
Browse files Browse the repository at this point in the history
  • Loading branch information
mrekucci committed Sep 29, 2023
1 parent 0890460 commit beb5631
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 9 deletions.
8 changes: 1 addition & 7 deletions pkg/postage/postagecontract/contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,13 +199,7 @@ func (c *postageContract) sendTransaction(ctx context.Context, callData []byte,
}

if receipt.Status == 0 {
err := transaction.ErrTransactionReverted
if res, cErr := c.transactionService.Call(ctx, request); cErr == nil {
if reason, uErr := abi.UnpackRevert(res); uErr == nil {
err = fmt.Errorf("%w: reason: %s", err, reason)
}
}
return nil, err
return nil, c.transactionService.UnwrapRevertReason(ctx, request, transaction.ErrTransactionReverted)
}

return receipt, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/storageincentives/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
"github.com/ethersphere/bee/pkg/storage"
"github.com/ethersphere/bee/pkg/storageincentives/redistribution"
"github.com/ethersphere/bee/pkg/storageincentives/staking"
storer "github.com/ethersphere/bee/pkg/storer"
"github.com/ethersphere/bee/pkg/storer"
"github.com/ethersphere/bee/pkg/swarm"
"github.com/ethersphere/bee/pkg/transaction"
)
Expand Down
2 changes: 1 addition & 1 deletion pkg/storageincentives/redistribution/redistribution.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ func (c *contract) sendAndWait(ctx context.Context, request *transaction.TxReque
}

if receipt.Status == 0 {
return txHash, transaction.ErrTransactionReverted
return txHash, c.txService.UnwrapRevertReason(ctx, request, transaction.ErrTransactionReverted)
}
return txHash, nil
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/transaction/mock/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ func (m *transactionServiceMock) TransactionFee(ctx context.Context, txHash comm
return big.NewInt(0), nil
}

func (m *transactionServiceMock) UnwrapRevertReason(_ context.Context, _ *transaction.TxRequest, err error) error {
return err
}

// Option is the option passed to the mock Chequebook service
type Option interface {
apply(*transactionServiceMock)
Expand Down
18 changes: 18 additions & 0 deletions pkg/transaction/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"time"

"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethersphere/bee/pkg/crypto"
Expand Down Expand Up @@ -94,6 +95,9 @@ type Service interface {
CancelTransaction(ctx context.Context, originalTxHash common.Hash) (common.Hash, error)
// TransactionFee retrieves the transaction fee
TransactionFee(ctx context.Context, txHash common.Hash) (*big.Int, error)
// UnwrapRevertReason tries to unwrap the revert reason if the given error is not nil.
// The original error is wrapped in case the revert reason exists.
UnwrapRevertReason(ctx context.Context, req *TxRequest, err error) error
}

type transactionService struct {
Expand Down Expand Up @@ -584,3 +588,17 @@ func (t *transactionService) TransactionFee(ctx context.Context, txHash common.H
}
return trx.Cost(), nil
}

func (t *transactionService) UnwrapRevertReason(ctx context.Context, req *TxRequest, err error) error {
if err == nil {
return nil
}

if res, cErr := t.Call(ctx, req); cErr == nil {
if reason, uErr := abi.UnpackRevert(res); uErr == nil {
err = fmt.Errorf("%w: reason: %s", err, reason)
}
}

return err
}

0 comments on commit beb5631

Please sign in to comment.