checkpoint commit

This commit is contained in:
Jared Wasinger 2025-10-03 18:45:23 +08:00
parent a91005076d
commit ef9b48603f
2 changed files with 39 additions and 6 deletions

View file

@ -65,6 +65,9 @@ func (a *BlockAccessListTracer) AccessList() *bal.ConstructionBlockAccessList {
// TODO: I don't like that AccessList and this do slightly different things, // TODO: I don't like that AccessList and this do slightly different things,
// and that they mutate the access list builder (not apparent in the naming of the methods) // and that they mutate the access list builder (not apparent in the naming of the methods)
//
// ^ idea: add Finalize() which returns the diff/accesses, also accumulating them in the BAL.
// AccessList just returns the constructed BAL.
func (a *BlockAccessListTracer) IdxChanges() (*bal.StateDiff, bal.StateAccesses) { func (a *BlockAccessListTracer) IdxChanges() (*bal.StateDiff, bal.StateAccesses) {
return a.accessListBuilder.FinaliseIdxChanges() return a.accessListBuilder.FinaliseIdxChanges()
} }

View file

@ -91,16 +91,46 @@ func (c *AccessListBuilder) StorageWrite(address common.Address, key, prevVal, n
acctAccesses.StorageWrite(key, prevVal, newVal) acctAccesses.StorageWrite(key, prevVal, newVal)
} }
func (c *AccessListBuilder) BalanceChange(addr common.Address, prev, cur *uint256.Int) { func (c *AccessListBuilder) BalanceChange(address common.Address, prev, cur *uint256.Int) {
// TODO if _, ok := c.prestates[address]; !ok {
c.prestates[address] = &AccountState{}
}
if c.prestates[address].Balance == nil {
c.prestates[address].Balance = prev
}
if _, ok := c.accessesStack[len(c.accessesStack)-1][address]; !ok {
c.accessesStack[len(c.accessesStack)-1][address] = &constructionAccountAccess{}
}
acctAccesses := c.accessesStack[len(c.accessesStack)-1][address]
acctAccesses.BalanceChange(cur)
} }
func (c *AccessListBuilder) CodeChange(addr common.Address, prev, cur []byte) { func (c *AccessListBuilder) CodeChange(address common.Address, prev, cur []byte) {
// TODO if _, ok := c.prestates[address]; !ok {
c.prestates[address] = &AccountState{}
}
if c.prestates[address].Code == nil {
c.prestates[address].Code = prev
}
if _, ok := c.accessesStack[len(c.accessesStack)-1][address]; !ok {
c.accessesStack[len(c.accessesStack)-1][address] = &constructionAccountAccess{}
}
acctAccesses := c.accessesStack[len(c.accessesStack)-1][address]
acctAccesses.CodeChange(cur)
} }
func (c *AccessListBuilder) NonceChange(addr common.Address, prev, cur uint64) { func (c *AccessListBuilder) NonceChange(address common.Address, prev, cur uint64) {
// TODO if _, ok := c.prestates[address]; !ok {
c.prestates[address] = &AccountState{}
}
if c.prestates[address].Nonce == nil {
c.prestates[address].Nonce = &prev
}
if _, ok := c.accessesStack[len(c.accessesStack)-1][address]; !ok {
c.accessesStack[len(c.accessesStack)-1][address] = &constructionAccountAccess{}
}
acctAccesses := c.accessesStack[len(c.accessesStack)-1][address]
acctAccesses.NonceChange(cur)
} }
func (c *AccessListBuilder) EnterScope() { func (c *AccessListBuilder) EnterScope() {