@proto-kit/protocol 0.1.1-develop.1088 → 0.1.1-develop.1313

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 (220) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hooks/AccountStateHook.js +1 -0
  4. package/dist/hooks/AccountStateHook.js.map +1 -0
  5. package/dist/hooks/BlockHeightHook.js +1 -0
  6. package/dist/hooks/BlockHeightHook.js.map +1 -0
  7. package/dist/hooks/LastStateRootBlockHook.js +1 -0
  8. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  9. package/dist/hooks/NoopBlockHook.js +1 -0
  10. package/dist/hooks/NoopBlockHook.js.map +1 -0
  11. package/dist/hooks/NoopSettlementHook.d.ts +2 -2
  12. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
  13. package/dist/hooks/NoopSettlementHook.js +1 -0
  14. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  15. package/dist/hooks/NoopTransactionHook.js +1 -0
  16. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  17. package/dist/index.d.ts +6 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -2
  20. package/dist/index.js.map +1 -0
  21. package/dist/model/MethodPublicOutput.js +1 -0
  22. package/dist/model/MethodPublicOutput.js.map +1 -0
  23. package/dist/model/Option.js +1 -0
  24. package/dist/model/Option.js.map +1 -0
  25. package/dist/model/Path.js +1 -0
  26. package/dist/model/Path.js.map +1 -0
  27. package/dist/model/RuntimeLike.js +1 -0
  28. package/dist/model/RuntimeLike.js.map +1 -0
  29. package/dist/model/StateTransition.js +1 -0
  30. package/dist/model/StateTransition.js.map +1 -0
  31. package/dist/model/StateTransitionProvableBatch.d.ts +28 -2
  32. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  33. package/dist/model/StateTransitionProvableBatch.js +9 -3
  34. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  35. package/dist/model/network/NetworkState.js +1 -0
  36. package/dist/model/network/NetworkState.js.map +1 -0
  37. package/dist/model/transaction/RuntimeTransaction.js +1 -0
  38. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  39. package/dist/model/transaction/SignedTransaction.js +1 -0
  40. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  41. package/dist/model/transaction/ValueOption.js +1 -0
  42. package/dist/model/transaction/ValueOption.js.map +1 -0
  43. package/dist/protocol/Protocol.d.ts.map +1 -1
  44. package/dist/protocol/Protocol.js +31 -6
  45. package/dist/protocol/Protocol.js.map +1 -0
  46. package/dist/protocol/ProtocolEnvironment.js +1 -0
  47. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  48. package/dist/protocol/ProtocolModule.d.ts +1 -1
  49. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  50. package/dist/protocol/ProtocolModule.js +2 -1
  51. package/dist/protocol/ProtocolModule.js.map +1 -0
  52. package/dist/protocol/ProvableBlockHook.js +1 -0
  53. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  54. package/dist/protocol/ProvableTransactionHook.js +1 -0
  55. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  56. package/dist/protocol/TransitioningProtocolModule.js +1 -0
  57. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  58. package/dist/prover/block/BlockProvable.d.ts +19 -5
  59. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  60. package/dist/prover/block/BlockProvable.js +5 -2
  61. package/dist/prover/block/BlockProvable.js.map +1 -0
  62. package/dist/prover/block/BlockProver.d.ts +11 -9
  63. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  64. package/dist/prover/block/BlockProver.js +79 -41
  65. package/dist/prover/block/BlockProver.js.map +1 -0
  66. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -0
  67. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  68. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +2 -2
  69. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +1 -0
  70. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  71. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +1 -0
  72. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  73. package/dist/prover/statetransition/StateTransitionProvable.d.ts +2 -4
  74. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  75. package/dist/prover/statetransition/StateTransitionProvable.js +1 -0
  76. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  77. package/dist/prover/statetransition/StateTransitionProver.d.ts +7 -10
  78. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  79. package/dist/prover/statetransition/StateTransitionProver.js +27 -28
  80. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  81. package/dist/settlement/ContractModule.d.ts +4 -3
  82. package/dist/settlement/ContractModule.d.ts.map +1 -1
  83. package/dist/settlement/ContractModule.js +2 -1
  84. package/dist/settlement/ContractModule.js.map +1 -0
  85. package/dist/settlement/SettlementContractModule.d.ts +25 -12
  86. package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
  87. package/dist/settlement/SettlementContractModule.js +29 -20
  88. package/dist/settlement/SettlementContractModule.js.map +1 -0
  89. package/dist/settlement/contracts/BridgeContract.d.ts +97 -0
  90. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  91. package/dist/settlement/contracts/BridgeContract.js +164 -0
  92. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  93. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +14 -0
  94. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  95. package/dist/settlement/contracts/BridgeContractProtocolModule.js +30 -0
  96. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  97. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +10 -1
  98. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -1
  99. package/dist/settlement/contracts/DispatchContractProtocolModule.js +24 -2
  100. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  101. package/dist/settlement/contracts/DispatchSmartContract.d.ts +26 -4
  102. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
  103. package/dist/settlement/contracts/DispatchSmartContract.js +139 -19
  104. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  105. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +10 -8
  106. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -1
  107. package/dist/settlement/contracts/SettlementContractProtocolModule.js +47 -9
  108. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  109. package/dist/settlement/contracts/SettlementSmartContract.d.ts +98 -17
  110. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
  111. package/dist/settlement/contracts/SettlementSmartContract.js +147 -79
  112. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  113. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  114. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  115. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  116. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  117. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  118. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  119. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  120. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  121. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  122. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  123. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  124. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  125. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  126. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  127. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  128. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  129. package/dist/settlement/messages/Deposit.d.ts +13 -0
  130. package/dist/settlement/messages/Deposit.d.ts.map +1 -1
  131. package/dist/settlement/messages/Deposit.js +3 -1
  132. package/dist/settlement/messages/Deposit.js.map +1 -0
  133. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +8 -0
  134. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
  135. package/dist/settlement/messages/OutgoingMessageArgument.js +1 -0
  136. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  137. package/dist/settlement/messages/Withdrawal.d.ts +13 -0
  138. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
  139. package/dist/settlement/messages/Withdrawal.js +4 -1
  140. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  141. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +5 -3
  142. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
  143. package/dist/settlement/modularity/ProvableSettlementHook.js +1 -0
  144. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  145. package/dist/settlement/modularity/types.d.ts +8 -0
  146. package/dist/settlement/modularity/types.d.ts.map +1 -0
  147. package/dist/settlement/modularity/types.js +2 -0
  148. package/dist/settlement/modularity/types.js.map +1 -0
  149. package/dist/settlement/modules/NetworkStateSettlementModule.js +1 -0
  150. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  151. package/dist/state/State.js +1 -0
  152. package/dist/state/State.js.map +1 -0
  153. package/dist/state/StateMap.js +1 -0
  154. package/dist/state/StateMap.js.map +1 -0
  155. package/dist/state/StateService.js +1 -0
  156. package/dist/state/StateService.js.map +1 -0
  157. package/dist/state/StateServiceProvider.js +1 -0
  158. package/dist/state/StateServiceProvider.js.map +1 -0
  159. package/dist/state/assert/assert.js +1 -0
  160. package/dist/state/assert/assert.js.map +1 -0
  161. package/dist/state/context/RuntimeMethodExecutionContext.js +1 -0
  162. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  163. package/dist/state/context/TransitionMethodExecutionContext.js +1 -0
  164. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  165. package/dist/state/protocol/ProtocolState.js +1 -0
  166. package/dist/state/protocol/ProtocolState.js.map +1 -0
  167. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  168. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  169. package/dist/utils/PrefixedProvableHashList.js +1 -0
  170. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  171. package/dist/utils/ProvableHashList.js +1 -0
  172. package/dist/utils/ProvableHashList.js.map +1 -0
  173. package/dist/utils/ProvableReductionHashList.js +1 -0
  174. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  175. package/dist/utils/StateTransitionReductionList.js +1 -0
  176. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  177. package/dist/utils/utils.js +1 -0
  178. package/dist/utils/utils.js.map +1 -0
  179. package/jest.config.cjs +12 -1
  180. package/package.json +4 -4
  181. package/src/hooks/NoopSettlementHook.ts +2 -2
  182. package/src/index.ts +6 -2
  183. package/src/model/StateTransitionProvableBatch.ts +24 -4
  184. package/src/protocol/Protocol.ts +36 -7
  185. package/src/protocol/ProtocolModule.ts +1 -1
  186. package/src/prover/block/BlockProvable.ts +9 -9
  187. package/src/prover/block/BlockProver.ts +94 -58
  188. package/src/prover/statetransition/StateTransitionProvable.ts +5 -8
  189. package/src/prover/statetransition/StateTransitionProver.ts +46 -40
  190. package/src/settlement/ContractModule.ts +17 -10
  191. package/src/settlement/SettlementContractModule.ts +54 -41
  192. package/src/settlement/contracts/BridgeContract.ts +237 -0
  193. package/src/settlement/contracts/BridgeContractProtocolModule.ts +43 -0
  194. package/src/settlement/contracts/DispatchContractProtocolModule.ts +37 -3
  195. package/src/settlement/contracts/DispatchSmartContract.ts +213 -23
  196. package/src/settlement/contracts/SettlementContractProtocolModule.ts +61 -20
  197. package/src/settlement/contracts/SettlementSmartContract.ts +261 -107
  198. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  199. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  200. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  201. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  202. package/src/settlement/messages/Deposit.ts +2 -1
  203. package/src/settlement/messages/Withdrawal.ts +3 -1
  204. package/src/settlement/modularity/ProvableSettlementHook.ts +6 -3
  205. package/src/settlement/modularity/types.ts +22 -0
  206. package/test/BlockProver.test.ts +2 -1
  207. package/test/TestingProtocol.ts +17 -12
  208. package/test/compiling/types.ts +28 -0
  209. package/test/modularity/types.ts +35 -0
  210. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  211. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  212. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +0 -16
  213. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  214. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  215. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +0 -19
  216. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +0 -22
  217. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +0 -1
  218. package/dist/state/context/ProtocolMethodExecutionContext.js +0 -28
  219. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -23
  220. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
@@ -1 +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"}
1
+ {"version":3,"file":"SettlementContractProtocolModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContractProtocolModule.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,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;AAG9E,OAAO,EACL,sBAAsB,EAGvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAKF,qBACa,gCAAiC,SAAQ,cAAc,CAClE,sBAAsB,EACtB,wBAAwB,CACzB;IAGG,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,2BAA2B;gBAP3B,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAExC,WAAW,EAAE,aAAa,EAE1B,sBAAsB,EAAE,8BAA8B,EAEtD,oBAAoB,EAAE,4BAA4B,EAClD,2BAA2B,EAAE,2BAA2B;IAKpE,eAAe,IAAI,+BAA+B,CAAC,sBAAsB,CAAC;IA8BpE,OAAO,CAClB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;CAwBvC"}
@@ -11,34 +11,72 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  import { inject, injectable, injectAll } from "tsyringe";
14
+ import { ChildVerificationKeyService, log, } from "@proto-kit/common";
14
15
  import { ContractModule, } from "../ContractModule";
15
- import { LazyBlockProof, SettlementSmartContract, } from "./SettlementSmartContract";
16
+ import { DispatchSmartContractBase } from "./DispatchSmartContract";
17
+ import { SettlementSmartContract, SettlementSmartContractBase, } from "./SettlementSmartContract";
18
+ import { BridgeContractBase } from "./BridgeContract";
19
+ import { DispatchContractProtocolModule } from "./DispatchContractProtocolModule";
20
+ import { BridgeContractProtocolModule } from "./BridgeContractProtocolModule";
16
21
  // 24 hours
17
22
  const DEFAULT_ESCAPE_HATCH = (60 / 3) * 24;
18
23
  export let SettlementContractProtocolModule = class SettlementContractProtocolModule extends ContractModule {
19
- constructor(hooks, blockProver) {
20
- LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram[0].Proof.tag;
24
+ constructor(hooks, blockProver, dispatchContractModule, bridgeContractModule, childVerificationKeyService) {
21
25
  super();
22
26
  this.hooks = hooks;
23
27
  this.blockProver = blockProver;
28
+ this.dispatchContractModule = dispatchContractModule;
29
+ this.bridgeContractModule = bridgeContractModule;
30
+ this.childVerificationKeyService = childVerificationKeyService;
24
31
  }
25
- contractFactory(dispatchContract) {
32
+ contractFactory() {
26
33
  const { hooks, config } = this;
27
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
28
- const withdrawalStatePathSplit = config.withdrawalStatePath.split(".");
34
+ const dispatchContract = this.dispatchContractModule.contractFactory();
35
+ const bridgeContract = this.bridgeContractModule.contractFactory();
29
36
  const escapeHatchSlotsInterval = config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
30
- SettlementSmartContract.args = {
37
+ const { args } = SettlementSmartContractBase;
38
+ SettlementSmartContractBase.args = {
31
39
  DispatchContract: dispatchContract,
32
40
  hooks,
33
- withdrawalStatePath: withdrawalStatePathSplit,
34
41
  escapeHatchSlotsInterval,
42
+ BridgeContract: bridgeContract,
43
+ BridgeContractVerificationKey: args?.BridgeContractVerificationKey,
44
+ BridgeContractPermissions: args?.BridgeContractPermissions,
45
+ signedSettlements: args?.signedSettlements,
46
+ ChildVerificationKeyService: this.childVerificationKeyService,
35
47
  };
48
+ // Ideally we don't want to have this cyclic dependency, but we have it in the protocol,
49
+ // So its logical that we can't avoid that here
50
+ BridgeContractBase.args.SettlementContract = SettlementSmartContract;
51
+ DispatchSmartContractBase.args.settlementContractClass =
52
+ SettlementSmartContract;
36
53
  return SettlementSmartContract;
37
54
  }
55
+ async compile(registry) {
56
+ // Dependencies
57
+ const bridgeArtifact = await this.bridgeContractModule.compile(registry);
58
+ await this.blockProver.compile(registry);
59
+ // Init params
60
+ SettlementSmartContractBase.args.BridgeContractVerificationKey =
61
+ bridgeArtifact.BridgeContract.verificationKey;
62
+ if (SettlementSmartContractBase.args.signedSettlements === undefined) {
63
+ throw new Error("Args not fully initialized - make sure to also include the SettlementModule in the sequencer");
64
+ }
65
+ log.debug("Compiling Settlement Contract");
66
+ const artifact = await registry.compile(SettlementSmartContract);
67
+ return {
68
+ SettlementSmartContract: artifact,
69
+ };
70
+ }
38
71
  };
39
72
  SettlementContractProtocolModule = __decorate([
40
73
  injectable(),
41
74
  __param(0, injectAll("ProvableSettlementHook")),
42
75
  __param(1, inject("BlockProver")),
43
- __metadata("design:paramtypes", [Array, Object])
76
+ __param(2, inject("DispatchContract")),
77
+ __param(3, inject("BridgeContract")),
78
+ __metadata("design:paramtypes", [Array, Object, DispatchContractProtocolModule,
79
+ BridgeContractProtocolModule,
80
+ ChildVerificationKeyService])
44
81
  ], SettlementContractProtocolModule);
82
+ //# sourceMappingURL=SettlementContractProtocolModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementContractProtocolModule.js","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContractProtocolModule.ts"],"names":[],"mappings":"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"}
@@ -1,42 +1,123 @@
1
- import { TypedClass } from "@proto-kit/common";
2
- import { AccountUpdate, Field, Proof, PublicKey, Signature, SmartContract, State, UInt32, TokenContract, AccountUpdateForest } from "o1js";
1
+ import { TypedClass, ChildVerificationKeyService } from "@proto-kit/common";
2
+ import { AccountUpdate, Field, PublicKey, Signature, SmartContract, State, UInt32, AccountUpdateForest, TokenContractV2, PrivateKey, VerificationKey, Permissions, DynamicProof } from "o1js";
3
3
  import { NetworkState } from "../../model/network/NetworkState";
4
4
  import { BlockProverPublicInput, BlockProverPublicOutput } from "../../prover/block/BlockProvable";
5
- import { OutgoingMessageArgumentBatch } from "../messages/OutgoingMessageArgument";
6
5
  import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
7
6
  import { DispatchContractType } from "./DispatchSmartContract";
8
- export declare class LazyBlockProof extends Proof<BlockProverPublicInput, BlockProverPublicOutput> {
7
+ import { BridgeContractType } from "./BridgeContract";
8
+ export declare class DynamicBlockProof extends DynamicProof<BlockProverPublicInput, BlockProverPublicOutput> {
9
9
  static publicInputType: typeof BlockProverPublicInput;
10
10
  static publicOutputType: typeof BlockProverPublicOutput;
11
- static tag: () => {
12
- name: string;
11
+ static maxProofsVerified: 2;
12
+ }
13
+ declare const TokenMapping_base: (new (value: {
14
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
15
+ publicKey: PublicKey;
16
+ }) => {
17
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
18
+ publicKey: PublicKey;
19
+ }) & {
20
+ _isStruct: true;
21
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
22
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
23
+ publicKey: PublicKey;
24
+ }, {
25
+ tokenId: bigint;
26
+ publicKey: {
27
+ x: bigint;
28
+ isOdd: boolean;
29
+ };
30
+ }>, "fromFields"> & {
31
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
32
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
33
+ publicKey: PublicKey;
34
+ };
35
+ } & {
36
+ fromValue: (value: {
37
+ tokenId: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
38
+ publicKey: PublicKey | {
39
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
40
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
41
+ };
42
+ }) => {
43
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
44
+ publicKey: PublicKey;
45
+ };
46
+ toInput: (x: {
47
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
48
+ publicKey: PublicKey;
49
+ }) => {
50
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
51
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
52
+ };
53
+ toJSON: (x: {
54
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
55
+ publicKey: PublicKey;
56
+ }) => {
57
+ tokenId: string;
58
+ publicKey: string;
13
59
  };
60
+ fromJSON: (x: {
61
+ tokenId: string;
62
+ publicKey: string;
63
+ }) => {
64
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
65
+ publicKey: PublicKey;
66
+ };
67
+ empty: () => {
68
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
69
+ publicKey: PublicKey;
70
+ };
71
+ };
72
+ export declare class TokenMapping extends TokenMapping_base {
14
73
  }
15
74
  export interface SettlementContractType {
16
- initialize: (sequencer: PublicKey, dispatchContract: PublicKey) => Promise<void>;
17
- settle: (blockProof: LazyBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field) => Promise<void>;
18
- rollupOutgoingMessages: (batch: OutgoingMessageArgumentBatch) => Promise<void>;
19
- redeem: (additionUpdate: AccountUpdate) => Promise<void>;
75
+ authorizationField: State<Field>;
76
+ initialize: (sequencer: PublicKey, dispatchContract: PublicKey, bridgeContract: PublicKey, contractKey: PrivateKey) => Promise<void>;
77
+ assertStateRoot: (root: Field) => AccountUpdate;
78
+ settle: (blockProof: DynamicBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field) => Promise<void>;
79
+ addTokenBridge: (tokenId: Field, address: PublicKey, dispatchContract: PublicKey) => Promise<void>;
20
80
  }
21
81
  export declare const BATCH_SIGNATURE_PREFIX: import("o1js/dist/node/lib/provable/field").Field;
22
- export declare class SettlementSmartContract extends TokenContract implements SettlementContractType {
82
+ export declare abstract class SettlementSmartContractBase extends TokenContractV2 {
23
83
  static args: {
24
84
  DispatchContract: TypedClass<DispatchContractType & SmartContract>;
25
85
  hooks: ProvableSettlementHook<unknown>[];
26
- withdrawalStatePath: [string, string];
27
86
  escapeHatchSlotsInterval: number;
87
+ BridgeContract: TypedClass<BridgeContractType> & typeof SmartContract;
88
+ BridgeContractVerificationKey: VerificationKey | undefined;
89
+ BridgeContractPermissions: Permissions | undefined;
90
+ signedSettlements: boolean | undefined;
91
+ ChildVerificationKeyService: ChildVerificationKeyService;
28
92
  };
93
+ events: {
94
+ "token-bridge-deployed": typeof TokenMapping;
95
+ };
96
+ abstract sequencerKey: State<Field>;
97
+ abstract lastSettlementL1BlockHeight: State<UInt32>;
98
+ abstract stateRoot: State<Field>;
99
+ abstract networkStateHash: State<Field>;
100
+ abstract blockHashRoot: State<Field>;
101
+ abstract dispatchContractAddressX: State<Field>;
102
+ abstract authorizationField: State<Field>;
103
+ assertStateRoot(root: Field): AccountUpdate;
104
+ private assertLazyConfigsInitialized;
105
+ protected deployTokenBridge(tokenId: Field, address: PublicKey, dispatchContractAddress: PublicKey, dispatchContractPreconditionEnforced?: boolean): Promise<void>;
106
+ protected initializeBase(sequencer: PublicKey, dispatchContract: PublicKey, bridgeContract: PublicKey, contractKey: PrivateKey): Promise<void>;
107
+ protected settleBase(blockProof: DynamicBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): Promise<void>;
108
+ }
109
+ export declare class SettlementSmartContract extends SettlementSmartContractBase implements SettlementContractType {
29
110
  sequencerKey: State<import("o1js/dist/node/lib/provable/field").Field>;
30
111
  lastSettlementL1BlockHeight: State<UInt32>;
31
112
  stateRoot: State<import("o1js/dist/node/lib/provable/field").Field>;
32
113
  networkStateHash: State<import("o1js/dist/node/lib/provable/field").Field>;
33
114
  blockHashRoot: State<import("o1js/dist/node/lib/provable/field").Field>;
34
115
  dispatchContractAddressX: State<import("o1js/dist/node/lib/provable/field").Field>;
35
- outgoingMessageCursor: State<import("o1js/dist/node/lib/provable/field").Field>;
116
+ authorizationField: State<import("o1js/dist/node/lib/provable/field").Field>;
36
117
  approveBase(forest: AccountUpdateForest): Promise<void>;
37
- initialize(sequencer: PublicKey, dispatchContract: PublicKey): Promise<void>;
38
- settle(blockProof: LazyBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): Promise<void>;
39
- rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch): Promise<void>;
40
- redeem(additionUpdate: AccountUpdate): Promise<void>;
118
+ initialize(sequencer: PublicKey, dispatchContract: PublicKey, bridgeContract: PublicKey, contractKey: PrivateKey): Promise<void>;
119
+ addTokenBridge(tokenId: Field, address: PublicKey, dispatchContract: PublicKey): Promise<void>;
120
+ settle(blockProof: DynamicBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): Promise<void>;
41
121
  }
122
+ export {};
42
123
  //# sourceMappingURL=SettlementSmartContract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettlementSmartContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementSmartContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EAEb,KAAK,EAIL,KAAK,EAEL,SAAS,EACT,SAAS,EACT,aAAa,EACb,KAAK,EAGL,MAAM,EAEN,aAAa,EACb,mBAAmB,EACpB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,4BAA4B,EAC7B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,sBAAsB,EAGvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAI/D,qBAAa,cAAe,SAAQ,KAAK,CACvC,sBAAsB,EACtB,uBAAuB,CACxB;IACC,OAAc,eAAe,gCAA0B;IAEvD,OAAc,gBAAgB,iCAA2B;IAEzD,OAAc,GAAG,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAEvC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,CACV,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,SAAS,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,CACN,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,SAAS,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,YAAY,EAC/B,kBAAkB,EAAE,YAAY,EAChC,uBAAuB,EAAE,KAAK,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sBAAsB,EAAE,CACtB,KAAK,EAAE,4BAA4B,KAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAGD,eAAO,MAAM,sBAAsB,mDAAqC,CAAC;AAEzE,qBAAa,uBACX,SAAQ,aACR,YAAW,sBAAsB;IAIjC,OAAc,IAAI,EAAE;QAClB,gBAAgB,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,CAAC;QACnE,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,wBAAwB,EAAE,MAAM,CAAC;KAClC,CAAC;IAEmB,YAAY,2DAAkB;IAC7B,2BAA2B,gBAAmB;IAE/C,SAAS,2DAAkB;IAC3B,gBAAgB,2DAAkB;IAClC,aAAa,2DAAkB;IAE/B,wBAAwB,2DAAkB;IAE1C,qBAAqB,2DAAkB;IAE9C,WAAW,CAAC,MAAM,EAAE,mBAAmB;IAKxC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS;IAmB5D,MAAM,CACjB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,SAAS,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,YAAY,EAC/B,kBAAkB,EAAE,YAAY,EAChC,uBAAuB,EAAE,KAAK;IAiInB,sBAAsB,CAAC,KAAK,EAAE,4BAA4B;IAoD1D,MAAM,CAAC,cAAc,EAAE,aAAa;CAoBlD"}
1
+ {"version":3,"file":"SettlementSmartContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementSmartContract.ts"],"names":[],"mappings":"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"}
@@ -8,38 +8,109 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { prefixToField, RollupMerkleTree, mapSequential, } from "@proto-kit/common";
11
- import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Signature, State, state, TokenId, UInt32, UInt64, TokenContract, AccountUpdateForest, } from "o1js";
11
+ import { Bool, Field, method, PublicKey, Signature, State, state, UInt32, AccountUpdateForest, TokenContractV2, PrivateKey, Struct, Provable, TokenId, DynamicProof, } from "o1js";
12
12
  import { NetworkState } from "../../model/network/NetworkState";
13
- import { Path } from "../../model/Path";
14
13
  import { BlockHashMerkleTree } from "../../prover/block/accummulators/BlockHashMerkleTree";
15
14
  import { BlockProverPublicInput, BlockProverPublicOutput, } from "../../prover/block/BlockProvable";
16
- import { OUTGOING_MESSAGE_BATCH_SIZE, OutgoingMessageArgumentBatch, } from "../messages/OutgoingMessageArgument";
17
- import { Withdrawal } from "../messages/Withdrawal";
15
+ import { TokenBridgeDeploymentAuth } from "./authorizations/TokenBridgeDeploymentAuth";
16
+ import { UpdateMessagesHashAuth } from "./authorizations/UpdateMessagesHashAuth";
18
17
  /* eslint-disable @typescript-eslint/lines-between-class-members */
19
- export class LazyBlockProof extends Proof {
18
+ export class DynamicBlockProof extends DynamicProof {
19
+ }
20
+ DynamicBlockProof.publicInputType = BlockProverPublicInput;
21
+ DynamicBlockProof.publicOutputType = BlockProverPublicOutput;
22
+ DynamicBlockProof.maxProofsVerified = 2;
23
+ export class TokenMapping extends Struct({
24
+ tokenId: Field,
25
+ publicKey: PublicKey,
26
+ }) {
20
27
  }
21
- LazyBlockProof.publicInputType = BlockProverPublicInput;
22
- LazyBlockProof.publicOutputType = BlockProverPublicOutput;
23
- LazyBlockProof.tag = () => {
24
- throw new Error("Tag not initialized yet");
25
- };
26
28
  // Some random prefix for the sequencer signature
27
29
  export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
28
- export class SettlementSmartContract extends TokenContract {
30
+ // @singleton()
31
+ // export class SettlementSmartContractStaticArgs {
32
+ // public args?: {
33
+ // DispatchContract: TypedClass<DispatchContractType & SmartContract>;
34
+ // hooks: ProvableSettlementHook<unknown>[];
35
+ // escapeHatchSlotsInterval: number;
36
+ // BridgeContract: TypedClass<BridgeContractType> & typeof SmartContract;
37
+ // // Lazily initialized
38
+ // BridgeContractVerificationKey: VerificationKey | undefined;
39
+ // BridgeContractPermissions: Permissions | undefined;
40
+ // signedSettlements: boolean | undefined;
41
+ // };
42
+ // }
43
+ export class SettlementSmartContractBase extends TokenContractV2 {
29
44
  constructor() {
30
45
  super(...arguments);
31
- this.sequencerKey = State();
32
- this.lastSettlementL1BlockHeight = State();
33
- this.stateRoot = State();
34
- this.networkStateHash = State();
35
- this.blockHashRoot = State();
36
- this.dispatchContractAddressX = State();
37
- this.outgoingMessageCursor = State();
46
+ this.events = {
47
+ "token-bridge-deployed": TokenMapping,
48
+ };
38
49
  }
39
- async approveBase(forest) {
40
- this.checkZeroBalanceChange(forest);
50
+ // Not @state
51
+ // abstract offchainStateCommitmentsHash: State<Field>;
52
+ assertStateRoot(root) {
53
+ this.stateRoot.requireEquals(root);
54
+ return this.self;
55
+ }
56
+ // TODO Like these properties, I am too lazy to properly infer the types here
57
+ assertLazyConfigsInitialized() {
58
+ const uninitializedProperties = [];
59
+ const { args } = SettlementSmartContractBase;
60
+ if (args.BridgeContractPermissions === undefined) {
61
+ uninitializedProperties.push("BridgeContractPermissions");
62
+ }
63
+ if (args.signedSettlements === undefined) {
64
+ uninitializedProperties.push("signedSettlements");
65
+ }
66
+ if (uninitializedProperties.length > 0) {
67
+ throw new Error(`Lazy configs of SettlementSmartContract haven't been initialized ${uninitializedProperties.reduce((a, b) => `${a},${b}`)}`);
68
+ }
41
69
  }
42
- async initialize(sequencer, dispatchContract) {
70
+ async deployTokenBridge(tokenId, address, dispatchContractAddress, dispatchContractPreconditionEnforced = false) {
71
+ Provable.asProver(() => {
72
+ this.assertLazyConfigsInitialized();
73
+ });
74
+ const { args } = SettlementSmartContractBase;
75
+ const BridgeContractClass = args.BridgeContract;
76
+ const bridgeContract = new BridgeContractClass(address, tokenId);
77
+ const { BridgeContractVerificationKey, signedSettlements, BridgeContractPermissions, } = args;
78
+ if (signedSettlements === undefined ||
79
+ BridgeContractPermissions === undefined) {
80
+ throw new Error("Static arguments for SettlementSmartContract not initialized");
81
+ }
82
+ if (BridgeContractVerificationKey !== undefined &&
83
+ !BridgeContractVerificationKey.hash.isConstant()) {
84
+ throw new Error("Bridge contract verification key has to be constants");
85
+ }
86
+ // This function is not a zkapps method, therefore it will be part of this methods execution
87
+ // The returning account update (owner.self) is therefore part of this circuit and is assertable
88
+ const deploymentAccountUpdate = await bridgeContract.deployProvable(args.BridgeContractVerificationKey, args.signedSettlements, args.BridgeContractPermissions, this.address);
89
+ this.approve(deploymentAccountUpdate);
90
+ this.self.body.mayUseToken = {
91
+ // Only set this if we deploy a custom token
92
+ parentsOwnToken: tokenId.equals(TokenId.default).not(),
93
+ inheritFromParent: Bool(false),
94
+ };
95
+ this.emitEvent("token-bridge-deployed", new TokenMapping({
96
+ tokenId: tokenId,
97
+ publicKey: address,
98
+ }));
99
+ // We can't set a precondition twice, for the $mina bridge deployment that
100
+ // would be the case, so we disable it in this case
101
+ if (!dispatchContractPreconditionEnforced) {
102
+ this.dispatchContractAddressX.requireEquals(dispatchContractAddress.x);
103
+ }
104
+ // Set authorization for the auth callback, that we need
105
+ this.authorizationField.set(new TokenBridgeDeploymentAuth({
106
+ target: dispatchContractAddress,
107
+ tokenId,
108
+ address,
109
+ }).hash());
110
+ const dispatchContract = new SettlementSmartContractBase.args.DispatchContract(dispatchContractAddress);
111
+ await dispatchContract.enableTokenDeposits(tokenId, address, this.address);
112
+ }
113
+ async initializeBase(sequencer, dispatchContract, bridgeContract, contractKey) {
43
114
  this.sequencerKey.getAndRequireEquals().assertEquals(Field(0));
44
115
  this.stateRoot.getAndRequireEquals().assertEquals(Field(0));
45
116
  this.blockHashRoot.getAndRequireEquals().assertEquals(Field(0));
@@ -50,13 +121,21 @@ export class SettlementSmartContract extends TokenContract {
50
121
  this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
51
122
  this.networkStateHash.set(NetworkState.empty().hash());
52
123
  this.dispatchContractAddressX.set(dispatchContract.x);
53
- const { DispatchContract } = SettlementSmartContract.args;
124
+ const { DispatchContract } = SettlementSmartContractBase.args;
54
125
  const contractInstance = new DispatchContract(dispatchContract);
55
126
  await contractInstance.initialize(this.address);
127
+ // Deploy bridge contract for $Mina
128
+ await this.deployTokenBridge(this.tokenId, bridgeContract, dispatchContract, true);
129
+ contractKey.toPublicKey().assertEquals(this.address);
56
130
  }
57
- async settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
131
+ async settleBase(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
132
+ // Brought in as a constant
133
+ const blockProofVk = SettlementSmartContractBase.args.ChildVerificationKeyService.getVerificationKey("BlockProver");
134
+ if (!blockProofVk.hash.isConstant()) {
135
+ throw new Error("Sanity check - vk hash has to be constant");
136
+ }
58
137
  // Verify the blockproof
59
- blockProof.verify();
138
+ blockProof.verify(blockProofVk);
60
139
  // Get and assert on-chain values
61
140
  const stateRoot = this.stateRoot.getAndRequireEquals();
62
141
  const networkStateHash = this.networkStateHash.getAndRequireEquals();
@@ -65,7 +144,7 @@ export class SettlementSmartContract extends TokenContract {
65
144
  const lastSettlementL1BlockHeight = this.lastSettlementL1BlockHeight.getAndRequireEquals();
66
145
  const onChainDispatchContractAddressX = this.dispatchContractAddressX.getAndRequireEquals();
67
146
  onChainDispatchContractAddressX.assertEquals(dispatchContractAddress.x, "DispatchContract address not provided correctly");
68
- const { DispatchContract, escapeHatchSlotsInterval, hooks } = SettlementSmartContract.args;
147
+ const { DispatchContract, escapeHatchSlotsInterval, hooks } = SettlementSmartContractBase.args;
69
148
  // Get dispatch contract values
70
149
  // These values are witnesses but will be checked later on the AU
71
150
  // call to the dispatch contract via .updateMessagesHash()
@@ -124,6 +203,12 @@ export class SettlementSmartContract extends TokenContract {
124
203
  this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
125
204
  // Assert and apply deposit commitments
126
205
  promisedMessagesHash.assertEquals(blockProof.publicOutput.incomingMessagesHash, "Promised messages not honored");
206
+ // Set authorization for the dispatchContract to verify the messages hash update
207
+ this.authorizationField.set(new UpdateMessagesHashAuth({
208
+ target: dispatchContract.address,
209
+ executedMessagesHash: promisedMessagesHash,
210
+ newPromisedMessagesHash,
211
+ }).hash());
127
212
  // Call DispatchContract
128
213
  // This call checks that the promisedMessagesHash, which is already proven
129
214
  // to be the blockProofs publicoutput, is actually the current on-chain
@@ -132,46 +217,29 @@ export class SettlementSmartContract extends TokenContract {
132
217
  await dispatchContract.updateMessagesHash(promisedMessagesHash, newPromisedMessagesHash);
133
218
  this.lastSettlementL1BlockHeight.set(minBlockHeightIncluded);
134
219
  }
135
- async rollupOutgoingMessages(batch) {
136
- let counter = this.outgoingMessageCursor.getAndRequireEquals();
137
- const stateRoot = this.stateRoot.getAndRequireEquals();
138
- const [withdrawalModule, withdrawalStateName] = SettlementSmartContract.args.withdrawalStatePath;
139
- const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
140
- let accountCreationFeePaid = Field(0);
141
- for (let i = 0; i < OUTGOING_MESSAGE_BATCH_SIZE; i++) {
142
- const args = batch.arguments[i];
143
- // Check witness
144
- const path = Path.fromKey(mapPath, Field, counter);
145
- args.witness
146
- .checkMembership(stateRoot, path, Poseidon.hash(Withdrawal.toFields(args.value)))
147
- .assertTrue("Provided Withdrawal witness not valid");
148
- // Process message
149
- const { address, amount } = args.value;
150
- const isDummy = address.equals(this.address);
151
- const tokenAu = this.internal.mint({ address, amount });
152
- const isNewAccount = tokenAu.account.isNew.getAndRequireEquals();
153
- tokenAu.body.balanceChange.magnitude =
154
- tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.getNetworkConstants().accountCreationFee.toConstant(), UInt64.zero));
155
- accountCreationFeePaid = accountCreationFeePaid.add(Provable.if(isNewAccount, Field(1e9), Field(0)));
156
- counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
157
- }
158
- this.balance.subInPlace(UInt64.Unsafe.fromField(accountCreationFeePaid));
159
- this.outgoingMessageCursor.set(counter);
220
+ }
221
+ export class SettlementSmartContract extends SettlementSmartContractBase {
222
+ constructor() {
223
+ super(...arguments);
224
+ this.sequencerKey = State();
225
+ this.lastSettlementL1BlockHeight = State();
226
+ this.stateRoot = State();
227
+ this.networkStateHash = State();
228
+ this.blockHashRoot = State();
229
+ this.dispatchContractAddressX = State();
230
+ this.authorizationField = State();
160
231
  }
161
- async redeem(additionUpdate) {
162
- additionUpdate.body.tokenId.assertEquals(TokenId.default, "Tokenid not default token");
163
- additionUpdate.body.balanceChange.sgn
164
- .isPositive()
165
- .assertTrue("Sign not correct");
166
- const amount = additionUpdate.body.balanceChange.magnitude;
167
- // Burn tokens
168
- this.internal.burn({
169
- address: additionUpdate.publicKey,
170
- amount,
171
- });
172
- // Send mina
173
- this.approve(additionUpdate);
174
- this.balance.subInPlace(amount);
232
+ async approveBase(forest) {
233
+ this.checkZeroBalanceChange(forest);
234
+ }
235
+ async initialize(sequencer, dispatchContract, bridgeContract, contractKey) {
236
+ await this.initializeBase(sequencer, dispatchContract, bridgeContract, contractKey);
237
+ }
238
+ async addTokenBridge(tokenId, address, dispatchContract) {
239
+ await this.deployTokenBridge(tokenId, address, dispatchContract);
240
+ }
241
+ async settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
242
+ return await this.settleBase(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash);
175
243
  }
176
244
  }
177
245
  __decorate([
@@ -201,7 +269,7 @@ __decorate([
201
269
  __decorate([
202
270
  state(Field),
203
271
  __metadata("design:type", Object)
204
- ], SettlementSmartContract.prototype, "outgoingMessageCursor", void 0);
272
+ ], SettlementSmartContract.prototype, "authorizationField", void 0);
205
273
  __decorate([
206
274
  method,
207
275
  __metadata("design:type", Function),
@@ -211,13 +279,24 @@ __decorate([
211
279
  __decorate([
212
280
  method,
213
281
  __metadata("design:type", Function),
214
- __metadata("design:paramtypes", [PublicKey, PublicKey]),
282
+ __metadata("design:paramtypes", [PublicKey,
283
+ PublicKey,
284
+ PublicKey,
285
+ PrivateKey]),
215
286
  __metadata("design:returntype", Promise)
216
287
  ], SettlementSmartContract.prototype, "initialize", null);
217
288
  __decorate([
218
289
  method,
219
290
  __metadata("design:type", Function),
220
- __metadata("design:paramtypes", [LazyBlockProof,
291
+ __metadata("design:paramtypes", [Field,
292
+ PublicKey,
293
+ PublicKey]),
294
+ __metadata("design:returntype", Promise)
295
+ ], SettlementSmartContract.prototype, "addTokenBridge", null);
296
+ __decorate([
297
+ method,
298
+ __metadata("design:type", Function),
299
+ __metadata("design:paramtypes", [DynamicBlockProof,
221
300
  Signature,
222
301
  PublicKey,
223
302
  PublicKey,
@@ -226,16 +305,5 @@ __decorate([
226
305
  Field]),
227
306
  __metadata("design:returntype", Promise)
228
307
  ], SettlementSmartContract.prototype, "settle", null);
229
- __decorate([
230
- method,
231
- __metadata("design:type", Function),
232
- __metadata("design:paramtypes", [OutgoingMessageArgumentBatch]),
233
- __metadata("design:returntype", Promise)
234
- ], SettlementSmartContract.prototype, "rollupOutgoingMessages", null);
235
- __decorate([
236
- method,
237
- __metadata("design:type", Function),
238
- __metadata("design:paramtypes", [AccountUpdate]),
239
- __metadata("design:returntype", Promise)
240
- ], SettlementSmartContract.prototype, "redeem", null);
241
308
  /* eslint-enable @typescript-eslint/lines-between-class-members */
309
+ //# sourceMappingURL=SettlementSmartContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementSmartContract.js","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementSmartContract.ts"],"names":[],"mappings":"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"}