@proto-kit/protocol 0.1.1-develop.600 → 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 (285) 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 +15 -9
  18. package/dist/hooks/BlockHeightHook.d.ts +3 -3
  19. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  20. package/dist/hooks/BlockHeightHook.js +5 -4
  21. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  22. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  23. package/dist/hooks/LastStateRootBlockHook.js +15 -0
  24. package/dist/hooks/NoopBlockHook.d.ts +6 -4
  25. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  26. package/dist/hooks/NoopBlockHook.js +4 -4
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/hooks/NoopSettlementHook.js +17 -0
  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 +18 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +18 -8
  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 -19
  39. package/dist/model/Option.d.ts.map +1 -1
  40. package/dist/model/Option.js +6 -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/RuntimeLike.d.ts +11 -0
  45. package/dist/model/RuntimeLike.d.ts.map +1 -0
  46. package/dist/model/RuntimeLike.js +1 -0
  47. package/dist/model/StateTransition.d.ts +51 -14
  48. package/dist/model/StateTransition.d.ts.map +1 -1
  49. package/dist/model/StateTransition.js +3 -0
  50. package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
  51. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  52. package/dist/model/StateTransitionReduction.d.ts +3 -0
  53. package/dist/model/StateTransitionReduction.d.ts.map +1 -0
  54. package/dist/model/StateTransitionReduction.js +26 -0
  55. package/dist/model/network/NetworkState.d.ts +73 -18
  56. package/dist/model/network/NetworkState.d.ts.map +1 -1
  57. package/dist/model/network/NetworkState.js +2 -2
  58. package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
  59. package/dist/model/transaction/ProtocolTransaction.js +18 -18
  60. package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
  61. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  62. package/dist/model/transaction/RuntimeTransaction.js +4 -4
  63. package/dist/model/transaction/SignedTransaction.d.ts +39 -3
  64. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
  65. package/dist/model/transaction/SignedTransaction.js +1 -1
  66. package/dist/model/transaction/ValueOption.d.ts +86 -32
  67. package/dist/model/transaction/ValueOption.d.ts.map +1 -1
  68. package/dist/model/transaction/ValueOption.js +1 -1
  69. package/dist/protocol/Protocol.d.ts +14 -20
  70. package/dist/protocol/Protocol.d.ts.map +1 -1
  71. package/dist/protocol/Protocol.js +13 -27
  72. package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
  73. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
  74. package/dist/protocol/ProtocolModule.d.ts +1 -0
  75. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  76. package/dist/protocol/ProtocolModule.js +4 -2
  77. package/dist/protocol/ProvableBlockHook.d.ts +2 -2
  78. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  79. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  80. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  81. package/dist/prover/block/BlockProvable.d.ts +240 -98
  82. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  83. package/dist/prover/block/BlockProver.d.ts +8 -8
  84. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  85. package/dist/prover/block/BlockProver.js +55 -45
  86. package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
  87. package/dist/prover/block/BlockTransactionPosition.js +25 -25
  88. package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
  89. package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
  90. package/dist/prover/block/BundleTransactionPosition.js +25 -0
  91. package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
  92. package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
  93. package/dist/prover/block/SplitPrefilledStateService.js +1 -0
  94. package/dist/prover/block/SplitStateService.d.ts +11 -0
  95. package/dist/prover/block/SplitStateService.d.ts.map +1 -0
  96. package/dist/prover/block/SplitStateService.js +1 -0
  97. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
  98. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
  99. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
  100. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
  101. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
  102. package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
  103. package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
  104. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  105. package/dist/prover/statetransition/StateTransitionProver.d.ts +10 -9
  106. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  107. package/dist/prover/statetransition/StateTransitionProver.js +18 -22
  108. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
  109. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
  110. package/dist/settlement/ContractModule.d.ts +15 -0
  111. package/dist/settlement/ContractModule.d.ts.map +1 -0
  112. package/dist/settlement/ContractModule.js +11 -0
  113. package/dist/settlement/DispatchContract.d.ts +20 -0
  114. package/dist/settlement/DispatchContract.d.ts.map +1 -0
  115. package/dist/settlement/DispatchContract.js +112 -0
  116. package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
  117. package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
  118. package/dist/settlement/OutgoingMessageArgument.js +32 -0
  119. package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
  120. package/dist/settlement/ProvableSettlementHook.js +3 -3
  121. package/dist/settlement/SettlementContract.d.ts +229 -229
  122. package/dist/settlement/SettlementContract.js +346 -346
  123. package/dist/settlement/SettlementContractModule.d.ts +40 -0
  124. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  125. package/dist/settlement/SettlementContractModule.js +71 -0
  126. package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
  127. package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
  128. package/dist/settlement/contracts/DispatchContract.js +111 -0
  129. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
  130. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  131. package/dist/{hooks/TransactionFeeHook.js → settlement/contracts/DispatchContractProtocolModule.js} +17 -21
  132. package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
  133. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  134. package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
  135. package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
  136. package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
  137. package/dist/settlement/contracts/SettlementContract.js +43 -0
  138. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
  139. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  140. package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
  141. package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
  142. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  143. package/dist/settlement/contracts/SettlementSmartContract.js +246 -0
  144. package/dist/settlement/messages/Deposit.d.ts +64 -0
  145. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  146. package/dist/settlement/messages/Deposit.js +6 -0
  147. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
  148. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  149. package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
  150. package/dist/settlement/messages/Withdrawal.d.ts +65 -0
  151. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  152. package/dist/settlement/messages/Withdrawal.js +13 -0
  153. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
  154. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  155. package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
  156. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +3 -3
  157. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
  158. package/dist/settlement/modules/NetworkStateSettlementModule.js +4 -2
  159. package/dist/state/State.d.ts +4 -3
  160. package/dist/state/State.d.ts.map +1 -1
  161. package/dist/state/State.js +18 -12
  162. package/dist/state/StateMap.d.ts +3 -3
  163. package/dist/state/StateMap.d.ts.map +1 -1
  164. package/dist/state/StateMap.js +4 -5
  165. package/dist/state/StateService.d.ts +3 -3
  166. package/dist/state/StateService.d.ts.map +1 -1
  167. package/dist/state/StateServiceProvider.d.ts +3 -3
  168. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  169. package/dist/state/StateServiceProvider.js +1 -3
  170. package/dist/state/assert/assert.d.ts +1 -1
  171. package/dist/state/assert/assert.d.ts.map +1 -1
  172. package/dist/state/assert/assert.js +11 -5
  173. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
  174. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
  175. package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
  176. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +55 -4
  177. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  178. package/dist/state/context/RuntimeMethodExecutionContext.js +6 -6
  179. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  180. package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
  181. package/dist/state/context/contextExecution.d.ts +14 -0
  182. package/dist/state/context/contextExecution.d.ts.map +1 -0
  183. package/dist/state/context/contextExecution.js +30 -0
  184. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  185. package/dist/state/protocol/ProtocolState.js +0 -3
  186. package/dist/utils/AppliedBatchHashList.d.ts +17 -0
  187. package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
  188. package/dist/utils/AppliedBatchHashList.js +24 -0
  189. package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
  190. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
  191. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  192. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  193. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  194. package/dist/utils/ProvableHashList.d.ts +4 -4
  195. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  196. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  197. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  198. package/dist/utils/ProvableReductionHashList.js +50 -0
  199. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  200. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  201. package/dist/utils/StateTransitionReductionList.js +60 -0
  202. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
  203. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  204. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
  205. package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
  206. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
  207. package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
  208. package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
  209. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
  210. package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
  211. package/dist/utils/utils.d.ts +1 -1
  212. package/dist/utils/utils.d.ts.map +1 -1
  213. package/dist/utils/utils.js +5 -10
  214. package/package.json +5 -5
  215. package/src/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +13 -9
  216. package/src/{blockmodules → hooks}/BlockHeightHook.ts +3 -4
  217. package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +4 -4
  218. package/src/{blockmodules → hooks}/NoopBlockHook.ts +6 -5
  219. package/src/{blockmodules → hooks}/NoopSettlementHook.ts +3 -4
  220. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +5 -1
  221. package/src/index.ts +18 -8
  222. package/src/model/MethodPublicOutput.ts +2 -2
  223. package/src/model/Option.ts +21 -1
  224. package/src/model/Path.ts +1 -3
  225. package/src/model/RuntimeLike.ts +12 -0
  226. package/src/model/StateTransition.ts +9 -1
  227. package/src/model/Transaction.ts +2 -0
  228. package/src/model/network/NetworkState.ts +2 -2
  229. package/src/model/transaction/RuntimeTransaction.ts +5 -12
  230. package/src/model/transaction/SignedTransaction.ts +1 -8
  231. package/src/model/transaction/ValueOption.ts +1 -1
  232. package/src/protocol/Protocol.ts +34 -48
  233. package/src/protocol/ProtocolEnvironment.ts +7 -6
  234. package/src/protocol/ProtocolModule.ts +8 -4
  235. package/src/protocol/ProvableBlockHook.ts +3 -3
  236. package/src/protocol/ProvableTransactionHook.ts +4 -2
  237. package/src/protocol/TransitioningProtocolModule.ts +1 -1
  238. package/src/prover/block/BlockProvable.ts +3 -3
  239. package/src/prover/block/BlockProver.ts +98 -63
  240. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +2 -2
  241. package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
  242. package/src/prover/statetransition/StateTransitionProver.ts +26 -28
  243. package/src/settlement/ContractModule.ts +24 -0
  244. package/src/settlement/SettlementContractModule.ts +132 -0
  245. package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
  246. package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
  247. package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
  248. package/src/settlement/contracts/SettlementSmartContract.ts +350 -0
  249. package/src/settlement/messages/Deposit.ts +6 -0
  250. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  251. package/src/settlement/messages/Withdrawal.ts +14 -0
  252. package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +9 -13
  253. package/src/settlement/modules/NetworkStateSettlementModule.ts +8 -5
  254. package/src/state/State.ts +21 -13
  255. package/src/state/StateMap.ts +4 -5
  256. package/src/state/StateService.ts +3 -3
  257. package/src/state/StateServiceProvider.ts +6 -7
  258. package/src/state/assert/assert.ts +13 -7
  259. package/src/state/context/RuntimeMethodExecutionContext.ts +13 -7
  260. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  261. package/src/state/protocol/ProtocolState.ts +1 -4
  262. package/src/utils/MinaPrefixedProvableHashList.ts +4 -3
  263. package/src/utils/PrefixedProvableHashList.ts +2 -2
  264. package/src/utils/ProvableHashList.ts +2 -2
  265. package/src/utils/ProvableReductionHashList.ts +68 -0
  266. package/src/utils/StateTransitionReductionList.ts +89 -0
  267. package/src/utils/utils.ts +4 -9
  268. package/test/BlockProver.test.ts +110 -128
  269. package/test/Protocol.test.ts +14 -21
  270. package/test/State.test.ts +8 -8
  271. package/test/StateTransition.test.ts +56 -66
  272. package/test/TestingProtocol.ts +48 -0
  273. package/test/model/Option.test.ts +72 -0
  274. package/{src → test}/state/assert/assert.test.ts +4 -4
  275. package/test/tsconfig.json +7 -0
  276. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  277. package/test/utils.test.ts +0 -3
  278. package/dist/hooks/TransactionFeeHook.d.ts +0 -16
  279. package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
  280. package/src/blockmodules/SequenceStateTransactionModule.ts +0 -25
  281. package/src/model/Option.test.ts +0 -21
  282. package/src/settlement/SettlementContract.ts +0 -444
  283. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  284. package/test/Option.test.ts +0 -64
  285. package/tsconfig.test.json +0 -9
@@ -0,0 +1,40 @@
1
+ import { AreProofsEnabled, ChildContainerProvider, ModuleContainer, ModulesRecord, TypedClass } from "@proto-kit/common";
2
+ import { PublicKey, SmartContract } from "o1js";
3
+ import { ProtocolEnvironment } from "../protocol/ProtocolEnvironment";
4
+ import { ProtocolModule } from "../protocol/ProtocolModule";
5
+ import { ContractModule, SmartContractClassFromInterface } from "./ContractModule";
6
+ import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
7
+ import { DispatchContractType } from "./contracts/DispatchSmartContract";
8
+ import { SettlementContractConfig, SettlementContractProtocolModule } from "./contracts/SettlementContractProtocolModule";
9
+ import { SettlementContractType } from "./contracts/SettlementSmartContract";
10
+ export type SettlementModulesRecord = ModulesRecord<TypedClass<ContractModule<unknown, unknown, unknown>>>;
11
+ export type MandatorySettlementModulesRecord = {
12
+ SettlementContract: TypedClass<ContractModule<SettlementContractType, SmartContractClassFromInterface<DispatchContractType>, SettlementContractConfig>>;
13
+ DispatchContract: TypedClass<ContractModule<DispatchContractType, unknown, unknown>>;
14
+ };
15
+ export declare class SettlementContractModule<SettlementModules extends SettlementModulesRecord & MandatorySettlementModulesRecord> extends ModuleContainer<SettlementModules> implements ProtocolModule<unknown> {
16
+ constructor(definition: {
17
+ modules: SettlementModules;
18
+ });
19
+ static from<SettlementModules extends SettlementModulesRecord & MandatorySettlementModulesRecord>(modules: SettlementModules): TypedClass<SettlementContractModule<SettlementModules>>;
20
+ static fromDefaults(): TypedClass<SettlementContractModule<{
21
+ SettlementContract: typeof SettlementContractProtocolModule;
22
+ DispatchContract: typeof DispatchContractProtocolModule;
23
+ }>>;
24
+ protocol?: ProtocolEnvironment;
25
+ get appChain(): AreProofsEnabled | undefined;
26
+ create(childContainerProvider: ChildContainerProvider): void;
27
+ start(): Promise<void>;
28
+ getContractClasses(): {
29
+ settlement: SmartContractClassFromInterface<SettlementContractType>;
30
+ dispatch: SmartContractClassFromInterface<DispatchContractType>;
31
+ };
32
+ createContracts(addresses: {
33
+ settlement: PublicKey;
34
+ dispatch: PublicKey;
35
+ }): {
36
+ settlement: SettlementContractType & SmartContract;
37
+ dispatch: DispatchContractType & SmartContract;
38
+ };
39
+ }
40
+ //# sourceMappingURL=SettlementContractModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementContractModule.d.ts","sourceRoot":"","sources":["../../src/settlement/SettlementContractModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EACjC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,MAAM,uBAAuB,GAAG,aAAa,CACjD,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,kBAAkB,EAAE,UAAU,CAC5B,cAAc,CACZ,sBAAsB,EACtB,+BAA+B,CAAC,oBAAoB,CAAC,EACrD,wBAAwB,CACzB,CACF,CAAC;IACF,gBAAgB,EAAE,UAAU,CAC1B,cAAc,CAAC,oBAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,CACvD,CAAC;CACH,CAAC;AAEF,qBACa,wBAAwB,CACjC,iBAAiB,SAAS,uBAAuB,GAC/C,gCAAgC,CAEpC,SAAQ,eAAe,CAAC,iBAAiB,CACzC,YAAW,cAAc,CAAC,OAAO,CAAC;gBAEf,UAAU,EAAE;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE;WAI/C,IAAI,CAChB,iBAAiB,SAAS,uBAAuB,GAC/C,gCAAgC,EAElC,OAAO,EAAE,iBAAiB,GACzB,UAAU,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;WAQ5C,YAAY;;;;IAQnB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAEtC,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAGM,MAAM,CAAC,sBAAsB,EAAE,sBAAsB;IAI/C,KAAK;IAIX,kBAAkB,IAAI;QAC3B,UAAU,EAAE,+BAA+B,CAAC,sBAAsB,CAAC,CAAC;QACpE,QAAQ,EAAE,+BAA+B,CAAC,oBAAoB,CAAC,CAAC;KACjE;IAkBM,eAAe,CAAC,SAAS,EAAE;QAChC,UAAU,EAAE,SAAS,CAAC;QACtB,QAAQ,EAAE,SAAS,CAAC;KACrB,GAAG;QACF,UAAU,EAAE,sBAAsB,GAAG,aAAa,CAAC;QACnD,QAAQ,EAAE,oBAAoB,GAAG,aAAa,CAAC;KAChD;CAaF"}
@@ -0,0 +1,71 @@
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 SettlementContractModule_1;
11
+ import { ModuleContainer, noop, } from "@proto-kit/common";
12
+ import { injectable } from "tsyringe";
13
+ import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
14
+ import { SettlementContractProtocolModule, } from "./contracts/SettlementContractProtocolModule";
15
+ export let SettlementContractModule = SettlementContractModule_1 = class SettlementContractModule extends ModuleContainer {
16
+ constructor(definition) {
17
+ super(definition);
18
+ }
19
+ static from(modules) {
20
+ return class ScopedSettlementContractModule extends SettlementContractModule_1 {
21
+ constructor() {
22
+ super({ modules });
23
+ }
24
+ };
25
+ }
26
+ static fromDefaults() {
27
+ return SettlementContractModule_1.from({
28
+ SettlementContract: SettlementContractProtocolModule,
29
+ DispatchContract: DispatchContractProtocolModule,
30
+ });
31
+ }
32
+ get appChain() {
33
+ return this.protocol?.getAreProofsEnabled();
34
+ }
35
+ // **
36
+ create(childContainerProvider) {
37
+ super.create(childContainerProvider);
38
+ }
39
+ async start() {
40
+ noop();
41
+ }
42
+ getContractClasses() {
43
+ const settlementContractKey = "SettlementContract";
44
+ const dispatchContractKey = "DispatchContract";
45
+ this.assertIsValidModuleName(settlementContractKey);
46
+ this.assertIsValidModuleName(dispatchContractKey);
47
+ const settlementModule = this.resolve(settlementContractKey);
48
+ const dispatchModule = this.resolve(dispatchContractKey);
49
+ const dispatch = dispatchModule.contractFactory(undefined);
50
+ const settlement = settlementModule.contractFactory(dispatch);
51
+ return {
52
+ settlement,
53
+ dispatch,
54
+ };
55
+ }
56
+ createContracts(addresses) {
57
+ const { dispatch, settlement } = this.getContractClasses();
58
+ // eslint-disable-next-line new-cap
59
+ const dispatchInstance = new dispatch(addresses.dispatch);
60
+ // eslint-disable-next-line new-cap
61
+ const settlementInstance = new settlement(addresses.settlement);
62
+ return {
63
+ dispatch: dispatchInstance,
64
+ settlement: settlementInstance,
65
+ };
66
+ }
67
+ };
68
+ SettlementContractModule = SettlementContractModule_1 = __decorate([
69
+ injectable(),
70
+ __metadata("design:paramtypes", [Object])
71
+ ], SettlementContractModule);
@@ -0,0 +1,21 @@
1
+ import { Field, PublicKey, SmartContract, State, UInt64 } from "o1js";
2
+ import { RuntimeMethodIdMapping } from "../../model/RuntimeLike";
3
+ export declare const ACTIONS_EMPTY_HASH: import("o1js/dist/node/lib/field").Field;
4
+ export interface DispatchContractType {
5
+ updateMessagesHash: (executedMessagesHash: Field, newPromisedMessagesHash: Field) => void;
6
+ initialize: (settlementContract: PublicKey) => void;
7
+ promisedMessagesHash: State<Field>;
8
+ }
9
+ export declare class DispatchContract extends SmartContract implements DispatchContractType {
10
+ private readonly methodIdMappings;
11
+ private readonly incomingMessagesPaths;
12
+ promisedMessagesHash: State<import("o1js/dist/node/lib/field").Field>;
13
+ honoredMessagesHash: State<import("o1js/dist/node/lib/field").Field>;
14
+ settlementContract: State<PublicKey>;
15
+ constructor(address: PublicKey, methodIdMappings: RuntimeMethodIdMapping, incomingMessagesPaths: Record<string, `${string}.${string}`>);
16
+ updateMessagesHash(executedMessagesHash: Field, newPromisedMessagesHash: Field): void;
17
+ initialize(settlementContract: PublicKey): void;
18
+ private dispatchMessage;
19
+ deposit(amount: UInt64): void;
20
+ }
21
+ //# sourceMappingURL=DispatchContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatchContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/DispatchContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EAIL,SAAS,EAET,aAAa,EACb,KAAK,EAEL,MAAM,EACP,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQjE,eAAO,MAAM,kBAAkB,0CAA6B,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAClB,oBAAoB,EAAE,KAAK,EAC3B,uBAAuB,EAAE,KAAK,KAC3B,IAAI,CAAC;IACV,UAAU,EAAE,CAAC,kBAAkB,EAAE,SAAS,KAAK,IAAI,CAAC;IAEpD,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACpC;AAED,qBAAa,gBACX,SAAQ,aACR,YAAW,oBAAoB;IAU7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IATnB,oBAAoB,kDAAkB;IAEtC,mBAAmB,kDAAkB;IAEjC,kBAAkB,mBAAsB;gBAG/D,OAAO,EAAE,SAAS,EACD,gBAAgB,EAAE,sBAAsB,EACxC,qBAAqB,EAAE,MAAM,CAC5C,MAAM,EACN,GAAG,MAAM,IAAI,MAAM,EAAE,CACtB;IAMI,kBAAkB,CACvB,oBAAoB,EAAE,KAAK,EAC3B,uBAAuB,EAAE,KAAK;IAezB,UAAU,CAAC,kBAAkB,EAAE,SAAS;IAY/C,OAAO,CAAC,eAAe;IA8BhB,OAAO,CAAC,MAAM,EAAE,MAAM;CAqB9B"}
@@ -0,0 +1,111 @@
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
+ import { AccountUpdate, Field, method, Poseidon, PublicKey, Reducer, SmartContract, State, state, UInt64, } from "o1js";
11
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
12
+ import { MinaActions, MinaEvents, } from "../../utils/MinaPrefixedProvableHashList";
13
+ import { Deposit } from "../messages/Deposit";
14
+ export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
15
+ export class DispatchContract extends SmartContract {
16
+ constructor(address, methodIdMappings, incomingMessagesPaths) {
17
+ super(address);
18
+ this.methodIdMappings = methodIdMappings;
19
+ this.incomingMessagesPaths = incomingMessagesPaths;
20
+ this.promisedMessagesHash = State();
21
+ this.honoredMessagesHash = State();
22
+ this.settlementContract = State();
23
+ }
24
+ updateMessagesHash(executedMessagesHash, newPromisedMessagesHash) {
25
+ const promisedMessagesHash = this.promisedMessagesHash.getAndAssertEquals();
26
+ this.honoredMessagesHash.getAndAssertEquals();
27
+ executedMessagesHash.assertEquals(promisedMessagesHash);
28
+ this.honoredMessagesHash.set(executedMessagesHash);
29
+ // Assert and apply new promisedMessagesHash
30
+ this.self.account.actionState.assertEquals(newPromisedMessagesHash);
31
+ this.promisedMessagesHash.set(newPromisedMessagesHash);
32
+ }
33
+ initialize(settlementContract) {
34
+ this.promisedMessagesHash.getAndAssertEquals().assertEquals(Field(0));
35
+ this.honoredMessagesHash.getAndAssertEquals().assertEquals(Field(0));
36
+ this.settlementContract
37
+ .getAndAssertEquals()
38
+ .assertEquals(PublicKey.empty());
39
+ this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
40
+ this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
41
+ this.settlementContract.set(settlementContract);
42
+ }
43
+ dispatchMessage(methodId, value, valueType) {
44
+ const args = valueType.toFields(value);
45
+ // Should be the same as RuntimeTransaction.hash
46
+ const argsHash = Poseidon.hash(args);
47
+ const runtimeTransaction = RuntimeTransaction.fromMessage({
48
+ methodId,
49
+ argsHash,
50
+ });
51
+ // Append tx to incomingMessagesHash
52
+ const actionData = runtimeTransaction.hashData();
53
+ const actionHash = MinaActions.actionHash(actionData);
54
+ this.self.body.actions = {
55
+ hash: actionHash,
56
+ data: [actionData],
57
+ };
58
+ const eventHash = MinaEvents.eventHash(args);
59
+ this.self.body.events = {
60
+ hash: eventHash,
61
+ data: [args],
62
+ };
63
+ }
64
+ deposit(amount) {
65
+ // Save this, since otherwise it would be a second witness later,
66
+ // which could be a different values than the first
67
+ const { sender } = this;
68
+ const settlementContract = this.settlementContract.getAndAssertEquals();
69
+ // Credit the amount to the settlement contract
70
+ const balanceAU = AccountUpdate.create(settlementContract);
71
+ balanceAU.balance.addInPlace(amount);
72
+ this.self.approve(balanceAU);
73
+ const action = new Deposit({
74
+ address: sender,
75
+ amount,
76
+ });
77
+ const methodId = Field(this.methodIdMappings[this.incomingMessagesPaths.deposit].methodId).toConstant();
78
+ this.dispatchMessage(methodId.toConstant(), action, Deposit);
79
+ }
80
+ }
81
+ __decorate([
82
+ state(Field),
83
+ __metadata("design:type", Object)
84
+ ], DispatchContract.prototype, "promisedMessagesHash", void 0);
85
+ __decorate([
86
+ state(Field),
87
+ __metadata("design:type", Object)
88
+ ], DispatchContract.prototype, "honoredMessagesHash", void 0);
89
+ __decorate([
90
+ state(PublicKey),
91
+ __metadata("design:type", Object)
92
+ ], DispatchContract.prototype, "settlementContract", void 0);
93
+ __decorate([
94
+ method,
95
+ __metadata("design:type", Function),
96
+ __metadata("design:paramtypes", [Field,
97
+ Field]),
98
+ __metadata("design:returntype", void 0)
99
+ ], DispatchContract.prototype, "updateMessagesHash", null);
100
+ __decorate([
101
+ method,
102
+ __metadata("design:type", Function),
103
+ __metadata("design:paramtypes", [PublicKey]),
104
+ __metadata("design:returntype", void 0)
105
+ ], DispatchContract.prototype, "initialize", null);
106
+ __decorate([
107
+ method,
108
+ __metadata("design:type", Function),
109
+ __metadata("design:paramtypes", [UInt64]),
110
+ __metadata("design:returntype", void 0)
111
+ ], DispatchContract.prototype, "deposit", null);
@@ -0,0 +1,12 @@
1
+ import { RuntimeLike } from "../../model/RuntimeLike";
2
+ import { ContractModule, SmartContractClassFromInterface } from "../ContractModule";
3
+ import { DispatchContractType } from "./DispatchSmartContract";
4
+ export type DispatchContractConfig = {
5
+ incomingMessagesMethods: Record<string, `${string}.${string}`>;
6
+ };
7
+ export declare class DispatchContractProtocolModule extends ContractModule<DispatchContractType, undefined, DispatchContractConfig> {
8
+ private readonly runtime;
9
+ constructor(runtime: RuntimeLike);
10
+ contractFactory(): SmartContractClassFromInterface<DispatchContractType>;
11
+ }
12
+ //# sourceMappingURL=DispatchContractProtocolModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatchContractProtocolModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/DispatchContractProtocolModule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAAG;IACnC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;CAChE,CAAC;AAEF,qBACa,8BAA+B,SAAQ,cAAc,CAChE,oBAAoB,EACpB,SAAS,EACT,sBAAsB,CACvB;IACuC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAIpE,eAAe,IAAI,+BAA+B,CAAC,oBAAoB,CAAC;CAWhF"}
@@ -10,30 +10,26 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
- var _a;
14
- /* eslint-disable import/no-unused-modules */
15
- import { createMerkleTree } from "@proto-kit/common";
16
- import { Runtime, } from "@proto-kit/module";
17
- import { inject } from "tsyringe";
18
- import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
19
- export const treeFeeHeight = 10;
20
- export class FeeTree extends createMerkleTree(treeFeeHeight) {
21
- }
22
- let TransactionFeeHook = class TransactionFeeHook extends ProvableTransactionHook {
13
+ import { inject, injectable } from "tsyringe";
14
+ import { ContractModule, } from "../ContractModule";
15
+ import { DispatchSmartContract, } from "./DispatchSmartContract";
16
+ export let DispatchContractProtocolModule = class DispatchContractProtocolModule extends ContractModule {
23
17
  constructor(runtime) {
18
+ super();
24
19
  this.runtime = runtime;
25
- this.feeTree = this.createFeeTree();
26
- ;
27
20
  }
28
- createFeeTree() {
29
- const analyzedMethods = this.runtime.zkProgrammable.zkProgram.analyzeMethods();
30
- console.log("analyzedMethods", analyzedMethods);
31
- return new FeeTree();
21
+ contractFactory() {
22
+ const { incomingMessagesMethods } = this.config;
23
+ const methodIdMappings = this.runtime.methodIdResolver.methodIdMap();
24
+ DispatchSmartContract.args = {
25
+ incomingMessagesPaths: incomingMessagesMethods,
26
+ methodIdMappings,
27
+ };
28
+ return DispatchSmartContract;
32
29
  }
33
- onTransaction(executionData) { }
34
30
  };
35
- TransactionFeeHook = __decorate([
31
+ DispatchContractProtocolModule = __decorate([
32
+ injectable(),
36
33
  __param(0, inject("Runtime")),
37
- __metadata("design:paramtypes", [typeof (_a = typeof Runtime !== "undefined" && Runtime) === "function" ? _a : Object])
38
- ], TransactionFeeHook);
39
- export { TransactionFeeHook };
34
+ __metadata("design:paramtypes", [Object])
35
+ ], DispatchContractProtocolModule);
@@ -0,0 +1,22 @@
1
+ import { Field, PublicKey, SmartContract, State, UInt64 } from "o1js";
2
+ import { RuntimeMethodIdMapping } from "../../model/RuntimeLike";
3
+ export declare const ACTIONS_EMPTY_HASH: import("o1js/dist/node/lib/provable/field").Field;
4
+ export interface DispatchContractType {
5
+ updateMessagesHash: (executedMessagesHash: Field, newPromisedMessagesHash: Field) => Promise<void>;
6
+ initialize: (settlementContract: PublicKey) => Promise<void>;
7
+ promisedMessagesHash: State<Field>;
8
+ }
9
+ export declare class DispatchSmartContract extends SmartContract implements DispatchContractType {
10
+ static args: {
11
+ methodIdMappings: RuntimeMethodIdMapping;
12
+ incomingMessagesPaths: Record<string, `${string}.${string}`>;
13
+ };
14
+ promisedMessagesHash: State<import("o1js/dist/node/lib/provable/field").Field>;
15
+ honoredMessagesHash: State<import("o1js/dist/node/lib/provable/field").Field>;
16
+ settlementContract: State<PublicKey>;
17
+ updateMessagesHash(executedMessagesHash: Field, newPromisedMessagesHash: Field): Promise<void>;
18
+ initialize(settlementContract: PublicKey): Promise<void>;
19
+ private dispatchMessage;
20
+ deposit(amount: UInt64): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=DispatchSmartContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatchSmartContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/DispatchSmartContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EAIL,SAAS,EAET,aAAa,EACb,KAAK,EAEL,MAAM,EACP,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQjE,eAAO,MAAM,kBAAkB,mDAA6B,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAClB,oBAAoB,EAAE,KAAK,EAC3B,uBAAuB,EAAE,KAAK,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,UAAU,EAAE,CAAC,kBAAkB,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACpC;AAED,qBAAa,qBACX,SAAQ,aACR,YAAW,oBAAoB;IAE/B,OAAc,IAAI,EAAE;QAClB,gBAAgB,EAAE,sBAAsB,CAAC;QACzC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;KAC9D,CAAC;IAEmB,oBAAoB,2DAAkB;IAEtC,mBAAmB,2DAAkB;IAEjC,kBAAkB,mBAAsB;IAGpD,kBAAkB,CAC7B,oBAAoB,EAAE,KAAK,EAC3B,uBAAuB,EAAE,KAAK;IAgBnB,UAAU,CAAC,kBAAkB,EAAE,SAAS;IAYrD,OAAO,CAAC,eAAe;IA8BV,OAAO,CAAC,MAAM,EAAE,MAAM;CAyBpC"}
@@ -0,0 +1,110 @@
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
+ import { AccountUpdate, Field, method, Poseidon, PublicKey, Reducer, SmartContract, State, state, UInt64, } from "o1js";
11
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
12
+ import { MinaActions, MinaEvents, } from "../../utils/MinaPrefixedProvableHashList";
13
+ import { Deposit } from "../messages/Deposit";
14
+ export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
15
+ export class DispatchSmartContract extends SmartContract {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.promisedMessagesHash = State();
19
+ this.honoredMessagesHash = State();
20
+ this.settlementContract = State();
21
+ }
22
+ async updateMessagesHash(executedMessagesHash, newPromisedMessagesHash) {
23
+ const promisedMessagesHash = this.promisedMessagesHash.getAndRequireEquals();
24
+ this.honoredMessagesHash.getAndRequireEquals();
25
+ executedMessagesHash.assertEquals(promisedMessagesHash);
26
+ this.honoredMessagesHash.set(executedMessagesHash);
27
+ // Assert and apply new promisedMessagesHash
28
+ this.self.account.actionState.requireEquals(newPromisedMessagesHash);
29
+ this.promisedMessagesHash.set(newPromisedMessagesHash);
30
+ }
31
+ async initialize(settlementContract) {
32
+ this.promisedMessagesHash.getAndRequireEquals().assertEquals(Field(0));
33
+ this.honoredMessagesHash.getAndRequireEquals().assertEquals(Field(0));
34
+ this.settlementContract
35
+ .getAndRequireEquals()
36
+ .assertEquals(PublicKey.empty());
37
+ this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
38
+ this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
39
+ this.settlementContract.set(settlementContract);
40
+ }
41
+ dispatchMessage(methodId, value, valueType) {
42
+ const args = valueType.toFields(value);
43
+ // Should be the same as RuntimeTransaction.hash
44
+ const argsHash = Poseidon.hash(args);
45
+ const runtimeTransaction = RuntimeTransaction.fromMessage({
46
+ methodId,
47
+ argsHash,
48
+ });
49
+ // Append tx to incomingMessagesHash
50
+ const actionData = runtimeTransaction.hashData();
51
+ const actionHash = MinaActions.actionHash(actionData);
52
+ this.self.body.actions = {
53
+ hash: actionHash,
54
+ data: [actionData],
55
+ };
56
+ const eventHash = MinaEvents.eventHash(args);
57
+ this.self.body.events = {
58
+ hash: eventHash,
59
+ data: [args],
60
+ };
61
+ }
62
+ async deposit(amount) {
63
+ // Save this, since otherwise it would be a second witness later,
64
+ // which could be a different values than the first
65
+ const sender = this.sender.getUnconstrained();
66
+ const settlementContract = this.settlementContract.getAndRequireEquals();
67
+ // Credit the amount to the settlement contract
68
+ const balanceAU = AccountUpdate.create(settlementContract);
69
+ balanceAU.balance.addInPlace(amount);
70
+ this.self.approve(balanceAU);
71
+ const action = new Deposit({
72
+ address: sender,
73
+ amount,
74
+ });
75
+ const { methodIdMappings, incomingMessagesPaths } = DispatchSmartContract.args;
76
+ const methodId = Field(methodIdMappings[incomingMessagesPaths.deposit].methodId).toConstant();
77
+ this.dispatchMessage(methodId.toConstant(), action, Deposit);
78
+ }
79
+ }
80
+ __decorate([
81
+ state(Field),
82
+ __metadata("design:type", Object)
83
+ ], DispatchSmartContract.prototype, "promisedMessagesHash", void 0);
84
+ __decorate([
85
+ state(Field),
86
+ __metadata("design:type", Object)
87
+ ], DispatchSmartContract.prototype, "honoredMessagesHash", void 0);
88
+ __decorate([
89
+ state(PublicKey),
90
+ __metadata("design:type", Object)
91
+ ], DispatchSmartContract.prototype, "settlementContract", void 0);
92
+ __decorate([
93
+ method,
94
+ __metadata("design:type", Function),
95
+ __metadata("design:paramtypes", [Field,
96
+ Field]),
97
+ __metadata("design:returntype", Promise)
98
+ ], DispatchSmartContract.prototype, "updateMessagesHash", null);
99
+ __decorate([
100
+ method,
101
+ __metadata("design:type", Function),
102
+ __metadata("design:paramtypes", [PublicKey]),
103
+ __metadata("design:returntype", Promise)
104
+ ], DispatchSmartContract.prototype, "initialize", null);
105
+ __decorate([
106
+ method,
107
+ __metadata("design:type", Function),
108
+ __metadata("design:paramtypes", [UInt64]),
109
+ __metadata("design:returntype", Promise)
110
+ ], DispatchSmartContract.prototype, "deposit", null);
@@ -0,0 +1,19 @@
1
+ import { TypedClass } from "@proto-kit/common";
2
+ import { SmartContract } from "o1js";
3
+ import { BlockProvable } from "../../prover/block/BlockProvable";
4
+ import { ContractModule } from "../ContractModule";
5
+ import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
6
+ import { DispatchContractType } from "./DispatchContract";
7
+ import { SettlementContractType } from "./SettlementSmartContract";
8
+ export type SettlementContractConfig = {
9
+ escapeHatchSlotsInterval?: number;
10
+ withdrawalStatePath: `${string}.${string}`;
11
+ withdrawalMethodPath: `${string}.${string}`;
12
+ };
13
+ export declare class SettlementContractProtocolModule extends ContractModule<SettlementContractType, TypedClass<DispatchContractType & SmartContract>, SettlementContractConfig> {
14
+ private readonly hooks;
15
+ private readonly blockProver;
16
+ constructor(hooks: ProvableSettlementHook<unknown>[], blockProver: BlockProvable);
17
+ contractFactory(dispatchContract: TypedClass<DispatchContractType & SmartContract>): TypedClass<SettlementContractType & SmartContract>;
18
+ }
19
+ //# sourceMappingURL=SettlementContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAa,aAAa,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,sBAAsB,EAEvB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IAC3C,oBAAoB,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;CAC7C,CAAA;AAED,qBACa,gCAAiC,SAAQ,cAAc,CAAC,sBAAsB,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,EAAE,wBAAwB,CAAC;IAIpK,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFX,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAExC,WAAW,EAAE,aAAa;IAOtC,eAAe,CAAC,gBAAgB,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,GAAG,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;CAc/I"}
@@ -0,0 +1,43 @@
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 { inject, injectable, injectAll } from "tsyringe";
14
+ import { ContractModule } from "../ContractModule";
15
+ import { LazyBlockProof, SettlementSmartContract } from "./SettlementSmartContract";
16
+ let SettlementContractProtocolModule = class SettlementContractProtocolModule extends ContractModule {
17
+ constructor(
18
+ // @inject("DispatchContract") private readonly dispatchContract: ContractModule & { contractFactory(methodIdMapping: SettlementMethodIdMapping): TypedClass<DispatchContractType & SmartContract> },
19
+ hooks, blockProver) {
20
+ LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram.Proof.tag;
21
+ super();
22
+ this.hooks = hooks;
23
+ this.blockProver = blockProver;
24
+ }
25
+ contractFactory(dispatchContract) {
26
+ const { hooks, config } = this;
27
+ const withdrawalStatePathSplit = this.config.withdrawalStatePath.split(".");
28
+ // Default: 24 hours
29
+ const escapeHatchSlotsInterval = this.config.escapeHatchSlotsInterval ?? (60 / 3) * 24;
30
+ return class ScopedSettlementSmartContract extends SettlementSmartContract {
31
+ constructor(address) {
32
+ super(address, dispatchContract, hooks, withdrawalStatePathSplit, escapeHatchSlotsInterval);
33
+ }
34
+ };
35
+ }
36
+ };
37
+ SettlementContractProtocolModule = __decorate([
38
+ injectable(),
39
+ __param(0, injectAll("ProvableSettlementHook")),
40
+ __param(1, inject("BlockProver")),
41
+ __metadata("design:paramtypes", [Array, Object])
42
+ ], SettlementContractProtocolModule);
43
+ export { SettlementContractProtocolModule };
@@ -0,0 +1,19 @@
1
+ import { TypedClass } from "@proto-kit/common";
2
+ import { SmartContract } from "o1js";
3
+ import { BlockProvable } from "../../prover/block/BlockProvable";
4
+ import { ContractModule, SmartContractClassFromInterface } from "../ContractModule";
5
+ import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
6
+ import { DispatchContractType } from "./DispatchSmartContract";
7
+ import { SettlementContractType } from "./SettlementSmartContract";
8
+ export type SettlementContractConfig = {
9
+ escapeHatchSlotsInterval?: number;
10
+ withdrawalStatePath: `${string}.${string}`;
11
+ withdrawalMethodPath: `${string}.${string}`;
12
+ };
13
+ export declare class SettlementContractProtocolModule extends ContractModule<SettlementContractType, TypedClass<DispatchContractType & SmartContract>, SettlementContractConfig> {
14
+ private readonly hooks;
15
+ private readonly blockProver;
16
+ constructor(hooks: ProvableSettlementHook<unknown>[], blockProver: BlockProvable);
17
+ contractFactory(dispatchContract: TypedClass<DispatchContractType & SmartContract>): SmartContractClassFromInterface<SettlementContractType>;
18
+ }
19
+ //# sourceMappingURL=SettlementContractProtocolModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementContractProtocolModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContractProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAEL,sBAAsB,EAEvB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IAC3C,oBAAoB,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;CAC7C,CAAC;AAKF,qBACa,gCAAiC,SAAQ,cAAc,CAClE,sBAAsB,EACtB,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,EAChD,wBAAwB,CACzB;IAGG,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFX,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAExC,WAAW,EAAE,aAAa;IAMtC,eAAe,CACpB,gBAAgB,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,GACjE,+BAA+B,CAAC,sBAAsB,CAAC;CAqB3D"}
@@ -0,0 +1,44 @@
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 { inject, injectable, injectAll } from "tsyringe";
14
+ import { ContractModule, } from "../ContractModule";
15
+ import { LazyBlockProof, SettlementSmartContract, } from "./SettlementSmartContract";
16
+ // 24 hours
17
+ const DEFAULT_ESCAPE_HATCH = (60 / 3) * 24;
18
+ export let SettlementContractProtocolModule = class SettlementContractProtocolModule extends ContractModule {
19
+ constructor(hooks, blockProver) {
20
+ LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram.Proof.tag;
21
+ super();
22
+ this.hooks = hooks;
23
+ this.blockProver = blockProver;
24
+ }
25
+ contractFactory(dispatchContract) {
26
+ const { hooks, config } = this;
27
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
28
+ const withdrawalStatePathSplit = config.withdrawalStatePath.split(".");
29
+ const escapeHatchSlotsInterval = config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
30
+ SettlementSmartContract.args = {
31
+ DispatchContract: dispatchContract,
32
+ hooks,
33
+ withdrawalStatePath: withdrawalStatePathSplit,
34
+ escapeHatchSlotsInterval,
35
+ };
36
+ return SettlementSmartContract;
37
+ }
38
+ };
39
+ SettlementContractProtocolModule = __decorate([
40
+ injectable(),
41
+ __param(0, injectAll("ProvableSettlementHook")),
42
+ __param(1, inject("BlockProver")),
43
+ __metadata("design:paramtypes", [Array, Object])
44
+ ], SettlementContractProtocolModule);