Implemented selfDestruct op
This commit is contained in:
parent
473140f586
commit
52daaf49c0
|
@ -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
|
||||||
|
|
|
@ -777,6 +777,24 @@ op selfDestruct, inline = false:
|
||||||
## 0xff Halt execution and register account for later deletion.
|
## 0xff Halt execution and register account for later deletion.
|
||||||
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)
|
||||||
|
|
||||||
|
# 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.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