@proto-kit/protocol 0.1.1-develop.336 → 0.1.1-develop.455

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 (110) hide show
  1. package/dist/blockmodules/AccountStateModule.d.ts +1 -1
  2. package/dist/blockmodules/AccountStateModule.d.ts.map +1 -1
  3. package/dist/blockmodules/BlockHeightHook.d.ts +7 -0
  4. package/dist/blockmodules/BlockHeightHook.d.ts.map +1 -0
  5. package/dist/blockmodules/BlockHeightHook.js +16 -0
  6. package/dist/blockmodules/NoopBlockHook.d.ts +7 -0
  7. package/dist/blockmodules/NoopBlockHook.d.ts.map +1 -0
  8. package/dist/blockmodules/NoopBlockHook.js +9 -0
  9. package/dist/blockmodules/NoopTransactionHook.d.ts +1 -1
  10. package/dist/blockmodules/NoopTransactionHook.d.ts.map +1 -1
  11. package/dist/blockmodules/NoopTransactionHook.js +1 -2
  12. package/dist/hooks/AccountStateHook.d.ts +38 -0
  13. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  14. package/dist/hooks/AccountStateHook.js +36 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +14 -0
  18. package/dist/hooks/NoopBlockHook.d.ts +7 -0
  19. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  20. package/dist/hooks/NoopBlockHook.js +9 -0
  21. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  22. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  23. package/dist/hooks/NoopTransactionHook.js +4 -0
  24. package/dist/hooks/TransactionFeeHook.d.ts +16 -0
  25. package/dist/hooks/TransactionFeeHook.d.ts.map +1 -0
  26. package/dist/hooks/TransactionFeeHook.js +39 -0
  27. package/dist/index.d.ts +4 -4
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -4
  30. package/dist/model/Option.d.ts +29 -22
  31. package/dist/model/Option.d.ts.map +1 -1
  32. package/dist/model/Option.js +51 -45
  33. package/dist/model/StateTransition.d.ts +4 -2
  34. package/dist/model/StateTransition.d.ts.map +1 -1
  35. package/dist/model/StateTransition.js +2 -2
  36. package/dist/model/network/NetworkState.d.ts +1 -0
  37. package/dist/model/network/NetworkState.d.ts.map +1 -1
  38. package/dist/model/network/NetworkState.js +7 -0
  39. package/dist/protocol/Protocol.d.ts +4 -18
  40. package/dist/protocol/Protocol.d.ts.map +1 -1
  41. package/dist/protocol/Protocol.js +20 -9
  42. package/dist/protocol/ProtocolModule.d.ts +2 -2
  43. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  44. package/dist/protocol/ProtocolModule.js +1 -1
  45. package/dist/protocol/ProvableBlockHook.d.ts +16 -0
  46. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  47. package/dist/protocol/ProvableBlockHook.js +4 -0
  48. package/dist/protocol/ProvableTransactionHook.d.ts +2 -1
  49. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  50. package/dist/protocol/TransitioningProtocolModule.d.ts +4 -0
  51. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
  52. package/dist/protocol/TransitioningProtocolModule.js +4 -0
  53. package/dist/prover/block/BlockProvable.d.ts +21 -0
  54. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  55. package/dist/prover/block/BlockProvable.js +3 -1
  56. package/dist/prover/block/BlockProver.d.ts +9 -4
  57. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  58. package/dist/prover/block/BlockProver.js +66 -16
  59. package/dist/prover/block/BlockTransactionPosition.d.ts +36 -0
  60. package/dist/prover/block/BlockTransactionPosition.d.ts.map +1 -0
  61. package/dist/prover/block/BlockTransactionPosition.js +25 -0
  62. package/dist/prover/statetransition/StateTransitionProver.d.ts +1 -1
  63. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  64. package/dist/prover/statetransition/StateTransitionProver.js +4 -5
  65. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +3 -3
  66. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -1
  67. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +2 -2
  68. package/dist/state/State.d.ts +8 -1
  69. package/dist/state/State.d.ts.map +1 -1
  70. package/dist/state/State.js +11 -4
  71. package/dist/state/StateServiceProvider.d.ts +0 -2
  72. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  73. package/dist/state/StateServiceProvider.js +5 -17
  74. package/package.json +3 -2
  75. package/src/blockmodules/AccountStateModule.ts +2 -2
  76. package/src/blockmodules/BlockHeightHook.ts +22 -0
  77. package/src/blockmodules/NoopBlockHook.ts +16 -0
  78. package/src/blockmodules/NoopTransactionHook.ts +3 -4
  79. package/src/index.ts +4 -4
  80. package/src/model/Option.ts +71 -56
  81. package/src/model/StateTransition.ts +2 -2
  82. package/src/model/network/NetworkState.ts +8 -0
  83. package/src/protocol/Protocol.ts +33 -32
  84. package/src/protocol/ProtocolModule.ts +3 -3
  85. package/src/protocol/ProvableBlockHook.ts +22 -0
  86. package/src/protocol/ProvableTransactionHook.ts +4 -1
  87. package/src/protocol/TransitioningProtocolModule.ts +4 -0
  88. package/src/prover/block/BlockProvable.ts +4 -2
  89. package/src/prover/block/BlockProver.ts +134 -21
  90. package/src/prover/block/BlockTransactionPosition.ts +34 -0
  91. package/src/prover/statetransition/StateTransitionProver.ts +6 -13
  92. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +4 -5
  93. package/src/state/State.ts +11 -4
  94. package/src/state/StateServiceProvider.ts +2 -10
  95. package/test/Option.test.ts +64 -0
  96. package/test/StateTransition.test.ts +1 -1
  97. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -11
  98. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  99. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -12
  100. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  101. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  102. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  103. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -132
  104. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  105. package/dist/utils/merkletree/RollupMerkleTree.js +0 -251
  106. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -17
  107. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  108. package/src/utils/merkletree/RollupMerkleTree.ts +0 -275
  109. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  110. package/test/utils/MerkleTree.test.ts +0 -82
@@ -1,18 +1,16 @@
1
1
  import { AreProofsEnabled, ChildContainerProvider, ModuleContainer, ModulesConfig, ModulesRecord, StringKeyOf, TypedClass } from "@proto-kit/common";
2
2
  import { DependencyContainer } from "tsyringe";
3
3
  import { BlockProvable } from "../prover/block/BlockProvable";
4
- import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
5
4
  import { StateTransitionProvable } from "../prover/statetransition/StateTransitionProvable";
6
- import { BlockProver } from "../prover/block/BlockProver";
7
5
  import { StateServiceProvider } from "../state/StateServiceProvider";
8
6
  import { StateService } from "../state/StateService";
9
7
  import { ProtocolModule } from "./ProtocolModule";
10
8
  import { ProtocolEnvironment } from "./ProtocolEnvironment";
11
9
  import { AccountStateModule } from "../blockmodules/AccountStateModule";
12
10
  export type GenericProtocolModuleRecord = ModulesRecord<TypedClass<ProtocolModule<unknown>>>;
13
- interface BlockProverType extends ProtocolModule<object>, BlockProvable {
11
+ interface BlockProverType extends ProtocolModule, BlockProvable {
14
12
  }
15
- interface StateTransitionProverType extends ProtocolModule<object>, StateTransitionProvable {
13
+ interface StateTransitionProverType extends ProtocolModule, StateTransitionProvable {
16
14
  }
17
15
  export interface ProtocolCustomModulesRecord {
18
16
  BlockProver: TypedClass<BlockProverType>;
@@ -40,20 +38,8 @@ export declare class Protocol<Modules extends ProtocolModulesRecord> extends Mod
40
38
  create(childContainerProvider: ChildContainerProvider): void;
41
39
  }
42
40
  export declare const VanillaProtocol: {
43
- create(): TypedClass<Protocol<{
44
- StateTransitionProver: typeof StateTransitionProver;
45
- BlockProver: typeof BlockProver;
46
- AccountState: typeof AccountStateModule;
47
- }>>;
48
- from<AdditonalModules extends GenericProtocolModuleRecord>(additionalModules: AdditonalModules, config: ModulesConfig<AdditonalModules & {
49
- StateTransitionProver: typeof StateTransitionProver;
50
- BlockProver: typeof BlockProver;
51
- AccountState: typeof AccountStateModule;
52
- }>): TypedClass<Protocol<AdditonalModules & {
53
- StateTransitionProver: typeof StateTransitionProver;
54
- BlockProver: typeof BlockProver;
55
- AccountState: typeof AccountStateModule;
56
- }>>;
41
+ create(): TypedClass<Protocol<ProtocolModulesRecord>>;
42
+ from<AdditonalModules extends GenericProtocolModuleRecord>(additionalModules: AdditonalModules): TypedClass<Protocol<ProtocolModulesRecord>>;
57
43
  };
58
44
  export {};
59
45
  //# sourceMappingURL=Protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../src/protocol/Protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EAEtB,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAa,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,MAAM,2BAA2B,GAAG,aAAa,CACrD,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CACpC,CAAC;AAEF,UAAU,eAAgB,SAAQ,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa;CAAG;AAE1E,UAAU,yBACR,SAAQ,cAAc,CAAC,MAAM,CAAC,EAC5B,uBAAuB;CAAG;AAE9B,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACzC,qBAAqB,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAC7D,YAAY,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,qBACf,SAAQ,2BAA2B,EACjC,2BAA2B;CAAG;AAElC,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,qBAAqB;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,QAAQ,CAAC,OAAO,SAAS,qBAAqB,CACzD,SAAQ,eAAe,CAAC,OAAO,CAC/B,YAAW,mBAAmB;WAGhB,IAAI,CAAC,OAAO,SAAS,qBAAqB,EACtD,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GACnC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAQzB,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAE5B,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC;IAK1D,IAAW,YAAY,IAAI,YAAY,CAEtC;IAED,IAAW,oBAAoB,IAAI,oBAAoB,CAEtD;IAEM,cAAc,CACnB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAY9D,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;IAED,OAAO,CAAC,QAAQ;IAMhB,IAAW,WAAW,IAAI,aAAa,CAMtC;IAED,IAAW,qBAAqB,IAAI,uBAAuB,CAI1D;IAEM,mBAAmB,IAAI,gBAAgB;IAIvC,MAAM,CAAC,sBAAsB,EAAE,sBAAsB;CA0B7D;AAED,eAAO,MAAM,eAAe;;+BAwBG,4BAA4B;qBACtC,kBAAkB;sBACjB,yBAAyB;;;+BAVhB,4BAA4B;qBACtC,kBAAkB;sBACjB,yBAAyB;;+BAMhB,4BAA4B;qBACtC,kBAAkB;sBACjB,yBAAyB;;CAe9C,CAAC"}
1
+ {"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../src/protocol/Protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EAEtB,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAa,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAE5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAUxE,MAAM,MAAM,2BAA2B,GAAG,aAAa,CACrD,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CACpC,CAAC;AAEF,UAAU,eAAgB,SAAQ,cAAc,EAAE,aAAa;CAAG;AAElE,UAAU,yBACR,SAAQ,cAAc,EACpB,uBAAuB;CAAG;AAE9B,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACzC,qBAAqB,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAC7D,YAAY,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,qBACf,SAAQ,2BAA2B,EACjC,2BAA2B;CAAG;AAElC,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,qBAAqB;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,QAAQ,CAAC,OAAO,SAAS,qBAAqB,CACzD,SAAQ,eAAe,CAAC,OAAO,CAC/B,YAAW,mBAAmB;WAGhB,IAAI,CAAC,OAAO,SAAS,qBAAqB,EACtD,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GACnC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAQzB,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAE5B,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC;IAK1D,IAAW,YAAY,IAAI,YAAY,CAEtC;IAED,IAAW,oBAAoB,IAAI,oBAAoB,CAEtD;IAEM,cAAc,CACnB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAY9D,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;IAED,OAAO,CAAC,QAAQ;IAMhB,IAAW,WAAW,IAAI,aAAa,CAMtC;IAED,IAAW,qBAAqB,IAAI,uBAAuB,CAI1D;IAEM,mBAAmB,IAAI,gBAAgB;IAIvC,MAAM,CAAC,sBAAsB,EAAE,sBAAsB;CA0C7D;AAED,eAAO,MAAM,eAAe;;qGAOvB,WAAW,SAAS,qBAAqB,CAAC,CAAC;CAW/C,CAAC"}
@@ -5,6 +5,13 @@ import { BlockProver } from "../prover/block/BlockProver";
5
5
  import { ProvableTransactionHook } from "./ProvableTransactionHook";
6
6
  import { NoopTransactionHook } from "../blockmodules/NoopTransactionHook";
7
7
  import { AccountStateModule } from "../blockmodules/AccountStateModule";
8
+ import { ProvableBlockHook } from "./ProvableBlockHook";
9
+ import { NoopBlockHook } from "../blockmodules/NoopBlockHook";
10
+ import { BlockHeightHook } from "../blockmodules/BlockHeightHook";
11
+ const PROTOCOL_INJECTION_TOKENS = {
12
+ ProvableTransactionHook: "ProvableTransactionHook",
13
+ ProvableBlockHook: "ProvableBlockHook",
14
+ };
8
15
  export class Protocol extends ModuleContainer {
9
16
  // .from() to create Protocol
10
17
  static from(modules) {
@@ -54,35 +61,39 @@ export class Protocol extends ModuleContainer {
54
61
  // Register the BlockModules seperately since we need to
55
62
  // inject them differently later
56
63
  let atLeastOneTransactionHookRegistered = false;
64
+ let atLeastOneBlockHookRegistered = false;
57
65
  Object.entries(this.definition.modules).forEach(([key, value]) => {
58
66
  if (Object.prototype.isPrototypeOf.call(ProvableTransactionHook, value)) {
59
- this.container.register("ProvableTransactionHook", { useToken: key }, { lifecycle: Lifecycle.ContainerScoped });
67
+ this.container.register(PROTOCOL_INJECTION_TOKENS.ProvableTransactionHook, { useToken: key }, { lifecycle: Lifecycle.ContainerScoped });
60
68
  atLeastOneTransactionHookRegistered = true;
61
69
  }
70
+ if (Object.prototype.isPrototypeOf.call(ProvableBlockHook, value)) {
71
+ this.container.register(PROTOCOL_INJECTION_TOKENS.ProvableBlockHook, { useToken: key }, { lifecycle: Lifecycle.ContainerScoped });
72
+ atLeastOneBlockHookRegistered = true;
73
+ }
62
74
  });
63
75
  // We need this so that tsyringe doesn't throw when no hooks are registered
64
76
  if (!atLeastOneTransactionHookRegistered) {
65
- this.container.register("ProvableTransactionHook", { useClass: NoopTransactionHook }, { lifecycle: Lifecycle.ContainerScoped });
77
+ this.container.register(PROTOCOL_INJECTION_TOKENS.ProvableTransactionHook, { useClass: NoopTransactionHook }, { lifecycle: Lifecycle.ContainerScoped });
78
+ }
79
+ if (!atLeastOneBlockHookRegistered) {
80
+ this.container.register(PROTOCOL_INJECTION_TOKENS.ProvableBlockHook, { useClass: NoopBlockHook }, { lifecycle: Lifecycle.ContainerScoped });
66
81
  }
67
82
  }
68
83
  }
69
84
  export const VanillaProtocol = {
70
85
  create() {
71
- return VanillaProtocol.from({}, {
72
- BlockProver: {},
73
- StateTransitionProver: {},
74
- AccountState: {},
75
- });
86
+ return VanillaProtocol.from({});
76
87
  },
77
- from(additionalModules, config) {
88
+ from(additionalModules) {
78
89
  return Protocol.from({
79
90
  modules: {
80
91
  StateTransitionProver,
81
92
  BlockProver,
82
93
  AccountState: AccountStateModule,
94
+ BlockHeight: BlockHeightHook,
83
95
  ...additionalModules,
84
96
  },
85
- config,
86
97
  });
87
98
  },
88
99
  };
@@ -1,6 +1,6 @@
1
- import { AreProofsEnabled, ChildContainerProvider, ConfigurableModule } from "@proto-kit/common";
1
+ import { AreProofsEnabled, ChildContainerProvider, ConfigurableModule, NoConfig } from "@proto-kit/common";
2
2
  import { ProtocolEnvironment } from "./ProtocolEnvironment";
3
- export declare abstract class ProtocolModule<Config> extends ConfigurableModule<Config> {
3
+ export declare abstract class ProtocolModule<Config = NoConfig> extends ConfigurableModule<Config> {
4
4
  protocol?: ProtocolEnvironment;
5
5
  get appChain(): AreProofsEnabled | undefined;
6
6
  create(childContainerProvider: ChildContainerProvider): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ProtocolModule.d.ts","sourceRoot":"","sources":["../../src/protocol/ProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,8BAAsB,cAAc,CAClC,MAAM,CACN,SAAQ,kBAAkB,CAAC,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAEtC,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAGM,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,IAAI;CAGpE"}
1
+ {"version":3,"file":"ProtocolModule.d.ts","sourceRoot":"","sources":["../../src/protocol/ProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAAE,QAAQ,EAE7B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,8BAAsB,cAAc,CAClC,MAAM,GAAG,QAAQ,CACjB,SAAQ,kBAAkB,CAAC,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAEtC,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAGM,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,IAAI;CAGpE"}
@@ -1,4 +1,4 @@
1
- import { ConfigurableModule, noop, } from "@proto-kit/common";
1
+ import { ConfigurableModule, noop } from "@proto-kit/common";
2
2
  export class ProtocolModule extends ConfigurableModule {
3
3
  get appChain() {
4
4
  return this.protocol?.getAreProofsEnabled();
@@ -0,0 +1,16 @@
1
+ import type { BlockProverState } from "../prover/block/BlockProver";
2
+ import { NetworkState } from "../model/network/NetworkState";
3
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
4
+ export interface BeforeBlockParameters {
5
+ state: BlockProverState;
6
+ networkState: NetworkState;
7
+ }
8
+ export interface AfterBlockParameters {
9
+ state: BlockProverState;
10
+ networkState: NetworkState;
11
+ }
12
+ export declare abstract class ProvableBlockHook<Config> extends TransitioningProtocolModule<Config> {
13
+ abstract beforeBlock(blockData: BeforeBlockParameters): NetworkState;
14
+ abstract afterBlock(blockData: AfterBlockParameters): NetworkState;
15
+ }
16
+ //# sourceMappingURL=ProvableBlockHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableBlockHook.d.ts","sourceRoot":"","sources":["../../src/protocol/ProvableBlockHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAGD,8BAAsB,iBAAiB,CACrC,MAAM,CACN,SAAQ,2BAA2B,CAAC,MAAM,CAAC;aAC3B,WAAW,CAAC,SAAS,EAAE,qBAAqB,GAAG,YAAY;aAC3D,UAAU,CAAC,SAAS,EAAE,oBAAoB,GAAG,YAAY;CAC1E"}
@@ -0,0 +1,4 @@
1
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
2
+ // Purpose is to validate transition from -> to network state
3
+ export class ProvableBlockHook extends TransitioningProtocolModule {
4
+ }
@@ -1,6 +1,7 @@
1
1
  import { BlockProverExecutionData } from "../prover/block/BlockProvable";
2
2
  import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
3
- export declare abstract class ProvableTransactionHook<Config> extends TransitioningProtocolModule<Config> {
3
+ import { NoConfig } from "@proto-kit/common";
4
+ export declare abstract class ProvableTransactionHook<Config = NoConfig> extends TransitioningProtocolModule<Config> {
4
5
  abstract onTransaction(executionData: BlockProverExecutionData): void;
5
6
  }
6
7
  //# sourceMappingURL=ProvableTransactionHook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProvableTransactionHook.d.ts","sourceRoot":"","sources":["../../src/protocol/ProvableTransactionHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,8BAAsB,uBAAuB,CAAC,MAAM,CAAE,SAAQ,2BAA2B,CAAC,MAAM,CAAC;aAC/E,aAAa,CAAC,aAAa,EAAE,wBAAwB,GAAG,IAAI;CAC7E"}
1
+ {"version":3,"file":"ProvableTransactionHook.d.ts","sourceRoot":"","sources":["../../src/protocol/ProvableTransactionHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,8BAAsB,uBAAuB,CAC3C,MAAM,GAAG,QAAQ,CACjB,SAAQ,2BAA2B,CAAC,MAAM,CAAC;aAC3B,aAAa,CAAC,aAAa,EAAE,wBAAwB,GAAG,IAAI;CAC7E"}
@@ -1,4 +1,8 @@
1
1
  import { ProtocolModule } from "./ProtocolModule";
2
+ /**
3
+ * A Protocolmodule that enables it's implementing module to access to
4
+ * StateTransitions and state
5
+ */
2
6
  export declare abstract class TransitioningProtocolModule<Config> extends ProtocolModule<Config> {
3
7
  name?: string;
4
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TransitioningProtocolModule.d.ts","sourceRoot":"","sources":["../../src/protocol/TransitioningProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,8BAAsB,2BAA2B,CAC/C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"TransitioningProtocolModule.d.ts","sourceRoot":"","sources":["../../src/protocol/TransitioningProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;GAGG;AACH,8BAAsB,2BAA2B,CAC/C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,3 +1,7 @@
1
1
  import { ProtocolModule } from "./ProtocolModule";
2
+ /**
3
+ * A Protocolmodule that enables it's implementing module to access to
4
+ * StateTransitions and state
5
+ */
2
6
  export class TransitioningProtocolModule extends ProtocolModule {
3
7
  }
@@ -4,6 +4,7 @@ import { StateTransitionProof } from "../statetransition/StateTransitionProvable
4
4
  import { MethodPublicOutput } from "../../model/MethodPublicOutput";
5
5
  import { ProtocolTransaction } from "../../model/transaction/ProtocolTransaction";
6
6
  import { NetworkState } from "../../model/network/NetworkState";
7
+ import { BlockTransactionPosition } from "./BlockTransactionPosition";
7
8
  declare const BlockProverPublicInput_base: (new (value: {
8
9
  transactionsHash: import("o1js/dist/node/lib/field").Field;
9
10
  stateRoot: import("o1js/dist/node/lib/field").Field;
@@ -51,18 +52,22 @@ export declare class BlockProverPublicInput extends BlockProverPublicInput_base
51
52
  declare const BlockProverPublicOutput_base: (new (value: {
52
53
  transactionsHash: import("o1js/dist/node/lib/field").Field;
53
54
  stateRoot: import("o1js/dist/node/lib/field").Field;
55
+ networkStateHash: import("o1js/dist/node/lib/field").Field;
54
56
  }) => {
55
57
  transactionsHash: import("o1js/dist/node/lib/field").Field;
56
58
  stateRoot: import("o1js/dist/node/lib/field").Field;
59
+ networkStateHash: import("o1js/dist/node/lib/field").Field;
57
60
  }) & {
58
61
  _isStruct: true;
59
62
  } & import("o1js/dist/node/snarky").ProvablePure<{
60
63
  transactionsHash: import("o1js/dist/node/lib/field").Field;
61
64
  stateRoot: import("o1js/dist/node/lib/field").Field;
65
+ networkStateHash: import("o1js/dist/node/lib/field").Field;
62
66
  }> & {
63
67
  toInput: (x: {
64
68
  transactionsHash: import("o1js/dist/node/lib/field").Field;
65
69
  stateRoot: import("o1js/dist/node/lib/field").Field;
70
+ networkStateHash: import("o1js/dist/node/lib/field").Field;
66
71
  }) => {
67
72
  fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
68
73
  packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
@@ -70,16 +75,20 @@ declare const BlockProverPublicOutput_base: (new (value: {
70
75
  toJSON: (x: {
71
76
  transactionsHash: import("o1js/dist/node/lib/field").Field;
72
77
  stateRoot: import("o1js/dist/node/lib/field").Field;
78
+ networkStateHash: import("o1js/dist/node/lib/field").Field;
73
79
  }) => {
74
80
  transactionsHash: string;
75
81
  stateRoot: string;
82
+ networkStateHash: string;
76
83
  };
77
84
  fromJSON: (x: {
78
85
  transactionsHash: string;
79
86
  stateRoot: string;
87
+ networkStateHash: string;
80
88
  }) => {
81
89
  transactionsHash: import("o1js/dist/node/lib/field").Field;
82
90
  stateRoot: import("o1js/dist/node/lib/field").Field;
91
+ networkStateHash: import("o1js/dist/node/lib/field").Field;
83
92
  };
84
93
  };
85
94
  export declare class BlockProverPublicOutput extends BlockProverPublicOutput_base {
@@ -88,18 +97,22 @@ export type BlockProverProof = Proof<BlockProverPublicInput, BlockProverPublicOu
88
97
  declare const BlockProverExecutionData_base: (new (value: {
89
98
  transaction: ProtocolTransaction;
90
99
  networkState: NetworkState;
100
+ transactionPosition: BlockTransactionPosition;
91
101
  }) => {
92
102
  transaction: ProtocolTransaction;
93
103
  networkState: NetworkState;
104
+ transactionPosition: BlockTransactionPosition;
94
105
  }) & {
95
106
  _isStruct: true;
96
107
  } & import("o1js/dist/node/snarky").ProvablePure<{
97
108
  transaction: ProtocolTransaction;
98
109
  networkState: NetworkState;
110
+ transactionPosition: BlockTransactionPosition;
99
111
  }> & {
100
112
  toInput: (x: {
101
113
  transaction: ProtocolTransaction;
102
114
  networkState: NetworkState;
115
+ transactionPosition: BlockTransactionPosition;
103
116
  }) => {
104
117
  fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
105
118
  packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
@@ -107,6 +120,7 @@ declare const BlockProverExecutionData_base: (new (value: {
107
120
  toJSON: (x: {
108
121
  transaction: ProtocolTransaction;
109
122
  networkState: NetworkState;
123
+ transactionPosition: BlockTransactionPosition;
110
124
  }) => {
111
125
  transaction: {
112
126
  methodId: string;
@@ -120,6 +134,9 @@ declare const BlockProverExecutionData_base: (new (value: {
120
134
  height: string;
121
135
  };
122
136
  };
137
+ transactionPosition: {
138
+ type: string;
139
+ };
123
140
  };
124
141
  fromJSON: (x: {
125
142
  transaction: {
@@ -134,9 +151,13 @@ declare const BlockProverExecutionData_base: (new (value: {
134
151
  height: string;
135
152
  };
136
153
  };
154
+ transactionPosition: {
155
+ type: string;
156
+ };
137
157
  }) => {
138
158
  transaction: ProtocolTransaction;
139
159
  networkState: NetworkState;
160
+ transactionPosition: BlockTransactionPosition;
140
161
  };
141
162
  };
142
163
  export declare class BlockProverExecutionData extends BlockProverExecutionData_base {
@@ -1 +1 @@
1
- {"version":3,"file":"BlockProvable.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProvable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAU,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhE,qBAAa,sBAAuB,SAAQ,2BAI1C;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,uBAAwB,SAAQ,4BAG3C;CAAG;AAEL,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAClC,sBAAsB,EACtB,uBAAuB,CACxB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,qBAAa,wBAAyB,SAAQ,6BAI5C;CAAG;AAEL,MAAM,WAAW,aACf,SAAQ,kBAAkB,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;IAC3E,gBAAgB,EAAE,CAChB,WAAW,EAAE,sBAAsB,EACnC,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACzC,aAAa,EAAE,wBAAwB,KACpC,uBAAuB,CAAC;IAE7B,KAAK,EAAE,CACL,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,KACrB,uBAAuB,CAAC;CAC9B"}
1
+ {"version":3,"file":"BlockProvable.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProvable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,EAAU,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,qBAAa,sBAAuB,SAAQ,2BAI1C;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,uBAAwB,SAAQ,4BAI3C;CAAG;AAEL,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAClC,sBAAsB,EACtB,uBAAuB,CACxB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,qBAAa,wBAAyB,SAAQ,6BAI5C;CAAG;AAEL,MAAM,WAAW,aACf,SAAQ,kBAAkB,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;IAC3E,gBAAgB,EAAE,CAChB,WAAW,EAAE,sBAAsB,EACnC,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACzC,aAAa,EAAE,wBAAwB,KACpC,uBAAuB,CAAC;IAE7B,KAAK,EAAE,CACL,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,KACrB,uBAAuB,CAAC;CAC9B"}
@@ -1,6 +1,7 @@
1
1
  import { Field, Struct } from "o1js";
2
2
  import { ProtocolTransaction } from "../../model/transaction/ProtocolTransaction";
3
3
  import { NetworkState } from "../../model/network/NetworkState";
4
+ import { BlockTransactionPosition } from "./BlockTransactionPosition";
4
5
  export class BlockProverPublicInput extends Struct({
5
6
  transactionsHash: Field,
6
7
  stateRoot: Field,
@@ -10,11 +11,12 @@ export class BlockProverPublicInput extends Struct({
10
11
  export class BlockProverPublicOutput extends Struct({
11
12
  transactionsHash: Field,
12
13
  stateRoot: Field,
14
+ networkStateHash: Field,
13
15
  }) {
14
16
  }
15
17
  export class BlockProverExecutionData extends Struct({
16
18
  transaction: ProtocolTransaction,
17
19
  networkState: NetworkState,
18
- // accountstate
20
+ transactionPosition: BlockTransactionPosition,
19
21
  }) {
20
22
  }
@@ -5,6 +5,7 @@ import { ProtocolModule } from "../../protocol/ProtocolModule";
5
5
  import { StateTransitionProof, StateTransitionProverPublicInput, StateTransitionProverPublicOutput } from "../statetransition/StateTransitionProvable";
6
6
  import { BlockProvable, BlockProverExecutionData, BlockProverProof, BlockProverPublicInput, BlockProverPublicOutput } from "./BlockProvable";
7
7
  import { ProvableTransactionHook } from "../../protocol/ProvableTransactionHook";
8
+ import { ProvableBlockHook } from "../../protocol/ProvableBlockHook";
8
9
  export interface BlockProverState {
9
10
  stateRoot: Field;
10
11
  /**
@@ -22,8 +23,9 @@ export declare class BlockProverProgrammable extends ZkProgrammable<BlockProverP
22
23
  private readonly prover;
23
24
  readonly stateTransitionProver: ZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>;
24
25
  readonly runtime: ZkProgrammable<undefined, MethodPublicOutput>;
25
- private readonly blockModules;
26
- constructor(prover: BlockProver, stateTransitionProver: ZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, runtime: ZkProgrammable<undefined, MethodPublicOutput>, blockModules: ProvableTransactionHook<unknown>[]);
26
+ private readonly transactionHooks;
27
+ private readonly blockHooks;
28
+ constructor(prover: BlockProver, stateTransitionProver: ZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, runtime: ZkProgrammable<undefined, MethodPublicOutput>, transactionHooks: ProvableTransactionHook<unknown>[], blockHooks: ProvableBlockHook<unknown>[]);
27
29
  get appChain(): AreProofsEnabled | undefined;
28
30
  /**
29
31
  * Applies and checks the two proofs and applies the corresponding state
@@ -37,6 +39,9 @@ export declare class BlockProverProgrammable extends ZkProgrammable<BlockProverP
37
39
  */
38
40
  applyTransaction(state: BlockProverState, stateTransitionProof: Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, appProof: Proof<void, MethodPublicOutput>, executionData: BlockProverExecutionData): BlockProverState;
39
41
  assertProtocolTransitions(stateTransitionProof: Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, executionData: BlockProverExecutionData): void;
42
+ private getBeforeBlockNetworkState;
43
+ private getAfterBlockNetworkState;
44
+ private addTransactionToBundle;
40
45
  proveTransaction(publicInput: BlockProverPublicInput, stateProof: StateTransitionProof, appProof: Proof<void, MethodPublicOutput>, executionData: BlockProverExecutionData): BlockProverPublicOutput;
41
46
  merge(publicInput: BlockProverPublicInput, proof1: BlockProverProof, proof2: BlockProverProof): BlockProverPublicOutput;
42
47
  /**
@@ -51,11 +56,11 @@ export declare class BlockProverProgrammable extends ZkProgrammable<BlockProverP
51
56
  * a StateTransitionProof into a single BlockProof, that can
52
57
  * then be merged to be committed to the base-layer contract
53
58
  */
54
- export declare class BlockProver extends ProtocolModule<object> implements BlockProvable {
59
+ export declare class BlockProver extends ProtocolModule implements BlockProvable {
55
60
  readonly stateTransitionProver: WithZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>;
56
61
  readonly runtime: WithZkProgrammable<undefined, MethodPublicOutput>;
57
62
  zkProgrammable: BlockProverProgrammable;
58
- constructor(stateTransitionProver: WithZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, runtime: WithZkProgrammable<undefined, MethodPublicOutput>, transactionHooks: ProvableTransactionHook<unknown>[]);
63
+ constructor(stateTransitionProver: WithZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, runtime: WithZkProgrammable<undefined, MethodPublicOutput>, transactionHooks: ProvableTransactionHook<unknown>[], blockHooks: ProvableBlockHook<unknown>[]);
59
64
  merge(publicInput: BlockProverPublicInput, proof1: BlockProverProof, proof2: BlockProverProof): BlockProverPublicOutput;
60
65
  proveTransaction(publicInput: BlockProverPublicInput, stateProof: StateTransitionProof, appProof: Proof<void, MethodPublicOutput>, executionData: BlockProverExecutionData): BlockProverPublicOutput;
61
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BlockProver.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlockProver.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProver.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,EACL,KAAK,KAAK,EAIX,MAAM,MAAM,CAAC;AAEd,OAAO,EACL,gBAAgB,EAChB,cAAc,EAEd,kBAAkB,EAClB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAmBrE,MAAM,WAAW,gBAAgB;IAE/B,SAAS,EAAE,KAAK,CAAC;IAEjB;;;OAGG;IACH,gBAAgB,EAAE,KAAK,CAAC;IAExB;;;OAGG;IACH,gBAAgB,EAAE,KAAK,CAAC;CACzB;AAED,qBAAa,uBAAwB,SAAQ,cAAc,CACzD,sBAAsB,EACtB,uBAAuB,CACxB;IAGG,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,qBAAqB,EAAE,cAAc,CACnD,gCAAgC,EAChC,iCAAiC,CAClC;aACe,OAAO,EAAE,cAAc,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAPV,MAAM,EAAE,WAAW,EACpB,qBAAqB,EAAE,cAAc,CACnD,gCAAgC,EAChC,iCAAiC,CAClC,EACe,OAAO,EAAE,cAAc,CAAC,SAAS,EAAE,kBAAkB,CAAC,EACrD,gBAAgB,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAAE,EACpD,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAK3D,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAED;;;;;;;;;OASG;IACI,gBAAgB,CACrB,KAAK,EAAE,gBAAgB,EACvB,oBAAoB,EAAE,KAAK,CACzB,gCAAgC,EAChC,iCAAiC,CAClC,EACD,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACzC,aAAa,EAAE,wBAAwB,GACtC,gBAAgB;IAqEZ,yBAAyB,CAC9B,oBAAoB,EAAE,KAAK,CACzB,gCAAgC,EAChC,iCAAiC,CAClC,EACD,aAAa,EAAE,wBAAwB;IA+CzC,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,sBAAsB;IAsDvB,gBAAgB,CACrB,WAAW,EAAE,sBAAsB,EACnC,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACzC,aAAa,EAAE,wBAAwB,GACtC,uBAAuB;IAmDnB,KAAK,CACV,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,GACvB,uBAAuB;IAyC1B;;;;OAIG;IACI,gBAAgB,IAAI,cAAc,CACvC,sBAAsB,EACtB,uBAAuB,CACxB;CAkEF;AAED;;;;GAIG;AACH,qBACa,WACX,SAAQ,cACR,YAAW,aAAa;aAMN,qBAAqB,EAAE,kBAAkB,CACvD,gCAAgC,EAChC,iCAAiC,CAClC;aAEe,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC;IATrE,cAAc,EAAE,uBAAuB,CAAC;gBAI7B,qBAAqB,EAAE,kBAAkB,CACvD,gCAAgC,EAChC,iCAAiC,CAClC,EAEe,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAE1E,gBAAgB,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAAE,EAEpD,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAYnC,KAAK,CACV,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,GACvB,uBAAuB;IAInB,gBAAgB,CACrB,WAAW,EAAE,sBAAsB,EACnC,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACzC,aAAa,EAAE,wBAAwB,GACtC,uBAAuB;CAQ3B"}
@@ -11,7 +11,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  /* eslint-disable max-lines */
14
- import { Experimental, Field, Provable, SelfProof } from "o1js";
14
+ import { Experimental, Field, Provable, SelfProof, } from "o1js";
15
15
  import { container, inject, injectable, injectAll } from "tsyringe";
16
16
  import { provableMethod, ZkProgrammable, } from "@proto-kit/common";
17
17
  import { DefaultProvableHashList } from "../../utils/ProvableHashList";
@@ -20,6 +20,8 @@ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
20
20
  import { BlockProverExecutionData, BlockProverPublicInput, BlockProverPublicOutput, } from "./BlockProvable";
21
21
  import { ProvableStateTransition } from "../../model/StateTransition";
22
22
  import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethodExecutionContext";
23
+ import { NetworkState } from "../../model/network/NetworkState";
24
+ import { BlockTransactionPosition } from "./BlockTransactionPosition";
23
25
  const errors = {
24
26
  stateProofNotStartingAtZero: () => "StateProof not starting ST-commitment at zero",
25
27
  stateTransitionsHashNotEqual: () => "StateTransition list commitments are not equal",
@@ -30,12 +32,13 @@ const errors = {
30
32
  export class BlockProverProgrammable extends ZkProgrammable {
31
33
  constructor(
32
34
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
33
- prover, stateTransitionProver, runtime, blockModules) {
35
+ prover, stateTransitionProver, runtime, transactionHooks, blockHooks) {
34
36
  super();
35
37
  this.prover = prover;
36
38
  this.stateTransitionProver = stateTransitionProver;
37
39
  this.runtime = runtime;
38
- this.blockModules = blockModules;
40
+ this.transactionHooks = transactionHooks;
41
+ this.blockHooks = blockHooks;
39
42
  }
40
43
  get appChain() {
41
44
  return this.prover.appChain;
@@ -75,11 +78,6 @@ export class BlockProverProgrammable extends ZkProgrammable {
75
78
  // Check network state integrity against appProof
76
79
  state.networkStateHash.assertEquals(appProof.publicOutput.networkStateHash, "Network state does not match state used in AppProof");
77
80
  state.networkStateHash.assertEquals(networkState.hash(), "Network state provided to BlockProver does not match the publicInput");
78
- // Append tx to transaction list
79
- const transactionList = new DefaultProvableHashList(Field, state.transactionsHash);
80
- const { transactionHash } = appProof.publicOutput;
81
- transactionList.push(transactionHash);
82
- stateTo.transactionsHash = transactionList.commitment;
83
81
  return stateTo;
84
82
  }
85
83
  // eslint-disable-next-line no-warning-comments, max-len
@@ -95,7 +93,7 @@ export class BlockProverProgrammable extends ZkProgrammable {
95
93
  networkState: executionData.networkState,
96
94
  });
97
95
  executionContext.beforeMethod("", "", []);
98
- this.blockModules.forEach((module) => {
96
+ this.transactionHooks.forEach((module) => {
99
97
  module.onTransaction(executionData);
100
98
  });
101
99
  executionContext.afterMethod();
@@ -108,16 +106,68 @@ export class BlockProverProgrammable extends ZkProgrammable {
108
106
  });
109
107
  stateTransitionProof.publicOutput.protocolTransitionsHash.assertEquals(hashList.commitment, "ProtocolTransitionsHash not matching the generated protocol transitions");
110
108
  }
109
+ getBeforeBlockNetworkState(state, networkState) {
110
+ return this.blockHooks.reduce((networkState, blockHook) => {
111
+ return blockHook.beforeBlock({
112
+ state,
113
+ networkState,
114
+ });
115
+ }, networkState);
116
+ }
117
+ getAfterBlockNetworkState(state, networkState) {
118
+ return this.blockHooks.reduce((networkState, blockHook) => {
119
+ return blockHook.afterBlock({
120
+ state,
121
+ networkState,
122
+ });
123
+ }, networkState);
124
+ }
125
+ addTransactionToBundle(state, stateTransitionProof, appProof, executionData) {
126
+ const { transactionPosition, networkState } = executionData;
127
+ const stateTo = {
128
+ ...state,
129
+ };
130
+ // Execute beforeBlook hooks and apply if it is the first tx of the bundle
131
+ const beforeHookResult = this.getBeforeBlockNetworkState(state, networkState);
132
+ const bundleOpened = transactionPosition.equals(BlockTransactionPosition.fromPositionType("FIRST"));
133
+ const resultingNetworkState = new NetworkState(Provable.if(bundleOpened, NetworkState, beforeHookResult, networkState));
134
+ stateTo.networkStateHash = resultingNetworkState.hash();
135
+ // TODO Modify bundle merkle tree as per specs
136
+ // Append tx to transaction list
137
+ const transactionList = new DefaultProvableHashList(Field, state.transactionsHash);
138
+ const { transactionHash } = appProof.publicOutput;
139
+ transactionList.push(transactionHash);
140
+ stateTo.transactionsHash = transactionList.commitment;
141
+ return {
142
+ state: stateTo,
143
+ networkState: resultingNetworkState,
144
+ bundleOpened,
145
+ bundleClosed: transactionPosition.equals(BlockTransactionPosition.fromPositionType("LAST")),
146
+ };
147
+ }
111
148
  proveTransaction(publicInput, stateProof, appProof, executionData) {
112
149
  const state = {
113
150
  transactionsHash: publicInput.transactionsHash,
114
151
  stateRoot: publicInput.stateRoot,
115
152
  networkStateHash: publicInput.networkStateHash,
116
153
  };
117
- const stateTo = this.applyTransaction(state, stateProof, appProof, executionData);
154
+ const bundleInclusionResult = this.addTransactionToBundle(state, stateProof, appProof, executionData);
155
+ const stateTo = this.applyTransaction(bundleInclusionResult.state, stateProof, appProof, {
156
+ transaction: executionData.transaction,
157
+ transactionPosition: executionData.transactionPosition,
158
+ networkState: bundleInclusionResult.networkState,
159
+ });
160
+ // Apply afterBlock hooks
161
+ const afterBlockNetworkState = this.getAfterBlockNetworkState(stateTo, bundleInclusionResult.networkState);
162
+ const bundleClosed = executionData.transactionPosition.equals(BlockTransactionPosition.fromPositionType("LAST"));
163
+ // We only need the hash here since this computed networkstate
164
+ // is only used as an input in the next bundle
165
+ const resultingNetworkStateHash = Provable.if(bundleClosed, afterBlockNetworkState.hash(), stateTo.networkStateHash);
118
166
  return new BlockProverPublicOutput({
119
167
  stateRoot: stateTo.stateRoot,
120
168
  transactionsHash: stateTo.transactionsHash,
169
+ // eslint-disable-next-line putout/putout
170
+ networkStateHash: resultingNetworkStateHash,
121
171
  });
122
172
  }
123
173
  merge(publicInput, proof1, proof2) {
@@ -131,10 +181,11 @@ export class BlockProverProgrammable extends ZkProgrammable {
131
181
  proof1.publicOutput.transactionsHash.assertEquals(proof2.publicInput.transactionsHash, errors.transactionsHashNotMatching("proof1.to -> proof2.from"));
132
182
  // Check networkhash
133
183
  publicInput.networkStateHash.assertEquals(proof1.publicInput.networkStateHash, errors.transactionsHashNotMatching("publicInput.from -> proof1.from"));
134
- publicInput.networkStateHash.assertEquals(proof2.publicInput.networkStateHash, errors.transactionsHashNotMatching("proof1.to -> proof2.from"));
184
+ proof1.publicOutput.networkStateHash.assertEquals(proof2.publicInput.networkStateHash, errors.transactionsHashNotMatching("proof1.to -> proof2.from"));
135
185
  return new BlockProverPublicOutput({
136
186
  stateRoot: proof2.publicOutput.stateRoot,
137
187
  transactionsHash: proof2.publicOutput.transactionsHash,
188
+ networkStateHash: proof2.publicOutput.networkStateHash,
138
189
  });
139
190
  }
140
191
  /**
@@ -204,13 +255,11 @@ __decorate([
204
255
  * then be merged to be committed to the base-layer contract
205
256
  */
206
257
  let BlockProver = class BlockProver extends ProtocolModule {
207
- constructor(stateTransitionProver, runtime, transactionHooks) {
258
+ constructor(stateTransitionProver, runtime, transactionHooks, blockHooks) {
208
259
  super();
209
260
  this.stateTransitionProver = stateTransitionProver;
210
261
  this.runtime = runtime;
211
- this.zkProgrammable = new BlockProverProgrammable(this, stateTransitionProver.zkProgrammable, runtime.zkProgrammable, transactionHooks
212
- // protocol.dependencyContainer.resolveAll("P rovableTransactionHook")
213
- );
262
+ this.zkProgrammable = new BlockProverProgrammable(this, stateTransitionProver.zkProgrammable, runtime.zkProgrammable, transactionHooks, blockHooks);
214
263
  }
215
264
  merge(publicInput, proof1, proof2) {
216
265
  return this.zkProgrammable.merge(publicInput, proof1, proof2);
@@ -224,6 +273,7 @@ BlockProver = __decorate([
224
273
  __param(0, inject("StateTransitionProver")),
225
274
  __param(1, inject("Runtime")),
226
275
  __param(2, injectAll("ProvableTransactionHook")),
227
- __metadata("design:paramtypes", [Object, Object, Array])
276
+ __param(3, injectAll("ProvableBlockHook")),
277
+ __metadata("design:paramtypes", [Object, Object, Array, Array])
228
278
  ], BlockProver);
229
279
  export { BlockProver };
@@ -0,0 +1,36 @@
1
+ import { Bool } from "o1js";
2
+ export type BlockTransactionPositionType = "FIRST" | "LAST" | "MIDDLE";
3
+ declare const BlockTransactionPosition_base: (new (value: {
4
+ type: import("o1js/dist/node/lib/field").Field;
5
+ }) => {
6
+ type: import("o1js/dist/node/lib/field").Field;
7
+ }) & {
8
+ _isStruct: true;
9
+ } & import("o1js/dist/node/snarky").ProvablePure<{
10
+ type: import("o1js/dist/node/lib/field").Field;
11
+ }> & {
12
+ toInput: (x: {
13
+ type: import("o1js/dist/node/lib/field").Field;
14
+ }) => {
15
+ fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
16
+ packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
17
+ };
18
+ toJSON: (x: {
19
+ type: import("o1js/dist/node/lib/field").Field;
20
+ }) => {
21
+ type: string;
22
+ };
23
+ fromJSON: (x: {
24
+ type: string;
25
+ }) => {
26
+ type: import("o1js/dist/node/lib/field").Field;
27
+ };
28
+ };
29
+ export declare class BlockTransactionPosition extends BlockTransactionPosition_base {
30
+ private static readonly fieldMapping;
31
+ static fromPositionType(type: BlockTransactionPositionType): BlockTransactionPosition;
32
+ static positionTypeFromIndex(index: number, bundleLength: number): BlockTransactionPositionType;
33
+ equals(type: BlockTransactionPosition): Bool;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=BlockTransactionPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockTransactionPosition.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockTransactionPosition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,MAAM,CAAC;AAG3C,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvE,qBAAa,wBAAyB,SAAQ,6BAE5C;IACA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAOlC;WAEY,gBAAgB,CAAC,IAAI,EAAE,4BAA4B;WAMnD,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAOhE,MAAM,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI;CAGpD"}