@proto-kit/protocol 0.1.1-develop.651 → 0.1.1-develop.833

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/LICENSE.md +201 -201
  2. package/dist/blockmodules/AccountStateModule.d.ts +37 -37
  3. package/dist/blockmodules/AccountStateModule.js +43 -43
  4. package/dist/blockmodules/BlockHeightHook.d.ts +6 -6
  5. package/dist/blockmodules/BlockHeightHook.js +15 -15
  6. package/dist/blockmodules/LastStateRootBlockHook.d.ts +7 -7
  7. package/dist/blockmodules/LastStateRootBlockHook.js +15 -15
  8. package/dist/blockmodules/NoopBlockHook.d.ts +8 -8
  9. package/dist/blockmodules/NoopBlockHook.js +9 -9
  10. package/dist/blockmodules/NoopSettlementHook.d.ts +5 -5
  11. package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
  12. package/dist/blockmodules/NoopSettlementHook.js +18 -18
  13. package/dist/blockmodules/NoopTransactionHook.d.ts +5 -5
  14. package/dist/blockmodules/NoopTransactionHook.js +4 -4
  15. package/dist/hooks/AccountStateHook.d.ts +19 -5
  16. package/dist/hooks/AccountStateHook.d.ts.map +1 -1
  17. package/dist/hooks/AccountStateHook.js +9 -10
  18. package/dist/hooks/BlockHeightHook.d.ts +2 -2
  19. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  20. package/dist/hooks/BlockHeightHook.js +3 -3
  21. package/dist/hooks/LastStateRootBlockHook.d.ts +2 -2
  22. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -1
  23. package/dist/hooks/LastStateRootBlockHook.js +2 -2
  24. package/dist/hooks/NoopBlockHook.d.ts +3 -3
  25. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  26. package/dist/hooks/NoopBlockHook.js +2 -2
  27. package/dist/hooks/NoopSettlementHook.d.ts +1 -1
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
  29. package/dist/hooks/NoopSettlementHook.js +2 -3
  30. package/dist/hooks/NoopTransactionHook.d.ts +1 -1
  31. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -1
  32. package/dist/hooks/NoopTransactionHook.js +4 -1
  33. package/dist/index.d.ts +0 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +0 -2
  36. package/dist/model/MethodPublicOutput.d.ts +68 -34
  37. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  38. package/dist/model/Option.d.ts +39 -20
  39. package/dist/model/Option.d.ts.map +1 -1
  40. package/dist/model/Option.js +1 -0
  41. package/dist/model/Path.d.ts +1 -1
  42. package/dist/model/Path.d.ts.map +1 -1
  43. package/dist/model/Path.js +0 -2
  44. package/dist/model/StateTransition.d.ts +48 -12
  45. package/dist/model/StateTransition.d.ts.map +1 -1
  46. package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
  47. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  48. package/dist/model/StateTransitionReduction.d.ts +2 -2
  49. package/dist/model/StateTransitionReduction.js +26 -26
  50. package/dist/model/network/NetworkState.d.ts +73 -18
  51. package/dist/model/network/NetworkState.d.ts.map +1 -1
  52. package/dist/model/network/NetworkState.js +2 -2
  53. package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
  54. package/dist/model/transaction/ProtocolTransaction.js +18 -18
  55. package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
  56. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  57. package/dist/model/transaction/RuntimeTransaction.js +4 -4
  58. package/dist/model/transaction/SignedTransaction.d.ts +39 -3
  59. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
  60. package/dist/model/transaction/SignedTransaction.js +1 -1
  61. package/dist/model/transaction/ValueOption.d.ts +86 -32
  62. package/dist/model/transaction/ValueOption.d.ts.map +1 -1
  63. package/dist/model/transaction/ValueOption.js +1 -1
  64. package/dist/protocol/Protocol.d.ts +6 -5
  65. package/dist/protocol/Protocol.d.ts.map +1 -1
  66. package/dist/protocol/Protocol.js +12 -3
  67. package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
  68. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
  69. package/dist/protocol/ProtocolModule.d.ts +1 -0
  70. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  71. package/dist/protocol/ProtocolModule.js +3 -1
  72. package/dist/protocol/ProvableBlockHook.d.ts +2 -2
  73. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  74. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  75. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  76. package/dist/prover/block/BlockProvable.d.ts +240 -98
  77. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  78. package/dist/prover/block/BlockProver.d.ts +8 -8
  79. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  80. package/dist/prover/block/BlockProver.js +48 -40
  81. package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
  82. package/dist/prover/block/BlockTransactionPosition.js +25 -25
  83. package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
  84. package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
  85. package/dist/prover/block/BundleTransactionPosition.js +25 -0
  86. package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
  87. package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
  88. package/dist/prover/block/SplitPrefilledStateService.js +1 -0
  89. package/dist/prover/block/SplitStateService.d.ts +11 -0
  90. package/dist/prover/block/SplitStateService.d.ts.map +1 -0
  91. package/dist/prover/block/SplitStateService.js +1 -0
  92. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
  93. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
  94. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
  95. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
  96. package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
  97. package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
  98. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  99. package/dist/prover/statetransition/StateTransitionProver.d.ts +8 -8
  100. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  101. package/dist/prover/statetransition/StateTransitionProver.js +17 -22
  102. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
  103. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
  104. package/dist/settlement/DispatchContract.d.ts +20 -0
  105. package/dist/settlement/DispatchContract.d.ts.map +1 -0
  106. package/dist/settlement/DispatchContract.js +112 -0
  107. package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
  108. package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
  109. package/dist/settlement/OutgoingMessageArgument.js +32 -0
  110. package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
  111. package/dist/settlement/ProvableSettlementHook.js +3 -3
  112. package/dist/settlement/SettlementContract.d.ts +229 -229
  113. package/dist/settlement/SettlementContract.js +346 -346
  114. package/dist/settlement/SettlementContractModule.d.ts +1 -0
  115. package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
  116. package/dist/settlement/SettlementContractModule.js +7 -4
  117. package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
  118. package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
  119. package/dist/settlement/contracts/DispatchContract.js +111 -0
  120. package/dist/settlement/contracts/DispatchContractProtocolModule.js +1 -2
  121. package/dist/settlement/contracts/DispatchSmartContract.d.ts +8 -8
  122. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
  123. package/dist/settlement/contracts/DispatchSmartContract.js +14 -14
  124. package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
  125. package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
  126. package/dist/settlement/contracts/SettlementContract.js +43 -0
  127. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -1
  128. package/dist/settlement/contracts/SettlementContractProtocolModule.js +4 -4
  129. package/dist/settlement/contracts/SettlementSmartContract.d.ts +18 -17
  130. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
  131. package/dist/settlement/contracts/SettlementSmartContract.js +46 -35
  132. package/dist/settlement/messages/Deposit.d.ts +29 -4
  133. package/dist/settlement/messages/Deposit.d.ts.map +1 -1
  134. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +94 -14
  135. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
  136. package/dist/settlement/messages/Withdrawal.d.ts +29 -4
  137. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
  138. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +2 -2
  139. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
  140. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +1 -1
  141. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
  142. package/dist/settlement/modules/NetworkStateSettlementModule.js +3 -1
  143. package/dist/state/State.d.ts +4 -3
  144. package/dist/state/State.d.ts.map +1 -1
  145. package/dist/state/State.js +16 -11
  146. package/dist/state/StateMap.d.ts +3 -3
  147. package/dist/state/StateMap.d.ts.map +1 -1
  148. package/dist/state/StateMap.js +4 -5
  149. package/dist/state/StateService.d.ts +3 -3
  150. package/dist/state/StateService.d.ts.map +1 -1
  151. package/dist/state/StateServiceProvider.d.ts +3 -3
  152. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  153. package/dist/state/StateServiceProvider.js +1 -3
  154. package/dist/state/assert/assert.d.ts +1 -1
  155. package/dist/state/assert/assert.d.ts.map +1 -1
  156. package/dist/state/assert/assert.js +4 -1
  157. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
  158. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
  159. package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
  160. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +54 -3
  161. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  162. package/dist/state/context/RuntimeMethodExecutionContext.js +4 -5
  163. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  164. package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
  165. package/dist/state/context/contextExecution.d.ts +14 -0
  166. package/dist/state/context/contextExecution.d.ts.map +1 -0
  167. package/dist/state/context/contextExecution.js +30 -0
  168. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  169. package/dist/state/protocol/ProtocolState.js +0 -3
  170. package/dist/utils/AppliedBatchHashList.d.ts +17 -0
  171. package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
  172. package/dist/utils/AppliedBatchHashList.js +24 -0
  173. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
  174. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  175. package/dist/utils/ProvableHashList.d.ts +1 -1
  176. package/dist/utils/StateTransitionReductionList.d.ts +1 -1
  177. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -1
  178. package/dist/utils/StateTransitionReductionList.js +3 -3
  179. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
  180. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  181. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
  182. package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
  183. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
  184. package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
  185. package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
  186. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
  187. package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
  188. package/dist/utils/utils.d.ts +1 -1
  189. package/dist/utils/utils.d.ts.map +1 -1
  190. package/dist/utils/utils.js +5 -10
  191. package/package.json +5 -5
  192. package/src/hooks/AccountStateHook.ts +11 -9
  193. package/src/hooks/BlockHeightHook.ts +3 -4
  194. package/src/hooks/LastStateRootBlockHook.ts +4 -4
  195. package/src/hooks/NoopBlockHook.ts +6 -5
  196. package/src/hooks/NoopSettlementHook.ts +2 -2
  197. package/src/hooks/NoopTransactionHook.ts +5 -1
  198. package/src/index.ts +0 -2
  199. package/src/model/MethodPublicOutput.ts +2 -2
  200. package/src/model/Option.ts +5 -1
  201. package/src/model/Path.ts +1 -3
  202. package/src/model/StateTransition.ts +1 -1
  203. package/src/model/Transaction.ts +2 -0
  204. package/src/model/network/NetworkState.ts +2 -2
  205. package/src/model/transaction/RuntimeTransaction.ts +5 -12
  206. package/src/model/transaction/SignedTransaction.ts +1 -8
  207. package/src/model/transaction/ValueOption.ts +1 -1
  208. package/src/protocol/Protocol.ts +24 -13
  209. package/src/protocol/ProtocolEnvironment.ts +7 -6
  210. package/src/protocol/ProtocolModule.ts +5 -2
  211. package/src/protocol/ProvableBlockHook.ts +3 -3
  212. package/src/protocol/ProvableTransactionHook.ts +4 -2
  213. package/src/protocol/TransitioningProtocolModule.ts +1 -1
  214. package/src/prover/block/BlockProvable.ts +3 -3
  215. package/src/prover/block/BlockProver.ts +78 -55
  216. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +1 -1
  217. package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
  218. package/src/prover/statetransition/StateTransitionProver.ts +23 -27
  219. package/src/settlement/ContractModule.ts +1 -1
  220. package/src/settlement/SettlementContractModule.ts +14 -9
  221. package/src/settlement/contracts/DispatchSmartContract.ts +15 -14
  222. package/src/settlement/contracts/SettlementContractProtocolModule.ts +6 -4
  223. package/src/settlement/contracts/SettlementSmartContract.ts +55 -34
  224. package/src/settlement/messages/OutgoingMessageArgument.ts +1 -0
  225. package/src/settlement/modularity/ProvableSettlementHook.ts +3 -4
  226. package/src/settlement/modules/NetworkStateSettlementModule.ts +5 -2
  227. package/src/state/State.ts +19 -12
  228. package/src/state/StateMap.ts +4 -5
  229. package/src/state/StateService.ts +3 -3
  230. package/src/state/StateServiceProvider.ts +6 -7
  231. package/src/state/assert/assert.ts +6 -2
  232. package/src/state/context/RuntimeMethodExecutionContext.ts +5 -2
  233. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  234. package/src/state/protocol/ProtocolState.ts +1 -4
  235. package/src/utils/MinaPrefixedProvableHashList.ts +2 -1
  236. package/src/utils/ProvableHashList.ts +1 -1
  237. package/src/utils/StateTransitionReductionList.ts +4 -3
  238. package/src/utils/utils.ts +4 -9
  239. package/test/BlockProver.test.ts +110 -128
  240. package/test/Protocol.test.ts +8 -20
  241. package/test/State.test.ts +8 -8
  242. package/test/StateTransition.test.ts +56 -66
  243. package/test/TestingProtocol.ts +48 -0
  244. package/test/model/Option.test.ts +72 -0
  245. package/{src → test}/state/assert/assert.test.ts +4 -4
  246. package/test/tsconfig.json +7 -0
  247. package/test/utils/ProvableReductionHashList.test.ts +5 -2
  248. package/test/utils.test.ts +0 -3
  249. package/dist/hooks/TransactionFeeHook.d.ts +0 -16
  250. package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
  251. package/dist/hooks/TransactionFeeHook.js +0 -39
  252. package/src/hooks/SequenceStateTransactionModule.ts +0 -25
  253. package/src/model/Option.test.ts +0 -21
  254. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  255. package/test/Option.test.ts +0 -64
  256. package/test/settlement/SettlementContract.test.ts +0 -45
  257. package/tsconfig.test.json +0 -9
@@ -1,346 +1,346 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Reducer, Signature, SmartContract, State, state, Struct, TokenId, UInt32, UInt64, } from "o1js";
14
- import { EMPTY_PUBLICKEY, prefixToField, RollupMerkleTree, RollupMerkleTreeWitness, } from "@proto-kit/common";
15
- import { inject, injectable, injectAll } from "tsyringe";
16
- import { ProtocolModule } from "../protocol/ProtocolModule";
17
- import { BlockProverPublicInput, BlockProverPublicOutput, } from "../prover/block/BlockProvable";
18
- import { NetworkState } from "../model/network/NetworkState";
19
- import { BlockHashMerkleTree } from "../prover/block/accummulators/BlockHashMerkleTree";
20
- import { RuntimeTransaction } from "../model/transaction/RuntimeTransaction";
21
- import { Path } from "../model/Path";
22
- import { MinaActions, MinaEvents } from "../utils/MinaPrefixedProvableHashList";
23
- class LazyBlockProof extends Proof {
24
- }
25
- LazyBlockProof.publicInputType = BlockProverPublicInput;
26
- LazyBlockProof.publicOutputType = BlockProverPublicOutput;
27
- LazyBlockProof.tag = () => {
28
- throw new Error("Tag not initialized yet");
29
- };
30
- export class Deposit extends Struct({
31
- address: PublicKey,
32
- amount: UInt64,
33
- }) {
34
- }
35
- export class Withdrawal extends Struct({
36
- address: PublicKey,
37
- amount: UInt64,
38
- }) {
39
- static dummy() {
40
- return new Withdrawal({
41
- address: EMPTY_PUBLICKEY,
42
- amount: UInt64.from(0),
43
- });
44
- }
45
- }
46
- export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
47
- export class OutgoingMessageArgument extends Struct({
48
- witness: RollupMerkleTreeWitness,
49
- value: Withdrawal,
50
- }) {
51
- static dummy() {
52
- return new OutgoingMessageArgument({
53
- witness: RollupMerkleTreeWitness.dummy(),
54
- value: Withdrawal.dummy(),
55
- });
56
- }
57
- }
58
- export class OutgoingMessageArgumentBatch extends Struct({
59
- arguments: Provable.Array(OutgoingMessageArgument, OUTGOING_MESSAGE_BATCH_SIZE),
60
- isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
61
- }) {
62
- static fromMessages(providedArguments) {
63
- const batch = providedArguments.slice();
64
- const isDummys = batch.map(() => Bool(false));
65
- while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
66
- batch.push(OutgoingMessageArgument.dummy());
67
- isDummys.push(Bool(true));
68
- }
69
- return new OutgoingMessageArgumentBatch({
70
- arguments: batch,
71
- isDummys,
72
- });
73
- }
74
- }
75
- // Some random prefix for the sequencer signature
76
- export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
77
- export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
78
- export class SettlementContract extends SmartContract {
79
- constructor(address, methodIdMappings, hooks, withdrawalStatePath, incomingMessagesPaths,
80
- // 24 hours
81
- escapeHatchSlotsInterval = (60 / 3) * 24) {
82
- super(address);
83
- this.methodIdMappings = methodIdMappings;
84
- this.hooks = hooks;
85
- this.withdrawalStatePath = withdrawalStatePath;
86
- this.incomingMessagesPaths = incomingMessagesPaths;
87
- this.escapeHatchSlotsInterval = escapeHatchSlotsInterval;
88
- this.sequencerKey = State();
89
- this.lastSettlementL1Block = State();
90
- this.stateRoot = State();
91
- this.networkStateHash = State();
92
- this.blockHashRoot = State();
93
- this.promisedMessagesHash = State();
94
- this.honoredMessagesHash = State();
95
- this.outgoingMessageCursor = State();
96
- }
97
- initialize(sequencer) {
98
- this.sequencerKey.getAndAssertEquals().assertEquals(Field(0));
99
- this.stateRoot.getAndAssertEquals().assertEquals(Field(0));
100
- this.blockHashRoot.getAndAssertEquals().assertEquals(Field(0));
101
- this.networkStateHash.getAndAssertEquals().assertEquals(Field(0));
102
- this.promisedMessagesHash.getAndAssertEquals().assertEquals(Field(0));
103
- this.honoredMessagesHash.getAndAssertEquals().assertEquals(Field(0));
104
- this.sequencerKey.set(sequencer.x);
105
- this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
106
- this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
107
- this.networkStateHash.set(NetworkState.empty().hash());
108
- this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
109
- this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
110
- }
111
- settle(blockProof, signature, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
112
- // Verify the blockproof
113
- blockProof.verify();
114
- // Get and assert on-chain values
115
- const stateRoot = this.stateRoot.getAndAssertEquals();
116
- const networkStateHash = this.networkStateHash.getAndAssertEquals();
117
- const blockHashRoot = this.blockHashRoot.getAndAssertEquals();
118
- const sequencerKey = this.sequencerKey.getAndAssertEquals();
119
- const promisedMessagesHash = this.promisedMessagesHash.getAndAssertEquals();
120
- const honoredMessagesHash = this.honoredMessagesHash.getAndAssertEquals();
121
- const lastSettlementL1Block = this.lastSettlementL1Block.getAndAssertEquals();
122
- // Get block height and use the lower bound for all ops
123
- const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
124
- this.network.globalSlotSinceGenesis.assertBetween(minBlockIncluded, minBlockIncluded.add(20));
125
- // Check signature/escape catch
126
- publicKey.x.assertEquals(sequencerKey, "Sequencer public key witness not matching");
127
- const signatureValid = signature.verify(publicKey, [
128
- BATCH_SIGNATURE_PREFIX,
129
- lastSettlementL1Block.value,
130
- ]);
131
- const escapeHatchActivated = lastSettlementL1Block
132
- .add(UInt32.from(this.escapeHatchSlotsInterval))
133
- .lessThan(minBlockIncluded);
134
- signatureValid
135
- .or(escapeHatchActivated)
136
- .assertTrue("Sequencer signature not valid and escape hatch not activated");
137
- // Assert correctness of networkState witness
138
- inputNetworkState
139
- .hash()
140
- .assertEquals(networkStateHash, "InputNetworkState witness not valid");
141
- outputNetworkState
142
- .hash()
143
- .assertEquals(blockProof.publicOutput.networkStateHash, "OutputNetworkState witness not valid");
144
- blockProof.publicOutput.closed.assertEquals(Bool(true), "Supplied proof is not a closed BlockProof");
145
- // Execute onSettlementHooks for additional checks
146
- const stateRecord = {
147
- blockHashRoot,
148
- stateRoot,
149
- networkStateHash,
150
- honoredMessagesHash,
151
- lastSettlementL1Block,
152
- promisedMessagesHash,
153
- sequencerKey,
154
- };
155
- const inputs = {
156
- blockProof,
157
- contractState: stateRecord,
158
- newPromisedMessagesHash,
159
- fromNetworkState: inputNetworkState,
160
- toNetworkState: outputNetworkState,
161
- currentL1Block: minBlockIncluded,
162
- };
163
- this.hooks.forEach((hook) => {
164
- hook.beforeSettlement(this, inputs);
165
- });
166
- // Apply blockProof
167
- stateRoot.assertEquals(blockProof.publicInput.stateRoot, "Input state root not matching");
168
- networkStateHash.assertEquals(blockProof.publicInput.networkStateHash, "Input networkStateHash not matching");
169
- blockHashRoot.assertEquals(blockProof.publicInput.blockHashRoot, "Input blockHashRoot not matching");
170
- this.stateRoot.set(blockProof.publicOutput.stateRoot);
171
- this.networkStateHash.set(blockProof.publicOutput.networkStateHash);
172
- this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
173
- // Assert and apply deposit commitments
174
- promisedMessagesHash.assertEquals(blockProof.publicOutput.incomingMessagesHash, "Promised messages not honored");
175
- this.honoredMessagesHash.set(promisedMessagesHash);
176
- // Assert and apply new promisedMessagesHash
177
- this.self.account.actionState.assertEquals(newPromisedMessagesHash);
178
- this.promisedMessagesHash.set(newPromisedMessagesHash);
179
- this.lastSettlementL1Block.set(minBlockIncluded);
180
- }
181
- dispatchMessage(methodId, value, valueType) {
182
- const args = valueType.toFields(value);
183
- // Should be the same as RuntimeTransaction.hash
184
- const argsHash = Poseidon.hash(args);
185
- const runtimeTransaction = RuntimeTransaction.fromMessage({
186
- methodId,
187
- argsHash,
188
- });
189
- // Append tx to incomingMessagesHash
190
- const actionData = runtimeTransaction.hashData();
191
- const actionHash = MinaActions.actionHash(actionData);
192
- this.self.body.actions = {
193
- hash: actionHash,
194
- data: [actionData],
195
- };
196
- const eventHash = MinaEvents.eventHash(args);
197
- this.self.body.events = {
198
- hash: eventHash,
199
- data: [args],
200
- };
201
- }
202
- deposit(amount) {
203
- // Save this, since otherwise it would be a second witness later,
204
- // which could be a different values than the first
205
- const sender = this.sender;
206
- // Credit the amount to the bridge contract
207
- this.self.balance.addInPlace(amount);
208
- const action = new Deposit({
209
- address: sender,
210
- amount,
211
- });
212
- const methodId = Field(this.methodIdMappings[this.incomingMessagesPaths["deposit"]]);
213
- this.dispatchMessage(methodId.toConstant(), action, Deposit);
214
- }
215
- rollupOutgoingMessages(batch) {
216
- let counter = this.outgoingMessageCursor.getAndAssertEquals();
217
- const stateRoot = this.stateRoot.getAndAssertEquals();
218
- const [withdrawalModule, withdrawalStateName] = this.withdrawalStatePath;
219
- const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
220
- let accountCreationFeePaid = Field(0);
221
- for (let i = 0; i < OUTGOING_MESSAGE_BATCH_SIZE; i++) {
222
- const args = batch.arguments[i];
223
- // Check witness
224
- const path = Path.fromKey(mapPath, Field, counter);
225
- args.witness
226
- .checkMembership(stateRoot, path, Poseidon.hash(Withdrawal.toFields(args.value)))
227
- .assertTrue("Provided Withdrawal witness not valid");
228
- // Process message
229
- const { address, amount } = args.value;
230
- const isDummy = address.equals(this.address);
231
- const tokenAu = this.token.mint({ address, amount });
232
- const isNewAccount = tokenAu.account.isNew.getAndAssertEquals();
233
- tokenAu.body.balanceChange.magnitude =
234
- tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.accountCreationFee().toConstant(), UInt64.zero));
235
- accountCreationFeePaid = accountCreationFeePaid.add(Provable.if(isNewAccount, Field(1e9), Field(0)));
236
- counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
237
- }
238
- this.balance.subInPlace(UInt64.from(accountCreationFeePaid));
239
- this.outgoingMessageCursor.set(counter);
240
- }
241
- redeem(additionUpdate) {
242
- additionUpdate.body.tokenId.assertEquals(TokenId.default, "Tokenid not default token");
243
- additionUpdate.body.balanceChange.sgn
244
- .isPositive()
245
- .assertTrue("Sign not correct");
246
- const amount = additionUpdate.body.balanceChange.magnitude;
247
- // Burn tokens
248
- this.token.burn({
249
- address: additionUpdate.publicKey,
250
- amount,
251
- });
252
- // Send mina
253
- this.approve(additionUpdate);
254
- this.balance.subInPlace(amount);
255
- }
256
- }
257
- __decorate([
258
- state(Field),
259
- __metadata("design:type", Object)
260
- ], SettlementContract.prototype, "sequencerKey", void 0);
261
- __decorate([
262
- state(UInt32),
263
- __metadata("design:type", Object)
264
- ], SettlementContract.prototype, "lastSettlementL1Block", void 0);
265
- __decorate([
266
- state(Field),
267
- __metadata("design:type", Object)
268
- ], SettlementContract.prototype, "stateRoot", void 0);
269
- __decorate([
270
- state(Field),
271
- __metadata("design:type", Object)
272
- ], SettlementContract.prototype, "networkStateHash", void 0);
273
- __decorate([
274
- state(Field),
275
- __metadata("design:type", Object)
276
- ], SettlementContract.prototype, "blockHashRoot", void 0);
277
- __decorate([
278
- state(Field),
279
- __metadata("design:type", Object)
280
- ], SettlementContract.prototype, "promisedMessagesHash", void 0);
281
- __decorate([
282
- state(Field),
283
- __metadata("design:type", Object)
284
- ], SettlementContract.prototype, "honoredMessagesHash", void 0);
285
- __decorate([
286
- state(Field),
287
- __metadata("design:type", Object)
288
- ], SettlementContract.prototype, "outgoingMessageCursor", void 0);
289
- __decorate([
290
- method,
291
- __metadata("design:type", Function),
292
- __metadata("design:paramtypes", [PublicKey]),
293
- __metadata("design:returntype", void 0)
294
- ], SettlementContract.prototype, "initialize", null);
295
- __decorate([
296
- method,
297
- __metadata("design:type", Function),
298
- __metadata("design:paramtypes", [LazyBlockProof,
299
- Signature,
300
- PublicKey,
301
- NetworkState,
302
- NetworkState,
303
- Field]),
304
- __metadata("design:returntype", void 0)
305
- ], SettlementContract.prototype, "settle", null);
306
- __decorate([
307
- method,
308
- __metadata("design:type", Function),
309
- __metadata("design:paramtypes", [UInt64]),
310
- __metadata("design:returntype", void 0)
311
- ], SettlementContract.prototype, "deposit", null);
312
- __decorate([
313
- method,
314
- __metadata("design:type", Function),
315
- __metadata("design:paramtypes", [OutgoingMessageArgumentBatch]),
316
- __metadata("design:returntype", void 0)
317
- ], SettlementContract.prototype, "rollupOutgoingMessages", null);
318
- __decorate([
319
- method,
320
- __metadata("design:type", Function),
321
- __metadata("design:paramtypes", [AccountUpdate]),
322
- __metadata("design:returntype", void 0)
323
- ], SettlementContract.prototype, "redeem", null);
324
- let SettlementContractModule = class SettlementContractModule extends ProtocolModule {
325
- constructor(hooks, blockProver) {
326
- super();
327
- this.hooks = hooks;
328
- this.blockProver = blockProver;
329
- LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram.Proof.tag;
330
- }
331
- getContractClass() {
332
- return SettlementContract;
333
- }
334
- createContract(address, methodIdMappings) {
335
- // We know that this returns [string, string], but TS can't infer that
336
- const withdrawalPath = this.config.withdrawalStatePath.split(".");
337
- return new SettlementContract(address, methodIdMappings, this.hooks, [withdrawalPath[0], withdrawalPath[1]], this.config.incomingMessagesMethods);
338
- }
339
- };
340
- SettlementContractModule = __decorate([
341
- injectable(),
342
- __param(0, injectAll("ProvableSettlementHook")),
343
- __param(1, inject("BlockProver")),
344
- __metadata("design:paramtypes", [Array, Object])
345
- ], SettlementContractModule);
346
- export { SettlementContractModule };
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Reducer, Signature, SmartContract, State, state, Struct, TokenId, UInt32, UInt64, } from "o1js";
14
+ import { EMPTY_PUBLICKEY, prefixToField, RollupMerkleTree, RollupMerkleTreeWitness, } from "@proto-kit/common";
15
+ import { inject, injectable, injectAll } from "tsyringe";
16
+ import { ProtocolModule } from "../protocol/ProtocolModule";
17
+ import { BlockProverPublicInput, BlockProverPublicOutput, } from "../prover/block/BlockProvable";
18
+ import { NetworkState } from "../model/network/NetworkState";
19
+ import { BlockHashMerkleTree } from "../prover/block/accummulators/BlockHashMerkleTree";
20
+ import { RuntimeTransaction } from "../model/transaction/RuntimeTransaction";
21
+ import { Path } from "../model/Path";
22
+ import { MinaActions, MinaEvents } from "../utils/MinaPrefixedProvableHashList";
23
+ class LazyBlockProof extends Proof {
24
+ }
25
+ LazyBlockProof.publicInputType = BlockProverPublicInput;
26
+ LazyBlockProof.publicOutputType = BlockProverPublicOutput;
27
+ LazyBlockProof.tag = () => {
28
+ throw new Error("Tag not initialized yet");
29
+ };
30
+ export class Deposit extends Struct({
31
+ address: PublicKey,
32
+ amount: UInt64,
33
+ }) {
34
+ }
35
+ export class Withdrawal extends Struct({
36
+ address: PublicKey,
37
+ amount: UInt64,
38
+ }) {
39
+ static dummy() {
40
+ return new Withdrawal({
41
+ address: EMPTY_PUBLICKEY,
42
+ amount: UInt64.from(0),
43
+ });
44
+ }
45
+ }
46
+ export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
47
+ export class OutgoingMessageArgument extends Struct({
48
+ witness: RollupMerkleTreeWitness,
49
+ value: Withdrawal,
50
+ }) {
51
+ static dummy() {
52
+ return new OutgoingMessageArgument({
53
+ witness: RollupMerkleTreeWitness.dummy(),
54
+ value: Withdrawal.dummy(),
55
+ });
56
+ }
57
+ }
58
+ export class OutgoingMessageArgumentBatch extends Struct({
59
+ arguments: Provable.Array(OutgoingMessageArgument, OUTGOING_MESSAGE_BATCH_SIZE),
60
+ isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
61
+ }) {
62
+ static fromMessages(providedArguments) {
63
+ const batch = providedArguments.slice();
64
+ const isDummys = batch.map(() => Bool(false));
65
+ while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
66
+ batch.push(OutgoingMessageArgument.dummy());
67
+ isDummys.push(Bool(true));
68
+ }
69
+ return new OutgoingMessageArgumentBatch({
70
+ arguments: batch,
71
+ isDummys,
72
+ });
73
+ }
74
+ }
75
+ // Some random prefix for the sequencer signature
76
+ export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
77
+ export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
78
+ export class SettlementContract extends SmartContract {
79
+ constructor(address, methodIdMappings, hooks, withdrawalStatePath, incomingMessagesPaths,
80
+ // 24 hours
81
+ escapeHatchSlotsInterval = (60 / 3) * 24) {
82
+ super(address);
83
+ this.methodIdMappings = methodIdMappings;
84
+ this.hooks = hooks;
85
+ this.withdrawalStatePath = withdrawalStatePath;
86
+ this.incomingMessagesPaths = incomingMessagesPaths;
87
+ this.escapeHatchSlotsInterval = escapeHatchSlotsInterval;
88
+ this.sequencerKey = State();
89
+ this.lastSettlementL1Block = State();
90
+ this.stateRoot = State();
91
+ this.networkStateHash = State();
92
+ this.blockHashRoot = State();
93
+ this.promisedMessagesHash = State();
94
+ this.honoredMessagesHash = State();
95
+ this.outgoingMessageCursor = State();
96
+ }
97
+ initialize(sequencer) {
98
+ this.sequencerKey.getAndAssertEquals().assertEquals(Field(0));
99
+ this.stateRoot.getAndAssertEquals().assertEquals(Field(0));
100
+ this.blockHashRoot.getAndAssertEquals().assertEquals(Field(0));
101
+ this.networkStateHash.getAndAssertEquals().assertEquals(Field(0));
102
+ this.promisedMessagesHash.getAndAssertEquals().assertEquals(Field(0));
103
+ this.honoredMessagesHash.getAndAssertEquals().assertEquals(Field(0));
104
+ this.sequencerKey.set(sequencer.x);
105
+ this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
106
+ this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
107
+ this.networkStateHash.set(NetworkState.empty().hash());
108
+ this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
109
+ this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
110
+ }
111
+ settle(blockProof, signature, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
112
+ // Verify the blockproof
113
+ blockProof.verify();
114
+ // Get and assert on-chain values
115
+ const stateRoot = this.stateRoot.getAndAssertEquals();
116
+ const networkStateHash = this.networkStateHash.getAndAssertEquals();
117
+ const blockHashRoot = this.blockHashRoot.getAndAssertEquals();
118
+ const sequencerKey = this.sequencerKey.getAndAssertEquals();
119
+ const promisedMessagesHash = this.promisedMessagesHash.getAndAssertEquals();
120
+ const honoredMessagesHash = this.honoredMessagesHash.getAndAssertEquals();
121
+ const lastSettlementL1Block = this.lastSettlementL1Block.getAndAssertEquals();
122
+ // Get block height and use the lower bound for all ops
123
+ const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
124
+ this.network.globalSlotSinceGenesis.assertBetween(minBlockIncluded, minBlockIncluded.add(20));
125
+ // Check signature/escape catch
126
+ publicKey.x.assertEquals(sequencerKey, "Sequencer public key witness not matching");
127
+ const signatureValid = signature.verify(publicKey, [
128
+ BATCH_SIGNATURE_PREFIX,
129
+ lastSettlementL1Block.value,
130
+ ]);
131
+ const escapeHatchActivated = lastSettlementL1Block
132
+ .add(UInt32.from(this.escapeHatchSlotsInterval))
133
+ .lessThan(minBlockIncluded);
134
+ signatureValid
135
+ .or(escapeHatchActivated)
136
+ .assertTrue("Sequencer signature not valid and escape hatch not activated");
137
+ // Assert correctness of networkState witness
138
+ inputNetworkState
139
+ .hash()
140
+ .assertEquals(networkStateHash, "InputNetworkState witness not valid");
141
+ outputNetworkState
142
+ .hash()
143
+ .assertEquals(blockProof.publicOutput.networkStateHash, "OutputNetworkState witness not valid");
144
+ blockProof.publicOutput.closed.assertEquals(Bool(true), "Supplied proof is not a closed BlockProof");
145
+ // Execute onSettlementHooks for additional checks
146
+ const stateRecord = {
147
+ blockHashRoot,
148
+ stateRoot,
149
+ networkStateHash,
150
+ honoredMessagesHash,
151
+ lastSettlementL1Block,
152
+ promisedMessagesHash,
153
+ sequencerKey,
154
+ };
155
+ const inputs = {
156
+ blockProof,
157
+ contractState: stateRecord,
158
+ newPromisedMessagesHash,
159
+ fromNetworkState: inputNetworkState,
160
+ toNetworkState: outputNetworkState,
161
+ currentL1Block: minBlockIncluded,
162
+ };
163
+ this.hooks.forEach((hook) => {
164
+ hook.beforeSettlement(this, inputs);
165
+ });
166
+ // Apply blockProof
167
+ stateRoot.assertEquals(blockProof.publicInput.stateRoot, "Input state root not matching");
168
+ networkStateHash.assertEquals(blockProof.publicInput.networkStateHash, "Input networkStateHash not matching");
169
+ blockHashRoot.assertEquals(blockProof.publicInput.blockHashRoot, "Input blockHashRoot not matching");
170
+ this.stateRoot.set(blockProof.publicOutput.stateRoot);
171
+ this.networkStateHash.set(blockProof.publicOutput.networkStateHash);
172
+ this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
173
+ // Assert and apply deposit commitments
174
+ promisedMessagesHash.assertEquals(blockProof.publicOutput.incomingMessagesHash, "Promised messages not honored");
175
+ this.honoredMessagesHash.set(promisedMessagesHash);
176
+ // Assert and apply new promisedMessagesHash
177
+ this.self.account.actionState.assertEquals(newPromisedMessagesHash);
178
+ this.promisedMessagesHash.set(newPromisedMessagesHash);
179
+ this.lastSettlementL1Block.set(minBlockIncluded);
180
+ }
181
+ dispatchMessage(methodId, value, valueType) {
182
+ const args = valueType.toFields(value);
183
+ // Should be the same as RuntimeTransaction.hash
184
+ const argsHash = Poseidon.hash(args);
185
+ const runtimeTransaction = RuntimeTransaction.fromMessage({
186
+ methodId,
187
+ argsHash,
188
+ });
189
+ // Append tx to incomingMessagesHash
190
+ const actionData = runtimeTransaction.hashData();
191
+ const actionHash = MinaActions.actionHash(actionData);
192
+ this.self.body.actions = {
193
+ hash: actionHash,
194
+ data: [actionData],
195
+ };
196
+ const eventHash = MinaEvents.eventHash(args);
197
+ this.self.body.events = {
198
+ hash: eventHash,
199
+ data: [args],
200
+ };
201
+ }
202
+ deposit(amount) {
203
+ // Save this, since otherwise it would be a second witness later,
204
+ // which could be a different values than the first
205
+ const sender = this.sender;
206
+ // Credit the amount to the bridge contract
207
+ this.self.balance.addInPlace(amount);
208
+ const action = new Deposit({
209
+ address: sender,
210
+ amount,
211
+ });
212
+ const methodId = Field(this.methodIdMappings[this.incomingMessagesPaths["deposit"]]);
213
+ this.dispatchMessage(methodId.toConstant(), action, Deposit);
214
+ }
215
+ rollupOutgoingMessages(batch) {
216
+ let counter = this.outgoingMessageCursor.getAndAssertEquals();
217
+ const stateRoot = this.stateRoot.getAndAssertEquals();
218
+ const [withdrawalModule, withdrawalStateName] = this.withdrawalStatePath;
219
+ const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
220
+ let accountCreationFeePaid = Field(0);
221
+ for (let i = 0; i < OUTGOING_MESSAGE_BATCH_SIZE; i++) {
222
+ const args = batch.arguments[i];
223
+ // Check witness
224
+ const path = Path.fromKey(mapPath, Field, counter);
225
+ args.witness
226
+ .checkMembership(stateRoot, path, Poseidon.hash(Withdrawal.toFields(args.value)))
227
+ .assertTrue("Provided Withdrawal witness not valid");
228
+ // Process message
229
+ const { address, amount } = args.value;
230
+ const isDummy = address.equals(this.address);
231
+ const tokenAu = this.token.mint({ address, amount });
232
+ const isNewAccount = tokenAu.account.isNew.getAndAssertEquals();
233
+ tokenAu.body.balanceChange.magnitude =
234
+ tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.accountCreationFee().toConstant(), UInt64.zero));
235
+ accountCreationFeePaid = accountCreationFeePaid.add(Provable.if(isNewAccount, Field(1e9), Field(0)));
236
+ counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
237
+ }
238
+ this.balance.subInPlace(UInt64.from(accountCreationFeePaid));
239
+ this.outgoingMessageCursor.set(counter);
240
+ }
241
+ redeem(additionUpdate) {
242
+ additionUpdate.body.tokenId.assertEquals(TokenId.default, "Tokenid not default token");
243
+ additionUpdate.body.balanceChange.sgn
244
+ .isPositive()
245
+ .assertTrue("Sign not correct");
246
+ const amount = additionUpdate.body.balanceChange.magnitude;
247
+ // Burn tokens
248
+ this.token.burn({
249
+ address: additionUpdate.publicKey,
250
+ amount,
251
+ });
252
+ // Send mina
253
+ this.approve(additionUpdate);
254
+ this.balance.subInPlace(amount);
255
+ }
256
+ }
257
+ __decorate([
258
+ state(Field),
259
+ __metadata("design:type", Object)
260
+ ], SettlementContract.prototype, "sequencerKey", void 0);
261
+ __decorate([
262
+ state(UInt32),
263
+ __metadata("design:type", Object)
264
+ ], SettlementContract.prototype, "lastSettlementL1Block", void 0);
265
+ __decorate([
266
+ state(Field),
267
+ __metadata("design:type", Object)
268
+ ], SettlementContract.prototype, "stateRoot", void 0);
269
+ __decorate([
270
+ state(Field),
271
+ __metadata("design:type", Object)
272
+ ], SettlementContract.prototype, "networkStateHash", void 0);
273
+ __decorate([
274
+ state(Field),
275
+ __metadata("design:type", Object)
276
+ ], SettlementContract.prototype, "blockHashRoot", void 0);
277
+ __decorate([
278
+ state(Field),
279
+ __metadata("design:type", Object)
280
+ ], SettlementContract.prototype, "promisedMessagesHash", void 0);
281
+ __decorate([
282
+ state(Field),
283
+ __metadata("design:type", Object)
284
+ ], SettlementContract.prototype, "honoredMessagesHash", void 0);
285
+ __decorate([
286
+ state(Field),
287
+ __metadata("design:type", Object)
288
+ ], SettlementContract.prototype, "outgoingMessageCursor", void 0);
289
+ __decorate([
290
+ method,
291
+ __metadata("design:type", Function),
292
+ __metadata("design:paramtypes", [PublicKey]),
293
+ __metadata("design:returntype", void 0)
294
+ ], SettlementContract.prototype, "initialize", null);
295
+ __decorate([
296
+ method,
297
+ __metadata("design:type", Function),
298
+ __metadata("design:paramtypes", [LazyBlockProof,
299
+ Signature,
300
+ PublicKey,
301
+ NetworkState,
302
+ NetworkState,
303
+ Field]),
304
+ __metadata("design:returntype", void 0)
305
+ ], SettlementContract.prototype, "settle", null);
306
+ __decorate([
307
+ method,
308
+ __metadata("design:type", Function),
309
+ __metadata("design:paramtypes", [UInt64]),
310
+ __metadata("design:returntype", void 0)
311
+ ], SettlementContract.prototype, "deposit", null);
312
+ __decorate([
313
+ method,
314
+ __metadata("design:type", Function),
315
+ __metadata("design:paramtypes", [OutgoingMessageArgumentBatch]),
316
+ __metadata("design:returntype", void 0)
317
+ ], SettlementContract.prototype, "rollupOutgoingMessages", null);
318
+ __decorate([
319
+ method,
320
+ __metadata("design:type", Function),
321
+ __metadata("design:paramtypes", [AccountUpdate]),
322
+ __metadata("design:returntype", void 0)
323
+ ], SettlementContract.prototype, "redeem", null);
324
+ let SettlementContractModule = class SettlementContractModule extends ProtocolModule {
325
+ constructor(hooks, blockProver) {
326
+ super();
327
+ this.hooks = hooks;
328
+ this.blockProver = blockProver;
329
+ LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram.Proof.tag;
330
+ }
331
+ getContractClass() {
332
+ return SettlementContract;
333
+ }
334
+ createContract(address, methodIdMappings) {
335
+ // We know that this returns [string, string], but TS can't infer that
336
+ const withdrawalPath = this.config.withdrawalStatePath.split(".");
337
+ return new SettlementContract(address, methodIdMappings, this.hooks, [withdrawalPath[0], withdrawalPath[1]], this.config.incomingMessagesMethods);
338
+ }
339
+ };
340
+ SettlementContractModule = __decorate([
341
+ injectable(),
342
+ __param(0, injectAll("ProvableSettlementHook")),
343
+ __param(1, inject("BlockProver")),
344
+ __metadata("design:paramtypes", [Array, Object])
345
+ ], SettlementContractModule);
346
+ export { SettlementContractModule };