Skip to content

Commit

Permalink
Add delegatecall flag to properly detect delegatecalls (#1856)
Browse files Browse the repository at this point in the history
* pass delegatecall flag into precompile RunAndCalculateGas

* fix tests

* add isFromDelegateCall to Precompile Run

* add isFromDelegateCall to all precompiles

* fixed some tests

* fixed some tests

* fixed some tests

* fixed some tests

* CallCode also uses Delegatecall to call Precompile
  • Loading branch information
jewei1997 committed Sep 23, 2024
1 parent cfd8cec commit ad02ac6
Show file tree
Hide file tree
Showing 20 changed files with 196 additions and 181 deletions.
6 changes: 2 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ require (
github.com/fzipp/gocyclo v0.5.1 // indirect
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect
github.com/ghodss/yaml v1.0.0 // indirect
github.com/go-critic/go-critic v0.6.3 // indirect
github.com/go-kit/kit v0.12.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
Expand Down Expand Up @@ -173,7 +172,6 @@ require (
github.com/gostaticanalysis/nilerr v0.1.1 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-bexpr v0.1.10 // indirect
Expand Down Expand Up @@ -348,10 +346,10 @@ require (
replace (
github.com/CosmWasm/wasmd => github.com/sei-protocol/sei-wasmd v0.2.4
github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0
github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.3.36
github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.3.37-0.20240923023912-aa7a702d42cc
github.com/cosmos/iavl => github.com/sei-protocol/sei-iavl v0.2.0
github.com/cosmos/ibc-go/v3 => github.com/sei-protocol/sei-ibc-go/v3 v3.3.2
github.com/ethereum/go-ethereum => github.com/sei-protocol/go-ethereum v1.13.5-sei-22
github.com/ethereum/go-ethereum => github.com/sei-protocol/go-ethereum v1.13.5-sei-9.0.20240923025222-815b87dde97b
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
github.com/sei-protocol/sei-db => github.com/sei-protocol/sei-db v0.0.44
// Latest goleveldb is broken, we have to stick to this version
Expand Down
11 changes: 4 additions & 7 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,6 @@ github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2Gihuqh
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc=
github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
Expand Down Expand Up @@ -766,8 +765,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c=
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag=
Expand Down Expand Up @@ -1346,12 +1343,12 @@ github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod
github.com/securego/gosec/v2 v2.11.0 h1:+PDkpzR41OI2jrw1q6AdXZCbsNGNGT7pQjal0H0cArI=
github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo=
github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY=
github.com/sei-protocol/go-ethereum v1.13.5-sei-22 h1:t/m1qXER+DEMrcpqgoYmUxifkAdmz5T8xpL9KRVgLtw=
github.com/sei-protocol/go-ethereum v1.13.5-sei-22/go.mod h1:kcRZmuzRn1lVejiFNTz4l4W7imnpq1bDAnuKS/RyhbQ=
github.com/sei-protocol/go-ethereum v1.13.5-sei-9.0.20240923025222-815b87dde97b h1:mVNX02TN7XlxkZliA752umeOB5MegtMroeIzdFGbgBk=
github.com/sei-protocol/go-ethereum v1.13.5-sei-9.0.20240923025222-815b87dde97b/go.mod h1:kcRZmuzRn1lVejiFNTz4l4W7imnpq1bDAnuKS/RyhbQ=
github.com/sei-protocol/goutils v0.0.2 h1:Bfa7Sv+4CVLNM20QcpvGb81B8C5HkQC/kW1CQpIbXDA=
github.com/sei-protocol/goutils v0.0.2/go.mod h1:iYE2DuJfEnM+APPehr2gOUXfuLuPsVxorcDO+Tzq9q8=
github.com/sei-protocol/sei-cosmos v0.3.36 h1:mIqZd+MqwCoUJD5cSofzcMudf2t9JaEv6rUW88jG3P8=
github.com/sei-protocol/sei-cosmos v0.3.36/go.mod h1:ZwWxF/69WlcLEn4BzVjPPToTFkE2sjPanU8PNNyKoOk=
github.com/sei-protocol/sei-cosmos v0.3.37-0.20240923023912-aa7a702d42cc h1:srWLbsoS0NYBIl8OjZOFuPmIeqf+fJTkfsK39MmG3+k=
github.com/sei-protocol/sei-cosmos v0.3.37-0.20240923023912-aa7a702d42cc/go.mod h1:ZwWxF/69WlcLEn4BzVjPPToTFkE2sjPanU8PNNyKoOk=
github.com/sei-protocol/sei-db v0.0.44 h1:HMgcyDTQlmXdJysHJxmIo66EKeXn1CSQT9qXDnxjJgI=
github.com/sei-protocol/sei-db v0.0.44/go.mod h1:F/ZKZA8HJPcUzSZPA8yt6pfwlGriJ4RDR4eHKSGLStI=
github.com/sei-protocol/sei-iavl v0.2.0 h1:OisPjXiDT+oe+aeckzDEFgkZCYuUjHgs/PP8DPicN+I=
Expand Down
4 changes: 2 additions & 2 deletions precompiles/addr/addr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func TestAssociatePubKey(t *testing.T) {
require.Nil(t, err)

// Make the call to associate.
ret, err := p.Run(tt.args.evm, tt.args.caller, tt.args.caller, append(p.GetExecutor().(*addr.PrecompileExecutor).AssociatePubKeyID, inputs...), tt.args.value, tt.args.readOnly)
ret, err := p.Run(tt.args.evm, tt.args.caller, tt.args.caller, append(p.GetExecutor().(*addr.PrecompileExecutor).AssociatePubKeyID, inputs...), tt.args.value, tt.args.readOnly, false)
if (err != nil) != tt.wantErr {
t.Errorf("Run() error = %v, wantErr %v %v", err, tt.wantErr, string(ret))
return
Expand Down Expand Up @@ -331,7 +331,7 @@ func TestAssociate(t *testing.T) {
require.Nil(t, err)

// Make the call to associate.
ret, err := p.Run(tt.args.evm, tt.args.caller, tt.args.caller, append(p.GetExecutor().(*addr.PrecompileExecutor).AssociateID, inputs...), tt.args.value, tt.args.readOnly)
ret, err := p.Run(tt.args.evm, tt.args.caller, tt.args.caller, append(p.GetExecutor().(*addr.PrecompileExecutor).AssociateID, inputs...), tt.args.value, tt.args.readOnly, false)
if (err != nil) != tt.wantErr {
t.Errorf("Run() error = %v, wantErr %v %v", err, tt.wantErr, string(ret))
return
Expand Down
2 changes: 1 addition & 1 deletion precompiles/bank/bank.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ func (p PrecompileExecutor) sendNative(ctx sdk.Context, method *abi.Method, args
if readOnly {
return nil, errors.New("cannot call sendNative from staticcall")
}
if caller.Cmp(callingContract) != 0 {
if ctx.EVMPrecompileCalledFromDelegateCall() {
return nil, errors.New("cannot delegatecall sendNative")
}
if err := pcommon.ValidateArgsLength(args, 1); err != nil {
Expand Down
40 changes: 20 additions & 20 deletions precompiles/bank/bank_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ func TestRun(t *testing.T) {
require.Nil(t, err)
args, err := send.Inputs.Pack(senderEVMAddr, evmAddr, "usei", big.NewInt(25))
require.Nil(t, err)
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendID, args...), nil, false) // should error because address is not whitelisted
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendID, args...), nil, false, false) // should error because address is not whitelisted
require.NotNil(t, err)

// Precompile sendNative test error
Expand All @@ -88,19 +88,19 @@ func TestRun(t *testing.T) {
argsNativeError, err := sendNative.Inputs.Pack(seiAddrString)
require.Nil(t, err)
// 0 amount disallowed
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(0), false)
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(0), false, false)
require.NotNil(t, err)
argsNativeError, err = sendNative.Inputs.Pack("")
require.Nil(t, err)
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(100), false)
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(100), false, false)
require.NotNil(t, err)
argsNativeError, err = sendNative.Inputs.Pack("invalidaddr")
require.Nil(t, err)
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(100), false)
_, err = p.Run(&evm, senderEVMAddr, senderEVMAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(100), false, false)
require.NotNil(t, err)
argsNativeError, err = sendNative.Inputs.Pack(senderAddr.String())
require.Nil(t, err)
_, err = p.Run(&evm, evmAddr, evmAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(100), false)
_, err = p.Run(&evm, evmAddr, evmAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNativeError...), big.NewInt(100), false, false)
require.NotNil(t, err)

// Send native 10_000_000_000_100, split into 10 usei 100wei
Expand Down Expand Up @@ -191,7 +191,7 @@ func TestRun(t *testing.T) {
require.Nil(t, err)
args, err = balance.Inputs.Pack(evmAddr, "usei")
require.Nil(t, err)
precompileRes, err := p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false)
precompileRes, err := p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false, false)
require.Nil(t, err)
is, err := balance.Outputs.Unpack(precompileRes)
require.Nil(t, err)
Expand All @@ -205,7 +205,7 @@ func TestRun(t *testing.T) {
argsNewAccount, err := sendNative.Inputs.Pack(newAddr.String())
require.Nil(t, err)
require.Nil(t, k.BankKeeper().SendCoins(ctx, seiAddr, k.GetSeiAddressOrDefault(ctx, p.Address()), sdk.NewCoins(sdk.NewCoin("usei", sdk.OneInt()))))
_, err = p.Run(&evm, evmAddr, evmAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNewAccount...), big.NewInt(1), false)
_, err = p.Run(&evm, evmAddr, evmAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendNativeID, argsNewAccount...), big.NewInt(1), false, false)
require.Nil(t, err)
// should create account if not exists
require.NotNil(t, k.AccountKeeper().GetAccount(statedb.Ctx(), newAddr))
Expand All @@ -215,7 +215,7 @@ func TestRun(t *testing.T) {
require.Nil(t, err)
args, err = allBalances.Inputs.Pack(senderEVMAddr)
require.Nil(t, err)
precompileRes, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).AllBalancesID, args...), nil, false)
precompileRes, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).AllBalancesID, args...), nil, false, false)
require.Nil(t, err)
balances, err := allBalances.Outputs.Unpack(precompileRes)
require.Nil(t, err)
Expand All @@ -236,15 +236,15 @@ func TestRun(t *testing.T) {
}, bank.CoinBalance(parsedBalances[1]))

// Verify errors properly raised on bank balance calls with incorrect inputs
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args[:1]...), nil, false)
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args[:1]...), nil, false, false)
require.NotNil(t, err)
args, err = balance.Inputs.Pack(evmAddr, "")
require.Nil(t, err)
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false)
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false, false)
require.NotNil(t, err)

// invalid input
_, err = p.Run(&evm, common.Address{}, common.Address{}, []byte{1, 2, 3, 4}, nil, false)
_, err = p.Run(&evm, common.Address{}, common.Address{}, []byte{1, 2, 3, 4}, nil, false, false)
require.NotNil(t, err)
}

Expand Down Expand Up @@ -285,15 +285,15 @@ func TestSendForUnlinkedReceiver(t *testing.T) {
require.Nil(t, err)
args, err := send.Inputs.Pack(senderEVMAddr, evmAddr, "ufoo", big.NewInt(100))
require.Nil(t, err)
_, err = p.Run(&evm, pointerAddr, pointerAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendID, args...), nil, false) // should not error
_, err = p.Run(&evm, pointerAddr, pointerAddr, append(p.GetExecutor().(*bank.PrecompileExecutor).SendID, args...), nil, false, false) // should not error
require.Nil(t, err)

// Use precompile balance to verify sendNative usei amount succeeded
balance, err := p.ABI.MethodById(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID)
require.Nil(t, err)
args, err = balance.Inputs.Pack(evmAddr, "ufoo")
require.Nil(t, err)
precompileRes, err := p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false)
precompileRes, err := p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false, false)
require.Nil(t, err)
is, err := balance.Outputs.Unpack(precompileRes)
require.Nil(t, err)
Expand All @@ -305,7 +305,7 @@ func TestSendForUnlinkedReceiver(t *testing.T) {
require.Nil(t, err)
args, err = allBalances.Inputs.Pack(senderEVMAddr)
require.Nil(t, err)
precompileRes, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).AllBalancesID, args...), nil, false)
precompileRes, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).AllBalancesID, args...), nil, false, false)
require.Nil(t, err)
balances, err := allBalances.Outputs.Unpack(precompileRes)
require.Nil(t, err)
Expand All @@ -326,15 +326,15 @@ func TestSendForUnlinkedReceiver(t *testing.T) {
}, bank.CoinBalance(parsedBalances[1]))

// Verify errors properly raised on bank balance calls with incorrect inputs
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args[:1]...), nil, false)
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args[:1]...), nil, false, false)
require.NotNil(t, err)
args, err = balance.Inputs.Pack(evmAddr, "")
require.Nil(t, err)
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false)
_, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).BalanceID, args...), nil, false, false)
require.NotNil(t, err)

// invalid input
_, err = p.Run(&evm, common.Address{}, common.Address{}, []byte{1, 2, 3, 4}, nil, false)
_, err = p.Run(&evm, common.Address{}, common.Address{}, []byte{1, 2, 3, 4}, nil, false, false)
require.NotNil(t, err)
}

Expand All @@ -352,7 +352,7 @@ func TestMetadata(t *testing.T) {
require.Nil(t, err)
args, err := name.Inputs.Pack("usei")
require.Nil(t, err)
res, err := p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).NameID, args...), nil, false)
res, err := p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).NameID, args...), nil, false, false)
require.Nil(t, err)
outputs, err := name.Outputs.Unpack(res)
require.Nil(t, err)
Expand All @@ -362,7 +362,7 @@ func TestMetadata(t *testing.T) {
require.Nil(t, err)
args, err = symbol.Inputs.Pack("usei")
require.Nil(t, err)
res, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).SymbolID, args...), nil, false)
res, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).SymbolID, args...), nil, false, false)
require.Nil(t, err)
outputs, err = symbol.Outputs.Unpack(res)
require.Nil(t, err)
Expand All @@ -372,7 +372,7 @@ func TestMetadata(t *testing.T) {
require.Nil(t, err)
args, err = decimal.Inputs.Pack("usei")
require.Nil(t, err)
res, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).DecimalsID, args...), nil, false)
res, err = p.Run(&evm, common.Address{}, common.Address{}, append(p.GetExecutor().(*bank.PrecompileExecutor).DecimalsID, args...), nil, false, false)
require.Nil(t, err)
outputs, err = decimal.Outputs.Unpack(res)
require.Nil(t, err)
Expand Down
6 changes: 4 additions & 2 deletions precompiles/common/precompiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func (p Precompile) RequiredGas(input []byte) uint64 {
return p.executor.RequiredGas(input[4:], method)
}

func (p Precompile) Run(evm *vm.EVM, caller common.Address, callingContract common.Address, input []byte, value *big.Int, readOnly bool) (bz []byte, err error) {
func (p Precompile) Run(evm *vm.EVM, caller common.Address, callingContract common.Address, input []byte, value *big.Int, readOnly bool, isFromDelegateCall bool) (bz []byte, err error) {
operation := fmt.Sprintf("%s_unknown", p.name)
defer func() {
HandlePrecompileError(err, evm, operation)
Expand All @@ -73,6 +73,7 @@ func (p Precompile) Run(evm *vm.EVM, caller common.Address, callingContract comm
operation = method.Name
em := ctx.EventManager()
ctx = ctx.WithEventManager(sdk.NewEventManager())
ctx = ctx.WithEVMPrecompileCalledFromDelegateCall(isFromDelegateCall)
bz, err = p.executor.Execute(ctx, method, caller, callingContract, args, value, readOnly, evm)
if err != nil {
return bz, err
Expand Down Expand Up @@ -146,7 +147,7 @@ func NewDynamicGasPrecompile(a abi.ABI, executor DynamicGasPrecompileExecutor, a
return &DynamicGasPrecompile{Precompile: NewPrecompile(a, nil, address, name), executor: executor}
}

func (d DynamicGasPrecompile) RunAndCalculateGas(evm *vm.EVM, caller common.Address, callingContract common.Address, input []byte, suppliedGas uint64, value *big.Int, hooks *tracing.Hooks, readOnly bool) (ret []byte, remainingGas uint64, err error) {
func (d DynamicGasPrecompile) RunAndCalculateGas(evm *vm.EVM, caller common.Address, callingContract common.Address, input []byte, suppliedGas uint64, value *big.Int, hooks *tracing.Hooks, readOnly bool, isFromDelegateCall bool) (ret []byte, remainingGas uint64, err error) {
operation := fmt.Sprintf("%s_unknown", d.name)
defer func() {
HandlePrecompileError(err, evm, operation)
Expand All @@ -164,6 +165,7 @@ func (d DynamicGasPrecompile) RunAndCalculateGas(evm *vm.EVM, caller common.Addr
operation = method.Name
em := ctx.EventManager()
ctx = ctx.WithEventManager(sdk.NewEventManager())
ctx = ctx.WithEVMPrecompileCalledFromDelegateCall(isFromDelegateCall)
ret, remainingGas, err = d.executor.Execute(ctx, method, caller, callingContract, args, value, readOnly, evm, suppliedGas)
if err != nil {
return ret, remainingGas, err
Expand Down
Loading

0 comments on commit ad02ac6

Please sign in to comment.