mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
internal/ethapi: expose revert reason
This commit is contained in:
parent
50a02c49d9
commit
410510ac0c
1 changed files with 11 additions and 9 deletions
|
|
@ -29,10 +29,16 @@ import (
|
||||||
// revertError is an API error that encompasses an EVM revert with JSON error
|
// revertError is an API error that encompasses an EVM revert with JSON error
|
||||||
// code and a binary data blob.
|
// code and a binary data blob.
|
||||||
type revertError struct {
|
type revertError struct {
|
||||||
error
|
|
||||||
reason string // revert reason hex encoded
|
reason string // revert reason hex encoded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *revertError) Error() string {
|
||||||
|
if e.reason != "" {
|
||||||
|
return fmt.Sprintf("%s: %v", vm.ErrExecutionReverted, e.reason)
|
||||||
|
}
|
||||||
|
return vm.ErrExecutionReverted.Error()
|
||||||
|
}
|
||||||
|
|
||||||
// ErrorCode returns the JSON error code for a revert.
|
// ErrorCode returns the JSON error code for a revert.
|
||||||
// See: https://github.com/ethereum/wiki/wiki/JSON-RPC-Error-Codes-Improvement-Proposal
|
// See: https://github.com/ethereum/wiki/wiki/JSON-RPC-Error-Codes-Improvement-Proposal
|
||||||
func (e *revertError) ErrorCode() int {
|
func (e *revertError) ErrorCode() int {
|
||||||
|
|
@ -46,16 +52,12 @@ func (e *revertError) ErrorData() interface{} {
|
||||||
|
|
||||||
// newRevertError creates a revertError instance with the provided revert data.
|
// newRevertError creates a revertError instance with the provided revert data.
|
||||||
func newRevertError(revert []byte) *revertError {
|
func newRevertError(revert []byte) *revertError {
|
||||||
var err error
|
reason := hexutil.Encode(revert)
|
||||||
reason, errUnpack := abi.UnpackRevert(revert)
|
if r, errUnpack := abi.UnpackRevert(revert); errUnpack == nil {
|
||||||
if errUnpack == nil {
|
reason = r
|
||||||
err = fmt.Errorf("%w: %v", vm.ErrExecutionReverted, reason)
|
|
||||||
} else {
|
|
||||||
err = fmt.Errorf("%w: %v", vm.ErrExecutionReverted, hexutil.Encode(revert))
|
|
||||||
}
|
}
|
||||||
return &revertError{
|
return &revertError{
|
||||||
error: err,
|
reason: reason,
|
||||||
reason: hexutil.Encode(revert),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue