48 new working GeneralStateTests, via fixing some overflows/underflows, creating a rudimentary balance commit/revert scheme, and implementing account deletion for the selfdestruct instruction (#146)
This commit is contained in:
parent
22882edf4d
commit
7ba90fda54
|
@ -722,10 +722,10 @@ OK: 65/67 Fail: 2/67 Skip: 0/67
|
||||||
- NonZeroValue_DELEGATECALL_ToEmpty.json Fail
|
- NonZeroValue_DELEGATECALL_ToEmpty.json Fail
|
||||||
- NonZeroValue_DELEGATECALL_ToNonNonZeroBalance.json Fail
|
- NonZeroValue_DELEGATECALL_ToNonNonZeroBalance.json Fail
|
||||||
- NonZeroValue_DELEGATECALL_ToOneStorageKey.json Fail
|
- NonZeroValue_DELEGATECALL_ToOneStorageKey.json Fail
|
||||||
- NonZeroValue_SUICIDE.json Fail
|
+ NonZeroValue_SUICIDE.json OK
|
||||||
- NonZeroValue_SUICIDE_ToEmpty.json Fail
|
+ NonZeroValue_SUICIDE_ToEmpty.json OK
|
||||||
- NonZeroValue_SUICIDE_ToNonNonZeroBalance.json Fail
|
+ NonZeroValue_SUICIDE_ToNonNonZeroBalance.json OK
|
||||||
- NonZeroValue_SUICIDE_ToOneStorageKey.json Fail
|
+ NonZeroValue_SUICIDE_ToOneStorageKey.json OK
|
||||||
+ NonZeroValue_TransactionCALL.json OK
|
+ NonZeroValue_TransactionCALL.json OK
|
||||||
- NonZeroValue_TransactionCALL_ToEmpty.json Fail
|
- NonZeroValue_TransactionCALL_ToEmpty.json Fail
|
||||||
- NonZeroValue_TransactionCALL_ToNonNonZeroBalance.json Fail
|
- NonZeroValue_TransactionCALL_ToNonNonZeroBalance.json Fail
|
||||||
|
@ -735,7 +735,7 @@ OK: 65/67 Fail: 2/67 Skip: 0/67
|
||||||
- NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance.json Fail
|
- NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance.json Fail
|
||||||
- NonZeroValue_TransactionCALLwithData_ToOneStorageKey.json Fail
|
- NonZeroValue_TransactionCALLwithData_ToOneStorageKey.json Fail
|
||||||
```
|
```
|
||||||
OK: 2/24 Fail: 22/24 Skip: 0/24
|
OK: 6/24 Fail: 18/24 Skip: 0/24
|
||||||
## stPreCompiledContracts
|
## stPreCompiledContracts
|
||||||
```diff
|
```diff
|
||||||
identity_to_bigger.json Skip
|
identity_to_bigger.json Skip
|
||||||
|
@ -1003,7 +1003,7 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest144.json OK
|
+ randomStatetest144.json OK
|
||||||
+ randomStatetest145.json OK
|
+ randomStatetest145.json OK
|
||||||
- randomStatetest146.json Fail
|
- randomStatetest146.json Fail
|
||||||
- randomStatetest147.json Fail
|
+ randomStatetest147.json OK
|
||||||
+ randomStatetest148.json OK
|
+ randomStatetest148.json OK
|
||||||
+ randomStatetest149.json OK
|
+ randomStatetest149.json OK
|
||||||
+ randomStatetest15.json OK
|
+ randomStatetest15.json OK
|
||||||
|
@ -1029,7 +1029,7 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
- randomStatetest170.json Fail
|
- randomStatetest170.json Fail
|
||||||
+ randomStatetest171.json OK
|
+ randomStatetest171.json OK
|
||||||
+ randomStatetest172.json OK
|
+ randomStatetest172.json OK
|
||||||
- randomStatetest173.json Fail
|
+ randomStatetest173.json OK
|
||||||
+ randomStatetest174.json OK
|
+ randomStatetest174.json OK
|
||||||
+ randomStatetest175.json OK
|
+ randomStatetest175.json OK
|
||||||
+ randomStatetest176.json OK
|
+ randomStatetest176.json OK
|
||||||
|
@ -1052,12 +1052,12 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest195.json OK
|
+ randomStatetest195.json OK
|
||||||
+ randomStatetest196.json OK
|
+ randomStatetest196.json OK
|
||||||
+ randomStatetest197.json OK
|
+ randomStatetest197.json OK
|
||||||
- randomStatetest198.json Fail
|
+ randomStatetest198.json OK
|
||||||
- randomStatetest199.json Fail
|
- randomStatetest199.json Fail
|
||||||
+ randomStatetest2.json OK
|
+ randomStatetest2.json OK
|
||||||
+ randomStatetest20.json OK
|
+ randomStatetest20.json OK
|
||||||
+ randomStatetest200.json OK
|
+ randomStatetest200.json OK
|
||||||
- randomStatetest201.json Fail
|
+ randomStatetest201.json OK
|
||||||
+ randomStatetest202.json OK
|
+ randomStatetest202.json OK
|
||||||
+ randomStatetest204.json OK
|
+ randomStatetest204.json OK
|
||||||
- randomStatetest205.json Fail
|
- randomStatetest205.json Fail
|
||||||
|
@ -1067,13 +1067,13 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest209.json OK
|
+ randomStatetest209.json OK
|
||||||
+ randomStatetest210.json OK
|
+ randomStatetest210.json OK
|
||||||
+ randomStatetest211.json OK
|
+ randomStatetest211.json OK
|
||||||
- randomStatetest212.json Fail
|
+ randomStatetest212.json OK
|
||||||
+ randomStatetest214.json OK
|
+ randomStatetest214.json OK
|
||||||
+ randomStatetest215.json OK
|
+ randomStatetest215.json OK
|
||||||
+ randomStatetest216.json OK
|
+ randomStatetest216.json OK
|
||||||
+ randomStatetest217.json OK
|
+ randomStatetest217.json OK
|
||||||
+ randomStatetest219.json OK
|
+ randomStatetest219.json OK
|
||||||
- randomStatetest22.json Fail
|
+ randomStatetest22.json OK
|
||||||
+ randomStatetest220.json OK
|
+ randomStatetest220.json OK
|
||||||
+ randomStatetest221.json OK
|
+ randomStatetest221.json OK
|
||||||
+ randomStatetest222.json OK
|
+ randomStatetest222.json OK
|
||||||
|
@ -1086,7 +1086,7 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest23.json OK
|
+ randomStatetest23.json OK
|
||||||
+ randomStatetest230.json OK
|
+ randomStatetest230.json OK
|
||||||
+ randomStatetest231.json OK
|
+ randomStatetest231.json OK
|
||||||
- randomStatetest232.json Fail
|
+ randomStatetest232.json OK
|
||||||
+ randomStatetest233.json OK
|
+ randomStatetest233.json OK
|
||||||
+ randomStatetest236.json OK
|
+ randomStatetest236.json OK
|
||||||
- randomStatetest237.json Fail
|
- randomStatetest237.json Fail
|
||||||
|
@ -1121,7 +1121,7 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest27.json OK
|
+ randomStatetest27.json OK
|
||||||
+ randomStatetest270.json OK
|
+ randomStatetest270.json OK
|
||||||
+ randomStatetest271.json OK
|
+ randomStatetest271.json OK
|
||||||
- randomStatetest273.json Fail
|
+ randomStatetest273.json OK
|
||||||
+ randomStatetest274.json OK
|
+ randomStatetest274.json OK
|
||||||
+ randomStatetest275.json OK
|
+ randomStatetest275.json OK
|
||||||
+ randomStatetest276.json OK
|
+ randomStatetest276.json OK
|
||||||
|
@ -1130,11 +1130,11 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest28.json OK
|
+ randomStatetest28.json OK
|
||||||
+ randomStatetest280.json OK
|
+ randomStatetest280.json OK
|
||||||
+ randomStatetest281.json OK
|
+ randomStatetest281.json OK
|
||||||
- randomStatetest282.json Fail
|
+ randomStatetest282.json OK
|
||||||
+ randomStatetest283.json OK
|
+ randomStatetest283.json OK
|
||||||
+ randomStatetest285.json OK
|
+ randomStatetest285.json OK
|
||||||
+ randomStatetest286.json OK
|
+ randomStatetest286.json OK
|
||||||
- randomStatetest287.json Fail
|
+ randomStatetest287.json OK
|
||||||
+ randomStatetest288.json OK
|
+ randomStatetest288.json OK
|
||||||
+ randomStatetest29.json OK
|
+ randomStatetest29.json OK
|
||||||
+ randomStatetest290.json OK
|
+ randomStatetest290.json OK
|
||||||
|
@ -1222,7 +1222,7 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest371.json OK
|
+ randomStatetest371.json OK
|
||||||
+ randomStatetest372.json OK
|
+ randomStatetest372.json OK
|
||||||
+ randomStatetest375.json OK
|
+ randomStatetest375.json OK
|
||||||
- randomStatetest376.json Fail
|
+ randomStatetest376.json OK
|
||||||
+ randomStatetest377.json OK
|
+ randomStatetest377.json OK
|
||||||
+ randomStatetest378.json OK
|
+ randomStatetest378.json OK
|
||||||
+ randomStatetest379.json OK
|
+ randomStatetest379.json OK
|
||||||
|
@ -1284,10 +1284,10 @@ OK: 0/16 Fail: 0/16 Skip: 16/16
|
||||||
+ randomStatetest97.json OK
|
+ randomStatetest97.json OK
|
||||||
+ randomStatetest98.json OK
|
+ randomStatetest98.json OK
|
||||||
```
|
```
|
||||||
OK: 282/327 Fail: 41/327 Skip: 4/327
|
OK: 293/327 Fail: 30/327 Skip: 4/327
|
||||||
## stRandom2
|
## stRandom2
|
||||||
```diff
|
```diff
|
||||||
- 201503110226PYTHON_DUP6.json Fail
|
+ 201503110226PYTHON_DUP6.json OK
|
||||||
+ randomStatetest.json OK
|
+ randomStatetest.json OK
|
||||||
+ randomStatetest384.json OK
|
+ randomStatetest384.json OK
|
||||||
+ randomStatetest385.json OK
|
+ randomStatetest385.json OK
|
||||||
|
@ -1302,14 +1302,14 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
+ randomStatetest397.json OK
|
+ randomStatetest397.json OK
|
||||||
+ randomStatetest398.json OK
|
+ randomStatetest398.json OK
|
||||||
+ randomStatetest399.json OK
|
+ randomStatetest399.json OK
|
||||||
- randomStatetest401.json Fail
|
+ randomStatetest401.json OK
|
||||||
+ randomStatetest402.json OK
|
+ randomStatetest402.json OK
|
||||||
+ randomStatetest404.json OK
|
+ randomStatetest404.json OK
|
||||||
+ randomStatetest405.json OK
|
+ randomStatetest405.json OK
|
||||||
+ randomStatetest406.json OK
|
+ randomStatetest406.json OK
|
||||||
+ randomStatetest407.json OK
|
+ randomStatetest407.json OK
|
||||||
+ randomStatetest408.json OK
|
+ randomStatetest408.json OK
|
||||||
- randomStatetest409.json Fail
|
+ randomStatetest409.json OK
|
||||||
+ randomStatetest410.json OK
|
+ randomStatetest410.json OK
|
||||||
+ randomStatetest411.json OK
|
+ randomStatetest411.json OK
|
||||||
+ randomStatetest412.json OK
|
+ randomStatetest412.json OK
|
||||||
|
@ -1378,13 +1378,13 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
+ randomStatetest483.json OK
|
+ randomStatetest483.json OK
|
||||||
+ randomStatetest484.json OK
|
+ randomStatetest484.json OK
|
||||||
+ randomStatetest485.json OK
|
+ randomStatetest485.json OK
|
||||||
- randomStatetest487.json Fail
|
+ randomStatetest487.json OK
|
||||||
+ randomStatetest488.json OK
|
+ randomStatetest488.json OK
|
||||||
+ randomStatetest489.json OK
|
+ randomStatetest489.json OK
|
||||||
+ randomStatetest491.json OK
|
+ randomStatetest491.json OK
|
||||||
+ randomStatetest493.json OK
|
+ randomStatetest493.json OK
|
||||||
+ randomStatetest494.json OK
|
+ randomStatetest494.json OK
|
||||||
- randomStatetest495.json Fail
|
+ randomStatetest495.json OK
|
||||||
+ randomStatetest496.json OK
|
+ randomStatetest496.json OK
|
||||||
+ randomStatetest497.json OK
|
+ randomStatetest497.json OK
|
||||||
- randomStatetest498.json Fail
|
- randomStatetest498.json Fail
|
||||||
|
@ -1433,7 +1433,7 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
+ randomStatetest546.json OK
|
+ randomStatetest546.json OK
|
||||||
+ randomStatetest547.json OK
|
+ randomStatetest547.json OK
|
||||||
+ randomStatetest548.json OK
|
+ randomStatetest548.json OK
|
||||||
- randomStatetest549.json Fail
|
+ randomStatetest549.json OK
|
||||||
+ randomStatetest550.json OK
|
+ randomStatetest550.json OK
|
||||||
+ randomStatetest552.json OK
|
+ randomStatetest552.json OK
|
||||||
+ randomStatetest553.json OK
|
+ randomStatetest553.json OK
|
||||||
|
@ -1441,7 +1441,7 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
+ randomStatetest555.json OK
|
+ randomStatetest555.json OK
|
||||||
+ randomStatetest556.json OK
|
+ randomStatetest556.json OK
|
||||||
+ randomStatetest558.json OK
|
+ randomStatetest558.json OK
|
||||||
- randomStatetest559.json Fail
|
+ randomStatetest559.json OK
|
||||||
+ randomStatetest560.json OK
|
+ randomStatetest560.json OK
|
||||||
+ randomStatetest562.json OK
|
+ randomStatetest562.json OK
|
||||||
+ randomStatetest563.json OK
|
+ randomStatetest563.json OK
|
||||||
|
@ -1460,7 +1460,7 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
+ randomStatetest578.json OK
|
+ randomStatetest578.json OK
|
||||||
- randomStatetest579.json Fail
|
- randomStatetest579.json Fail
|
||||||
+ randomStatetest580.json OK
|
+ randomStatetest580.json OK
|
||||||
- randomStatetest581.json Fail
|
+ randomStatetest581.json OK
|
||||||
+ randomStatetest582.json OK
|
+ randomStatetest582.json OK
|
||||||
+ randomStatetest583.json OK
|
+ randomStatetest583.json OK
|
||||||
+ randomStatetest584.json OK
|
+ randomStatetest584.json OK
|
||||||
|
@ -1501,7 +1501,7 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
+ randomStatetest630.json OK
|
+ randomStatetest630.json OK
|
||||||
- randomStatetest632.json Fail
|
- randomStatetest632.json Fail
|
||||||
+ randomStatetest633.json OK
|
+ randomStatetest633.json OK
|
||||||
- randomStatetest635.json Fail
|
+ randomStatetest635.json OK
|
||||||
- randomStatetest636.json Fail
|
- randomStatetest636.json Fail
|
||||||
+ randomStatetest637.json OK
|
+ randomStatetest637.json OK
|
||||||
+ randomStatetest638.json OK
|
+ randomStatetest638.json OK
|
||||||
|
@ -1515,7 +1515,7 @@ OK: 282/327 Fail: 41/327 Skip: 4/327
|
||||||
- randomStatetest646.json Fail
|
- randomStatetest646.json Fail
|
||||||
randomStatetest647.json Skip
|
randomStatetest647.json Skip
|
||||||
```
|
```
|
||||||
OK: 191/227 Fail: 32/227 Skip: 4/227
|
OK: 200/227 Fail: 23/227 Skip: 4/227
|
||||||
## stRecursiveCreate
|
## stRecursiveCreate
|
||||||
```diff
|
```diff
|
||||||
- recursiveCreate.json Fail
|
- recursiveCreate.json Fail
|
||||||
|
@ -1537,14 +1537,14 @@ OK: 0/2 Fail: 2/2 Skip: 0/2
|
||||||
- refund_CallToSuicideTwice.json Fail
|
- refund_CallToSuicideTwice.json Fail
|
||||||
+ refund_NoOOG_1.json OK
|
+ refund_NoOOG_1.json OK
|
||||||
+ refund_OOG.json OK
|
+ refund_OOG.json OK
|
||||||
- refund_TxToSuicide.json Fail
|
+ refund_TxToSuicide.json OK
|
||||||
+ refund_TxToSuicideOOG.json OK
|
+ refund_TxToSuicideOOG.json OK
|
||||||
+ refund_changeNonZeroStorage.json OK
|
+ refund_changeNonZeroStorage.json OK
|
||||||
+ refund_getEtherBack.json OK
|
+ refund_getEtherBack.json OK
|
||||||
- refund_multimpleSuicide.json Fail
|
- refund_multimpleSuicide.json Fail
|
||||||
- refund_singleSuicide.json Fail
|
- refund_singleSuicide.json Fail
|
||||||
```
|
```
|
||||||
OK: 10/19 Fail: 9/19 Skip: 0/19
|
OK: 11/19 Fail: 8/19 Skip: 0/19
|
||||||
## stReturnDataTest
|
## stReturnDataTest
|
||||||
```diff
|
```diff
|
||||||
+ call_ecrec_success_empty_then_returndatasize.json OK
|
+ call_ecrec_success_empty_then_returndatasize.json OK
|
||||||
|
@ -2055,7 +2055,7 @@ OK: 0/284 Fail: 0/284 Skip: 284/284
|
||||||
- callcodeToNameRegistratorAddresTooBigRight.json Fail
|
- callcodeToNameRegistratorAddresTooBigRight.json Fail
|
||||||
- callcodeToNameRegistratorZeroMemExpanion.json Fail
|
- callcodeToNameRegistratorZeroMemExpanion.json Fail
|
||||||
- callcodeToReturn1.json Fail
|
- callcodeToReturn1.json Fail
|
||||||
- callerAccountBalance.json Fail
|
+ callerAccountBalance.json OK
|
||||||
- createNameRegistrator.json Fail
|
- createNameRegistrator.json Fail
|
||||||
+ createNameRegistratorOOG_MemExpansionOOV.json OK
|
+ createNameRegistratorOOG_MemExpansionOOV.json OK
|
||||||
+ createNameRegistratorOutOfMemoryBonds0.json OK
|
+ createNameRegistratorOutOfMemoryBonds0.json OK
|
||||||
|
@ -2065,25 +2065,25 @@ OK: 0/284 Fail: 0/284 Skip: 284/284
|
||||||
- createNameRegistratorZeroMem2.json Fail
|
- createNameRegistratorZeroMem2.json Fail
|
||||||
- createNameRegistratorZeroMemExpansion.json Fail
|
- createNameRegistratorZeroMemExpansion.json Fail
|
||||||
- createWithInvalidOpcode.json Fail
|
- createWithInvalidOpcode.json Fail
|
||||||
- currentAccountBalance.json Fail
|
+ currentAccountBalance.json OK
|
||||||
+ doubleSelfdestructTest.json OK
|
+ doubleSelfdestructTest.json OK
|
||||||
+ doubleSelfdestructTest2.json OK
|
+ doubleSelfdestructTest2.json OK
|
||||||
- extcodecopy.json Fail
|
+ extcodecopy.json OK
|
||||||
+ return0.json OK
|
+ return0.json OK
|
||||||
+ return1.json OK
|
+ return1.json OK
|
||||||
+ return2.json OK
|
+ return2.json OK
|
||||||
- suicideAddress.json Fail
|
+ suicideAddress.json OK
|
||||||
- suicideCaller.json Fail
|
+ suicideCaller.json OK
|
||||||
- suicideCallerAddresTooBigLeft.json Fail
|
+ suicideCallerAddresTooBigLeft.json OK
|
||||||
- suicideCallerAddresTooBigRight.json Fail
|
+ suicideCallerAddresTooBigRight.json OK
|
||||||
- suicideCoinbase.json Fail
|
- suicideCoinbase.json Fail
|
||||||
- suicideNotExistingAccount.json Fail
|
+ suicideNotExistingAccount.json OK
|
||||||
- suicideOrigin.json Fail
|
+ suicideOrigin.json OK
|
||||||
- suicideSendEtherPostDeath.json Fail
|
- suicideSendEtherPostDeath.json Fail
|
||||||
- suicideSendEtherToMe.json Fail
|
+ suicideSendEtherToMe.json OK
|
||||||
- testRandomTest.json Fail
|
- testRandomTest.json Fail
|
||||||
```
|
```
|
||||||
OK: 11/67 Fail: 54/67 Skip: 2/67
|
OK: 21/67 Fail: 44/67 Skip: 2/67
|
||||||
## stTransactionTest
|
## stTransactionTest
|
||||||
```diff
|
```diff
|
||||||
+ ContractStoreClearsOOG.json OK
|
+ ContractStoreClearsOOG.json OK
|
||||||
|
@ -2102,10 +2102,10 @@ OK: 11/67 Fail: 54/67 Skip: 2/67
|
||||||
- InternlCallStoreClearsOOG.json Fail
|
- InternlCallStoreClearsOOG.json Fail
|
||||||
- InternlCallStoreClearsSucces.json Fail
|
- InternlCallStoreClearsSucces.json Fail
|
||||||
- Opcodes_TransactionInit.json Fail
|
- Opcodes_TransactionInit.json Fail
|
||||||
- OverflowGasRequire.json Fail
|
+ OverflowGasRequire.json OK
|
||||||
- OverflowGasRequire2.json Fail
|
+ OverflowGasRequire2.json OK
|
||||||
- RefundOverflow.json Fail
|
+ RefundOverflow.json OK
|
||||||
- RefundOverflow2.json Fail
|
+ RefundOverflow2.json OK
|
||||||
- StoreClearsAndInternlCallStoreClearsOOG.json Fail
|
- StoreClearsAndInternlCallStoreClearsOOG.json Fail
|
||||||
- StoreClearsAndInternlCallStoreClearsSuccess.json Fail
|
- StoreClearsAndInternlCallStoreClearsSuccess.json Fail
|
||||||
- StoreGasOnCreate.json Fail
|
- StoreGasOnCreate.json Fail
|
||||||
|
@ -2113,25 +2113,25 @@ OK: 11/67 Fail: 54/67 Skip: 2/67
|
||||||
- SuicidesAndInternlCallSuicidesBonusGasAtCallFailed.json Fail
|
- SuicidesAndInternlCallSuicidesBonusGasAtCallFailed.json Fail
|
||||||
- SuicidesAndInternlCallSuicidesOOG.json Fail
|
- SuicidesAndInternlCallSuicidesOOG.json Fail
|
||||||
- SuicidesAndInternlCallSuicidesSuccess.json Fail
|
- SuicidesAndInternlCallSuicidesSuccess.json Fail
|
||||||
- SuicidesAndSendMoneyToItselfEtherDestroyed.json Fail
|
+ SuicidesAndSendMoneyToItselfEtherDestroyed.json OK
|
||||||
- SuicidesMixingCoinbase.json Fail
|
- SuicidesMixingCoinbase.json Fail
|
||||||
- SuicidesStopAfterSuicide.json Fail
|
+ SuicidesStopAfterSuicide.json OK
|
||||||
+ TransactionDataCosts652.json OK
|
+ TransactionDataCosts652.json OK
|
||||||
+ TransactionFromCoinbaseHittingBlockGasLimit.json OK
|
+ TransactionFromCoinbaseHittingBlockGasLimit.json OK
|
||||||
- TransactionFromCoinbaseHittingBlockGasLimit1.json Fail
|
- TransactionFromCoinbaseHittingBlockGasLimit1.json Fail
|
||||||
- TransactionFromCoinbaseNotEnoughFounds.json Fail
|
- TransactionFromCoinbaseNotEnoughFounds.json Fail
|
||||||
- TransactionNonceCheck.json Fail
|
+ TransactionNonceCheck.json OK
|
||||||
- TransactionNonceCheck2.json Fail
|
+ TransactionNonceCheck2.json OK
|
||||||
- TransactionSendingToEmpty.json Fail
|
- TransactionSendingToEmpty.json Fail
|
||||||
+ TransactionSendingToZero.json OK
|
+ TransactionSendingToZero.json OK
|
||||||
+ TransactionToAddressh160minusOne.json OK
|
+ TransactionToAddressh160minusOne.json OK
|
||||||
- TransactionToItself.json Fail
|
- TransactionToItself.json Fail
|
||||||
- TransactionToItselfNotEnoughFounds.json Fail
|
- TransactionToItselfNotEnoughFounds.json Fail
|
||||||
- UserTransactionGasLimitIsTooLowWhenZeroCost.json Fail
|
+ UserTransactionGasLimitIsTooLowWhenZeroCost.json OK
|
||||||
+ UserTransactionZeroCost.json OK
|
+ UserTransactionZeroCost.json OK
|
||||||
+ UserTransactionZeroCostWithData.json OK
|
+ UserTransactionZeroCostWithData.json OK
|
||||||
```
|
```
|
||||||
OK: 10/44 Fail: 34/44 Skip: 0/44
|
OK: 19/44 Fail: 25/44 Skip: 0/44
|
||||||
## stTransitionTest
|
## stTransitionTest
|
||||||
```diff
|
```diff
|
||||||
- createNameRegistratorPerTxsAfter.json Fail
|
- createNameRegistratorPerTxsAfter.json Fail
|
||||||
|
@ -2233,10 +2233,10 @@ OK: 0/24 Fail: 0/24 Skip: 24/24
|
||||||
- ZeroValue_DELEGATECALL_ToEmpty.json Fail
|
- ZeroValue_DELEGATECALL_ToEmpty.json Fail
|
||||||
- ZeroValue_DELEGATECALL_ToNonZeroBalance.json Fail
|
- ZeroValue_DELEGATECALL_ToNonZeroBalance.json Fail
|
||||||
- ZeroValue_DELEGATECALL_ToOneStorageKey.json Fail
|
- ZeroValue_DELEGATECALL_ToOneStorageKey.json Fail
|
||||||
- ZeroValue_SUICIDE.json Fail
|
+ ZeroValue_SUICIDE.json OK
|
||||||
- ZeroValue_SUICIDE_ToEmpty.json Fail
|
+ ZeroValue_SUICIDE_ToEmpty.json OK
|
||||||
- ZeroValue_SUICIDE_ToNonZeroBalance.json Fail
|
+ ZeroValue_SUICIDE_ToNonZeroBalance.json OK
|
||||||
- ZeroValue_SUICIDE_ToOneStorageKey.json Fail
|
+ ZeroValue_SUICIDE_ToOneStorageKey.json OK
|
||||||
+ ZeroValue_TransactionCALL.json OK
|
+ ZeroValue_TransactionCALL.json OK
|
||||||
- ZeroValue_TransactionCALL_ToEmpty.json Fail
|
- ZeroValue_TransactionCALL_ToEmpty.json Fail
|
||||||
- ZeroValue_TransactionCALL_ToNonZeroBalance.json Fail
|
- ZeroValue_TransactionCALL_ToNonZeroBalance.json Fail
|
||||||
|
@ -2246,7 +2246,7 @@ OK: 0/24 Fail: 0/24 Skip: 24/24
|
||||||
- ZeroValue_TransactionCALLwithData_ToNonZeroBalance.json Fail
|
- ZeroValue_TransactionCALLwithData_ToNonZeroBalance.json Fail
|
||||||
- ZeroValue_TransactionCALLwithData_ToOneStorageKey.json Fail
|
- ZeroValue_TransactionCALLwithData_ToOneStorageKey.json Fail
|
||||||
```
|
```
|
||||||
OK: 2/24 Fail: 22/24 Skip: 0/24
|
OK: 6/24 Fail: 18/24 Skip: 0/24
|
||||||
## stZeroKnowledge
|
## stZeroKnowledge
|
||||||
```diff
|
```diff
|
||||||
ecmul_1-2_2_28000_128.json Skip
|
ecmul_1-2_2_28000_128.json Skip
|
||||||
|
|
|
@ -45,6 +45,9 @@ proc getAccount(db: AccountStateDB, address: EthAddress): Account =
|
||||||
proc setAccount*(db: AccountStateDB, address: EthAddress, account: Account) =
|
proc setAccount*(db: AccountStateDB, address: EthAddress, account: Account) =
|
||||||
db.trie.put createRangeFromAddress(address), rlp.encode(account)
|
db.trie.put createRangeFromAddress(address), rlp.encode(account)
|
||||||
|
|
||||||
|
proc deleteAccount*(db: AccountStateDB, address: EthAddress) =
|
||||||
|
db.trie.del createRangeFromAddress(address)
|
||||||
|
|
||||||
proc getCodeHash*(db: AccountStateDB, address: EthAddress): Hash256 =
|
proc getCodeHash*(db: AccountStateDB, address: EthAddress): Hash256 =
|
||||||
let account = db.getAccount(address)
|
let account = db.getAccount(address)
|
||||||
result = account.codeHash
|
result = account.codeHash
|
||||||
|
|
|
@ -96,12 +96,14 @@ proc addLogEntry*(c: var BaseComputation, account: EthAddress, topics: seq[UInt2
|
||||||
|
|
||||||
# many methods are basically TODO, but they still return valid values
|
# many methods are basically TODO, but they still return valid values
|
||||||
# in order to test some existing code
|
# in order to test some existing code
|
||||||
proc getAccountsForDeletion*(c: BaseComputation): seq[(string, string)] =
|
func getAccountsForDeletion*(c: BaseComputation): seq[EthAddress] =
|
||||||
# TODO
|
# TODO
|
||||||
if c.isError:
|
if c.isError:
|
||||||
result = @[]
|
result = @[]
|
||||||
else:
|
else:
|
||||||
result = @[]
|
result = @[]
|
||||||
|
for account in c.accountsToDelete.keys:
|
||||||
|
result.add(account)
|
||||||
|
|
||||||
proc getLogEntries*(c: BaseComputation): seq[(string, seq[UInt256], string)] =
|
proc getLogEntries*(c: BaseComputation): seq[(string, seq[UInt256], string)] =
|
||||||
# TODO
|
# TODO
|
||||||
|
|
|
@ -29,6 +29,7 @@ proc stringFromBytes(x: ByteRange): string =
|
||||||
result[i] = char(x[i])
|
result[i] = char(x[i])
|
||||||
|
|
||||||
proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus) =
|
proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus) =
|
||||||
|
# XXX: this is becoming a mess. refactor.
|
||||||
var fixture: JsonNode
|
var fixture: JsonNode
|
||||||
for label, child in fixtures:
|
for label, child in fixtures:
|
||||||
fixture = child
|
fixture = child
|
||||||
|
@ -48,28 +49,44 @@ proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus) =
|
||||||
let ftrans = fixture["transaction"]
|
let ftrans = fixture["transaction"]
|
||||||
let transaction = ftrans.getFixtureTransaction
|
let transaction = ftrans.getFixtureTransaction
|
||||||
let sender = ftrans.getFixtureTransactionSender
|
let sender = ftrans.getFixtureTransactionSender
|
||||||
let gas_cost = (transaction.gasLimit * transaction.gasPrice).u256
|
let gas_cost = transaction.gasLimit.u256 * transaction.gasPrice.u256
|
||||||
|
|
||||||
var memDb = newMemDB()
|
var memDb = newMemDB()
|
||||||
var vmState = newBaseVMState(header, newBaseChainDB(trieDB memDb))
|
var vmState = newBaseVMState(header, newBaseChainDB(trieDB memDb))
|
||||||
vmState.mutateStateDB:
|
vmState.mutateStateDB:
|
||||||
setupStateDB(fixture{"pre"}, db)
|
setupStateDB(fixture{"pre"}, db)
|
||||||
|
|
||||||
doAssert transaction.accountNonce == vmState.readOnlyStateDB.getNonce(sender)
|
let currentCoinbase = fenv["currentCoinbase"].getStr.ethAddressFromHex
|
||||||
doAssert vmState.readOnlyStateDB.getBalance(sender) >= gas_cost
|
|
||||||
|
|
||||||
# TODO: implement other sorts of transctions
|
# XXX: https://github.com/status-im/nimbus/issues/35#issuecomment-391726518
|
||||||
|
# TODO: put yellow paper ref here from that link justifying the limit (1 shl 34 is stand-in)
|
||||||
|
if transaction.gasLimit < transaction.getFixtureIntrinsicGas or
|
||||||
|
transaction.gasPrice > (1 shl 34) or
|
||||||
|
transaction.accountNonce != vmState.readOnlyStateDB.getNonce(sender) or
|
||||||
|
vmState.readOnlyStateDB.getBalance(sender) < gas_cost:
|
||||||
|
vmState.mutateStateDb:
|
||||||
|
# pre-EIP158 (e.g., Byzantium, should ensure currentCoinbase exists)
|
||||||
|
# but in later forks, don't create at all
|
||||||
|
db.deltaBalance(currentCoinbase, 0.u256)
|
||||||
|
|
||||||
|
# FIXME: don't repeat this code
|
||||||
|
doAssert "0x" & `$`(vmState.readOnlyStateDB.rootHash).toLowerAscii == fixture["post"]["Homestead"][0]["hash"].getStr
|
||||||
|
return
|
||||||
|
|
||||||
|
# TODO: implement other sorts of transactions
|
||||||
# TODO: check whether it's to an empty address
|
# TODO: check whether it's to an empty address
|
||||||
|
|
||||||
# This address might not have code. This is fine.
|
# This address might not have code. This is fine.
|
||||||
let code = fixture["pre"].getFixtureCode(transaction.to)
|
let code = fixture["pre"].getFixtureCode(transaction.to)
|
||||||
|
|
||||||
let currentCoinbase = fenv["currentCoinbase"].getStr.ethAddressFromHex
|
|
||||||
|
|
||||||
vmState.mutateStateDB:
|
vmState.mutateStateDB:
|
||||||
|
# TODO: combine some of these
|
||||||
|
# Also, in general, map out/etc the whole vmState.mutateStateDB flow set
|
||||||
db.setBalance(sender, db.getBalance(sender) - gas_cost)
|
db.setBalance(sender, db.getBalance(sender) - gas_cost)
|
||||||
db.deltaBalance(currentCoinbase, gas_cost)
|
db.deltaBalance(currentCoinbase, gas_cost)
|
||||||
db.setNonce(sender, db.getNonce(sender) + 1)
|
db.setNonce(sender, db.getNonce(sender) + 1)
|
||||||
|
db.deltaBalance(transaction.to, transaction.value)
|
||||||
|
db.setBalance(sender, db.getBalance(sender) - transaction.value)
|
||||||
|
|
||||||
# build_message (Py-EVM)
|
# build_message (Py-EVM)
|
||||||
# FIXME: detect contact creation address; only run if transaction.to addr has .code
|
# FIXME: detect contact creation address; only run if transaction.to addr has .code
|
||||||
|
@ -95,20 +112,34 @@ proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus) =
|
||||||
try:
|
try:
|
||||||
computation.executeOpcodes()
|
computation.executeOpcodes()
|
||||||
|
|
||||||
|
let deletedAccounts = computation.getAccountsForDeletion
|
||||||
|
computation.gasMeter.refundGas(24_000 * deletedAccounts.len)
|
||||||
|
vmState.mutateStateDB:
|
||||||
|
for deletedAccount in deletedAccounts:
|
||||||
|
db.deleteAccount deletedAccount
|
||||||
|
|
||||||
let
|
let
|
||||||
gasRemaining = computation.gasMeter.gasRemaining
|
gasRemaining = computation.gasMeter.gasRemaining.u256
|
||||||
gasRefunded = computation.gasMeter.gasRefunded
|
gasRefunded = computation.gasMeter.gasRefunded.u256
|
||||||
gasUsed = transaction.gasLimit - gasRemaining
|
gasUsed = transaction.gasLimit.u256 - gasRemaining
|
||||||
gasRefund = min(gasRefunded, gasUsed div 2)
|
gasRefund = min(gasRefunded, gasUsed div 2)
|
||||||
gasRefundAmount = (gasRefund + gasRemaining) * transaction.gasPrice
|
gasRefundAmount = (gasRefund + gasRemaining) * transaction.gasPrice.u256
|
||||||
|
|
||||||
if not computation.isError:
|
if not computation.isError:
|
||||||
vmState.mutateStateDB:
|
vmState.mutateStateDB:
|
||||||
db.setBalance(currentCoinbase, db.getBalance(currentCoinbase) - gasRefundAmount.u256)
|
db.setBalance(currentCoinbase, db.getBalance(currentCoinbase) - gasRefundAmount)
|
||||||
db.deltaBalance(sender, gasRefundAmount.u256)
|
db.deltaBalance(sender, gasRefundAmount)
|
||||||
db.deltaBalance(transaction.to, transaction.value)
|
# TODO: only here does one commit, with some nuance/caveat
|
||||||
db.setBalance(sender, db.getBalance(sender) - transaction.value)
|
else:
|
||||||
|
# TODO: replace with transactional commit/revert state (foo.revert, or just implicit)
|
||||||
|
vmState.mutateStateDB:
|
||||||
|
db.setBalance(transaction.to, db.getBalance(transaction.to) - transaction.value)
|
||||||
|
db.deltaBalance(sender, transaction.value)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
# TODO: replace with transactional commit/revert state (here, foo.revert)
|
||||||
|
vmState.mutateStateDB:
|
||||||
|
db.setBalance(transaction.to, db.getBalance(transaction.to) - transaction.value)
|
||||||
|
db.deltaBalance(sender, transaction.value)
|
||||||
echo "Computation error"
|
echo "Computation error"
|
||||||
|
|
||||||
# TODO: do this right
|
# TODO: do this right
|
||||||
|
|
Loading…
Reference in New Issue