Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions api/errors/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import (
"errors"
"fmt"
"math/big"

"github.com/onflow/go-ethereum/accounts/abi"
"github.com/onflow/go-ethereum/common/hexutil"
gethVM "github.com/onflow/go-ethereum/core/vm"
)

var (
Expand All @@ -29,3 +33,35 @@ func NewErrGasPriceTooLow(gasPrice *big.Int) *ErrGasPriceTooLow {
GasPrice: gasPrice,
}
}

// RevertError is an API error that encompasses an EVM revert with JSON error
// code and a binary data blob.
type RevertError struct {
error
Reason string // revert reason hex encoded
}

// ErrorCode returns the JSON error code for a revert.
// See: https://github.com/ethereum/wiki/wiki/JSON-RPC-Error-Codes-Improvement-Proposal
func (e *RevertError) ErrorCode() int {
return 3
}

// ErrorData returns the hex encoded revert reason.
func (e *RevertError) ErrorData() interface{} {
return e.Reason
}

// NewRevertError creates a revertError instance with the provided revert data.
func NewRevertError(revert []byte) *RevertError {
err := gethVM.ErrExecutionReverted

reason, errUnpack := abi.UnpackRevert(revert)
if errUnpack == nil {
err = fmt.Errorf("%w: %v", gethVM.ErrExecutionReverted, reason)
}
return &RevertError{
error: err,
Reason: hexutil.Encode(revert),
}
Comment on lines +55 to +66
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The NewRevertError function should handle the case where abi.UnpackRevert fails more explicitly.

- if errUnpack == nil {
+ if errUnpack != nil {
+     return fmt.Errorf("failed to unpack revert reason: %v", errUnpack)
+ }
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// NewRevertError creates a revertError instance with the provided revert data.
func NewRevertError(revert []byte) *RevertError {
err := gethVM.ErrExecutionReverted
reason, errUnpack := abi.UnpackRevert(revert)
if errUnpack == nil {
err = fmt.Errorf("%w: %v", gethVM.ErrExecutionReverted, reason)
}
return &RevertError{
error: err,
Reason: hexutil.Encode(revert),
}
// NewRevertError creates a revertError instance with the provided revert data.
func NewRevertError(revert []byte) *RevertError {
err := gethVM.ErrExecutionReverted
reason, errUnpack := abi.UnpackRevert(revert)
if errUnpack != nil {
return fmt.Errorf("failed to unpack revert reason: %v", errUnpack)
}
err = fmt.Errorf("%w: %v", gethVM.ErrExecutionReverted, reason)
return &RevertError{
error: err,
Reason: hexutil.Encode(revert),
}
}

}
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ require (
github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593
github.com/goccy/go-json v0.10.2
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/onflow/cadence v1.0.0-preview.32
github.com/onflow/flow-go v0.35.12
github.com/onflow/flow-go-sdk v1.0.0-preview.34
github.com/onflow/cadence v1.0.0-preview.33
github.com/onflow/flow-go v0.35.13-0.20240611224823-09b08708974c
github.com/onflow/flow-go-sdk v1.0.0-preview.35
github.com/onflow/go-ethereum v1.13.4
github.com/rs/cors v1.8.0
github.com/rs/zerolog v1.31.0
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1941,8 +1941,8 @@ github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f/go.mod h1:xvP61FoOs
github.com/onflow/atree v0.7.0-rc.2 h1:mZmVrl/zPlfI44EjV3FdR2QwIqT8nz1sCONUBFcML/U=
github.com/onflow/atree v0.7.0-rc.2/go.mod h1:xvP61FoOs95K7IYdIYRnNcYQGf4nbF/uuJ0tHf4DRuM=
github.com/onflow/cadence v1.0.0-M3/go.mod h1:odXGZZ/wGNA5mwT8bC9v8u8EXACHllB2ABSZK65TGL8=
github.com/onflow/cadence v1.0.0-preview.32 h1:M4IdYtUt78D33vLegoNtNU4H/PoBy9J8Xk42EiCRkiE=
github.com/onflow/cadence v1.0.0-preview.32/go.mod h1:3LM1VgE9HkJ815whY/F0LYWULwJa8p2nJiKyIIxpGAE=
github.com/onflow/cadence v1.0.0-preview.33 h1:kqkU+9//PRsyL3SMokeK2mStarZVxiwrGypyiOX/On8=
github.com/onflow/cadence v1.0.0-preview.33/go.mod h1:jOwvPSSLTr9TvaKMs7KKiBYMmpdpNNAFxBsjMlrqVD0=
github.com/onflow/crypto v0.25.0/go.mod h1:C8FbaX0x8y+FxWjbkHy0Q4EASCDR9bSPWZqlpCLYyVI=
github.com/onflow/crypto v0.25.1 h1:0txy2PKPMM873JbpxQNbJmuOJtD56bfs48RQfm0ts5A=
github.com/onflow/crypto v0.25.1/go.mod h1:C8FbaX0x8y+FxWjbkHy0Q4EASCDR9bSPWZqlpCLYyVI=
Expand All @@ -1954,11 +1954,11 @@ github.com/onflow/flow-ft/lib/go/contracts v1.0.0 h1:mToacZ5NWqtlWwk/7RgIl/jeKB/
github.com/onflow/flow-ft/lib/go/contracts v1.0.0/go.mod h1:PwsL8fC81cjnUnTfmyL/HOIyHnyaw/JA474Wfj2tl6A=
github.com/onflow/flow-ft/lib/go/templates v1.0.0 h1:6cMS/lUJJ17HjKBfMO/eh0GGvnpElPgBXx7h5aoWJhs=
github.com/onflow/flow-ft/lib/go/templates v1.0.0/go.mod h1:uQ8XFqmMK2jxyBSVrmyuwdWjTEb+6zGjRYotfDJ5pAE=
github.com/onflow/flow-go v0.35.12 h1:KWXmLdIfIGm826KFw380TtjB1Dc3wZCiwjlb1t05TLY=
github.com/onflow/flow-go v0.35.12/go.mod h1:RekgjnQ3JTIA3u1XVRlTJmSm7e+Mrk0E7eH+2OxhkWA=
github.com/onflow/flow-go v0.35.13-0.20240611224823-09b08708974c h1:IY5MYhOwz+N/38uURYOnepbm2Vaqq2QDUb3kMd1MVz4=
github.com/onflow/flow-go v0.35.13-0.20240611224823-09b08708974c/go.mod h1:SIGA1krHtMyu23JxrR23blKXQfCl8eyA+JFr3h+TVX0=
github.com/onflow/flow-go-sdk v1.0.0-M1/go.mod h1:TDW0MNuCs4SvqYRUzkbRnRmHQL1h4X8wURsCw9P9beo=
github.com/onflow/flow-go-sdk v1.0.0-preview.34 h1:FXzQfz9rK08EdoZ7gTy7Ve0at6bgcV1iQN6rtrQG/7I=
github.com/onflow/flow-go-sdk v1.0.0-preview.34/go.mod h1:blgTAtthpHf58QZiyDUaLBabMlebMtbdzvTf2K5+dds=
github.com/onflow/flow-go-sdk v1.0.0-preview.35 h1:2ptBhFYFGOaYghZTRbj51BbYqTZjkyEpXDyaWDYrHwA=
github.com/onflow/flow-go-sdk v1.0.0-preview.35/go.mod h1:/G8vtAekhvgynLYVDtd6OnhixoGTzzknmhYCJB2YWWU=
github.com/onflow/flow-nft/lib/go/contracts v1.2.1 h1:woAAS5z651sDpi7ihAHll8NvRS9uFXIXkL6xR+bKFZY=
github.com/onflow/flow-nft/lib/go/contracts v1.2.1/go.mod h1:2gpbza+uzs1k7x31hkpBPlggIRkI53Suo0n2AyA2HcE=
github.com/onflow/flow-nft/lib/go/templates v1.2.0 h1:JSQyh9rg0RC+D1930BiRXN8lrtMs+ubVMK6aQPon6Yc=
Expand Down
3 changes: 2 additions & 1 deletion models/receipt.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import (
"bytes"
"encoding/hex"
"fmt"
"github.com/onflow/flow-go/fvm/evm/types"
"math/big"

"github.com/onflow/flow-go/fvm/evm/types"

"github.com/onflow/cadence"
"github.com/onflow/go-ethereum/common"
"github.com/onflow/go-ethereum/common/hexutil"
Expand Down
2 changes: 1 addition & 1 deletion models/transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func createTestEvent(t *testing.T, txBinary string) (cadence.Event, *types.Resul
TxType: txType,
GasConsumed: 1337,
DeployedContractAddress: &types.Address{0x5, 0x6, 0x7},
ReturnedValue: []byte{0x55},
ReturnedData: []byte{0x55},
Logs: []*gethTypes.Log{{
Address: gethCommon.Address{0x1, 0x2},
Topics: []gethCommon.Hash{{0x5, 0x6}, {0x7, 0x8}},
Expand Down
2 changes: 1 addition & 1 deletion services/ingestion/engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,7 @@ func newTransaction() (cadence.Event, *types.Event, models.Transaction, *types.R
TxType: 1,
GasConsumed: 1337,
DeployedContractAddress: &types.Address{0x5, 0x6, 0x7},
ReturnedValue: []byte{0x55},
ReturnedData: []byte{0x55},
Logs: []*gethTypes.Log{{
Address: gethCommon.Address{0x1, 0x2},
Topics: []gethCommon.Hash{{0x5, 0x6}, {0x7, 0x8}},
Expand Down
6 changes: 5 additions & 1 deletion services/requester/requester.go
Original file line number Diff line number Diff line change
Expand Up @@ -326,11 +326,15 @@ func (e *EVM) Call(
if err != nil {
return nil, fmt.Errorf("failed to decode EVM result from call: %w", err)
}

if evmResult.ErrorCode != 0 {
if evmResult.ErrorCode == evmTypes.ExecutionErrCodeExecutionReverted {
return nil, errs.NewRevertError(evmResult.ReturnedData)
}
return nil, getErrorForCode(evmResult.ErrorCode)
}

result := evmResult.ReturnedValue
result := evmResult.ReturnedData

e.logger.Debug().
Str("result", hex.EncodeToString(result)).
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/storage.byte
Original file line number Diff line number Diff line change
@@ -1 +1 @@
60806040526105395f819055506102ef806100195f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80632e64cec1146100435780636057361d146100615780639967062d1461007d575b5f80fd5b61004b6100ad565b6040516100589190610140565b60405180910390f35b61007b60048036038101906100769190610187565b6100b5565b005b610097600480360381019061009291906101e5565b6100be565b6040516100a49190610232565b60405180910390f35b5f8054905090565b805f8190555050565b5f8082846100cc9190610278565b905082843373ffffffffffffffffffffffffffffffffffffffff167f76efea95e5da1fa661f235b2921ae1d89b99e457ec73fb88e34a1d150f95c64b846040516101169190610232565b60405180910390a48091505092915050565b5f819050919050565b61013a81610128565b82525050565b5f6020820190506101535f830184610131565b92915050565b5f80fd5b61016681610128565b8114610170575f80fd5b50565b5f813590506101818161015d565b92915050565b5f6020828403121561019c5761019b610159565b5b5f6101a984828501610173565b91505092915050565b5f819050919050565b6101c4816101b2565b81146101ce575f80fd5b50565b5f813590506101df816101bb565b92915050565b5f80604083850312156101fb576101fa610159565b5b5f610208858286016101d1565b9250506020610219858286016101d1565b9150509250929050565b61022c816101b2565b82525050565b5f6020820190506102455f830184610223565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610282826101b2565b915061028d836101b2565b92508282019050828112155f8312168382125f8412151617156102b3576102b261024b565b5b9291505056fea2646970667358221220779e5ebf0029c96ff1052d01469f01b453ddceda76901a9b6e730cabbb85be8264736f6c63430008190033
60806040526105395f819055506104c9806100195f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80632e64cec1146100595780636057361d146100775780639967062d14610093578063cbaff5f9146100c3578063dda3a7bd146100cd575b5f80fd5b6100616100d7565b60405161006e91906101ea565b60405180910390f35b610091600480360381019061008c9190610231565b6100df565b005b6100ad60048036038101906100a8919061028f565b6100e8565b6040516100ba91906102dc565b60405180910390f35b6100cb610152565b005b6100d5610194565b005b5f8054905090565b805f8190555050565b5f8082846100f69190610322565b905082843373ffffffffffffffffffffffffffffffffffffffff167f76efea95e5da1fa661f235b2921ae1d89b99e457ec73fb88e34a1d150f95c64b8460405161014091906102dc565b60405180910390a48091505092915050565b5f610192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610189906103bd565b60405180910390fd5b565b60056040517f9195785a0000000000000000000000000000000000000000000000000000000081526004016101c99190610467565b60405180910390fd5b5f819050919050565b6101e4816101d2565b82525050565b5f6020820190506101fd5f8301846101db565b92915050565b5f80fd5b610210816101d2565b811461021a575f80fd5b50565b5f8135905061022b81610207565b92915050565b5f6020828403121561024657610245610203565b5b5f6102538482850161021d565b91505092915050565b5f819050919050565b61026e8161025c565b8114610278575f80fd5b50565b5f8135905061028981610265565b92915050565b5f80604083850312156102a5576102a4610203565b5b5f6102b28582860161027b565b92505060206102c38582860161027b565b9150509250929050565b6102d68161025c565b82525050565b5f6020820190506102ef5f8301846102cd565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61032c8261025c565b91506103378361025c565b92508282019050828112155f8312168382125f84121516171561035d5761035c6102f5565b5b92915050565b5f82825260208201905092915050565b7f417373657274204572726f72204d6573736167650000000000000000000000005f82015250565b5f6103a7601483610363565b91506103b282610373565b602082019050919050565b5f6020820190508181035f8301526103d48161039b565b9050919050565b5f819050919050565b5f819050919050565b5f6104076104026103fd846103db565b6103e4565b6101d2565b9050919050565b610417816103ed565b82525050565b7f56616c756520697320746f6f206c6f77000000000000000000000000000000005f82015250565b5f610451601083610363565b915061045c8261041d565b602082019050919050565b5f60408201905061047a5f83018461040e565b818103602083015261048b81610445565b90509291505056fea26469706673582212206c2b15d7949b146ae0403a2d44e0ed089f2af31511d01e1126d557a83708e1c464736f6c634300081a0033
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

The verification process indicates that the bytecode in tests/fixtures/storage.byte does not match the latest version of the smart contract source code. Additionally, the script encountered issues due to the absence of the solc compiler and the inability to use sudo for installation.

  • The bytecode does not match the latest version of the smart contract source code.
  • The Solidity compiler (solc) is not installed, and the script cannot install it due to the lack of sudo permissions.

To proceed, you should manually verify the bytecode by ensuring the Solidity compiler is installed in your environment and then re-running the compilation and comparison steps.

Analysis chain

Please verify that the bytecode corresponds to the latest version of the smart contract source code, including the new functions and custom error handling.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify that the bytecode corresponds to the smart contract source code.

# Compile the smart contract source code and compare the bytecode.
echo "Compile the smart contract from 'storage.sol' and ensure the bytecode matches."

Length of output: 172



Script:

#!/bin/bash
# Description: Verify that the bytecode corresponds to the smart contract source code.

# Step 1: Locate the storage.sol file
storage_sol=$(fd storage.sol)

# Step 2: Compile the storage.sol file to generate the bytecode
compiled_bytecode=$(solc --optimize --bin "$storage_sol" | tail -n 1)

# Step 3: Read the bytecode from tests/fixtures/storage.byte
fixture_bytecode=$(cat tests/fixtures/storage.byte)

# Step 4: Compare the generated bytecode with the bytecode in tests/fixtures/storage.byte
if [ "$compiled_bytecode" == "$fixture_bytecode" ]; then
  echo "The bytecode matches the latest version of the smart contract source code."
else
  echo "The bytecode does not match the latest version of the smart contract source code."
fi

Length of output: 5461



Script:

#!/bin/bash
# Description: Verify that the bytecode corresponds to the smart contract source code.

# Step 1: Ensure the Solidity compiler is installed
if ! command -v solc &> /dev/null; then
  echo "Solidity compiler not found. Installing..."
  sudo apt-get update && sudo apt-get install -y solc
fi

# Step 2: Locate the storage.sol file
storage_sol=$(fd storage.sol)

# Step 3: Compile the storage.sol file to generate the bytecode
compiled_bytecode=$(solc --optimize --bin "$storage_sol" | tail -n 1)

# Step 4: Read the bytecode from tests/fixtures/storage.byte
fixture_bytecode=$(cat tests/fixtures/storage.byte)

# Step 5: Compare the generated bytecode with the bytecode in tests/fixtures/storage.byte
if [ "$compiled_bytecode" == "$fixture_bytecode" ]; then
  echo "The bytecode matches the latest version of the smart contract source code."
else
  echo "The bytecode does not match the latest version of the smart contract source code."
fi

Length of output: 5669

11 changes: 11 additions & 0 deletions tests/fixtures/storage.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;

contract Storage {
error MyCustomError(uint value, string message);
event Calculated(address indexed caller, int indexed numA, int indexed numB, int sum);
uint256 number;

Expand All @@ -21,4 +24,12 @@ contract Storage {
emit Calculated(msg.sender, A, B, s);
return s;
}

function assertError() public pure {
require(false, "Assert Error Message");
}

function customError() public pure {
revert MyCustomError(5, "Value is too low");
}
Comment on lines +28 to +34
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice

}
202 changes: 116 additions & 86 deletions tests/fixtures/storageABI.json
Original file line number Diff line number Diff line change
@@ -1,88 +1,118 @@
[
{
"inputs": [],
"stateMutability": "payable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "int256",
"name": "numA",
"type": "int256"
},
{
"indexed": true,
"internalType": "int256",
"name": "numB",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "sum",
"type": "int256"
}
],
"name": "Calculated",
"type": "event"
},
{
"inputs": [],
"name": "retrieve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "num",
"type": "uint256"
}
],
"name": "store",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "A",
"type": "int256"
},
{
"internalType": "int256",
"name": "B",
"type": "int256"
}
],
"name": "sum",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
{
"inputs": [],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "string",
"name": "message",
"type": "string"
}
],
"name": "MyCustomError",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "int256",
"name": "numA",
"type": "int256"
},
{
"indexed": true,
"internalType": "int256",
"name": "numB",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "sum",
"type": "int256"
}
],
"name": "Calculated",
"type": "event"
},
{
"inputs": [],
"name": "assertError",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "customError",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "retrieve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "num",
"type": "uint256"
}
],
"name": "store",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "A",
"type": "int256"
},
{
"internalType": "int256",
"name": "B",
"type": "int256"
}
],
"name": "sum",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
6 changes: 3 additions & 3 deletions tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ go 1.22

require (
github.com/goccy/go-json v0.10.2
github.com/onflow/cadence v1.0.0-preview.32
github.com/onflow/cadence v1.0.0-preview.33
github.com/onflow/crypto v0.25.1
github.com/onflow/flow-emulator v1.0.0-preview.31
github.com/onflow/flow-evm-gateway v0.0.0-20240201154855-4d4d3d3f19c7
github.com/onflow/flow-go v0.35.12
github.com/onflow/flow-go-sdk v1.0.0-preview.34
github.com/onflow/flow-go v0.35.13-0.20240611224823-09b08708974c
github.com/onflow/flow-go-sdk v1.0.0-preview.35
github.com/onflow/go-ethereum v1.13.4
github.com/rs/zerolog v1.31.0
github.com/stretchr/testify v1.9.0
Expand Down
Loading