Merge pull request #82 from status-im/ImplementSelfDestructOp
Implemented selfDestruct op
This commit is contained in:
commit
8713939bfe
|
@ -602,7 +602,7 @@ OK: 0/18 Fail: 0/18 Skip: 18/18
|
||||||
+ push30.json OK
|
+ push30.json OK
|
||||||
+ push31.json OK
|
+ push31.json OK
|
||||||
+ push32.json OK
|
+ push32.json OK
|
||||||
- push32AndSuicide.json Fail
|
+ push32AndSuicide.json OK
|
||||||
+ push32FillUpInputWithZerosAtTheEnd.json OK
|
+ push32FillUpInputWithZerosAtTheEnd.json OK
|
||||||
+ push32Undefined.json OK
|
+ push32Undefined.json OK
|
||||||
+ push32Undefined2.json OK
|
+ push32Undefined2.json OK
|
||||||
|
@ -633,7 +633,7 @@ OK: 0/18 Fail: 0/18 Skip: 18/18
|
||||||
+ swap9.json OK
|
+ swap9.json OK
|
||||||
+ swapjump1.json OK
|
+ swapjump1.json OK
|
||||||
```
|
```
|
||||||
OK: 73/74 Fail: 1/74 Skip: 0/74
|
OK: 74/74 Fail: 0/74 Skip: 0/74
|
||||||
## vmRandomTest
|
## vmRandomTest
|
||||||
```diff
|
```diff
|
||||||
201503102037PYTHON.json Skip
|
201503102037PYTHON.json Skip
|
||||||
|
@ -722,6 +722,6 @@ OK: 0/36 Fail: 0/36 Skip: 36/36
|
||||||
- arith.json Fail
|
- arith.json Fail
|
||||||
- boolean.json Fail
|
- boolean.json Fail
|
||||||
- mktx.json Fail
|
- mktx.json Fail
|
||||||
- suicide.json Fail
|
+ suicide.json OK
|
||||||
```
|
```
|
||||||
OK: 0/4 Fail: 4/4 Skip: 0/4
|
OK: 1/4 Fail: 3/4 Skip: 0/4
|
||||||
|
|
|
@ -775,8 +775,29 @@ op revert, inline = false, startPos, size:
|
||||||
|
|
||||||
op selfDestruct, inline = false:
|
op selfDestruct, inline = false:
|
||||||
## 0xff Halt execution and register account for later deletion.
|
## 0xff Halt execution and register account for later deletion.
|
||||||
|
# TODO: This is the basic implementation of the self destruct op,
|
||||||
|
# Other forks have some extra functionality around this call.
|
||||||
|
# In particular, EIP150 and EIP161 have extra requirements.
|
||||||
let beneficiary = computation.stack.popAddress()
|
let beneficiary = computation.stack.popAddress()
|
||||||
|
|
||||||
## TODO
|
computation.vmState.mutateStateDB:
|
||||||
|
let
|
||||||
|
local_balance = db.get_balance(computation.msg.storage_address)
|
||||||
|
beneficiary_balance = db.get_balance(beneficiary)
|
||||||
|
|
||||||
computation.registerAccountForDeletion(beneficiary)
|
# Transfer to beneficiary
|
||||||
|
db.setBalance(beneficiary, local_balance + beneficiary_balance)
|
||||||
|
|
||||||
|
# Zero the balance of the address being deleted.
|
||||||
|
# This must come after sending to beneficiary in case the
|
||||||
|
# contract named itself as the beneficiary.
|
||||||
|
db.set_balance(computation.msg.storage_address, 0.u256)
|
||||||
|
|
||||||
|
# Register the account to be deleted
|
||||||
|
computation.registerAccountForDeletion(beneficiary)
|
||||||
|
|
||||||
|
computation.vm_state.logger.debug(
|
||||||
|
"SELFDESTRUCT: %s (%s) -> %s" &
|
||||||
|
computation.msg.storage_address.toHex &
|
||||||
|
local_balance.toString &
|
||||||
|
beneficiary.toHex)
|
||||||
|
|
Loading…
Reference in New Issue