@@ -24,6 +24,7 @@ import (
24
24
"encoding/json"
25
25
"errors"
26
26
"fmt"
27
+ "github.com/ethereum/go-ethereum/accounts/abi"
27
28
"maps"
28
29
"math/big"
29
30
"os"
@@ -644,6 +645,7 @@ func TestEstimateGas(t *testing.T) {
644
645
signer = types.HomesteadSigner {}
645
646
randomAccounts = newAccounts (2 )
646
647
)
648
+
647
649
api := NewBlockChainAPI (newTestBackend (t , genBlocks , genesis , beacon .New (ethash .NewFaker ()), func (i int , b * core.BlockGen ) {
648
650
// Transfer from account[0] to account[1]
649
651
// value: 1000 wei
@@ -652,14 +654,16 @@ func TestEstimateGas(t *testing.T) {
652
654
b .AddTx (tx )
653
655
b .SetPoS ()
654
656
}))
657
+
655
658
var testSuite = []struct {
656
- blockNumber rpc.BlockNumber
657
- call TransactionArgs
658
- overrides StateOverride
659
- expectErr error
660
- want uint64
659
+ blockNumber rpc.BlockNumber
660
+ call TransactionArgs
661
+ overrides StateOverride
662
+ blockOverrides BlockOverrides
663
+ expectErr error
664
+ want uint64
661
665
}{
662
- // simple transfer on latest block
666
+ //simple transfer on latest block
663
667
{
664
668
blockNumber : rpc .LatestBlockNumber ,
665
669
call : TransactionArgs {
@@ -762,16 +766,65 @@ func TestEstimateGas(t *testing.T) {
762
766
},
763
767
want : 21000 ,
764
768
},
769
+ // // SPDX-License-Identifier: GPL-3.0
770
+ //pragma solidity >=0.8.2 <0.9.0;
771
+ //
772
+ //contract BlockOverridesTest {
773
+ // function call() public view returns (uint256) {
774
+ // return block.number;
775
+ // }
776
+ //
777
+ // function estimate() public view {
778
+ // revert(string.concat("block ", uint2str(block.number)));
779
+ // }
780
+ //
781
+ // function uint2str(uint256 _i) internal pure returns (string memory str) {
782
+ // if (_i == 0) {
783
+ // return "0";
784
+ // }
785
+ // uint256 j = _i;
786
+ // uint256 length;
787
+ // while (j != 0) {
788
+ // length++;
789
+ // j /= 10;
790
+ // }
791
+ // bytes memory bstr = new bytes(length);
792
+ // uint256 k = length;
793
+ // j = _i;
794
+ // while (j != 0) {
795
+ // bstr[--k] = bytes1(uint8(48 + (j % 10)));
796
+ // j /= 10;
797
+ // }
798
+ // str = string(bstr);
799
+ // }
800
+ //}
801
+ {
802
+ blockNumber : rpc .LatestBlockNumber ,
803
+ call : TransactionArgs {
804
+ From : & accounts [0 ].addr ,
805
+ To : & accounts [1 ].addr ,
806
+ Data : hex2Bytes ("0x3592d016" ), //estimate
807
+ },
808
+ overrides : StateOverride {
809
+ accounts [1 ].addr : OverrideAccount {
810
+ Code : hex2Bytes ("608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806328b5e32b146100385780633592d0161461004b575b5f5ffd5b4360405190815260200160405180910390f35b610053610055565b005b61005e4361009d565b60405160200161006e91906101a5565b60408051601f198184030181529082905262461bcd60e51b8252610094916004016101cd565b60405180910390fd5b6060815f036100c35750506040805180820190915260018152600360fc1b602082015290565b815f5b81156100ec57806100d681610216565b91506100e59050600a83610242565b91506100c6565b5f8167ffffffffffffffff81111561010657610106610255565b6040519080825280601f01601f191660200182016040528015610130576020820181803683370190505b508593509050815b831561019c57610149600a85610269565b61015490603061027c565b60f81b8261016183610295565b92508281518110610174576101746102aa565b60200101906001600160f81b03191690815f1a905350610195600a85610242565b9350610138565b50949350505050565b650313637b1b5960d51b81525f82518060208501600685015e5f920160060191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161022757610227610202565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f826102505761025061022e565b500490565b634e487b7160e01b5f52604160045260245ffd5b5f826102775761027761022e565b500690565b8082018082111561028f5761028f610202565b92915050565b5f816102a3576102a3610202565b505f190190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220a253cad1e2e3523b8c053c1d0cd1e39d7f3bafcedd73440a244872701f05dab264736f6c634300081c0033" ),
811
+ },
812
+ },
813
+ blockOverrides : BlockOverrides {Number : (* hexutil .Big )(big .NewInt (11 ))},
814
+ expectErr : newRevertError (abi .PackRevert ("block 11" )),
815
+ },
765
816
}
766
817
for i , tc := range testSuite {
767
- result , err := api .EstimateGas (context .Background (), tc .call , & rpc.BlockNumberOrHash {BlockNumber : & tc .blockNumber }, & tc .overrides )
818
+ result , err := api .EstimateGas (context .Background (), tc .call , & rpc.BlockNumberOrHash {BlockNumber : & tc .blockNumber }, & tc .overrides , & tc . blockOverrides )
768
819
if tc .expectErr != nil {
769
820
if err == nil {
770
821
t .Errorf ("test %d: want error %v, have nothing" , i , tc .expectErr )
771
822
continue
772
823
}
773
824
if ! errors .Is (err , tc .expectErr ) {
774
- t .Errorf ("test %d: error mismatch, want %v, have %v" , i , tc .expectErr , err )
825
+ if ! reflect .DeepEqual (err , tc .expectErr ) {
826
+ t .Errorf ("test %d: error mismatch, want %v, have %v" , i , tc .expectErr , err )
827
+ }
775
828
}
776
829
continue
777
830
}
@@ -932,16 +985,49 @@ func TestCall(t *testing.T) {
932
985
},
933
986
want : "0x000000000000000000000000000000000000000000000000000000000000007b" ,
934
987
},
935
- // Block overrides should work
988
+ // // SPDX-License-Identifier: GPL-3.0
989
+ //pragma solidity >=0.8.2 <0.9.0;
990
+ //
991
+ //contract BlockOverridesTest {
992
+ // function call() public view returns (uint256) {
993
+ // return block.number;
994
+ // }
995
+ //
996
+ // function estimate() public view {
997
+ // revert(string.concat("block ", uint2str(block.number)));
998
+ // }
999
+ //
1000
+ // function uint2str(uint256 _i) internal pure returns (string memory str) {
1001
+ // if (_i == 0) {
1002
+ // return "0";
1003
+ // }
1004
+ // uint256 j = _i;
1005
+ // uint256 length;
1006
+ // while (j != 0) {
1007
+ // length++;
1008
+ // j /= 10;
1009
+ // }
1010
+ // bytes memory bstr = new bytes(length);
1011
+ // uint256 k = length;
1012
+ // j = _i;
1013
+ // while (j != 0) {
1014
+ // bstr[--k] = bytes1(uint8(48 + (j % 10)));
1015
+ // j /= 10;
1016
+ // }
1017
+ // str = string(bstr);
1018
+ // }
1019
+ //}
936
1020
{
937
- name : "block-override" ,
1021
+ name : "block-override-with-state-override " ,
938
1022
blockNumber : rpc .LatestBlockNumber ,
939
1023
call : TransactionArgs {
940
1024
From : & accounts [1 ].addr ,
941
- Input : & hexutil.Bytes {
942
- 0x43 , // NUMBER
943
- 0x60 , 0x00 , 0x52 , // MSTORE offset 0
944
- 0x60 , 0x20 , 0x60 , 0x00 , 0xf3 ,
1025
+ To : & accounts [2 ].addr ,
1026
+ Data : hex2Bytes ("0x28b5e32b" ), //call
1027
+ },
1028
+ overrides : StateOverride {
1029
+ accounts [2 ].addr : OverrideAccount {
1030
+ Code : hex2Bytes ("608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806328b5e32b146100385780633592d0161461004b575b5f5ffd5b4360405190815260200160405180910390f35b610053610055565b005b61005e4361009d565b60405160200161006e91906101a5565b60408051601f198184030181529082905262461bcd60e51b8252610094916004016101cd565b60405180910390fd5b6060815f036100c35750506040805180820190915260018152600360fc1b602082015290565b815f5b81156100ec57806100d681610216565b91506100e59050600a83610242565b91506100c6565b5f8167ffffffffffffffff81111561010657610106610255565b6040519080825280601f01601f191660200182016040528015610130576020820181803683370190505b508593509050815b831561019c57610149600a85610269565b61015490603061027c565b60f81b8261016183610295565b92508281518110610174576101746102aa565b60200101906001600160f81b03191690815f1a905350610195600a85610242565b9350610138565b50949350505050565b650313637b1b5960d51b81525f82518060208501600685015e5f920160060191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161022757610227610202565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f826102505761025061022e565b500490565b634e487b7160e01b5f52604160045260245ffd5b5f826102775761027761022e565b500690565b8082018082111561028f5761028f610202565b92915050565b5f816102a3576102a3610202565b505f190190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220a253cad1e2e3523b8c053c1d0cd1e39d7f3bafcedd73440a244872701f05dab264736f6c634300081c0033" ),
945
1031
},
946
1032
},
947
1033
blockOverrides : BlockOverrides {Number : (* hexutil .Big )(big .NewInt (11 ))},
0 commit comments