@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,4 +1,4 @@
1
- import { Bool } from "o1js";
1
+ import { Bool, Provable } from "o1js";
2
2
  import { ProvableMethodExecutionContext, ProvableMethodExecutionResult } from "@proto-kit/common";
3
3
  import { StateTransition } from "../../model/StateTransition";
4
4
  import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
@@ -12,6 +12,78 @@ export interface RuntimeMethodExecutionData {
12
12
  transaction: RuntimeTransaction;
13
13
  networkState: NetworkState;
14
14
  }
15
+ declare const RuntimeMethodExecutionDataStruct_base: (new (value: {
16
+ transaction: RuntimeTransaction;
17
+ networkState: NetworkState;
18
+ }) => {
19
+ transaction: RuntimeTransaction;
20
+ networkState: NetworkState;
21
+ }) & {
22
+ _isStruct: true;
23
+ } & Provable<{
24
+ transaction: RuntimeTransaction;
25
+ networkState: NetworkState;
26
+ }> & {
27
+ toInput: (x: {
28
+ transaction: RuntimeTransaction;
29
+ networkState: NetworkState;
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
+ transaction: RuntimeTransaction;
36
+ networkState: NetworkState;
37
+ }) => {
38
+ transaction: {
39
+ methodId: string;
40
+ argsHash: string;
41
+ nonce: {
42
+ isSome: boolean;
43
+ value: any;
44
+ };
45
+ sender: {
46
+ isSome: boolean;
47
+ value: any;
48
+ };
49
+ };
50
+ networkState: {
51
+ block: {
52
+ height: string;
53
+ };
54
+ previous: {
55
+ rootHash: string;
56
+ };
57
+ };
58
+ };
59
+ fromJSON: (x: {
60
+ transaction: {
61
+ methodId: string;
62
+ argsHash: string;
63
+ nonce: {
64
+ isSome: boolean;
65
+ value: any;
66
+ };
67
+ sender: {
68
+ isSome: boolean;
69
+ value: any;
70
+ };
71
+ };
72
+ networkState: {
73
+ block: {
74
+ height: string;
75
+ };
76
+ previous: {
77
+ rootHash: string;
78
+ };
79
+ };
80
+ }) => {
81
+ transaction: RuntimeTransaction;
82
+ networkState: NetworkState;
83
+ };
84
+ };
85
+ export declare class RuntimeMethodExecutionDataStruct extends RuntimeMethodExecutionDataStruct_base implements RuntimeMethodExecutionData {
86
+ }
15
87
  /**
16
88
  * Execution context used to wrap runtime module methods,
17
89
  * allowing them to post relevant information (such as execution status)
@@ -41,6 +113,7 @@ export declare class RuntimeMethodExecutionContext extends ProvableMethodExecuti
41
113
  * @param input Input witness data required for a runtime execution
42
114
  */
43
115
  setup(input: RuntimeMethodExecutionData): void;
116
+ witnessInput(): RuntimeMethodExecutionDataStruct;
44
117
  setSimulated(simulated: boolean): void;
45
118
  /**
46
119
  * Manually clears/resets the execution context
@@ -58,4 +131,5 @@ export declare class RuntimeMethodExecutionContext extends ProvableMethodExecuti
58
131
  isSimulated: boolean;
59
132
  };
60
133
  }
134
+ export {};
61
135
  //# sourceMappingURL=RuntimeMethodExecutionContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/RuntimeMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAShE,qBAAa,oCAAqC,SAAQ,6BAA6B;IAE9E,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;IAE9C,MAAM,EAAE,IAAI,CAAc;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;;;GAIG;AACH,qBACa,6BAA8B,SAAQ,8BAA8B;IACxE,OAAO,EAAE,MAAM,EAAE,CAAM;IAEvB,KAAK,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAGrD,OAAO,CAAC,SAAS,CAAyC;IAE1C,MAAM,uCAA8C;IAEpE,OAAO,CAAC,WAAW,CAAkB;IAErC,OAAO,CAAC,iBAAiB;IAQzB;;;OAGG;IACI,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IAKxE;;OAEG;IACI,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM;IAQxC;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,IAAI;IAQ7B;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,0BAA0B;IAIvC,YAAY,CAAC,SAAS,EAAE,OAAO;IAItC;;OAEG;IACI,KAAK;IAIL,WAAW;IASlB;;;OAGG;IACI,OAAO;;;;;;CAQf"}
1
+ {"version":3,"file":"RuntimeMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/RuntimeMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAE9C,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAShE,qBAAa,oCAAqC,SAAQ,6BAA6B;IAE9E,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;IAE9C,MAAM,EAAE,IAAI,CAAc;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,gCACX,SAAQ,qCAIR,YAAW,0BAA0B;CAAG;AAE1C;;;;GAIG;AACH,qBACa,6BAA8B,SAAQ,8BAA8B;IACxE,OAAO,EAAE,MAAM,EAAE,CAAM;IAEvB,KAAK,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAGrD,OAAO,CAAC,SAAS,CAAyC;IAE1C,MAAM,uCAA8C;IAEpE,OAAO,CAAC,WAAW,CAAkB;IAErC,OAAO,CAAC,iBAAiB;IAQzB;;;OAGG;IACI,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IAKxE;;OAEG;IACI,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM;IAQxC;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,IAAI;IAQ7B;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,0BAA0B;IAIvC,YAAY,IAAI,gCAAgC;IAYhD,YAAY,CAAC,SAAS,EAAE,OAAO;IAItC;;OAEG;IACI,KAAK;IAIL,WAAW;IAUlB;;;OAGG;IACI,OAAO;;;;;;CAQf"}
@@ -4,9 +4,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
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
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Bool } from "o1js";
7
+ import { Bool, Provable, Struct } from "o1js";
8
8
  import { singleton } from "tsyringe";
9
9
  import { ProvableMethodExecutionContext, ProvableMethodExecutionResult, } from "@proto-kit/common";
10
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
11
+ import { NetworkState } from "../../model/network/NetworkState";
10
12
  const errors = {
11
13
  setupNotCalled: () => new Error("Setup has not been called prior to executing a runtime method. Be sure to do that so that the Runtime is setup property for execution"),
12
14
  };
@@ -18,6 +20,11 @@ export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutio
18
20
  this.status = Bool(true);
19
21
  }
20
22
  }
23
+ export class RuntimeMethodExecutionDataStruct extends Struct({
24
+ transaction: RuntimeTransaction,
25
+ networkState: NetworkState,
26
+ }) {
27
+ }
21
28
  /**
22
29
  * Execution context used to wrap runtime module methods,
23
30
  * allowing them to post relevant information (such as execution status)
@@ -70,6 +77,17 @@ let RuntimeMethodExecutionContext = class RuntimeMethodExecutionContext extends
70
77
  setup(input) {
71
78
  this.input = input;
72
79
  }
80
+ witnessInput() {
81
+ this.assertSetupCalled();
82
+ return Provable.witness(RuntimeMethodExecutionDataStruct, () => {
83
+ // TODO Is that right? Or this.current().input
84
+ const { transaction, networkState } = this.input;
85
+ return new RuntimeMethodExecutionDataStruct({
86
+ networkState,
87
+ transaction,
88
+ });
89
+ });
90
+ }
73
91
  setSimulated(simulated) {
74
92
  this.isSimulated = simulated;
75
93
  }
@@ -83,7 +101,8 @@ let RuntimeMethodExecutionContext = class RuntimeMethodExecutionContext extends
83
101
  super.afterMethod();
84
102
  if (this.isFinished) {
85
103
  this.lastInput = this.input;
86
- this.input = undefined;
104
+ // TODO: find out why input isnt set in TransactionFeeHook during assert
105
+ // this.input = undefined;
87
106
  this.isSimulated = false;
88
107
  }
89
108
  }
@@ -0,0 +1,24 @@
1
+ import { Field, ProvablePure } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList";
3
+ export declare const MINA_EVENT_PREFIXES: {
4
+ readonly event: "MinaZkappEvent******";
5
+ readonly events: "MinaZkappEvents*****";
6
+ readonly sequenceEvents: "MinaZkappSeqEvents**";
7
+ };
8
+ export declare function emptyActions(): Field;
9
+ export declare function emptyEvents(): Field;
10
+ export declare class MinaActions {
11
+ static actionHash(action: Field[], previousHash?: Field): Field;
12
+ }
13
+ export declare class MinaEvents {
14
+ static eventHash(event: Field[], previousHash?: Field): Field;
15
+ }
16
+ export declare class MinaPrefixedProvableHashList<Value> extends ProvableHashList<Value> {
17
+ readonly prefix: string;
18
+ constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
19
+ protected hash(elements: Field[]): Field;
20
+ }
21
+ export declare class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
22
+ constructor(internalCommitment?: Field);
23
+ }
24
+ //# sourceMappingURL=MinaPrefixedProvableHashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinaPrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/MinaPrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,wBAAgB,YAAY,IAAI,KAAK,CAEpC;AAED,wBAAgB,WAAW,IAAI,KAAK,CAEnC;AAED,qBAAa,WAAW;IACtB,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,GAAE,KAAsB,GACnC,KAAK;CAOT;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,GAAE,KAAqB,GAAG,KAAK;CAO7E;AAED,qBAAa,4BAA4B,CACvC,KAAK,CACL,SAAQ,gBAAgB,CAAC,KAAK,CAAC;aAGb,MAAM,EAAE,MAAM;gBAD9B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EACd,MAAM,EAAE,MAAM,EAC9B,kBAAkB,GAAE,KAAgB;IAKtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAKzC;AAED,qBAAa,mBAAoB,SAAQ,4BAA4B,CAAC,KAAK,CAAC;gBACvD,kBAAkB,GAAE,KAAgB;CAGxD"}
@@ -0,0 +1,51 @@
1
+ import { Field, Poseidon } from "o1js";
2
+ import { hashWithPrefix, prefixToField } from "@proto-kit/common";
3
+ import { ProvableHashList } from "./ProvableHashList";
4
+ function salt(prefix) {
5
+ return Poseidon.update([Field(0), Field(0), Field(0)], [prefixToField(prefix)]);
6
+ }
7
+ export const MINA_EVENT_PREFIXES = {
8
+ event: "MinaZkappEvent******",
9
+ events: "MinaZkappEvents*****",
10
+ sequenceEvents: "MinaZkappSeqEvents**",
11
+ };
12
+ export function emptyActions() {
13
+ return salt("MinaZkappActionsEmpty")[0];
14
+ }
15
+ export function emptyEvents() {
16
+ return salt("MinaZkappEventsEmpty")[0];
17
+ }
18
+ export class MinaActions {
19
+ static actionHash(action, previousHash = emptyActions()) {
20
+ const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, action);
21
+ return hashWithPrefix(MINA_EVENT_PREFIXES.sequenceEvents, [
22
+ previousHash,
23
+ actionDataHash,
24
+ ]);
25
+ }
26
+ }
27
+ export class MinaEvents {
28
+ static eventHash(event, previousHash = emptyEvents()) {
29
+ const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, event);
30
+ return hashWithPrefix(MINA_EVENT_PREFIXES.events, [
31
+ previousHash,
32
+ actionDataHash,
33
+ ]);
34
+ }
35
+ }
36
+ export class MinaPrefixedProvableHashList extends ProvableHashList {
37
+ constructor(valueType, prefix, internalCommitment = Field(0)) {
38
+ super(valueType, internalCommitment);
39
+ this.prefix = prefix;
40
+ }
41
+ hash(elements) {
42
+ const init = salt(this.prefix);
43
+ const digest = Poseidon.update(init, elements);
44
+ return digest[0];
45
+ }
46
+ }
47
+ export class MinaActionsHashList extends MinaPrefixedProvableHashList {
48
+ constructor(internalCommitment = Field(0)) {
49
+ super(Field, MINA_EVENT_PREFIXES.sequenceEvents, internalCommitment);
50
+ }
51
+ }
@@ -1,8 +1,8 @@
1
- import { Field, FlexibleProvablePure } from "o1js";
1
+ import { Field, ProvablePure } from "o1js";
2
2
  import { ProvableHashList } from "./ProvableHashList.js";
3
3
  export declare class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
4
4
  private readonly prefix;
5
- constructor(valueType: FlexibleProvablePure<Value>, prefix: string, internalCommitment?: Field);
5
+ constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
6
6
  protected hash(elements: Field[]): Field;
7
7
  }
8
8
  //# sourceMappingURL=PrefixedProvableHashList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAY,MAAM,MAAM,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,qBAAa,wBAAwB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAG7B,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC,EACtC,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,KAAgB;IAMtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGzC"}
1
+ {"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAY,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,qBAAa,wBAAwB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAG7B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,KAAgB;IAMtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGzC"}
@@ -1,11 +1,11 @@
1
- import { Field, FlexibleProvablePure, Bool } from "o1js";
1
+ import { Field, Bool, ProvablePure } from "o1js";
2
2
  /**
3
3
  * Utilities for creating a hash list from a given value type.
4
4
  */
5
5
  export declare abstract class ProvableHashList<Value> {
6
- private readonly valueType;
6
+ protected readonly valueType: ProvablePure<Value>;
7
7
  commitment: Field;
8
- constructor(valueType: FlexibleProvablePure<Value>, commitment?: Field);
8
+ constructor(valueType: ProvablePure<Value>, commitment?: Field);
9
9
  protected abstract hash(elements: Field[]): Field;
10
10
  /**
11
11
  * Converts the provided value to Field[] and appends it to
@@ -1 +1 @@
1
- {"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,oBAAoB,EAAE,IAAI,EAAY,MAAM,MAAM,CAAC;AAE7E;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,KAAK;IAExC,OAAO,CAAC,QAAQ,CAAC,SAAS;IACnB,UAAU,EAAE,KAAK;gBADP,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAChD,UAAU,GAAE,KAAgB;IAGrC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;IAEjD;;;;;;OAMG;IACI,IAAI,CAAC,KAAK,EAAE,KAAK;IAQjB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAS3C;;OAEG;IACI,OAAO;CAGf;AAED,qBAAa,uBAAuB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
1
+ {"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,IAAI,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAErE;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,KAAK;IAExC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;IAC1C,UAAU,EAAE,KAAK;gBADL,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC1C,UAAU,GAAE,KAAgB;IAGrC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;IAEjD;;;;;;OAMG;IACI,IAAI,CAAC,KAAK,EAAE,KAAK;IAQjB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAS3C;;OAEG;IACI,OAAO;CAGf;AAED,qBAAa,uBAAuB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
@@ -0,0 +1,14 @@
1
+ import { Bool, Field } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList";
3
+ export declare class ProvableReductionHashList<Value> extends ProvableHashList<Value> {
4
+ unconstrainedList: Value[];
5
+ private constrainedLastValue;
6
+ private preimage;
7
+ pushAndReduce(value: Value, reduce: (previous: Value) => [Value, Bool]): {
8
+ popLast: Bool;
9
+ value: Value;
10
+ };
11
+ pushIf(value: Value, condition: Bool): this;
12
+ hash(elements: Field[]): Field;
13
+ }
14
+ //# sourceMappingURL=ProvableReductionHashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableReductionHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableReductionHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAsB,MAAM,MAAM,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,yBAAyB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IACpE,iBAAiB,EAAE,KAAK,EAAE,CAAM;IAEvC,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,OAAO,CAAC,QAAQ,CAA0B;IAEnC,aAAa,CAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GACzC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE;IA4C3B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAMpC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
@@ -0,0 +1,50 @@
1
+ import { Bool, Poseidon, Provable } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList";
3
+ export class ProvableReductionHashList extends ProvableHashList {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.unconstrainedList = [];
7
+ this.constrainedLastValue = undefined;
8
+ this.preimage = this.commitment;
9
+ }
10
+ pushAndReduce(value, reduce) {
11
+ let valueToPush = value;
12
+ let popLast = Bool(false);
13
+ // Theoretically, we can feed the preimage + last value as a witness
14
+ // for non-zero commitment starts (like used in the BlockProver), because
15
+ // currently it won't reduce across chunks. But this is okay for now I think
16
+ if (this.constrainedLastValue !== undefined) {
17
+ [valueToPush, popLast] = reduce(this.constrainedLastValue);
18
+ }
19
+ Provable.asProver(() => {
20
+ if (popLast.toBoolean()) {
21
+ this.unconstrainedList.pop();
22
+ }
23
+ const valueAsConstant = this.valueType.fromFields(this.valueType.toFields(valueToPush).map((field) => field.toConstant()));
24
+ this.unconstrainedList.push(valueAsConstant);
25
+ });
26
+ const currentCommitment = this.commitment;
27
+ const noPopCommitment = this.hash([
28
+ currentCommitment,
29
+ ...this.valueType.toFields(valueToPush),
30
+ ]);
31
+ const popCommitment = this.hash([
32
+ this.preimage,
33
+ ...this.valueType.toFields(valueToPush),
34
+ ]);
35
+ this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
36
+ this.constrainedLastValue = valueToPush;
37
+ this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
38
+ return {
39
+ popLast,
40
+ value: valueToPush,
41
+ };
42
+ }
43
+ pushIf(value, condition) {
44
+ throw new Error("pushIf is not implemented for ReducedHashList");
45
+ return this;
46
+ }
47
+ hash(elements) {
48
+ return Poseidon.hash(elements);
49
+ }
50
+ }
@@ -0,0 +1,11 @@
1
+ import { ProvableStateTransition, StateTransition } from "../model/StateTransition";
2
+ import { ProvableReductionHashList } from "./ProvableReductionHashList";
3
+ export declare class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
4
+ push(value: ProvableStateTransition): this;
5
+ pushWithMetadata(value: ProvableStateTransition): {
6
+ popLast: import("o1js/dist/node/lib/bool").Bool;
7
+ value: ProvableStateTransition;
8
+ };
9
+ }
10
+ export declare function reduceStateTransitions(transitions: StateTransition<unknown>[]): StateTransition<unknown>[];
11
+ //# sourceMappingURL=StateTransitionReductionList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateTransitionReductionList.d.ts","sourceRoot":"","sources":["../../src/utils/StateTransitionReductionList.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,qBAAa,4BAA6B,SAAQ,yBAAyB,CAAC,uBAAuB,CAAC;IAC3F,IAAI,CAAC,KAAK,EAAE,uBAAuB;IAMnC,gBAAgB,CAAC,KAAK,EAAE,uBAAuB;;;;CAyCvD;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GACtC,eAAe,CAAC,OAAO,CAAC,EAAE,CA0B5B"}
@@ -0,0 +1,60 @@
1
+ import { Provable } from "o1js";
2
+ import { ProvableOption } from "../model/Option";
3
+ import { ProvableStateTransition, StateTransition, } from "../model/StateTransition";
4
+ import { ProvableReductionHashList } from "./ProvableReductionHashList";
5
+ export class StateTransitionReductionList extends ProvableReductionHashList {
6
+ push(value) {
7
+ this.pushWithMetadata(value);
8
+ return this;
9
+ }
10
+ pushWithMetadata(value) {
11
+ return this.pushAndReduce(value, (previous) => {
12
+ const pathsMatch = previous.path.equals(value.path);
13
+ // Take the previous.from if the paths match, otherwise leave ST as is
14
+ const from = Provable.if(pathsMatch, ProvableOption, previous.from, value.from);
15
+ // In case we have a layout like
16
+ // { from: 5, to: 10 }, { from: 10, to: none }
17
+ // we just take the first and discard the second
18
+ const to = Provable.if(value.to.isSome.or(pathsMatch.not()), ProvableOption, value.to, previous.to);
19
+ const transition = new ProvableStateTransition({
20
+ path: value.path,
21
+ from: new ProvableOption(from),
22
+ to: new ProvableOption(to),
23
+ });
24
+ // Assert that connection is correct
25
+ previous.to.value
26
+ .equals(value.from.value)
27
+ .or(previous.to.isSome
28
+ .not()
29
+ .and(previous.from.value.equals(value.from.value)))
30
+ .or(pathsMatch.not())
31
+ .assertTrue();
32
+ return [transition, pathsMatch];
33
+ });
34
+ }
35
+ }
36
+ export function reduceStateTransitions(transitions) {
37
+ const reduced = [];
38
+ for (const st of transitions) {
39
+ if (reduced.length === 0) {
40
+ reduced.push(st);
41
+ continue;
42
+ }
43
+ const last = reduced.at(-1);
44
+ if (last.path.equals(st.path).toBoolean()) {
45
+ if (st.toValue.isSome.toBoolean()) {
46
+ reduced.pop();
47
+ reduced.push(new StateTransition(st.path, last.fromValue, st.toValue));
48
+ }
49
+ else {
50
+ // Do nothing, because we discard that ST
51
+ // { from: 5, to: 10 }, { from: 10, to: none }
52
+ // cancel the 2nd
53
+ }
54
+ }
55
+ else {
56
+ reduced.push(st);
57
+ }
58
+ }
59
+ return reduced;
60
+ }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "license": "MIT",
4
4
  "private": false,
5
5
  "type": "module",
6
- "version": "0.1.1-develop.457+467a974",
6
+ "version": "0.1.1-develop.651+7591cb6",
7
7
  "scripts": {
8
8
  "build": "tsc -p tsconfig.json",
9
9
  "dev": "tsc -p tsconfig.json --watch",
@@ -32,5 +32,5 @@
32
32
  "@jest/globals": "^29.5.0",
33
33
  "@types/lodash": "^4.14.194"
34
34
  },
35
- "gitHead": "467a974c8dddb9f57ecf37caf34d3e1e5eb33f2a"
35
+ "gitHead": "7591cb6bdf58a6cd525a10902c25bc292efcfc6b"
36
36
  }
@@ -0,0 +1,46 @@
1
+ import { Provable, PublicKey, Struct, UInt64 } from "o1js";
2
+
3
+ import { BlockProverExecutionData } from "../prover/block/BlockProvable";
4
+ import { StateMap } from "../state/StateMap";
5
+ import { protocolState } from "../state/protocol/ProtocolState";
6
+ import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
7
+ import { assert } from "../state/assert/assert";
8
+ import { injectable } from "tsyringe";
9
+
10
+ export class AccountState extends Struct({
11
+ nonce: UInt64,
12
+ }) {}
13
+
14
+ @injectable()
15
+ export class AccountStateHook extends ProvableTransactionHook {
16
+ @protocolState() public accountState = StateMap.from<PublicKey, AccountState>(
17
+ PublicKey,
18
+ AccountState
19
+ );
20
+
21
+ public onTransaction({ transaction }: BlockProverExecutionData): void {
22
+ const sender = transaction.sender.value;
23
+
24
+ const accountState = this.accountState
25
+ .get(sender)
26
+ .orElse(new AccountState({ nonce: UInt64.zero }));
27
+
28
+ const currentNonce = accountState.nonce;
29
+
30
+ // Either the nonce matches or the tx is a message, in which case we don't care
31
+ assert(
32
+ currentNonce
33
+ .equals(transaction.nonce.value)
34
+ .or(transaction.sender.isSome.not()),
35
+ "Nonce not matching"
36
+ );
37
+
38
+ // Optimized version of transaction.sender.isSome ? currentNonce.add(1) : Field(0)
39
+ // Bcs Bool(true).toField() == 1
40
+ const newNonce = UInt64.from(
41
+ currentNonce.value.add(1).mul(transaction.sender.isSome.toField())
42
+ );
43
+
44
+ this.accountState.set(sender, new AccountState({ nonce: newNonce }));
45
+ }
46
+ }
@@ -0,0 +1,18 @@
1
+ import { Provable } from "o1js";
2
+ import { NetworkState } from "../model/network/NetworkState";
3
+ import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
4
+
5
+ export class BlockHeightHook extends ProvableBlockHook<Record<string, never>> {
6
+ public afterBlock(networkState: NetworkState): NetworkState {
7
+ return new NetworkState({
8
+ block: {
9
+ height: networkState.block.height.add(1),
10
+ },
11
+ previous: networkState.previous
12
+ });
13
+ }
14
+
15
+ public beforeBlock(networkState: NetworkState): NetworkState {
16
+ return networkState;
17
+ }
18
+ }
@@ -0,0 +1,26 @@
1
+ import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
2
+ import { NetworkState } from "../model/network/NetworkState";
3
+ import { BlockProverState } from "../prover/block/BlockProver";
4
+
5
+ export class LastStateRootBlockHook extends ProvableBlockHook<
6
+ Record<string, never>
7
+ > {
8
+ public afterBlock(
9
+ networkState: NetworkState,
10
+ state: BlockProverState
11
+ ): NetworkState {
12
+ return new NetworkState({
13
+ block: networkState.block,
14
+ previous: {
15
+ rootHash: state.stateRoot,
16
+ },
17
+ });
18
+ }
19
+
20
+ public beforeBlock(
21
+ networkState: NetworkState,
22
+ state: BlockProverState
23
+ ): NetworkState {
24
+ return networkState;
25
+ }
26
+ }
@@ -0,0 +1,20 @@
1
+ import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
2
+ import { NetworkState } from "../model/network/NetworkState";
3
+ import { BlockProverState } from "../prover/block/BlockProver";
4
+ import { NoConfig } from "@proto-kit/common";
5
+
6
+ export class NoopBlockHook extends ProvableBlockHook<NoConfig> {
7
+ public afterBlock(
8
+ networkState: NetworkState,
9
+ state: BlockProverState
10
+ ): NetworkState {
11
+ return networkState;
12
+ }
13
+
14
+ public beforeBlock(
15
+ networkState: NetworkState,
16
+ state: BlockProverState
17
+ ): NetworkState {
18
+ return networkState;
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ import { injectable } from "tsyringe";
2
+ import { noop } from "@proto-kit/common";
3
+ import { SmartContract } from "o1js";
4
+
5
+ import {
6
+ ProvableSettlementHook,
7
+ SettlementHookInputs,
8
+ } from "../settlement/modularity/ProvableSettlementHook";
9
+
10
+ @injectable()
11
+ export class NoopSettlementHook extends ProvableSettlementHook<
12
+ Record<string, never>
13
+ > {
14
+ public beforeSettlement(
15
+ contract: SmartContract,
16
+ state: SettlementHookInputs
17
+ ): void {
18
+ noop();
19
+ }
20
+ }
@@ -0,0 +1,25 @@
1
+ import { Field } from "o1js";
2
+
3
+ import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
4
+ import { BlockProverExecutionData } from "../prover/block/BlockProvable";
5
+ import { protocolState } from "../state/protocol/ProtocolState";
6
+ import { State } from "../state/State";
7
+ import { DefaultProvableHashList } from "../utils/ProvableHashList";
8
+ import { SignedTransaction } from "../model/transaction/SignedTransaction";
9
+
10
+ // Future idea to add this functionality as a module
11
+ // This is currently hardcoded in tracing however
12
+ class SequenceStateTransactionModule extends ProvableTransactionHook {
13
+ @protocolState() sequenceStateTransactionsList = State.from(Field);
14
+
15
+ public onTransaction(executionData: BlockProverExecutionData): void {
16
+ const hashList = new DefaultProvableHashList(
17
+ SignedTransaction,
18
+ this.sequenceStateTransactionsList.get().orElse(Field(0))
19
+ );
20
+
21
+ hashList.push(executionData.transaction);
22
+
23
+ this.sequenceStateTransactionsList.set(hashList.commitment);
24
+ }
25
+ }