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

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 (196) hide show
  1. package/dist/blockmodules/AccountStateModule.d.ts.map +1 -1
  2. package/dist/blockmodules/AccountStateModule.js +10 -3
  3. package/dist/blockmodules/BlockHeightHook.d.ts +3 -3
  4. package/dist/blockmodules/BlockHeightHook.d.ts.map +1 -1
  5. package/dist/blockmodules/BlockHeightHook.js +5 -4
  6. package/dist/blockmodules/LastStateRootBlockHook.d.ts +8 -0
  7. package/dist/blockmodules/LastStateRootBlockHook.d.ts.map +1 -0
  8. package/dist/blockmodules/LastStateRootBlockHook.js +15 -0
  9. package/dist/blockmodules/NoopBlockHook.d.ts +6 -4
  10. package/dist/blockmodules/NoopBlockHook.d.ts.map +1 -1
  11. package/dist/blockmodules/NoopBlockHook.js +4 -4
  12. package/dist/blockmodules/NoopSettlementHook.d.ts +6 -0
  13. package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -0
  14. package/dist/blockmodules/NoopSettlementHook.js +18 -0
  15. package/dist/hooks/AccountStateHook.d.ts.map +1 -1
  16. package/dist/hooks/AccountStateHook.js +17 -5
  17. package/dist/hooks/BlockHeightHook.d.ts +3 -3
  18. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  19. package/dist/hooks/BlockHeightHook.js +5 -4
  20. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  21. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  22. package/dist/hooks/LastStateRootBlockHook.js +15 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +6 -4
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  25. package/dist/hooks/NoopBlockHook.js +4 -4
  26. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  28. package/dist/hooks/NoopSettlementHook.js +18 -0
  29. package/dist/index.d.ts +24 -6
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +24 -6
  32. package/dist/model/MethodPublicOutput.d.ts +8 -0
  33. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  34. package/dist/model/MethodPublicOutput.js +1 -0
  35. package/dist/model/Option.d.ts +3 -2
  36. package/dist/model/Option.d.ts.map +1 -1
  37. package/dist/model/Option.js +5 -0
  38. package/dist/model/RuntimeLike.d.ts +11 -0
  39. package/dist/model/RuntimeLike.d.ts.map +1 -0
  40. package/dist/model/RuntimeLike.js +1 -0
  41. package/dist/model/StateTransition.d.ts +6 -5
  42. package/dist/model/StateTransition.d.ts.map +1 -1
  43. package/dist/model/StateTransition.js +3 -0
  44. package/dist/model/StateTransitionReduction.d.ts +3 -0
  45. package/dist/model/StateTransitionReduction.d.ts.map +1 -0
  46. package/dist/model/StateTransitionReduction.js +26 -0
  47. package/dist/model/network/NetworkState.d.ts +40 -0
  48. package/dist/model/network/NetworkState.d.ts.map +1 -1
  49. package/dist/model/network/NetworkState.js +14 -2
  50. package/dist/model/transaction/RuntimeTransaction.d.ts +45 -20
  51. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  52. package/dist/model/transaction/RuntimeTransaction.js +68 -11
  53. package/dist/model/transaction/SignedTransaction.d.ts +71 -0
  54. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  55. package/dist/model/transaction/SignedTransaction.js +33 -0
  56. package/dist/model/transaction/ValueOption.d.ts +119 -0
  57. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  58. package/dist/model/transaction/ValueOption.js +24 -0
  59. package/dist/protocol/Protocol.d.ts +13 -16
  60. package/dist/protocol/Protocol.d.ts.map +1 -1
  61. package/dist/protocol/Protocol.js +26 -39
  62. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  63. package/dist/protocol/ProtocolModule.js +1 -1
  64. package/dist/protocol/ProvableBlockHook.d.ts +2 -10
  65. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  66. package/dist/protocol/ProvableBlockHook.js +1 -1
  67. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  68. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  69. package/dist/protocol/TransitioningProtocolModule.d.ts +3 -2
  70. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
  71. package/dist/protocol/TransitioningProtocolModule.js +3 -2
  72. package/dist/prover/block/BlockProvable.d.ts +106 -28
  73. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  74. package/dist/prover/block/BlockProvable.js +23 -5
  75. package/dist/prover/block/BlockProver.d.ts +29 -8
  76. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  77. package/dist/prover/block/BlockProver.js +244 -78
  78. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +45 -0
  79. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  80. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +16 -0
  81. package/dist/prover/statetransition/StateTransitionProver.d.ts +3 -2
  82. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  83. package/dist/prover/statetransition/StateTransitionProver.js +1 -0
  84. package/dist/settlement/ContractModule.d.ts +15 -0
  85. package/dist/settlement/ContractModule.d.ts.map +1 -0
  86. package/dist/settlement/ContractModule.js +11 -0
  87. package/dist/settlement/ProvableSettlementHook.d.ts +26 -0
  88. package/dist/settlement/ProvableSettlementHook.d.ts.map +1 -0
  89. package/dist/settlement/ProvableSettlementHook.js +3 -0
  90. package/dist/settlement/SettlementContract.d.ts +230 -0
  91. package/dist/settlement/SettlementContract.d.ts.map +1 -0
  92. package/dist/settlement/SettlementContract.js +346 -0
  93. package/dist/settlement/SettlementContractModule.d.ts +39 -0
  94. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  95. package/dist/settlement/SettlementContractModule.js +68 -0
  96. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
  97. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  98. package/dist/settlement/contracts/DispatchContractProtocolModule.js +36 -0
  99. package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
  100. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  101. package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
  102. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
  103. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  104. package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
  105. package/dist/settlement/contracts/SettlementSmartContract.d.ts +41 -0
  106. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  107. package/dist/settlement/contracts/SettlementSmartContract.js +235 -0
  108. package/dist/settlement/messages/Deposit.d.ts +39 -0
  109. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  110. package/dist/settlement/messages/Deposit.js +6 -0
  111. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +109 -0
  112. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  113. package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
  114. package/dist/settlement/messages/Withdrawal.d.ts +40 -0
  115. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  116. package/dist/settlement/messages/Withdrawal.js +13 -0
  117. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
  118. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  119. package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
  120. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  121. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  122. package/dist/settlement/modules/NetworkStateSettlementModule.js +12 -0
  123. package/dist/state/State.d.ts.map +1 -1
  124. package/dist/state/State.js +2 -1
  125. package/dist/state/assert/assert.d.ts.map +1 -1
  126. package/dist/state/assert/assert.js +8 -5
  127. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +75 -1
  128. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  129. package/dist/state/context/RuntimeMethodExecutionContext.js +21 -2
  130. package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
  131. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  132. package/dist/utils/MinaPrefixedProvableHashList.js +51 -0
  133. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  134. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  135. package/dist/utils/ProvableHashList.d.ts +3 -3
  136. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  137. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  138. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  139. package/dist/utils/ProvableReductionHashList.js +50 -0
  140. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  141. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  142. package/dist/utils/StateTransitionReductionList.js +60 -0
  143. package/package.json +2 -2
  144. package/src/hooks/AccountStateHook.ts +46 -0
  145. package/src/hooks/BlockHeightHook.ts +18 -0
  146. package/src/hooks/LastStateRootBlockHook.ts +26 -0
  147. package/src/hooks/NoopBlockHook.ts +20 -0
  148. package/src/hooks/NoopSettlementHook.ts +20 -0
  149. package/src/hooks/SequenceStateTransactionModule.ts +25 -0
  150. package/src/index.ts +24 -6
  151. package/src/model/MethodPublicOutput.ts +3 -2
  152. package/src/model/Option.ts +16 -0
  153. package/src/model/RuntimeLike.ts +12 -0
  154. package/src/model/StateTransition.ts +10 -2
  155. package/src/model/network/NetworkState.ts +15 -3
  156. package/src/model/transaction/RuntimeTransaction.ts +90 -16
  157. package/src/model/transaction/SignedTransaction.ts +54 -0
  158. package/src/model/transaction/ValueOption.ts +28 -0
  159. package/src/protocol/Protocol.ts +60 -67
  160. package/src/protocol/ProtocolModule.ts +3 -2
  161. package/src/protocol/ProvableBlockHook.ts +10 -13
  162. package/src/protocol/ProvableTransactionHook.ts +2 -1
  163. package/src/protocol/TransitioningProtocolModule.ts +3 -2
  164. package/src/prover/block/BlockProvable.ts +39 -6
  165. package/src/prover/block/BlockProver.ts +484 -142
  166. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -0
  167. package/src/prover/statetransition/StateTransitionProver.ts +4 -2
  168. package/src/settlement/ContractModule.ts +24 -0
  169. package/src/settlement/SettlementContractModule.ts +127 -0
  170. package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
  171. package/src/settlement/contracts/DispatchSmartContract.ts +135 -0
  172. package/src/settlement/contracts/SettlementContractProtocolModule.ts +65 -0
  173. package/src/settlement/contracts/SettlementSmartContract.ts +329 -0
  174. package/src/settlement/messages/Deposit.ts +6 -0
  175. package/src/settlement/messages/OutgoingMessageArgument.ts +41 -0
  176. package/src/settlement/messages/Withdrawal.ts +14 -0
  177. package/src/settlement/modularity/ProvableSettlementHook.ts +34 -0
  178. package/src/settlement/modules/NetworkStateSettlementModule.ts +39 -0
  179. package/src/state/State.ts +2 -1
  180. package/src/state/assert/assert.ts +8 -6
  181. package/src/state/context/RuntimeMethodExecutionContext.ts +22 -2
  182. package/src/utils/MinaPrefixedProvableHashList.ts +72 -0
  183. package/src/utils/PrefixedProvableHashList.ts +2 -2
  184. package/src/utils/ProvableHashList.ts +3 -3
  185. package/src/utils/ProvableReductionHashList.ts +68 -0
  186. package/src/utils/StateTransitionReductionList.ts +88 -0
  187. package/test/BlockProver.test.ts +4 -5
  188. package/test/Protocol.test.ts +15 -10
  189. package/test/settlement/SettlementContract.test.ts +45 -0
  190. package/test/utils/ProvableReductionHashList.test.ts +114 -0
  191. package/src/blockmodules/AccountStateModule.ts +0 -33
  192. package/src/blockmodules/BlockHeightHook.ts +0 -21
  193. package/src/blockmodules/NoopBlockHook.ts +0 -16
  194. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  195. package/src/prover/block/BlockTransactionPosition.ts +0 -34
  196. /package/src/{blockmodules → hooks}/NoopTransactionHook.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"StateTransitionProver.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionProver.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,EAAuB,MAAM,MAAM,CAAC;AAEtE,OAAO,EACL,gBAAgB,EAEhB,cAAc,EAGd,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,oBAAoB,EACpB,iCAAiC,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAC;AAepG,UAAU,mCAAmC;IAC3C,SAAS,EAAE,KAAK,CAAC;IACjB,iBAAiB,EAAE,KAAK,CAAC;IACzB,mBAAmB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;IAC/D,sBAAsB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;CACnE;AAOD;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,cAAc,CACnE,gCAAgC,EAChC,iCAAiC,CAClC;IAGG,OAAO,CAAC,QAAQ,CAAC,qBAAqB;aACtB,wBAAwB,EAAE,uCAAuC;gBADhE,qBAAqB,EAAE,qBAAqB,EAC7C,wBAAwB,EAAE,uCAAuC;IAKnF,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAEM,gBAAgB,IAAI,cAAc,CACvC,gCAAgC,EAChC,iCAAiC,CAClC;IAqDD,OAAO,KAAK,eAAe,GAM1B;IAED;;;OAGG;IACI,gBAAgB,CACrB,SAAS,EAAE,KAAK,EAChB,iBAAiB,EAAE,KAAK,EACxB,6BAA6B,EAAE,KAAK,EACpC,gCAAgC,EAAE,KAAK,EACvC,eAAe,EAAE,4BAA4B,GAC5C,mCAAmC;IA6BtC;;;OAGG;IACI,eAAe,CACpB,KAAK,EAAE,mCAAmC,EAC1C,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,2BAA2B,EACjC,KAAK,SAAI;IAiDX;;OAEG;IAEI,QAAQ,CACb,WAAW,EAAE,gCAAgC,EAC7C,KAAK,EAAE,4BAA4B,GAClC,iCAAiC;IAkB7B,KAAK,CACV,WAAW,EAAE,gCAAgC,EAC7C,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,GAC3B,iCAAiC;CAqErC;AAED,qBACa,qBACX,SAAQ,cACR,YAAW,uBAAuB;aAMhB,wBAAwB,EAAE,uCAAuC;IAJnF,SAAgB,cAAc,EAAE,iCAAiC,CAAC;gBAIhD,wBAAwB,EAAE,uCAAuC;IAS5E,QAAQ,CACb,WAAW,EAAE,gCAAgC,EAC7C,KAAK,EAAE,4BAA4B,GAClC,iCAAiC;IAI7B,KAAK,CACV,WAAW,EAAE,gCAAgC,EAC7C,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,GAC3B,iCAAiC;CAGrC"}
1
+ {"version":3,"file":"StateTransitionProver.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionProver.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,EAAuB,MAAM,MAAM,CAAC;AAEtE,OAAO,EACL,gBAAgB,EAEhB,cAAc,EAGd,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,oBAAoB,EACpB,iCAAiC,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAC;AACpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAepE,UAAU,mCAAmC;IAC3C,SAAS,EAAE,KAAK,CAAC;IACjB,iBAAiB,EAAE,KAAK,CAAC;IACzB,mBAAmB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;IAC/D,sBAAsB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;CACnE;AAOD;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,cAAc,CACnE,gCAAgC,EAChC,iCAAiC,CAClC;IAGG,OAAO,CAAC,QAAQ,CAAC,qBAAqB;aACtB,wBAAwB,EAAE,uCAAuC;gBADhE,qBAAqB,EAAE,qBAAqB,EAC7C,wBAAwB,EAAE,uCAAuC;IAKnF,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAEM,gBAAgB,IAAI,cAAc,CACvC,gCAAgC,EAChC,iCAAiC,CAClC;IAsDD,OAAO,KAAK,eAAe,GAM1B;IAED;;;OAGG;IACI,gBAAgB,CACrB,SAAS,EAAE,KAAK,EAChB,iBAAiB,EAAE,KAAK,EACxB,6BAA6B,EAAE,KAAK,EACpC,gCAAgC,EAAE,KAAK,EACvC,eAAe,EAAE,4BAA4B,GAC5C,mCAAmC;IA6BtC;;;OAGG;IACI,eAAe,CACpB,KAAK,EAAE,mCAAmC,EAC1C,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,2BAA2B,EACjC,KAAK,SAAI;IAiDX;;OAEG;IAEI,QAAQ,CACb,WAAW,EAAE,gCAAgC,EAC7C,KAAK,EAAE,4BAA4B,GAClC,iCAAiC;IAkB7B,KAAK,CACV,WAAW,EAAE,gCAAgC,EAC7C,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,GAC3B,iCAAiC;CAqErC;AAED,qBACa,qBACX,SAAQ,cACR,YAAW,uBAAuB,EAAE,yBAAyB;aAM3C,wBAAwB,EAAE,uCAAuC;IAJ5E,cAAc,EAAE,iCAAiC,CAAC;gBAIvC,wBAAwB,EAAE,uCAAuC;IAS5E,QAAQ,CACb,WAAW,EAAE,gCAAgC,EAC7C,KAAK,EAAE,4BAA4B,GAClC,iCAAiC;IAI7B,KAAK,CACV,WAAW,EAAE,gCAAgC,EAC7C,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,GAC3B,iCAAiC;CAGrC"}
@@ -72,6 +72,7 @@ export class StateTransitionProverProgrammable extends ZkProgrammable {
72
72
  return {
73
73
  compile: program.compile.bind(program),
74
74
  verify: program.verify.bind(program),
75
+ analyzeMethods: program.analyzeMethods.bind(program),
75
76
  Proof: SelfProofClass,
76
77
  methods,
77
78
  };
@@ -0,0 +1,15 @@
1
+ import { ConfigurableModule, NoConfig, TypedClass } from "@proto-kit/common";
2
+ import { SmartContract } from "o1js";
3
+ export type SmartContractClassFromInterface<Type> = typeof SmartContract & TypedClass<Type>;
4
+ /**
5
+ * This module type is used to define a contract module that can be used to
6
+ * construct and inject smart contract instances.
7
+ * It defines a method contractFactory, whose arguments can be configured via
8
+ * the Argument generic. It returns a smart contract class that is a subclass
9
+ * of SmartContract and implements a certain interface as specified by the
10
+ * ContractType generic.
11
+ */
12
+ export declare abstract class ContractModule<ContractType, Arguments = undefined, Config = NoConfig> extends ConfigurableModule<Config> {
13
+ abstract contractFactory(args: Arguments): SmartContractClassFromInterface<ContractType>;
14
+ }
15
+ //# sourceMappingURL=ContractModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContractModule.d.ts","sourceRoot":"","sources":["../../src/settlement/ContractModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,MAAM,+BAA+B,CAAC,IAAI,IAAI,OAAO,aAAa,GACtE,UAAU,CAAC,IAAI,CAAC,CAAC;AAEnB;;;;;;;GAOG;AACH,8BAAsB,cAAc,CAClC,YAAY,EAEZ,SAAS,GAAG,SAAS,EACrB,MAAM,GAAG,QAAQ,CACjB,SAAQ,kBAAkB,CAAC,MAAM,CAAC;aAClB,eAAe,CAC7B,IAAI,EAAE,SAAS,GACd,+BAA+B,CAAC,YAAY,CAAC;CACjD"}
@@ -0,0 +1,11 @@
1
+ import { ConfigurableModule } from "@proto-kit/common";
2
+ /**
3
+ * This module type is used to define a contract module that can be used to
4
+ * construct and inject smart contract instances.
5
+ * It defines a method contractFactory, whose arguments can be configured via
6
+ * the Argument generic. It returns a smart contract class that is a subclass
7
+ * of SmartContract and implements a certain interface as specified by the
8
+ * ContractType generic.
9
+ */
10
+ export class ContractModule extends ConfigurableModule {
11
+ }
@@ -0,0 +1,26 @@
1
+ import { Field, UInt32 } from "o1js";
2
+ import type { BlockProof } from "../prover/block/BlockProver";
3
+ import { ProtocolModule } from "../protocol/ProtocolModule";
4
+ import { NetworkState } from "../model/network/NetworkState";
5
+ import type { SettlementContract } from "./SettlementContract";
6
+ export type SettlementStateRecord = {
7
+ sequencerKey: Field;
8
+ lastSettlementL1Block: UInt32;
9
+ stateRoot: Field;
10
+ networkStateHash: Field;
11
+ blockHashRoot: Field;
12
+ promisedMessagesHash: Field;
13
+ honoredMessagesHash: Field;
14
+ };
15
+ export type SettlementHookInputs = {
16
+ blockProof: BlockProof;
17
+ fromNetworkState: NetworkState;
18
+ toNetworkState: NetworkState;
19
+ newPromisedMessagesHash: Field;
20
+ contractState: SettlementStateRecord;
21
+ currentL1Block: UInt32;
22
+ };
23
+ export declare abstract class ProvableSettlementHook<Config> extends ProtocolModule<Config> {
24
+ abstract beforeSettlement(smartContract: SettlementContract, inputs: SettlementHookInputs): void;
25
+ }
26
+ //# sourceMappingURL=ProvableSettlementHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableSettlementHook.d.ts","sourceRoot":"","sources":["../../src/settlement/ProvableSettlementHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,KAAK,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,SAAS,EAAE,KAAK,CAAC;IACjB,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC;IAErB,oBAAoB,EAAE,KAAK,CAAC;IAC5B,mBAAmB,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,cAAc,EAAE,YAAY,CAAC;IAC7B,uBAAuB,EAAE,KAAK,CAAC;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,8BAAsB,sBAAsB,CAC1C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;aACd,gBAAgB,CAC9B,aAAa,EAAE,kBAAkB,EACjC,MAAM,EAAE,oBAAoB,GAC3B,IAAI;CACR"}
@@ -0,0 +1,3 @@
1
+ import { ProtocolModule } from "../protocol/ProtocolModule";
2
+ export class ProvableSettlementHook extends ProtocolModule {
3
+ }
@@ -0,0 +1,230 @@
1
+ import { AccountUpdate, Field, Proof, PublicKey, Signature, SmartContract, State, UInt32, UInt64 } from "o1js";
2
+ import { RollupMerkleTreeWitness } from "@proto-kit/common";
3
+ import { ProtocolModule } from "../protocol/ProtocolModule";
4
+ import { BlockProvable, BlockProverPublicInput, BlockProverPublicOutput } from "../prover/block/BlockProvable";
5
+ import { NetworkState } from "../model/network/NetworkState";
6
+ import { ProvableSettlementHook } from "./ProvableSettlementHook";
7
+ declare class LazyBlockProof extends Proof<BlockProverPublicInput, BlockProverPublicOutput> {
8
+ static publicInputType: typeof BlockProverPublicInput;
9
+ static publicOutputType: typeof BlockProverPublicOutput;
10
+ static tag: () => {
11
+ name: string;
12
+ };
13
+ }
14
+ export type SettlementMethodIdMapping = Record<`${string}.${string}`, bigint>;
15
+ declare const Deposit_base: (new (value: {
16
+ address: PublicKey;
17
+ amount: UInt64;
18
+ }) => {
19
+ address: PublicKey;
20
+ amount: UInt64;
21
+ }) & {
22
+ _isStruct: true;
23
+ } & import("o1js/dist/node/snarky").ProvablePure<{
24
+ address: PublicKey;
25
+ amount: UInt64;
26
+ }> & {
27
+ toInput: (x: {
28
+ address: PublicKey;
29
+ amount: UInt64;
30
+ }) => {
31
+ fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
32
+ packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
33
+ };
34
+ toJSON: (x: {
35
+ address: PublicKey;
36
+ amount: UInt64;
37
+ }) => {
38
+ address: string;
39
+ amount: string;
40
+ };
41
+ fromJSON: (x: {
42
+ address: string;
43
+ amount: string;
44
+ }) => {
45
+ address: PublicKey;
46
+ amount: UInt64;
47
+ };
48
+ };
49
+ export declare class Deposit extends Deposit_base {
50
+ }
51
+ declare const Withdrawal_base: (new (value: {
52
+ address: PublicKey;
53
+ amount: UInt64;
54
+ }) => {
55
+ address: PublicKey;
56
+ amount: UInt64;
57
+ }) & {
58
+ _isStruct: true;
59
+ } & import("o1js/dist/node/snarky").ProvablePure<{
60
+ address: PublicKey;
61
+ amount: UInt64;
62
+ }> & {
63
+ toInput: (x: {
64
+ address: PublicKey;
65
+ amount: UInt64;
66
+ }) => {
67
+ fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
68
+ packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
69
+ };
70
+ toJSON: (x: {
71
+ address: PublicKey;
72
+ amount: UInt64;
73
+ }) => {
74
+ address: string;
75
+ amount: string;
76
+ };
77
+ fromJSON: (x: {
78
+ address: string;
79
+ amount: string;
80
+ }) => {
81
+ address: PublicKey;
82
+ amount: UInt64;
83
+ };
84
+ };
85
+ export declare class Withdrawal extends Withdrawal_base {
86
+ static dummy(): Withdrawal;
87
+ }
88
+ export declare const OUTGOING_MESSAGE_BATCH_SIZE = 1;
89
+ declare const OutgoingMessageArgument_base: (new (value: {
90
+ witness: RollupMerkleTreeWitness;
91
+ value: Withdrawal;
92
+ }) => {
93
+ witness: RollupMerkleTreeWitness;
94
+ value: Withdrawal;
95
+ }) & {
96
+ _isStruct: true;
97
+ } & import("o1js/dist/node/snarky").ProvablePure<{
98
+ witness: RollupMerkleTreeWitness;
99
+ value: Withdrawal;
100
+ }> & {
101
+ toInput: (x: {
102
+ witness: RollupMerkleTreeWitness;
103
+ value: Withdrawal;
104
+ }) => {
105
+ fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
106
+ packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
107
+ };
108
+ toJSON: (x: {
109
+ witness: RollupMerkleTreeWitness;
110
+ value: Withdrawal;
111
+ }) => {
112
+ witness: {
113
+ path: string[];
114
+ isLeft: boolean[];
115
+ };
116
+ value: {
117
+ address: string;
118
+ amount: string;
119
+ };
120
+ };
121
+ fromJSON: (x: {
122
+ witness: {
123
+ path: string[];
124
+ isLeft: boolean[];
125
+ };
126
+ value: {
127
+ address: string;
128
+ amount: string;
129
+ };
130
+ }) => {
131
+ witness: RollupMerkleTreeWitness;
132
+ value: Withdrawal;
133
+ };
134
+ };
135
+ export declare class OutgoingMessageArgument extends OutgoingMessageArgument_base {
136
+ static dummy(): OutgoingMessageArgument;
137
+ }
138
+ declare const OutgoingMessageArgumentBatch_base: (new (value: {
139
+ arguments: OutgoingMessageArgument[];
140
+ isDummys: import("o1js/dist/node/lib/bool").Bool[];
141
+ }) => {
142
+ arguments: OutgoingMessageArgument[];
143
+ isDummys: import("o1js/dist/node/lib/bool").Bool[];
144
+ }) & {
145
+ _isStruct: true;
146
+ } & import("o1js/dist/node/snarky").ProvablePure<{
147
+ arguments: OutgoingMessageArgument[];
148
+ isDummys: import("o1js/dist/node/lib/bool").Bool[];
149
+ }> & {
150
+ toInput: (x: {
151
+ arguments: OutgoingMessageArgument[];
152
+ isDummys: import("o1js/dist/node/lib/bool").Bool[];
153
+ }) => {
154
+ fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
155
+ packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
156
+ };
157
+ toJSON: (x: {
158
+ arguments: OutgoingMessageArgument[];
159
+ isDummys: import("o1js/dist/node/lib/bool").Bool[];
160
+ }) => {
161
+ arguments: {
162
+ witness: {
163
+ path: string[];
164
+ isLeft: boolean[];
165
+ };
166
+ value: {
167
+ address: string;
168
+ amount: string;
169
+ };
170
+ }[];
171
+ isDummys: boolean[];
172
+ };
173
+ fromJSON: (x: {
174
+ arguments: {
175
+ witness: {
176
+ path: string[];
177
+ isLeft: boolean[];
178
+ };
179
+ value: {
180
+ address: string;
181
+ amount: string;
182
+ };
183
+ }[];
184
+ isDummys: boolean[];
185
+ }) => {
186
+ arguments: OutgoingMessageArgument[];
187
+ isDummys: import("o1js/dist/node/lib/bool").Bool[];
188
+ };
189
+ };
190
+ export declare class OutgoingMessageArgumentBatch extends OutgoingMessageArgumentBatch_base {
191
+ static fromMessages(providedArguments: OutgoingMessageArgument[]): OutgoingMessageArgumentBatch;
192
+ }
193
+ export declare const BATCH_SIGNATURE_PREFIX: import("o1js/dist/node/lib/field").Field;
194
+ export declare const ACTIONS_EMPTY_HASH: import("o1js/dist/node/lib/field").Field;
195
+ export declare class SettlementContract extends SmartContract {
196
+ private readonly methodIdMappings;
197
+ private readonly hooks;
198
+ private readonly withdrawalStatePath;
199
+ private readonly incomingMessagesPaths;
200
+ private readonly escapeHatchSlotsInterval;
201
+ sequencerKey: State<import("o1js/dist/node/lib/field").Field>;
202
+ lastSettlementL1Block: State<UInt32>;
203
+ stateRoot: State<import("o1js/dist/node/lib/field").Field>;
204
+ networkStateHash: State<import("o1js/dist/node/lib/field").Field>;
205
+ blockHashRoot: State<import("o1js/dist/node/lib/field").Field>;
206
+ promisedMessagesHash: State<import("o1js/dist/node/lib/field").Field>;
207
+ honoredMessagesHash: State<import("o1js/dist/node/lib/field").Field>;
208
+ outgoingMessageCursor: State<import("o1js/dist/node/lib/field").Field>;
209
+ constructor(address: PublicKey, methodIdMappings: Record<string, bigint>, hooks: ProvableSettlementHook<unknown>[], withdrawalStatePath: [string, string], incomingMessagesPaths: Record<string, `${string}.${string}`>, escapeHatchSlotsInterval?: number);
210
+ initialize(sequencer: PublicKey): void;
211
+ settle(blockProof: LazyBlockProof, signature: Signature, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): void;
212
+ private dispatchMessage;
213
+ deposit(amount: UInt64): void;
214
+ rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch): void;
215
+ redeem(additionUpdate: AccountUpdate): void;
216
+ }
217
+ export interface SettlementContractModuleConfig {
218
+ withdrawalStatePath: `${string}.${string}`;
219
+ withdrawalMethodPath: `${string}.${string}`;
220
+ incomingMessagesMethods: Record<string, `${string}.${string}`>;
221
+ }
222
+ export declare class SettlementContractModule extends ProtocolModule<SettlementContractModuleConfig> {
223
+ private readonly hooks;
224
+ private readonly blockProver;
225
+ constructor(hooks: ProvableSettlementHook<unknown>[], blockProver: BlockProvable);
226
+ getContractClass(): typeof SettlementContract;
227
+ createContract(address: PublicKey, methodIdMappings: SettlementMethodIdMapping): SettlementContract;
228
+ }
229
+ export {};
230
+ //# sourceMappingURL=SettlementContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementContract.d.ts","sourceRoot":"","sources":["../../src/settlement/SettlementContract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,346 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Reducer, Signature, SmartContract, State, state, Struct, TokenId, UInt32, UInt64, } from "o1js";
14
+ import { EMPTY_PUBLICKEY, prefixToField, RollupMerkleTree, RollupMerkleTreeWitness, } from "@proto-kit/common";
15
+ import { inject, injectable, injectAll } from "tsyringe";
16
+ import { ProtocolModule } from "../protocol/ProtocolModule";
17
+ import { BlockProverPublicInput, BlockProverPublicOutput, } from "../prover/block/BlockProvable";
18
+ import { NetworkState } from "../model/network/NetworkState";
19
+ import { BlockHashMerkleTree } from "../prover/block/accummulators/BlockHashMerkleTree";
20
+ import { RuntimeTransaction } from "../model/transaction/RuntimeTransaction";
21
+ import { Path } from "../model/Path";
22
+ import { MinaActions, MinaEvents } from "../utils/MinaPrefixedProvableHashList";
23
+ class LazyBlockProof extends Proof {
24
+ }
25
+ LazyBlockProof.publicInputType = BlockProverPublicInput;
26
+ LazyBlockProof.publicOutputType = BlockProverPublicOutput;
27
+ LazyBlockProof.tag = () => {
28
+ throw new Error("Tag not initialized yet");
29
+ };
30
+ export class Deposit extends Struct({
31
+ address: PublicKey,
32
+ amount: UInt64,
33
+ }) {
34
+ }
35
+ export class Withdrawal extends Struct({
36
+ address: PublicKey,
37
+ amount: UInt64,
38
+ }) {
39
+ static dummy() {
40
+ return new Withdrawal({
41
+ address: EMPTY_PUBLICKEY,
42
+ amount: UInt64.from(0),
43
+ });
44
+ }
45
+ }
46
+ export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
47
+ export class OutgoingMessageArgument extends Struct({
48
+ witness: RollupMerkleTreeWitness,
49
+ value: Withdrawal,
50
+ }) {
51
+ static dummy() {
52
+ return new OutgoingMessageArgument({
53
+ witness: RollupMerkleTreeWitness.dummy(),
54
+ value: Withdrawal.dummy(),
55
+ });
56
+ }
57
+ }
58
+ export class OutgoingMessageArgumentBatch extends Struct({
59
+ arguments: Provable.Array(OutgoingMessageArgument, OUTGOING_MESSAGE_BATCH_SIZE),
60
+ isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
61
+ }) {
62
+ static fromMessages(providedArguments) {
63
+ const batch = providedArguments.slice();
64
+ const isDummys = batch.map(() => Bool(false));
65
+ while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
66
+ batch.push(OutgoingMessageArgument.dummy());
67
+ isDummys.push(Bool(true));
68
+ }
69
+ return new OutgoingMessageArgumentBatch({
70
+ arguments: batch,
71
+ isDummys,
72
+ });
73
+ }
74
+ }
75
+ // Some random prefix for the sequencer signature
76
+ export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
77
+ export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
78
+ export class SettlementContract extends SmartContract {
79
+ constructor(address, methodIdMappings, hooks, withdrawalStatePath, incomingMessagesPaths,
80
+ // 24 hours
81
+ escapeHatchSlotsInterval = (60 / 3) * 24) {
82
+ super(address);
83
+ this.methodIdMappings = methodIdMappings;
84
+ this.hooks = hooks;
85
+ this.withdrawalStatePath = withdrawalStatePath;
86
+ this.incomingMessagesPaths = incomingMessagesPaths;
87
+ this.escapeHatchSlotsInterval = escapeHatchSlotsInterval;
88
+ this.sequencerKey = State();
89
+ this.lastSettlementL1Block = State();
90
+ this.stateRoot = State();
91
+ this.networkStateHash = State();
92
+ this.blockHashRoot = State();
93
+ this.promisedMessagesHash = State();
94
+ this.honoredMessagesHash = State();
95
+ this.outgoingMessageCursor = State();
96
+ }
97
+ initialize(sequencer) {
98
+ this.sequencerKey.getAndAssertEquals().assertEquals(Field(0));
99
+ this.stateRoot.getAndAssertEquals().assertEquals(Field(0));
100
+ this.blockHashRoot.getAndAssertEquals().assertEquals(Field(0));
101
+ this.networkStateHash.getAndAssertEquals().assertEquals(Field(0));
102
+ this.promisedMessagesHash.getAndAssertEquals().assertEquals(Field(0));
103
+ this.honoredMessagesHash.getAndAssertEquals().assertEquals(Field(0));
104
+ this.sequencerKey.set(sequencer.x);
105
+ this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
106
+ this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
107
+ this.networkStateHash.set(NetworkState.empty().hash());
108
+ this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
109
+ this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
110
+ }
111
+ settle(blockProof, signature, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
112
+ // Verify the blockproof
113
+ blockProof.verify();
114
+ // Get and assert on-chain values
115
+ const stateRoot = this.stateRoot.getAndAssertEquals();
116
+ const networkStateHash = this.networkStateHash.getAndAssertEquals();
117
+ const blockHashRoot = this.blockHashRoot.getAndAssertEquals();
118
+ const sequencerKey = this.sequencerKey.getAndAssertEquals();
119
+ const promisedMessagesHash = this.promisedMessagesHash.getAndAssertEquals();
120
+ const honoredMessagesHash = this.honoredMessagesHash.getAndAssertEquals();
121
+ const lastSettlementL1Block = this.lastSettlementL1Block.getAndAssertEquals();
122
+ // Get block height and use the lower bound for all ops
123
+ const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
124
+ this.network.globalSlotSinceGenesis.assertBetween(minBlockIncluded, minBlockIncluded.add(20));
125
+ // Check signature/escape catch
126
+ publicKey.x.assertEquals(sequencerKey, "Sequencer public key witness not matching");
127
+ const signatureValid = signature.verify(publicKey, [
128
+ BATCH_SIGNATURE_PREFIX,
129
+ lastSettlementL1Block.value,
130
+ ]);
131
+ const escapeHatchActivated = lastSettlementL1Block
132
+ .add(UInt32.from(this.escapeHatchSlotsInterval))
133
+ .lessThan(minBlockIncluded);
134
+ signatureValid
135
+ .or(escapeHatchActivated)
136
+ .assertTrue("Sequencer signature not valid and escape hatch not activated");
137
+ // Assert correctness of networkState witness
138
+ inputNetworkState
139
+ .hash()
140
+ .assertEquals(networkStateHash, "InputNetworkState witness not valid");
141
+ outputNetworkState
142
+ .hash()
143
+ .assertEquals(blockProof.publicOutput.networkStateHash, "OutputNetworkState witness not valid");
144
+ blockProof.publicOutput.closed.assertEquals(Bool(true), "Supplied proof is not a closed BlockProof");
145
+ // Execute onSettlementHooks for additional checks
146
+ const stateRecord = {
147
+ blockHashRoot,
148
+ stateRoot,
149
+ networkStateHash,
150
+ honoredMessagesHash,
151
+ lastSettlementL1Block,
152
+ promisedMessagesHash,
153
+ sequencerKey,
154
+ };
155
+ const inputs = {
156
+ blockProof,
157
+ contractState: stateRecord,
158
+ newPromisedMessagesHash,
159
+ fromNetworkState: inputNetworkState,
160
+ toNetworkState: outputNetworkState,
161
+ currentL1Block: minBlockIncluded,
162
+ };
163
+ this.hooks.forEach((hook) => {
164
+ hook.beforeSettlement(this, inputs);
165
+ });
166
+ // Apply blockProof
167
+ stateRoot.assertEquals(blockProof.publicInput.stateRoot, "Input state root not matching");
168
+ networkStateHash.assertEquals(blockProof.publicInput.networkStateHash, "Input networkStateHash not matching");
169
+ blockHashRoot.assertEquals(blockProof.publicInput.blockHashRoot, "Input blockHashRoot not matching");
170
+ this.stateRoot.set(blockProof.publicOutput.stateRoot);
171
+ this.networkStateHash.set(blockProof.publicOutput.networkStateHash);
172
+ this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
173
+ // Assert and apply deposit commitments
174
+ promisedMessagesHash.assertEquals(blockProof.publicOutput.incomingMessagesHash, "Promised messages not honored");
175
+ this.honoredMessagesHash.set(promisedMessagesHash);
176
+ // Assert and apply new promisedMessagesHash
177
+ this.self.account.actionState.assertEquals(newPromisedMessagesHash);
178
+ this.promisedMessagesHash.set(newPromisedMessagesHash);
179
+ this.lastSettlementL1Block.set(minBlockIncluded);
180
+ }
181
+ dispatchMessage(methodId, value, valueType) {
182
+ const args = valueType.toFields(value);
183
+ // Should be the same as RuntimeTransaction.hash
184
+ const argsHash = Poseidon.hash(args);
185
+ const runtimeTransaction = RuntimeTransaction.fromMessage({
186
+ methodId,
187
+ argsHash,
188
+ });
189
+ // Append tx to incomingMessagesHash
190
+ const actionData = runtimeTransaction.hashData();
191
+ const actionHash = MinaActions.actionHash(actionData);
192
+ this.self.body.actions = {
193
+ hash: actionHash,
194
+ data: [actionData],
195
+ };
196
+ const eventHash = MinaEvents.eventHash(args);
197
+ this.self.body.events = {
198
+ hash: eventHash,
199
+ data: [args],
200
+ };
201
+ }
202
+ deposit(amount) {
203
+ // Save this, since otherwise it would be a second witness later,
204
+ // which could be a different values than the first
205
+ const sender = this.sender;
206
+ // Credit the amount to the bridge contract
207
+ this.self.balance.addInPlace(amount);
208
+ const action = new Deposit({
209
+ address: sender,
210
+ amount,
211
+ });
212
+ const methodId = Field(this.methodIdMappings[this.incomingMessagesPaths["deposit"]]);
213
+ this.dispatchMessage(methodId.toConstant(), action, Deposit);
214
+ }
215
+ rollupOutgoingMessages(batch) {
216
+ let counter = this.outgoingMessageCursor.getAndAssertEquals();
217
+ const stateRoot = this.stateRoot.getAndAssertEquals();
218
+ const [withdrawalModule, withdrawalStateName] = this.withdrawalStatePath;
219
+ const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
220
+ let accountCreationFeePaid = Field(0);
221
+ for (let i = 0; i < OUTGOING_MESSAGE_BATCH_SIZE; i++) {
222
+ const args = batch.arguments[i];
223
+ // Check witness
224
+ const path = Path.fromKey(mapPath, Field, counter);
225
+ args.witness
226
+ .checkMembership(stateRoot, path, Poseidon.hash(Withdrawal.toFields(args.value)))
227
+ .assertTrue("Provided Withdrawal witness not valid");
228
+ // Process message
229
+ const { address, amount } = args.value;
230
+ const isDummy = address.equals(this.address);
231
+ const tokenAu = this.token.mint({ address, amount });
232
+ const isNewAccount = tokenAu.account.isNew.getAndAssertEquals();
233
+ tokenAu.body.balanceChange.magnitude =
234
+ tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.accountCreationFee().toConstant(), UInt64.zero));
235
+ accountCreationFeePaid = accountCreationFeePaid.add(Provable.if(isNewAccount, Field(1e9), Field(0)));
236
+ counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
237
+ }
238
+ this.balance.subInPlace(UInt64.from(accountCreationFeePaid));
239
+ this.outgoingMessageCursor.set(counter);
240
+ }
241
+ redeem(additionUpdate) {
242
+ additionUpdate.body.tokenId.assertEquals(TokenId.default, "Tokenid not default token");
243
+ additionUpdate.body.balanceChange.sgn
244
+ .isPositive()
245
+ .assertTrue("Sign not correct");
246
+ const amount = additionUpdate.body.balanceChange.magnitude;
247
+ // Burn tokens
248
+ this.token.burn({
249
+ address: additionUpdate.publicKey,
250
+ amount,
251
+ });
252
+ // Send mina
253
+ this.approve(additionUpdate);
254
+ this.balance.subInPlace(amount);
255
+ }
256
+ }
257
+ __decorate([
258
+ state(Field),
259
+ __metadata("design:type", Object)
260
+ ], SettlementContract.prototype, "sequencerKey", void 0);
261
+ __decorate([
262
+ state(UInt32),
263
+ __metadata("design:type", Object)
264
+ ], SettlementContract.prototype, "lastSettlementL1Block", void 0);
265
+ __decorate([
266
+ state(Field),
267
+ __metadata("design:type", Object)
268
+ ], SettlementContract.prototype, "stateRoot", void 0);
269
+ __decorate([
270
+ state(Field),
271
+ __metadata("design:type", Object)
272
+ ], SettlementContract.prototype, "networkStateHash", void 0);
273
+ __decorate([
274
+ state(Field),
275
+ __metadata("design:type", Object)
276
+ ], SettlementContract.prototype, "blockHashRoot", void 0);
277
+ __decorate([
278
+ state(Field),
279
+ __metadata("design:type", Object)
280
+ ], SettlementContract.prototype, "promisedMessagesHash", void 0);
281
+ __decorate([
282
+ state(Field),
283
+ __metadata("design:type", Object)
284
+ ], SettlementContract.prototype, "honoredMessagesHash", void 0);
285
+ __decorate([
286
+ state(Field),
287
+ __metadata("design:type", Object)
288
+ ], SettlementContract.prototype, "outgoingMessageCursor", void 0);
289
+ __decorate([
290
+ method,
291
+ __metadata("design:type", Function),
292
+ __metadata("design:paramtypes", [PublicKey]),
293
+ __metadata("design:returntype", void 0)
294
+ ], SettlementContract.prototype, "initialize", null);
295
+ __decorate([
296
+ method,
297
+ __metadata("design:type", Function),
298
+ __metadata("design:paramtypes", [LazyBlockProof,
299
+ Signature,
300
+ PublicKey,
301
+ NetworkState,
302
+ NetworkState,
303
+ Field]),
304
+ __metadata("design:returntype", void 0)
305
+ ], SettlementContract.prototype, "settle", null);
306
+ __decorate([
307
+ method,
308
+ __metadata("design:type", Function),
309
+ __metadata("design:paramtypes", [UInt64]),
310
+ __metadata("design:returntype", void 0)
311
+ ], SettlementContract.prototype, "deposit", null);
312
+ __decorate([
313
+ method,
314
+ __metadata("design:type", Function),
315
+ __metadata("design:paramtypes", [OutgoingMessageArgumentBatch]),
316
+ __metadata("design:returntype", void 0)
317
+ ], SettlementContract.prototype, "rollupOutgoingMessages", null);
318
+ __decorate([
319
+ method,
320
+ __metadata("design:type", Function),
321
+ __metadata("design:paramtypes", [AccountUpdate]),
322
+ __metadata("design:returntype", void 0)
323
+ ], SettlementContract.prototype, "redeem", null);
324
+ let SettlementContractModule = class SettlementContractModule extends ProtocolModule {
325
+ constructor(hooks, blockProver) {
326
+ super();
327
+ this.hooks = hooks;
328
+ this.blockProver = blockProver;
329
+ LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram.Proof.tag;
330
+ }
331
+ getContractClass() {
332
+ return SettlementContract;
333
+ }
334
+ createContract(address, methodIdMappings) {
335
+ // We know that this returns [string, string], but TS can't infer that
336
+ const withdrawalPath = this.config.withdrawalStatePath.split(".");
337
+ return new SettlementContract(address, methodIdMappings, this.hooks, [withdrawalPath[0], withdrawalPath[1]], this.config.incomingMessagesMethods);
338
+ }
339
+ };
340
+ SettlementContractModule = __decorate([
341
+ injectable(),
342
+ __param(0, injectAll("ProvableSettlementHook")),
343
+ __param(1, inject("BlockProver")),
344
+ __metadata("design:paramtypes", [Array, Object])
345
+ ], SettlementContractModule);
346
+ export { SettlementContractModule };