From c0be9ce9aa77e5cf3f4ab30b1afb1d72da3a9787 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 24 Oct 2024 14:07:36 +0200 Subject: [PATCH] ethclient: move test --- ethclient/ethclient_test.go | 35 ++++++++++++++++++++++++++++++++ ethclient/example_test.go | 40 ------------------------------------- 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/ethclient/ethclient_test.go b/ethclient/ethclient_test.go index 76960ee3fb..114f78b5a6 100644 --- a/ethclient/ethclient_test.go +++ b/ethclient/ethclient_test.go @@ -27,6 +27,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/consensus/ethash" "github.com/ethereum/go-ethereum/core" @@ -772,3 +773,37 @@ func sendTransaction(ec *Client) error { } return ec.SendTransaction(context.Background(), tx) } + +// Here we show how to get the error message of reverted contract call. +func ExampleRevertErrorData() { + // First create an ethclient.Client instance. + ctx := context.Background() + ec, _ := DialContext(ctx, exampleNode.HTTPEndpoint()) + + // Call the contract. + // Note we expect the call to return an error. + contract := common.HexToAddress("290f1b36649a61e369c6276f6d29463335b4400c") + call := ethereum.CallMsg{To: &contract, Gas: 30000} + result, err := ec.CallContract(ctx, call, nil) + if len(result) > 0 { + panic("got result") + } + if err == nil { + panic("call did not return error") + } + + // Extract the low-level revert data from the error. + revertData, ok := RevertErrorData(err) + if !ok { + panic("unpacking revert failed") + } + fmt.Printf("revert: %x\n", revertData) + + // Parse the revert data to obtain the error message. + message, err := abi.UnpackRevert(revertData) + fmt.Println("message:", message) + + // Output: + // revert: 08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a75736572206572726f72 + // message: user error +} diff --git a/ethclient/example_test.go b/ethclient/example_test.go index b0e8477b24..908e10a0c3 100644 --- a/ethclient/example_test.go +++ b/ethclient/example_test.go @@ -17,12 +17,6 @@ package ethclient import ( - "context" - "fmt" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/node" ) @@ -39,37 +33,3 @@ func init() { } exampleNode = n } - -// Here we show how to get the error message of reverted contract call. -func ExampleRevertErrorData() { - // First create an ethclient.Client instance. - ctx := context.Background() - ec, _ := DialContext(ctx, exampleNode.HTTPEndpoint()) - - // Call the contract. - // Note we expect the call to return an error. - contract := common.HexToAddress("290f1b36649a61e369c6276f6d29463335b4400c") - call := ethereum.CallMsg{To: &contract, Gas: 30000} - result, err := ec.CallContract(ctx, call, nil) - if len(result) > 0 { - panic("got result") - } - if err == nil { - panic("call did not return error") - } - - // Extract the low-level revert data from the error. - revertData, ok := RevertErrorData(err) - if !ok { - panic("unpacking revert failed") - } - fmt.Printf("revert: %x\n", revertData) - - // Parse the revert data to obtain the error message. - message, err := abi.UnpackRevert(revertData) - fmt.Println("message:", message) - - // Output: - // revert: 08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a75736572206572726f72 - // message: user error -}