@arbitrum/nitro-contracts 1.0.0-beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. package/.prettierrc +5 -0
  2. package/.solhint.json +18 -0
  3. package/deploy/BridgeStubCreator.js +10 -0
  4. package/deploy/HashProofHelper.js +13 -0
  5. package/deploy/InboxStubCreator.js +17 -0
  6. package/deploy/OneStepProofEntryCreator.js +19 -0
  7. package/deploy/OneStepProver0Creator.js +14 -0
  8. package/deploy/OneStepProverHostIoCreator.js +14 -0
  9. package/deploy/OneStepProverMathCreator.js +14 -0
  10. package/deploy/OneStepProverMemoryCreator.js +14 -0
  11. package/deploy/SequencerInboxStubCreator.js +13 -0
  12. package/deploy/ValueArrayTesterCreator.js +13 -0
  13. package/hardhat.config.ts +47 -0
  14. package/hardhat.prod-config.js +18 -0
  15. package/package.json +49 -0
  16. package/scripts/build.bash +5 -0
  17. package/src/bridge/Bridge.sol +168 -0
  18. package/src/bridge/IBridge.sol +68 -0
  19. package/src/bridge/IInbox.sol +80 -0
  20. package/src/bridge/IMessageProvider.sol +11 -0
  21. package/src/bridge/IOutbox.sol +52 -0
  22. package/src/bridge/ISequencerInbox.sol +85 -0
  23. package/src/bridge/Inbox.sol +414 -0
  24. package/src/bridge/Messages.sol +38 -0
  25. package/src/bridge/Outbox.sol +188 -0
  26. package/src/bridge/SequencerInbox.sol +274 -0
  27. package/src/challenge/ChallengeLib.sol +135 -0
  28. package/src/challenge/ChallengeManager.sol +367 -0
  29. package/src/challenge/IChallengeManager.sol +75 -0
  30. package/src/challenge/IChallengeResultReceiver.sol +13 -0
  31. package/src/libraries/AddressAliasHelper.sol +29 -0
  32. package/src/libraries/AdminFallbackProxy.sol +153 -0
  33. package/src/libraries/ArbitrumProxy.sol +20 -0
  34. package/src/libraries/Constants.sol +10 -0
  35. package/src/libraries/CryptographyPrimitives.sol +323 -0
  36. package/src/libraries/DelegateCallAware.sol +44 -0
  37. package/src/libraries/Error.sol +38 -0
  38. package/src/libraries/IGasRefunder.sol +35 -0
  39. package/src/libraries/MerkleLib.sol +46 -0
  40. package/src/libraries/MessageTypes.sol +14 -0
  41. package/src/libraries/SecondaryLogicUUPSUpgradeable.sol +58 -0
  42. package/src/libraries/UUPSNotUpgradeable.sol +56 -0
  43. package/src/mocks/BridgeStub.sol +115 -0
  44. package/src/mocks/Counter.sol +13 -0
  45. package/src/mocks/ExecutionManager.sol +41 -0
  46. package/src/mocks/InboxStub.sol +131 -0
  47. package/src/mocks/MockResultReceiver.sol +59 -0
  48. package/src/mocks/SequencerInboxStub.sol +42 -0
  49. package/src/mocks/SimpleProxy.sol +19 -0
  50. package/src/node-interface/NodeInterface.sol +50 -0
  51. package/src/osp/HashProofHelper.sol +154 -0
  52. package/src/osp/IOneStepProofEntry.sol +20 -0
  53. package/src/osp/IOneStepProver.sol +27 -0
  54. package/src/osp/OneStepProofEntry.sol +129 -0
  55. package/src/osp/OneStepProver0.sol +566 -0
  56. package/src/osp/OneStepProverHostIo.sol +357 -0
  57. package/src/osp/OneStepProverMath.sol +514 -0
  58. package/src/osp/OneStepProverMemory.sol +313 -0
  59. package/src/precompiles/ArbAddressTable.sol +60 -0
  60. package/src/precompiles/ArbAggregator.sol +62 -0
  61. package/src/precompiles/ArbBLS.sol +53 -0
  62. package/src/precompiles/ArbDebug.sol +39 -0
  63. package/src/precompiles/ArbFunctionTable.sol +29 -0
  64. package/src/precompiles/ArbGasInfo.sol +121 -0
  65. package/src/precompiles/ArbInfo.sol +15 -0
  66. package/src/precompiles/ArbOwner.sol +65 -0
  67. package/src/precompiles/ArbOwnerPublic.sol +18 -0
  68. package/src/precompiles/ArbRetryableTx.sol +89 -0
  69. package/src/precompiles/ArbStatistics.sol +29 -0
  70. package/src/precompiles/ArbSys.sol +134 -0
  71. package/src/precompiles/ArbosActs.sol +41 -0
  72. package/src/precompiles/ArbosTest.sol +14 -0
  73. package/src/rollup/BridgeCreator.sol +120 -0
  74. package/src/rollup/IRollupCore.sol +152 -0
  75. package/src/rollup/IRollupLogic.sol +183 -0
  76. package/src/rollup/Node.sol +99 -0
  77. package/src/rollup/RollupAdminLogic.sol +322 -0
  78. package/src/rollup/RollupCore.sol +627 -0
  79. package/src/rollup/RollupCreator.sol +133 -0
  80. package/src/rollup/RollupEventBridge.sol +46 -0
  81. package/src/rollup/RollupLib.sol +135 -0
  82. package/src/rollup/RollupUserLogic.sol +712 -0
  83. package/src/rollup/ValidatorUtils.sol +243 -0
  84. package/src/rollup/ValidatorWallet.sol +76 -0
  85. package/src/rollup/ValidatorWalletCreator.sol +43 -0
  86. package/src/state/Deserialize.sol +321 -0
  87. package/src/state/GlobalState.sol +44 -0
  88. package/src/state/Instructions.sol +159 -0
  89. package/src/state/Machine.sol +65 -0
  90. package/src/state/MerkleProof.sol +99 -0
  91. package/src/state/Module.sol +33 -0
  92. package/src/state/ModuleMemory.sol +42 -0
  93. package/src/state/PcArray.sol +45 -0
  94. package/src/state/PcStack.sol +32 -0
  95. package/src/state/StackFrame.sol +63 -0
  96. package/src/state/Value.sol +65 -0
  97. package/src/state/ValueArray.sol +47 -0
  98. package/src/state/ValueStack.sol +39 -0
  99. package/src/test-helpers/CryptographyPrimitivesTester.sol +27 -0
  100. package/src/test-helpers/MessageTester.sol +34 -0
  101. package/src/test-helpers/ValueArrayTester.sol +34 -0
  102. package/test/contract/arbRollup.spec.ts +869 -0
  103. package/test/contract/common/challengeLib.ts +43 -0
  104. package/test/contract/common/globalStateLib.ts +17 -0
  105. package/test/contract/common/rolluplib.ts +259 -0
  106. package/test/contract/cryptographyPrimitives.spec.ts +82 -0
  107. package/test/contract/sequencerInboxForceInclude.spec.ts +516 -0
  108. package/test/contract/utils.ts +40 -0
  109. package/test/prover/hash-proofs.ts +75 -0
  110. package/test/prover/one-step-proof.ts +93 -0
  111. package/test/prover/proofs/.gitkeep +0 -0
  112. package/test/prover/value-arrays.ts +11 -0
  113. package/tsconfig.json +13 -0
@@ -0,0 +1,93 @@
1
+ import { ethers, run, getNamedAccounts } from "hardhat"
2
+ import fs from "fs";
3
+ import assert from "assert";
4
+ import readline from 'readline';
5
+
6
+ const PARALLEL = 128;
7
+
8
+ async function sendTestMessages() {
9
+ const { deployer } = await getNamedAccounts();
10
+ const inbox = await ethers.getContract("InboxStub", deployer);
11
+ const seqInbox = await ethers.getContract("SequencerInboxStub", deployer);
12
+ const msgRoot = "../arbitrator/prover/test-cases/rust/data/";
13
+ const gasOpts = { gasLimit: ethers.utils.hexlify(250000), gasPrice: ethers.utils.parseUnits('5', "gwei") };
14
+ for (let msgNum = 0; msgNum < 2; msgNum++) {
15
+ const path = msgRoot + "msg" + String(msgNum) + ".bin";
16
+ const buf = fs.readFileSync(path);
17
+ await inbox.sendL2MessageFromOrigin(buf, gasOpts);
18
+ await seqInbox.addSequencerL2BatchFromOrigin(msgNum, buf, 0, ethers.constants.AddressZero, gasOpts);
19
+ }
20
+ }
21
+
22
+ describe("OneStepProof", function () {
23
+ const root = "./test/prover/proofs/";
24
+ const dir = fs.readdirSync(root);
25
+
26
+ before(async function () {
27
+ await run("deploy", { "tags": "OneStepProofEntry" });
28
+ await run("deploy", { "tags": "SequencerInboxStub" });
29
+ await run("deploy", { "tags": "InboxStub" });
30
+ await sendTestMessages();
31
+ })
32
+
33
+ it("should deploy test harness", function() {})
34
+
35
+ for (let file of dir) {
36
+ if (!file.endsWith(".json")) continue;
37
+ it("Should pass " + file + " proofs", async function () {
38
+ let path = root + file;
39
+ let proofs = JSON.parse(fs.readFileSync(path).toString('utf8'));
40
+ const osp = await ethers.getContract("OneStepProofEntry");
41
+ const seqInbox = await ethers.getContract("SequencerInboxStub");
42
+ const bridge = await ethers.getContract("BridgeStub");
43
+
44
+ const promises = [];
45
+ const isdone = [];
46
+ for (let i = 0; i < proofs.length; i++) {
47
+ process.stdout.write("\rTesting " + file + " proof " + i + "/" + proofs.length + " ");
48
+ const proof = proofs[i];
49
+ isdone.push(false);
50
+ const inboxLimit = 1000000;
51
+ const promise = osp.proveOneStep([inboxLimit, seqInbox.address, bridge.address], i, [...Buffer.from(proof.before, "hex")], [...Buffer.from(proof.proof, "hex")])
52
+ .catch((err: any) => {
53
+ console.error("Error executing proof " + i);
54
+ throw err;
55
+ })
56
+ .then((after: any) => assert.equal(after, "0x" + proof.after, "After state doesn't match after proof " + i))
57
+ .finally((_: any) => {isdone[i] = true});
58
+ if (promises.length < PARALLEL) {
59
+ promises.push(promise);
60
+ } else {
61
+ const finished: any = await Promise.race(promises.map((p, k) => p.then((_: any) => k)));
62
+ promises[finished] = promise;
63
+ }
64
+ }
65
+
66
+ let stillWaiting = []
67
+ do {
68
+ const finished: any = await Promise.race(promises.map((p, k) => p.then((_: any) => k)));
69
+ if (finished == promises.length - 1) {
70
+ promises.pop()
71
+ } else {
72
+ promises[finished] = promises.pop()
73
+ }
74
+ stillWaiting = [];
75
+ for (let i = 0; i < isdone.length; i++) {
76
+ if (!isdone[i]) {
77
+ stillWaiting.push(i)
78
+ }
79
+ }
80
+ readline.clearLine(process.stdout, 0);
81
+ process.stdout.write("\rTesting " + file + " Waiting for: " + String(stillWaiting.length) + "/" + String(isdone.length));
82
+ if (stillWaiting.length < 10) {
83
+ process.stdout.write(": ")
84
+ for (let i = 0; i < stillWaiting.length; i++) {
85
+ process.stdout.write(String(stillWaiting[i]) + ",");
86
+ }
87
+ }
88
+ } while (stillWaiting.length > 0);
89
+ await Promise.all(promises);
90
+ process.stdout.write("\r");
91
+ });
92
+ }
93
+ });
File without changes
@@ -0,0 +1,11 @@
1
+ import { ethers, run } from "hardhat";
2
+
3
+ describe("ValueArray", function () {
4
+ it("Should pass ValueArrayTester", async function () {
5
+ await run("deploy", { tags: "ValueArrayTester" });
6
+
7
+ const valueArrayTester = await ethers.getContract("ValueArrayTester");
8
+
9
+ await valueArrayTester.test();
10
+ });
11
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2018",
4
+ "module": "commonjs",
5
+ "strict": true,
6
+ "esModuleInterop": true,
7
+ "outDir": "dist",
8
+ "resolveJsonModule": true,
9
+ "allowJs": true
10
+ },
11
+ "include": ["./scripts", "./test", "./typechain-types"],
12
+ "files": ["./hardhat.config.ts"]
13
+ }