-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEVMUtilsIC.test.mo
68 lines (65 loc) · 9.25 KB
/
EVMUtilsIC.test.mo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// ref: https://github.com/icopen/evm_utils_ic/blob/32b08e5a5ce5cb09b94b4600110ad6b1165fd9a5/__tests__/tree.mjs
import Debug "mo:base/Debug";
import M "mo:matchers/Matchers";
import { run; suite; testLazy } "mo:matchers/Suite";
import T "mo:matchers/Testable";
import Value "mo:merkle-patricia-trie/Value";
import Converter "../src/Converter";
import Verifier "../src/Verifier";
import { input1_account; input1_receipt; input1_storage; input1_tx } "TestData";
import { encodeRLPHex } "TestUtils";
let proof = {
jsonrpc = "2.0";
result = {
address = "cca577ee56d30a444c73f8fc8d5ce34ed1c7da8b";
accountProof = [
"f90211a00dd762bf36a15c237b9c0fe5943b83a62cec73c9ee1f22f7dc0c4b1a349cd82ba0709ed2c0bdf63a76a9260ad59de8a886a331aead9f4ab3f09fb735b6fb6303cfa060d62a951c7ddb90ce2ec7be3abca401c455ee0efc10a9c250cbf022e9bf6f94a011bd451b5ed730318573231431a68e4e50977b52a0ff8ac206a8f6848ec2d072a0bb28f119d3b0c75a64cad6310bfda39c7db06807c803b471f5cf6b74a11a2beba017818af848bceb2d3541c424659fded5dd87d81123d47f43a38fb59a5c829dffa0aafc524103348d389d9408ba488e1a08d7a12644261d7228062517a25ff8c7f5a0a236cfe006437a61fc44b3ba4c0fc040d8c0714c346b06e38614e463b63cabb7a037a7afa33133820091d88a6f66ad76158b6d4895fa907b36e0adb676b1d99bb7a05d16ad5425b869f2b6765d5447890cd490b181c3d216d0bc3606b9a52eaa6e04a00cbba5516a1341967d40780b6847c6c783861659c3f54c3bad2945dc6009706ba0b47282adf50fe9a0cad9b2e203f8ea8cc8fb88e877fa40c226f007107ac868aea0ff1fa9c959359ad2e209ff0d870c000aecee281b9bdd975b64a094c77885361da0e3fd47d85d0a85870f95eb281ac085236534a814b09f6fbb317a87a63ead7caaa02dcb46674b4c02427539c4d559251993dc8d00c25d4d0ba18b66ee246afa39ffa04a053fe407f9c77e9da7bde422cfa64e87806e5fe252e8826535f47aecd14aad80",
"f90211a0564c5a64c0f0872ce5d72c48465a5a541f0c9d6e6c372479d217be06b576f60ea040bf1000da0d6f81b50b6a50d56fa2489ceeedabe4c5cd9879a3923e84db2043a0df15ad479e74dcd8bf5d024ade0a412c9f8a36c5eadbd4ebc94dfdefabb89b09a0e14109764c91d2b49bf4f8e87fb53dacfa727204bc64c988e89131da7f2c2049a0983348c4c02559265c6a88e16c225f97f0af029253c7c57373d91f4f65bfe4b4a0b900c6c38d4f10fa5d312102fe206022aef860370818f843dbecec19a78178f2a0c36c545f6f3f5f59a4806fe2d2d287112ea4a7ed9ae9afd29e4b73eb5b0621cba02f58a3dea2cd2a49f30d1da9cda4910fbade64ec421c64ea0603817e38edc449a08aa1f1f1b40785a5057a665b4270faed8c81355832daa77f161d13d8f6d202d9a0b6615716b8a5e65ba772df1695524d1b027caeaf58c0f3f36134bec8bf364640a0dabdfc6a5def49149c5f5795f42b1906363ee5253c637efa164ffe7bae0a0b22a0d738ec4722774314014c0b7265684027fafdee4476bc9510676904669aeb4d93a02fc5317ae5506ecf490940fa55517dbf4454d9d9c97d8834052041f3af50cd09a0a58598743b5eb6ebbfebc10dc4263a8312d821c1f2374621de4d7721ac2e89cea03d6f76a0f80e165f4e75fc1bcfba614bb0fab5e66354a89b39f0cd99e3ecd5a5a0d32f0ab8963a9e042a2d8fea286feb7d6ed8afab704d802a98d8b0d3b9e79f2980",
"f90211a0aff572e77737abd04ae87b1259d26b8a319f8e0eb9ce9dcc46451cb01b3b3350a0572913c1d0e0e8d0b798908e358cbcc8814bdb76ccbc46273e10cca576c58052a0b1992a096ba36723d54e03c58f427054650f554b34aceeb5da556f659a73f1cca07f34c5d5a9ab6223429dc6f1baf28686d02e7d4f15baeb01de70fa35e404936ca02600fc07b02e17f358115a559b14eae0b2b3ff04a6c1ea3d4be312260bc131daa079bef767a6f14428d385b3ea30d42d68d6efc1fcd6fcd684a1d933c76d9f32fca076acf329236d48dbf8606256d86b08e967cc406db6bc30ee03ceecebe6a1381da0f39488a90099c16206b87f77234673cfe1c55338e859998a8801df036728d1bba0f6cfa50dc062af5453918002355ff2fb244561511fdb70f0a15819670b0749dca062f0220be7d33c69b229b4af5b5f5dafa7d6c68611205ad7544306b50db9868fa08cfa39e62a3781465411ade68cb9ae705e06b28fa3ea2e7d08ca8f63b4d38194a05ae3f595ed49c44d4f2701e0a0c9239a83d081fda4c10e426cb1f024c457553aa01c95e232beba4545d225eecd482d1b06d73b3589de37fa6bb74bc191c9283118a026a7f6445cc4929371c08826f930abe8dbdb7a58c24b6cfe205f5a4c4aed39b5a0fcc15967dcb24ab54e79905fdb6bfd33a3c1dc56e389a7c91c57074216c30e63a006da2488e98d0ed056ca9f546150574078dc962860fcb613364e4fd50289d59c80",
"f90211a048772ce5886144f79e98ab0a2c9a0812447ca50b90108b8b89aef870be9c2d2ca0ad8ec52121dc71272d85e0cfb0cb2ef60c661daf052b325d5582680171ecadf9a050ffe79b7d56df10248e110c17a25578e99c17410935faffa0d89a22283e4e6da0582566fc761f38708c3ccd7aabb600a4478a6d93fd2656be1d947ad47002d6fea086bc7d35b4837393f975325e6adda16af17f81bf480bfff989592a4db85f9275a0721cf2ea42d441b3dfe2217bec592d9a01b1aea652be5f2c7c4c3889589ec5f0a0d4a9af2bbb3e6daa1860deac8d07562cfff350400555bcb49323eac89409b64da063faf3c7091b72cf4e6cf40673475c775644feb11ef765df2f57790b135e8c66a0b6ec5e3960f3baec5f522bc8733faf222cc5e5427f26e2cbc098620a8d31f1b2a071e7a173399fbceb1021813c4c89a8337ba49448d96cf9d0607b4b2d8b7cd12ea0819718965a20770ec11dbce1569c93e88dfaab4fd8179cc67eb0bec3681bf0baa0e7d256f382961a9dcb1e27dec656305af00dc7cfddb390fc7d3b91835f58a70da0d52a32be23c4457ffc6b42b5aec154de88bb96dd2273f52487ab8588c7b4e29da0118818e161e768c20846ff38650436a566b349b8b5460a30bd5a6df1d0db041da0576ba13c45de038fd2f0b9a03219f8c003479e577bae940c4e871ad766460afca0cc71ff5ead49c816cd1419e72b2608a97968b14acfdefe81cf403f6a81afe3e580",
"f90211a028ac28dfef9ee2157d60bc7d1116fcf6f7a2b3817ae64ccdac85a3492bff6d85a04a51eb58047d0711b6ac374c97d3ac30279e297c27183ce4e63c2c35f44bb1f8a0964daacb8a177d46b21c21636cc4d4165c4459d3377f3928a72e7c611db4e7aea00c7fde9c30c8864bef29086e0d21b128a0cd79d9280a721863a5c0c2949163d9a0f41ae9855a2bad346dbc4b9db351e41b9635d9aa766d897bc0763a6b9fdfd52ba05857b3ca3e9069256dd6f87a5e09bab60697c30a50732a087bd2c1349f4cd0cba080d113ce969e09788b59eb6bccdd1b1708236e0e3a1149d4607bb0b2d279cb40a07b29e9ae0da45345b78f1d77deafa46418ba7eff6352c2c461dba88a7f1ba647a057fbd0ae2e5cc0b81fe155c863f7f77a0ded68c07f8655ddb5a4eaf7b3cc2afea0de4db535b85fc2983287ecfd313638bad8fedbd6905013c9918a4393485cc397a0bd351c1ffba42a12b48025dc7e209c04e1f9602d5172bdb5f95d71acb2481368a095236c614aa6fd6a7e6bf78761cb707d2bb731e82e9487217bfaa84eabd1cc6ba0238806868b99970961f672e2bcfb5eca053e0bb9200142f35aca94dd77f7253aa03d81a820ef3c18b6d29999fa79db804fa36947175525a53d91101fb865adfdfba05fb199fdeea50f748ec7ccd8425f23dab3d76f2422e8bebc06c135761df66d1da0893c19ebbf7dcb8a40e51763915854afe92b1226cbfcaea8c3156d28993ae3b680",
"f90211a048a6917aa05d311cb271ff0cdb5708f6ca4f11c2abfeb8651fbe8f7144df6afba00ff5b1376f1bd4bf9ad9fc158573f3aa1f54cb94b843d20487ad538369b5f62da05fe8c362133cf0e1e034878e32f42764cbab041c42556a856bbc3700fc0d9ee4a03bdc76159e826d28a073b46cd4d8a33879d12da96ac4d727ca4a3bc0112ff75aa0ac597e57f0451b83a961dcafa6e4933315ad5939994f2a38c85741e416909b05a08070f31576be3fa0dab1491b35b042c9a49c79a2f32988ad33e2bcfe05c4cba8a062bcdf215bf3f082365908edbbaaf3ec4ad9cd30988bb7337aa145f90202605ca0aac2b6547f129955882acd9fb18239c7f92d543bd4fac87ebc127b1b580d4efaa06c5b3eecc80ff7eedcd72e1d7f831b229f4ea1ad9d145f4fb570180cd335fb95a0f1cd7e6302bf0dd20f0d13fd31b5c61cac5151fc5dedfc365d5f0220df5c96bca055c0a593a171ea447808ad252bf94907b16f7a456f4bac650ccc16cf92d98da2a0bfc16a97e0f77361437806ed7a2f9c5932a16c5f4f9b2a79591892a20b857abea0b562979690248b5f855aeb468930351a197165f64d10f2e98081514661847b6aa035b07e16e08a410f1064e0fb80fdf85e9885ceb9cf1ee678caaceebe458b1a03a0aec5d68abdff1143ea2435c0c8dd9a4ff551b5e6cc0ec512e9c59b59b9b017e0a0494e7e9695268ef122ed5bca4e18190f02adce70952b1bd4b0ab2e34f0f2a4cf80",
"f90131a0ca660fe0511f3ffb9394bfae88d8381aab9ca4a3322b9b8d16c393dc88e61e6f80a047f02c461780201135898bc49a7225aa7a7c859d9bdfe28971a3f623b7500e1d808080a032223b190fb5091b7ceab5434b3baf7d45fd8802bb670a7630843fe2a6e932f780a0a01ec92dc038dd0ebd4f526e1180b9422e3a089283b94b03312a73575b71486280a0c2f294c89036c7958e643905a0a72cf72cf258b6db8260fc20d9775b73e2814fa0aa389e1f42c125603de2a1736e6ccb73f17707fb26f3f52aaef37438d5e1fee1a0c0d9ec2fed8f23bc30fa7ba454a57c5c6ecd71d9ffc10a11a4a89fd167eb2d5ea0d1ead5297994fefae95d2f51788fef9789c7b455a0a32f265641a1a83d8e23e2a0e28b21a22e6ec029761a9f74461d01334d31c9ca7e8f63fb59c190a9d530e62d8080",
"e583009b0aa0f75c51e5fca85fd1d9a8aafab366d0b94de28ae6765785cf0733903a23e42ba7",
"f851808080808080a05be5cea9db1f66179cb1ceab79e160c2342f03389e54a31a09f6d321742a083580808080a05d4aedb3cf18418d18eb54e998bcc37f77b353321cd33e69eaf931e17e1490aa8080808080",
"f8649b209636eb04ea89f1fb5c295e61755c4ab1eb04df1bd5e963107aaab846f8448080a07317ebbe7d6c43dd6944ed0e2c5f79762113cb75fa0bed7124377c0814737fb4a06c7686cf8f47f081f63d3f53a87c3c2ca0de63eb057e795f5c0414c6f861f9e3",
];
balance = "0";
codeHash = "6c7686cf8f47f081f63d3f53a87c3c2ca0de63eb057e795f5c0414c6f861f9e3";
nonce = "0";
storageHash = "7317ebbe7d6c43dd6944ed0e2c5f79762113cb75fa0bed7124377c0814737fb4";
storageProof = [
{
key = "0";
value = "de74da73d5102a796559933296c73e7d1c6f37fb";
proof = [
"f8518080a0cd2a98a2ebb71b70e1109bf206dbc96dc73c76569b42df09ff269ecdcd31b1398080808080808080a0236e8f61ecde6abfebc6c529441f782f62469d8a2cc47b7aace2c136bd3b1ff08080808080",
"f7a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639594de74da73d5102a796559933296c73e7d1c6f37fb",
];
},
];
};
id = 1;
};
run(
suite(
"tree",
[
testLazy(
"verify_proof",
func() : Text {
let storageProof = switch (Converter.toStorageProof(proof.result, 0)) {
case (#err(error)) return error;
case (#ok(storageProof)) storageProof;
};
let value = switch (Verifier.extractValue(storageProof)) {
case (#err(error)) return error;
case (#ok(value)) value;
};
Value.toHex(value);
},
M.equals(T.text(encodeRLPHex(#string("0x" # proof.result.storageProof[0].value)))),
),
],
)
);