@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.
- package/dist/blockmodules/AccountStateModule.d.ts +1 -1
- package/dist/blockmodules/AccountStateModule.d.ts.map +1 -1
- package/dist/blockmodules/BlockHeightHook.d.ts +7 -0
- package/dist/blockmodules/BlockHeightHook.d.ts.map +1 -0
- package/dist/blockmodules/BlockHeightHook.js +16 -0
- package/dist/blockmodules/NoopBlockHook.d.ts +7 -0
- package/dist/blockmodules/NoopBlockHook.d.ts.map +1 -0
- package/dist/blockmodules/NoopBlockHook.js +9 -0
- package/dist/blockmodules/NoopTransactionHook.d.ts +1 -1
- package/dist/blockmodules/NoopTransactionHook.d.ts.map +1 -1
- package/dist/blockmodules/NoopTransactionHook.js +1 -2
- package/dist/hooks/AccountStateHook.d.ts +38 -0
- package/dist/hooks/AccountStateHook.d.ts.map +1 -0
- package/dist/hooks/AccountStateHook.js +36 -0
- package/dist/hooks/BlockHeightHook.d.ts +7 -0
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
- package/dist/hooks/BlockHeightHook.js +14 -0
- package/dist/hooks/NoopBlockHook.d.ts +7 -0
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
- package/dist/hooks/NoopBlockHook.js +9 -0
- package/dist/hooks/NoopTransactionHook.d.ts +6 -0
- package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
- package/dist/hooks/NoopTransactionHook.js +4 -0
- package/dist/hooks/TransactionFeeHook.d.ts +16 -0
- package/dist/hooks/TransactionFeeHook.d.ts.map +1 -0
- package/dist/hooks/TransactionFeeHook.js +39 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/model/Option.d.ts +29 -22
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +51 -45
- package/dist/model/StateTransition.d.ts +4 -2
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransition.js +2 -2
- package/dist/model/network/NetworkState.d.ts +1 -0
- package/dist/model/network/NetworkState.d.ts.map +1 -1
- package/dist/model/network/NetworkState.js +7 -0
- package/dist/protocol/Protocol.d.ts +4 -18
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +20 -9
- package/dist/protocol/ProtocolModule.d.ts +2 -2
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +1 -1
- package/dist/protocol/ProvableBlockHook.d.ts +16 -0
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
- package/dist/protocol/ProvableBlockHook.js +4 -0
- package/dist/protocol/ProvableTransactionHook.d.ts +2 -1
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
- package/dist/protocol/TransitioningProtocolModule.d.ts +4 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
- package/dist/protocol/TransitioningProtocolModule.js +4 -0
- package/dist/prover/block/BlockProvable.d.ts +21 -0
- package/dist/prover/block/BlockProvable.d.ts.map +1 -1
- package/dist/prover/block/BlockProvable.js +3 -1
- package/dist/prover/block/BlockProver.d.ts +9 -4
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +66 -16
- package/dist/prover/block/BlockTransactionPosition.d.ts +36 -0
- package/dist/prover/block/BlockTransactionPosition.d.ts.map +1 -0
- package/dist/prover/block/BlockTransactionPosition.js +25 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +1 -1
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +4 -5
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +3 -3
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +2 -2
- package/dist/state/State.d.ts +8 -1
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +11 -4
- package/dist/state/StateServiceProvider.d.ts +0 -2
- package/dist/state/StateServiceProvider.d.ts.map +1 -1
- package/dist/state/StateServiceProvider.js +5 -17
- package/package.json +3 -2
- package/src/blockmodules/AccountStateModule.ts +2 -2
- package/src/blockmodules/BlockHeightHook.ts +22 -0
- package/src/blockmodules/NoopBlockHook.ts +16 -0
- package/src/blockmodules/NoopTransactionHook.ts +3 -4
- package/src/index.ts +4 -4
- package/src/model/Option.ts +71 -56
- package/src/model/StateTransition.ts +2 -2
- package/src/model/network/NetworkState.ts +8 -0
- package/src/protocol/Protocol.ts +33 -32
- package/src/protocol/ProtocolModule.ts +3 -3
- package/src/protocol/ProvableBlockHook.ts +22 -0
- package/src/protocol/ProvableTransactionHook.ts +4 -1
- package/src/protocol/TransitioningProtocolModule.ts +4 -0
- package/src/prover/block/BlockProvable.ts +4 -2
- package/src/prover/block/BlockProver.ts +134 -21
- package/src/prover/block/BlockTransactionPosition.ts +34 -0
- package/src/prover/statetransition/StateTransitionProver.ts +6 -13
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +4 -5
- package/src/state/State.ts +11 -4
- package/src/state/StateServiceProvider.ts +2 -10
- package/test/Option.test.ts +64 -0
- package/test/StateTransition.test.ts +1 -1
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -11
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -12
- package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
- package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
- package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
- package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -132
- package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
- package/dist/utils/merkletree/RollupMerkleTree.js +0 -251
- package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -17
- package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
- package/src/utils/merkletree/RollupMerkleTree.ts +0 -275
- package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
- 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
|
|
11
|
+
interface BlockProverType extends ProtocolModule, BlockProvable {
|
|
14
12
|
}
|
|
15
|
-
interface StateTransitionProverType extends ProtocolModule
|
|
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
|
-
|
|
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;
|
|
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(
|
|
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(
|
|
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
|
|
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,
|
|
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"}
|
|
@@ -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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BlockProverExecutionData } from "../prover/block/BlockProvable";
|
|
2
2
|
import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
|
|
3
|
-
|
|
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;
|
|
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"}
|
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
26
|
-
|
|
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
|
|
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":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"BlockProver.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProver.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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"}
|