@@ -82,6 +82,7 @@ In the comments next to each cell, we've marked which component of the YellowPap
8282 <refund> 0 </refund> // A_r
8383 <accessedAccounts> .Set </accessedAccounts>
8484 <accessedStorage> .Map </accessedStorage>
85+ <createdAccounts> .Set </createdAccounts>
8586 </substate>
8687
8788 // Immutable during a single transaction
@@ -554,9 +555,10 @@ After executing a transaction, it's necessary to have the effect of the substate
554555 rule <k> #finalizeTx(true) => #finalizeStorage(Set2List(SetItem(MINER) |Set ACCTS)) ... </k>
555556 <selfDestruct> .Set </selfDestruct>
556557 <coinbase> MINER </coinbase>
557- <touchedAccounts> ACCTS </touchedAccounts>
558+ <touchedAccounts> ACCTS => .Set </touchedAccounts>
558559 <accessedAccounts> _ => .Set </accessedAccounts>
559560 <accessedStorage> _ => .Map </accessedStorage>
561+ <createdAccounts> _ => .Set </createdAccounts>
560562
561563 rule <k> #finalizeTx(false) ... </k>
562564 <useGas> true </useGas>
@@ -1618,6 +1620,7 @@ For each `CALL*` operation, we make a corresponding call to `#call` and a state-
16181620 <nonce> NONCE => #if Gemptyisnonexistent << SCHED >> #then NONCE +Int 1 #else NONCE #fi </nonce>
16191621 ...
16201622 </account>
1623+ <createdAccounts> ACCTS => ACCTS |Set SetItem(ACCTTO) </createdAccounts>
16211624
16221625 rule <k> #incrementNonce ACCT => .K ... </k>
16231626 <account>
@@ -1749,6 +1752,7 @@ Self destructing to yourself, unlike a regular transfer, destroys the balance in
17491752 syntax UnStackOp ::= "SELFDESTRUCT"
17501753 // -----------------------------------
17511754 rule <k> SELFDESTRUCT ACCTTO => #touchAccounts ACCT ACCTTO ~> #accessAccounts ACCTTO ~> #transferFunds ACCT ACCTTO BALFROM ~> #end EVMC_SUCCESS ... </k>
1755+ <schedule> SCHED </schedule>
17521756 <id> ACCT </id>
17531757 <selfDestruct> SDS => SDS |Set SetItem(ACCT) </selfDestruct>
17541758 <account>
@@ -1757,9 +1761,12 @@ Self destructing to yourself, unlike a regular transfer, destroys the balance in
17571761 ...
17581762 </account>
17591763 <output> _ => .Bytes </output>
1760- requires ACCT =/=Int ACCTTO
1764+ <createdAccounts> CA </createdAccounts>
1765+ requires ((notBool Ghaseip6780 << SCHED >>) orBool ACCT in CA)
1766+ andBool ACCT =/=Int ACCTTO
17611767
17621768 rule <k> SELFDESTRUCT ACCT => #touchAccounts ACCT ~> #accessAccounts ACCT ~> #end EVMC_SUCCESS ... </k>
1769+ <schedule> SCHED </schedule>
17631770 <id> ACCT </id>
17641771 <selfDestruct> SDS => SDS |Set SetItem(ACCT) </selfDestruct>
17651772 <account>
@@ -1768,6 +1775,28 @@ Self destructing to yourself, unlike a regular transfer, destroys the balance in
17681775 ...
17691776 </account>
17701777 <output> _ => .Bytes </output>
1778+ <createdAccounts> CA </createdAccounts>
1779+ requires ((notBool Ghaseip6780 << SCHED >>) orBool ACCT in CA)
1780+
1781+ rule <k> SELFDESTRUCT ACCTTO => #touchAccounts ACCT ACCTTO ~> #accessAccounts ACCTTO ~> #transferFunds ACCT ACCTTO BALFROM ~> #end EVMC_SUCCESS ... </k>
1782+ <schedule> SCHED </schedule>
1783+ <id> ACCT </id>
1784+ <account>
1785+ <acctID> ACCT </acctID>
1786+ <balance> BALFROM </balance>
1787+ ...
1788+ </account>
1789+ <output> _ => .Bytes </output>
1790+ <createdAccounts> CA </createdAccounts>
1791+ requires Ghaseip6780 << SCHED >> andBool (notBool ACCT in CA)
1792+ andBool ACCT =/=Int ACCTTO
1793+
1794+ rule <k> SELFDESTRUCT ACCT => #touchAccounts ACCT ~> #accessAccounts ACCT ~> #end EVMC_SUCCESS ... </k>
1795+ <schedule> SCHED </schedule>
1796+ <id> ACCT </id>
1797+ <output> _ => .Bytes </output>
1798+ <createdAccounts> CA </createdAccounts>
1799+ requires Ghaseip6780 << SCHED >> andBool (notBool ACCT in CA)
17711800```
17721801
17731802Precompiled Contracts
0 commit comments