Commit bb0b1814 authored by Kelvin Fichter's avatar Kelvin Fichter

Added more state transitioner tests

parent f4325fad
...@@ -5,7 +5,6 @@ import * as mkdirp from 'mkdirp' ...@@ -5,7 +5,6 @@ import * as mkdirp from 'mkdirp'
/* Internal Imports */ /* Internal Imports */
import { makeStateDump } from '../src' import { makeStateDump } from '../src'
;(async () => { ;(async () => {
const outdir = path.resolve(__dirname, '../build/dumps') const outdir = path.resolve(__dirname, '../build/dumps')
const outfile = path.join(outdir, 'state-dump.latest.json') const outfile = path.join(outdir, 'state-dump.latest.json')
......
...@@ -262,16 +262,27 @@ contract OVM_StateTransitioner is iOVM_StateTransitioner, Lib_AddressResolver { ...@@ -262,16 +262,27 @@ contract OVM_StateTransitioner is iOVM_StateTransitioner, Lib_AddressResolver {
"Contract must be verified before proving a storage slot." "Contract must be verified before proving a storage slot."
); );
require( (
Lib_SecureMerkleTrie.verifyInclusionProof( bool exists,
abi.encodePacked(_key), bytes memory value
abi.encodePacked(_value), ) = Lib_SecureMerkleTrie.get(
_storageTrieWitness, abi.encodePacked(_key),
ovmStateManager.getAccountStorageRoot(_ovmContractAddress) _storageTrieWitness,
), ovmStateManager.getAccountStorageRoot(_ovmContractAddress)
"Storage slot is invalid or invalid inclusion proof provided."
); );
if (exists == true) {
require(
keccak256(value) == keccak256(abi.encodePacked(_value)),
"Provided storage slot value is invalid."
);
} else {
require(
_value == bytes32(0),
"Provided storage slot value is invalid."
);
}
ovmStateManager.putContractStorage( ovmStateManager.putContractStorage(
_ovmContractAddress, _ovmContractAddress,
_key, _key,
......
...@@ -207,8 +207,8 @@ library Lib_OVMCodec { ...@@ -207,8 +207,8 @@ library Lib_OVMCodec {
// index-by-index circumvents this issue. // index-by-index circumvents this issue.
raw[0] = Lib_RLPWriter.writeUint(_account.nonce); raw[0] = Lib_RLPWriter.writeUint(_account.nonce);
raw[1] = Lib_RLPWriter.writeUint(_account.balance); raw[1] = Lib_RLPWriter.writeUint(_account.balance);
raw[2] = _account.storageRoot == 0 ? RLP_NULL_BYTES : Lib_RLPWriter.writeBytes(abi.encodePacked(_account.storageRoot)); raw[2] = Lib_RLPWriter.writeBytes(abi.encodePacked(_account.storageRoot));
raw[3] = _account.codeHash == 0 ? RLP_NULL_BYTES : Lib_RLPWriter.writeBytes(abi.encodePacked(_account.codeHash)); raw[3] = Lib_RLPWriter.writeBytes(abi.encodePacked(_account.codeHash));
return Lib_RLPWriter.writeList(raw); return Lib_RLPWriter.writeList(raw);
} }
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
"ganache-core": "^2.12.1", "ganache-core": "^2.12.1",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"merkle-patricia-tree": "git+https://github.com/kfichter/merkle-patricia-tree", "merkle-patricia-tree": "git+https://github.com/kfichter/merkle-patricia-tree",
"mkdirp": "^1.0.4",
"mocha": "^8.1.1", "mocha": "^8.1.1",
"prettier": "^2.1.2", "prettier": "^2.1.2",
"random-bytes-seed": "^1.0.3", "random-bytes-seed": "^1.0.3",
......
...@@ -175,7 +175,7 @@ export const makeStateDump = async (): Promise<any> => { ...@@ -175,7 +175,7 @@ export const makeStateDump = async (): Promise<any> => {
const changedAccounts = await getChangedAccounts(cStateManager) const changedAccounts = await getChangedAccounts(cStateManager)
let deadAddressIndex = 0 let deadAddressIndex = 0
let accounts: Accounts = [] const accounts: Accounts = []
for (const originalAddress of changedAccounts) { for (const originalAddress of changedAccounts) {
const code = ( const code = (
...@@ -207,7 +207,7 @@ export const makeStateDump = async (): Promise<any> => { ...@@ -207,7 +207,7 @@ export const makeStateDump = async (): Promise<any> => {
accounts.push({ accounts.push({
originalAddress, originalAddress,
address, address,
code: code, code,
}) })
} }
......
...@@ -39,10 +39,10 @@ ...@@ -39,10 +39,10 @@
resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89"
integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==
"@eth-optimism/smock@^0.0.1": "@eth-optimism/smock@^0.0.2":
version "0.0.1" version "0.0.2"
resolved "https://registry.yarnpkg.com/@eth-optimism/smock/-/smock-0.0.1.tgz#8ea7379072eccfe5cac327e7eb78384f0e38b18c" resolved "https://registry.yarnpkg.com/@eth-optimism/smock/-/smock-0.0.2.tgz#58b9b28885fef1b08c5b13cb31bf614635027d90"
integrity sha512-lJmdXaDkAQ7Y2T9GfEzrhF6lrJ3WiEb8HJyDBjr2r3Cd4/0b2RAQj4kqkKLFZyGDMnAZ0O+XnTTyaKhBXkDSXw== integrity sha512-6Wn4h8ZuDqZlNq2lF1Mov78b41S7g4xXWXBOqqS5T+d0yC2V6Ao9XIJBheBS6l1cCN8tFNR47zdlmOCRSDX7sw==
dependencies: dependencies:
ethereum-waffle "^3" ethereum-waffle "^3"
ethers "^5" ethers "^5"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment