add: CoreDbKvtRef as db, persistCode, getCode
This commit is contained in:
parent
177cd7342a
commit
49a7f2c9c6
|
@ -283,12 +283,10 @@ proc persistMode(acc: RefAccount): PersistMode =
|
||||||
if IsNew notin acc.flags:
|
if IsNew notin acc.flags:
|
||||||
result = Remove
|
result = Remove
|
||||||
|
|
||||||
proc persistCode(acc: RefAccount, address: EthAddress, db: VerkleTrie) =
|
proc persistCode(acc: RefAccount, address: EthAddress, trie: VerkleTrie) =
|
||||||
if acc.code.len != 0:
|
if acc.code.len != 0:
|
||||||
when defined(geth):
|
VerkleTrieRef(trie).updateContractCode(address, acc.account.codeHash, acc.code)
|
||||||
VerkleTrieRef(db).updateContractCode(address, acc.account.codeHash, acc.code)
|
VerkleTrieRef(trie).db.put(acc.account.codeHash.data, acc.code)
|
||||||
else:
|
|
||||||
VerkleTrieRef(db).updateContractCode(address, acc.account.codeHash, acc.code)
|
|
||||||
|
|
||||||
proc persistStorage(acc: RefAccount, address: EthAddress, db: VerkleTrie, clearCache: bool) =
|
proc persistStorage(acc: RefAccount, address: EthAddress, db: VerkleTrie, clearCache: bool) =
|
||||||
if acc.overlayStorage.len == 0:
|
if acc.overlayStorage.len == 0:
|
||||||
|
@ -330,10 +328,24 @@ proc getNonce*(ac: AccountsCache, address: EthAddress): AccountNonce {.inline.}
|
||||||
if acc.isNil: emptyAcc.nonce
|
if acc.isNil: emptyAcc.nonce
|
||||||
else: acc.account.nonce
|
else: acc.account.nonce
|
||||||
|
|
||||||
|
proc getCode*(ac: AccountsCache, address: EthAddress): seq[byte] =
|
||||||
|
let acc = ac.getAccount(address, false)
|
||||||
|
if acc.isNil:
|
||||||
|
return
|
||||||
|
|
||||||
|
if CodeLoaded in acc.flags or CodeChanged in acc.flags:
|
||||||
|
result = acc.code
|
||||||
|
else:
|
||||||
|
let data = VerkleTrieRef(ac.trie).db.get(acc.account.codeHash.data)
|
||||||
|
|
||||||
|
acc.code = data
|
||||||
|
acc.flags.incl CodeLoaded
|
||||||
|
result = acc.code
|
||||||
|
|
||||||
proc getCodeSize*(ac: AccountsCache, address: EthAddress): int {.inline.} =
|
proc getCodeSize*(ac: AccountsCache, address: EthAddress): int {.inline.} =
|
||||||
let acc = ac.getAccount(address, false)
|
let acc = ac.getAccount(address, false)
|
||||||
if acc.isNil: 0
|
if acc.isNil: 0
|
||||||
else: acc.code.len
|
else: int(VerkleTrieRef(ac.trie).getCodeSize(address))
|
||||||
|
|
||||||
proc getCodeHash*(ac: AccountsCache, address: EthAddress): Hash256 {.inline.} =
|
proc getCodeHash*(ac: AccountsCache, address: EthAddress): Hash256 {.inline.} =
|
||||||
let acc = ac.getAccount(address, false)
|
let acc = ac.getAccount(address, false)
|
||||||
|
|
|
@ -53,6 +53,10 @@ var MainStorageOffsetLshVerkleNodeWidth*: UInt256 = one shl twofourty
|
||||||
#
|
#
|
||||||
# ################################################################
|
# ################################################################
|
||||||
|
|
||||||
|
# Returns the kv-store ref
|
||||||
|
proc db*(trie: VerkleTrieRef): CoreDbKvtRef =
|
||||||
|
return trie.db
|
||||||
|
|
||||||
# Check if the account loaded is empty or not
|
# Check if the account loaded is empty or not
|
||||||
proc isEmptyVerkleAccount*(acc: Account): bool =
|
proc isEmptyVerkleAccount*(acc: Account): bool =
|
||||||
var zero: array[32, byte]
|
var zero: array[32, byte]
|
||||||
|
@ -243,7 +247,10 @@ proc getTreeKeyStorageSlotWithEvaluatedAddress*(addressPoint: Point, storageKey:
|
||||||
return getTreeKeyWithEvaluatedAddress(addressPoint, treeIndex, subIndex)
|
return getTreeKeyWithEvaluatedAddress(addressPoint, treeIndex, subIndex)
|
||||||
|
|
||||||
proc newVerkleTrie*(): VerkleTrieRef =
|
proc newVerkleTrie*(): VerkleTrieRef =
|
||||||
result = VerkleTrieRef(root: newTree())
|
result = VerkleTrieRef(
|
||||||
|
root: newTree(),
|
||||||
|
db: LegacyDbMemory.newCoreDbRef().newKvt().CoreDbKvtRef
|
||||||
|
)
|
||||||
|
|
||||||
# ################################################################
|
# ################################################################
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue