params: Updated finalized gascosts for ECMUL/MODEXP (#15135)
* params: Updated finalized gascosts for ECMUL/MODEXP * core,tests: Updates pending new tests * tests: Updated with new tests * core: revert state transition bugfix * tests: Add expected failures due to #15119
This commit is contained in:
parent
885c13c2c9
commit
9be07de539
@ -299,9 +299,6 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte
|
|||||||
|
|
||||||
// Create creates a new contract using code as deployment code.
|
// Create creates a new contract using code as deployment code.
|
||||||
func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, value *big.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) {
|
func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, value *big.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) {
|
||||||
if evm.vmConfig.NoRecursion && evm.depth > 0 {
|
|
||||||
return nil, common.Address{}, gas, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Depth check execution. Fail if we're trying to execute above the
|
// Depth check execution. Fail if we're trying to execute above the
|
||||||
// limit.
|
// limit.
|
||||||
@ -334,6 +331,9 @@ func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, value *big.I
|
|||||||
contract := NewContract(caller, AccountRef(contractAddr), value, gas)
|
contract := NewContract(caller, AccountRef(contractAddr), value, gas)
|
||||||
contract.SetCallCode(&contractAddr, crypto.Keccak256Hash(code), code)
|
contract.SetCallCode(&contractAddr, crypto.Keccak256Hash(code), code)
|
||||||
|
|
||||||
|
if evm.vmConfig.NoRecursion && evm.depth > 0 {
|
||||||
|
return nil, contractAddr, gas, nil
|
||||||
|
}
|
||||||
ret, err = run(evm, snapshot, contract, nil)
|
ret, err = run(evm, snapshot, contract, nil)
|
||||||
// check whether the max code size has been exceeded
|
// check whether the max code size has been exceeded
|
||||||
maxCodeSizeExceeded := evm.ChainConfig().IsEIP158(evm.BlockNumber) && len(ret) > params.MaxCodeSize
|
maxCodeSizeExceeded := evm.ChainConfig().IsEIP158(evm.BlockNumber) && len(ret) > params.MaxCodeSize
|
||||||
|
@ -64,9 +64,9 @@ const (
|
|||||||
Ripemd160PerWordGas uint64 = 120 // Per-word price for a RIPEMD160 operation
|
Ripemd160PerWordGas uint64 = 120 // Per-word price for a RIPEMD160 operation
|
||||||
IdentityBaseGas uint64 = 15 // Base price for a data copy operation
|
IdentityBaseGas uint64 = 15 // Base price for a data copy operation
|
||||||
IdentityPerWordGas uint64 = 3 // Per-work price for a data copy operation
|
IdentityPerWordGas uint64 = 3 // Per-work price for a data copy operation
|
||||||
ModExpQuadCoeffDiv uint64 = 100 // Divisor for the quadratic particle of the big int modular exponentiation
|
ModExpQuadCoeffDiv uint64 = 20 // Divisor for the quadratic particle of the big int modular exponentiation
|
||||||
Bn256AddGas uint64 = 500 // Gas needed for an elliptic curve addition
|
Bn256AddGas uint64 = 500 // Gas needed for an elliptic curve addition
|
||||||
Bn256ScalarMulGas uint64 = 2000 // Gas needed for an elliptic curve scalar multiplication
|
Bn256ScalarMulGas uint64 = 40000 // Gas needed for an elliptic curve scalar multiplication
|
||||||
Bn256PairingBaseGas uint64 = 100000 // Base price for an elliptic curve pairing check
|
Bn256PairingBaseGas uint64 = 100000 // Base price for an elliptic curve pairing check
|
||||||
Bn256PairingPerPointGas uint64 = 80000 // Per-point price for an elliptic curve pairing check
|
Bn256PairingPerPointGas uint64 = 80000 // Per-point price for an elliptic curve pairing check
|
||||||
)
|
)
|
||||||
|
@ -32,8 +32,6 @@ func TestBlockchain(t *testing.T) {
|
|||||||
bt.skipLoad(`^bcTotalDifficultyTest/(lotsOfLeafs|lotsOfBranches|sideChainWithMoreTransactions)`)
|
bt.skipLoad(`^bcTotalDifficultyTest/(lotsOfLeafs|lotsOfBranches|sideChainWithMoreTransactions)`)
|
||||||
// Constantinople is not implemented yet.
|
// Constantinople is not implemented yet.
|
||||||
bt.skipLoad(`(?i)(constantinople)`)
|
bt.skipLoad(`(?i)(constantinople)`)
|
||||||
// Expected failures:
|
|
||||||
bt.fails(`^TransitionTests/bcHomesteadToDao/DaoTransactions(|_UncleExtradata|_EmptyTransactionAndForkBlocksAhead)\.json`, "issue in test")
|
|
||||||
|
|
||||||
// Still failing tests
|
// Still failing tests
|
||||||
bt.skipLoad(`^bcWalletTest.*_Byzantium$`)
|
bt.skipLoad(`^bcWalletTest.*_Byzantium$`)
|
||||||
|
@ -39,6 +39,13 @@ func TestState(t *testing.T) {
|
|||||||
st.fails(`^stRevertTest/RevertPrefoundEmptyOOG\.json/EIP158`, "bug in test")
|
st.fails(`^stRevertTest/RevertPrefoundEmptyOOG\.json/EIP158`, "bug in test")
|
||||||
st.fails(`^stRevertTest/RevertPrecompiledTouch\.json/Byzantium`, "bug in test")
|
st.fails(`^stRevertTest/RevertPrecompiledTouch\.json/Byzantium`, "bug in test")
|
||||||
st.fails(`^stRevertTest/RevertPrefoundEmptyOOG\.json/Byzantium`, "bug in test")
|
st.fails(`^stRevertTest/RevertPrefoundEmptyOOG\.json/Byzantium`, "bug in test")
|
||||||
|
st.fails( `^stRandom/randomStatetest645\.json/EIP150/.*`, "known bug #15119")
|
||||||
|
st.fails( `^stRandom/randomStatetest645\.json/Frontier/.*`, "known bug #15119")
|
||||||
|
st.fails( `^stRandom/randomStatetest645\.json/Homestead/.*`, "known bug #15119")
|
||||||
|
st.fails( `^stRandom/randomStatetest644\.json/EIP150/.*`, "known bug #15119")
|
||||||
|
st.fails( `^stRandom/randomStatetest644\.json/Frontier/.*`, "known bug #15119")
|
||||||
|
st.fails( `^stRandom/randomStatetest644\.json/Homestead/.*`, "known bug #15119")
|
||||||
|
|
||||||
|
|
||||||
st.walk(t, stateTestDir, func(t *testing.T, name string, test *StateTest) {
|
st.walk(t, stateTestDir, func(t *testing.T, name string, test *StateTest) {
|
||||||
for _, subtest := range test.Subtests() {
|
for _, subtest := range test.Subtests() {
|
||||||
@ -59,7 +66,8 @@ func TestState(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Transactions with gasLimit above this value will not get a VM trace on failure.
|
// Transactions with gasLimit above this value will not get a VM trace on failure.
|
||||||
const traceErrorLimit = 400000
|
//const traceErrorLimit = 400000
|
||||||
|
const traceErrorLimit = 0
|
||||||
|
|
||||||
func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) {
|
func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) {
|
||||||
err := test(vm.Config{})
|
err := test(vm.Config{})
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 1d30b4795664f64b1b157971754e14a10cfd9115
|
Subproject commit ca41e906351209481bce3a1b35501f25a79023c5
|
Loading…
Reference in New Issue
Block a user