@proto-kit/protocol 0.1.1-develop.153
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/LICENSE.md +201 -0
- package/README.md +45 -0
- package/dist/Constants.d.ts +4 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +3 -0
- package/dist/config/ConfigurableModule.d.ts +18 -0
- package/dist/config/ConfigurableModule.d.ts.map +1 -0
- package/dist/config/ConfigurableModule.js +20 -0
- package/dist/config/ConfigurationAggregator.d.ts +10 -0
- package/dist/config/ConfigurationAggregator.d.ts.map +1 -0
- package/dist/config/ConfigurationAggregator.js +35 -0
- package/dist/config/ConfigurationReceiver.d.ts +25 -0
- package/dist/config/ConfigurationReceiver.d.ts.map +1 -0
- package/dist/config/ConfigurationReceiver.js +36 -0
- package/dist/config/ModuleContainer.d.ts +44 -0
- package/dist/config/ModuleContainer.d.ts.map +1 -0
- package/dist/config/ModuleContainer.js +89 -0
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/model/MethodPublicInput.d.ts +51 -0
- package/dist/model/MethodPublicInput.d.ts.map +1 -0
- package/dist/model/MethodPublicInput.js +11 -0
- package/dist/model/MethodPublicOutput.d.ts +59 -0
- package/dist/model/MethodPublicOutput.d.ts.map +1 -0
- package/dist/model/MethodPublicOutput.js +12 -0
- package/dist/model/Option.d.ts +94 -0
- package/dist/model/Option.d.ts.map +1 -0
- package/dist/model/Option.js +96 -0
- package/dist/model/Path.d.ts +31 -0
- package/dist/model/Path.d.ts.map +1 -0
- package/dist/model/Path.js +44 -0
- package/dist/model/StateTransition.d.ts +85 -0
- package/dist/model/StateTransition.d.ts.map +1 -0
- package/dist/model/StateTransition.js +58 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +57 -0
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
- package/dist/model/StateTransitionProvableBatch.js +21 -0
- package/dist/model/network/NetworkState.d.ts +64 -0
- package/dist/model/network/NetworkState.d.ts.map +1 -0
- package/dist/model/network/NetworkState.js +14 -0
- package/dist/model/transaction/ProtocolTransaction.d.ts +70 -0
- package/dist/model/transaction/ProtocolTransaction.d.ts.map +1 -0
- package/dist/model/transaction/ProtocolTransaction.js +18 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts +55 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.js +26 -0
- package/dist/protocol/Protocol.d.ts +37 -0
- package/dist/protocol/Protocol.d.ts.map +1 -0
- package/dist/protocol/Protocol.js +50 -0
- package/dist/protocol/ProtocolModule.d.ts +9 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -0
- package/dist/protocol/ProtocolModule.js +10 -0
- package/dist/prover/block/BlockProvable.d.ts +149 -0
- package/dist/prover/block/BlockProvable.d.ts.map +1 -0
- package/dist/prover/block/BlockProvable.js +20 -0
- package/dist/prover/block/BlockProver.d.ts +48 -0
- package/dist/prover/block/BlockProver.d.ts.map +1 -0
- package/dist/prover/block/BlockProver.js +171 -0
- package/dist/prover/block/BlockScopedModule.d.ts +3 -0
- package/dist/prover/block/BlockScopedModule.d.ts.map +1 -0
- package/dist/prover/block/BlockScopedModule.js +6 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +84 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.js +11 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +39 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.js +157 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +16 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +17 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +7 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +20 -0
- package/dist/src/model/Option.d.ts +158 -0
- package/dist/src/model/Option.d.ts.map +1 -0
- package/dist/src/model/Option.js +53 -0
- package/dist/src/model/Path.d.ts +35 -0
- package/dist/src/model/Path.d.ts.map +1 -0
- package/dist/src/model/Path.js +51 -0
- package/dist/src/model/StateTransition.d.ts +201 -0
- package/dist/src/model/StateTransition.d.ts.map +1 -0
- package/dist/src/model/StateTransition.js +43 -0
- package/dist/src/utils/PrefixedHashList.d.ts +15 -0
- package/dist/src/utils/PrefixedHashList.d.ts.map +1 -0
- package/dist/src/utils/PrefixedHashList.js +28 -0
- package/dist/src/utils/ProvableHashList.d.ts +30 -0
- package/dist/src/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/src/utils/ProvableHashList.js +43 -0
- package/dist/utils/PrefixedHashList.d.ts +14 -0
- package/dist/utils/PrefixedHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedHashList.js +12 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedProvableHashList.js +12 -0
- package/dist/utils/ProvableHashList.d.ts +27 -0
- package/dist/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/utils/ProvableHashList.js +43 -0
- package/dist/utils/Utils.d.ts +17 -0
- package/dist/utils/Utils.d.ts.map +1 -0
- package/dist/utils/Utils.js +63 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +25 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +72 -0
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +26 -0
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +79 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts +11 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
- package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts +130 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.js +244 -0
- package/jest.config.cjs +1 -0
- package/package.json +35 -0
- package/src/Constants.ts +3 -0
- package/src/index.ts +23 -0
- package/src/model/MethodPublicOutput.ts +12 -0
- package/src/model/Option.test.ts +21 -0
- package/src/model/Option.ts +133 -0
- package/src/model/Path.ts +52 -0
- package/src/model/StateTransition.ts +72 -0
- package/src/model/StateTransitionProvableBatch.ts +31 -0
- package/src/model/Transaction.ts +29 -0
- package/src/model/network/NetworkState.ts +15 -0
- package/src/model/transaction/ProtocolTransaction.ts +25 -0
- package/src/model/transaction/RuntimeTransaction.ts +34 -0
- package/src/protocol/Protocol.ts +129 -0
- package/src/protocol/ProtocolModule.ts +27 -0
- package/src/prover/block/BlockProvable.ts +45 -0
- package/src/prover/block/BlockProver.ts +302 -0
- package/src/prover/statetransition/StateTransitionProvable.ts +40 -0
- package/src/prover/statetransition/StateTransitionProver.ts +270 -0
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +24 -0
- package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +17 -0
- package/src/utils/PrefixedProvableHashList.ts +21 -0
- package/src/utils/ProvableHashList.ts +50 -0
- package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +99 -0
- package/src/utils/merkletree/MerkleTreeStore.ts +15 -0
- package/src/utils/merkletree/RollupMerkleTree.ts +250 -0
- package/src/utils/merkletree/VirtualMerkleTreeStore.ts +21 -0
- package/src/utils/utils.ts +103 -0
- package/test/BlockProver.test.ts +127 -0
- package/test/Protocol.test.ts +27 -0
- package/test/StateTransition.test.ts +182 -0
- package/tsconfig.json +8 -0
- package/tsconfig.test.json +9 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Field, UInt64 } from "snarkyjs";
|
|
2
|
+
declare const CurrentBlock_base: (new (value: {
|
|
3
|
+
height: UInt64;
|
|
4
|
+
}) => {
|
|
5
|
+
height: UInt64;
|
|
6
|
+
}) & {
|
|
7
|
+
_isStruct: true;
|
|
8
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
9
|
+
height: UInt64;
|
|
10
|
+
}> & {
|
|
11
|
+
toInput: (x: {
|
|
12
|
+
height: UInt64;
|
|
13
|
+
}) => {
|
|
14
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
15
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
16
|
+
};
|
|
17
|
+
toJSON: (x: {
|
|
18
|
+
height: UInt64;
|
|
19
|
+
}) => {
|
|
20
|
+
height: string;
|
|
21
|
+
};
|
|
22
|
+
fromJSON: (x: {
|
|
23
|
+
height: string;
|
|
24
|
+
}) => {
|
|
25
|
+
height: UInt64;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export declare class CurrentBlock extends CurrentBlock_base {
|
|
29
|
+
}
|
|
30
|
+
declare const NetworkState_base: (new (value: {
|
|
31
|
+
block: CurrentBlock;
|
|
32
|
+
}) => {
|
|
33
|
+
block: CurrentBlock;
|
|
34
|
+
}) & {
|
|
35
|
+
_isStruct: true;
|
|
36
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
37
|
+
block: CurrentBlock;
|
|
38
|
+
}> & {
|
|
39
|
+
toInput: (x: {
|
|
40
|
+
block: CurrentBlock;
|
|
41
|
+
}) => {
|
|
42
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
43
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
44
|
+
};
|
|
45
|
+
toJSON: (x: {
|
|
46
|
+
block: CurrentBlock;
|
|
47
|
+
}) => {
|
|
48
|
+
block: {
|
|
49
|
+
height: string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
fromJSON: (x: {
|
|
53
|
+
block: {
|
|
54
|
+
height: string;
|
|
55
|
+
};
|
|
56
|
+
}) => {
|
|
57
|
+
block: CurrentBlock;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export declare class NetworkState extends NetworkState_base {
|
|
61
|
+
hash(): Field;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=NetworkState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkState.d.ts","sourceRoot":"","sources":["../../../src/model/network/NetworkState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAoB,MAAM,EAAE,MAAM,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,qBAAa,YAAa,SAAQ,iBAEhC;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,YAAa,SAAQ,iBAEhC;IACO,IAAI,IAAI,KAAK;CAKrB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Poseidon, Struct, UInt64 } from "snarkyjs";
|
|
2
|
+
export class CurrentBlock extends Struct({
|
|
3
|
+
height: UInt64,
|
|
4
|
+
}) {
|
|
5
|
+
}
|
|
6
|
+
export class NetworkState extends Struct({
|
|
7
|
+
block: CurrentBlock,
|
|
8
|
+
}) {
|
|
9
|
+
hash() {
|
|
10
|
+
return Poseidon.hash([
|
|
11
|
+
...CurrentBlock.toFields(this.block)
|
|
12
|
+
]);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Bool, Field, PublicKey, Signature, UInt64 } from "snarkyjs";
|
|
2
|
+
declare const ProtocolTransaction_base: (new (value: {
|
|
3
|
+
methodId: import("snarkyjs/dist/node/lib/field").Field;
|
|
4
|
+
nonce: UInt64;
|
|
5
|
+
sender: PublicKey;
|
|
6
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
7
|
+
signature: Signature;
|
|
8
|
+
}) => {
|
|
9
|
+
methodId: import("snarkyjs/dist/node/lib/field").Field;
|
|
10
|
+
nonce: UInt64;
|
|
11
|
+
sender: PublicKey;
|
|
12
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
13
|
+
signature: Signature;
|
|
14
|
+
}) & {
|
|
15
|
+
_isStruct: true;
|
|
16
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
17
|
+
methodId: import("snarkyjs/dist/node/lib/field").Field;
|
|
18
|
+
nonce: UInt64;
|
|
19
|
+
sender: PublicKey;
|
|
20
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
21
|
+
signature: Signature;
|
|
22
|
+
}> & {
|
|
23
|
+
toInput: (x: {
|
|
24
|
+
methodId: import("snarkyjs/dist/node/lib/field").Field;
|
|
25
|
+
nonce: UInt64;
|
|
26
|
+
sender: PublicKey;
|
|
27
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
28
|
+
signature: Signature;
|
|
29
|
+
}) => {
|
|
30
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
31
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
32
|
+
};
|
|
33
|
+
toJSON: (x: {
|
|
34
|
+
methodId: import("snarkyjs/dist/node/lib/field").Field;
|
|
35
|
+
nonce: UInt64;
|
|
36
|
+
sender: PublicKey;
|
|
37
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
38
|
+
signature: Signature;
|
|
39
|
+
}) => {
|
|
40
|
+
methodId: string;
|
|
41
|
+
nonce: string;
|
|
42
|
+
sender: string;
|
|
43
|
+
argsHash: string;
|
|
44
|
+
signature: any;
|
|
45
|
+
};
|
|
46
|
+
fromJSON: (x: {
|
|
47
|
+
methodId: string;
|
|
48
|
+
nonce: string;
|
|
49
|
+
sender: string;
|
|
50
|
+
argsHash: string;
|
|
51
|
+
signature: any;
|
|
52
|
+
}) => {
|
|
53
|
+
methodId: import("snarkyjs/dist/node/lib/field").Field;
|
|
54
|
+
nonce: UInt64;
|
|
55
|
+
sender: PublicKey;
|
|
56
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
57
|
+
signature: Signature;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export declare class ProtocolTransaction extends ProtocolTransaction_base {
|
|
61
|
+
static getSignatureData(args: {
|
|
62
|
+
methodId: Field;
|
|
63
|
+
nonce: UInt64;
|
|
64
|
+
argsHash: Field;
|
|
65
|
+
}): Field[];
|
|
66
|
+
getSignatureData(): Field[];
|
|
67
|
+
validateSignature(): Bool;
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=ProtocolTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolTransaction.d.ts","sourceRoot":"","sources":["../../../src/model/transaction/ProtocolTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7E,qBAAa,mBAAoB,SAAQ,wBAMvC;WACc,gBAAgB,CAAC,IAAI,EAAE;QACnC,QAAQ,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,KAAK,CAAC;KACjB,GAAG,KAAK,EAAE;IAIJ,gBAAgB,IAAI,KAAK,EAAE;IAI3B,iBAAiB,IAAI,IAAI;CAGjC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Field, PublicKey, Signature, Struct, UInt64 } from "snarkyjs";
|
|
2
|
+
export class ProtocolTransaction extends Struct({
|
|
3
|
+
methodId: Field,
|
|
4
|
+
nonce: UInt64,
|
|
5
|
+
sender: PublicKey,
|
|
6
|
+
argsHash: Field,
|
|
7
|
+
signature: Signature,
|
|
8
|
+
}) {
|
|
9
|
+
static getSignatureData(args) {
|
|
10
|
+
return [args.methodId, ...args.nonce.toFields(), args.argsHash];
|
|
11
|
+
}
|
|
12
|
+
getSignatureData() {
|
|
13
|
+
return ProtocolTransaction.getSignatureData(this);
|
|
14
|
+
}
|
|
15
|
+
validateSignature() {
|
|
16
|
+
return this.signature.verify(this.sender, this.getSignatureData());
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Field, PublicKey, UInt64 } from "snarkyjs";
|
|
2
|
+
import { ProtocolTransaction } from "./ProtocolTransaction";
|
|
3
|
+
declare const RuntimeTransaction_base: (new (value: {
|
|
4
|
+
nonce: UInt64;
|
|
5
|
+
sender: PublicKey;
|
|
6
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
7
|
+
}) => {
|
|
8
|
+
nonce: UInt64;
|
|
9
|
+
sender: PublicKey;
|
|
10
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
11
|
+
}) & {
|
|
12
|
+
_isStruct: true;
|
|
13
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
14
|
+
nonce: UInt64;
|
|
15
|
+
sender: PublicKey;
|
|
16
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
17
|
+
}> & {
|
|
18
|
+
toInput: (x: {
|
|
19
|
+
nonce: UInt64;
|
|
20
|
+
sender: PublicKey;
|
|
21
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
22
|
+
}) => {
|
|
23
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
24
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
25
|
+
};
|
|
26
|
+
toJSON: (x: {
|
|
27
|
+
nonce: UInt64;
|
|
28
|
+
sender: PublicKey;
|
|
29
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
30
|
+
}) => {
|
|
31
|
+
nonce: string;
|
|
32
|
+
sender: string;
|
|
33
|
+
argsHash: string;
|
|
34
|
+
};
|
|
35
|
+
fromJSON: (x: {
|
|
36
|
+
nonce: string;
|
|
37
|
+
sender: string;
|
|
38
|
+
argsHash: string;
|
|
39
|
+
}) => {
|
|
40
|
+
nonce: UInt64;
|
|
41
|
+
sender: PublicKey;
|
|
42
|
+
argsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* This struct is used to expose transaction information to the runtime method
|
|
47
|
+
* execution. This class has not all data included in transactions on purpose.
|
|
48
|
+
* For example, we don't want to expose the signature or args as fields.
|
|
49
|
+
*/
|
|
50
|
+
export declare class RuntimeTransaction extends RuntimeTransaction_base {
|
|
51
|
+
static fromProtocolTransaction({ nonce, sender, argsHash, }: ProtocolTransaction): RuntimeTransaction;
|
|
52
|
+
hash(): Field;
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=RuntimeTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeTransaction.d.ts","sourceRoot":"","sources":["../../../src/model/transaction/RuntimeTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,SAAS,EAAU,MAAM,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE5D;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,uBAItC;WACc,uBAAuB,CAAC,EACpC,KAAK,EACL,MAAM,EACN,QAAQ,GACT,EAAE,mBAAmB,GAAG,kBAAkB;IAQpC,IAAI,IAAI,KAAK;CAOrB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Field, Poseidon, PublicKey, Struct, UInt64 } from "snarkyjs";
|
|
2
|
+
/**
|
|
3
|
+
* This struct is used to expose transaction information to the runtime method
|
|
4
|
+
* execution. This class has not all data included in transactions on purpose.
|
|
5
|
+
* For example, we don't want to expose the signature or args as fields.
|
|
6
|
+
*/
|
|
7
|
+
export class RuntimeTransaction extends Struct({
|
|
8
|
+
nonce: UInt64,
|
|
9
|
+
sender: PublicKey,
|
|
10
|
+
argsHash: Field,
|
|
11
|
+
}) {
|
|
12
|
+
static fromProtocolTransaction({ nonce, sender, argsHash, }) {
|
|
13
|
+
return new RuntimeTransaction({
|
|
14
|
+
nonce,
|
|
15
|
+
sender,
|
|
16
|
+
argsHash,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
hash() {
|
|
20
|
+
return Poseidon.hash([
|
|
21
|
+
...this.nonce.toFields(),
|
|
22
|
+
...this.sender.toFields(),
|
|
23
|
+
this.argsHash,
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ModuleContainer, ModulesRecord, StringKeyOf, TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { DependencyContainer } from "tsyringe";
|
|
3
|
+
import { BlockProvable, BlockProverPublicInput, BlockProverPublicOutput } from "../prover/block/BlockProvable";
|
|
4
|
+
import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
|
|
5
|
+
import { StateTransitionProvable, StateTransitionProverPublicInput, StateTransitionProverPublicOutput } from "../prover/statetransition/StateTransitionProvable";
|
|
6
|
+
import { BlockProver } from "../prover/block/BlockProver";
|
|
7
|
+
import { ProtocolModule } from "./ProtocolModule";
|
|
8
|
+
export type GenericProtocolModuleRecord = ModulesRecord<TypedClass<ProtocolModule<any, any>>>;
|
|
9
|
+
interface BlockProverType extends ProtocolModule<BlockProverPublicInput, BlockProverPublicOutput>, BlockProvable {
|
|
10
|
+
}
|
|
11
|
+
interface StateTransitionProverType extends ProtocolModule<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, StateTransitionProvable {
|
|
12
|
+
}
|
|
13
|
+
export interface ProtocolCustomModulesRecord {
|
|
14
|
+
BlockProver: TypedClass<BlockProverType>;
|
|
15
|
+
StateTransitionProver: TypedClass<StateTransitionProverType>;
|
|
16
|
+
}
|
|
17
|
+
export interface ProtocolModulesRecord extends GenericProtocolModuleRecord, ProtocolCustomModulesRecord {
|
|
18
|
+
}
|
|
19
|
+
export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
|
|
20
|
+
modules: Modules;
|
|
21
|
+
}
|
|
22
|
+
export declare class Protocol<Modules extends ProtocolModulesRecord> extends ModuleContainer<Modules> {
|
|
23
|
+
static from<Modules extends ProtocolModulesRecord>(modules: ProtocolDefinition<Modules>): Protocol<Modules>;
|
|
24
|
+
protected decorateModule(moduleName: StringKeyOf<Modules>, containedModule: InstanceType<Modules[StringKeyOf<Modules>]>): void;
|
|
25
|
+
get dependencyContainer(): DependencyContainer;
|
|
26
|
+
private isModule;
|
|
27
|
+
get blockProver(): BlockProvable;
|
|
28
|
+
get stateTransitionProver(): StateTransitionProvable;
|
|
29
|
+
}
|
|
30
|
+
export declare const VanillaProtocol: {
|
|
31
|
+
create(): Protocol<{
|
|
32
|
+
StateTransitionProver: typeof StateTransitionProver;
|
|
33
|
+
BlockProver: typeof BlockProver;
|
|
34
|
+
}>;
|
|
35
|
+
};
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=Protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../src/protocol/Protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,aAAa,EACb,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AACxF,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,2BAA2B,GAAG,aAAa,CACrD,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CACrC,CAAC;AAEF,UAAU,eACR,SAAQ,cAAc,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,EACrE,aAAa;CAAG;AAEpB,UAAU,yBACR,SAAQ,cAAc,CAClB,gCAAgC,EAChC,iCAAiC,CAClC,EACD,uBAAuB;CAAG;AAE9B,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACzC,qBAAqB,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,qBACf,SAAQ,2BAA2B,EACjC,2BAA2B;CAAG;AAElC,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,qBAAqB;IACvE,OAAO,EAAE,OAAO,CAAC;CAElB;AAED,qBAAa,QAAQ,CACnB,OAAO,SAAS,qBAAqB,CACrC,SAAQ,eAAe,CAAC,OAAO,CAAC;WAElB,IAAI,CAAC,OAAO,SAAS,qBAAqB,EACtD,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC;IAsBtC,SAAS,CAAC,cAAc,CACtB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAQ9D,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;IAED,OAAO,CAAC,QAAQ;IAMhB,IAAW,WAAW,IAAI,aAAa,CAMtC;IAED,IAAW,qBAAqB,IAAI,uBAAuB,CAI1D;CACF;AAED,eAAO,MAAM,eAAe;cAChB,SAAS;QACjB,uBAAuB,4BAA4B,CAAC;QACpD,aAAa,kBAAkB,CAAC;KACjC,CAAC;CAQH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { log, ModuleContainer, } from "@proto-kit/common";
|
|
2
|
+
import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
|
|
3
|
+
import { BlockProver } from "../prover/block/BlockProver";
|
|
4
|
+
export class Protocol extends ModuleContainer {
|
|
5
|
+
// .from() to create Protocol
|
|
6
|
+
static from(modules) {
|
|
7
|
+
const protocol = new Protocol(modules);
|
|
8
|
+
// Set empty config for all modules, since we don't have that feature yet
|
|
9
|
+
// eslint-disable-next-line max-len
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment
|
|
11
|
+
const emptyConfig = Object.keys(modules.modules).reduce((agg, item) => {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
13
|
+
agg[item] = {};
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
15
|
+
return agg;
|
|
16
|
+
}, {});
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
18
|
+
protocol.configure(emptyConfig);
|
|
19
|
+
return protocol;
|
|
20
|
+
}
|
|
21
|
+
decorateModule(moduleName, containedModule) {
|
|
22
|
+
log.debug(`Decorated ${moduleName}`);
|
|
23
|
+
containedModule.protocol = this;
|
|
24
|
+
super.decorateModule(moduleName, containedModule);
|
|
25
|
+
}
|
|
26
|
+
get dependencyContainer() {
|
|
27
|
+
return this.container;
|
|
28
|
+
}
|
|
29
|
+
isModule(moduleName) {
|
|
30
|
+
return this.definition.modules[moduleName] !== undefined;
|
|
31
|
+
}
|
|
32
|
+
get blockProver() {
|
|
33
|
+
// Why do I resolve directly here?
|
|
34
|
+
// I don't know exactly but generics don't let me use .resolve()
|
|
35
|
+
return this.container.resolve("BlockProver");
|
|
36
|
+
}
|
|
37
|
+
get stateTransitionProver() {
|
|
38
|
+
return this.container.resolve("StateTransitionProver");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export const VanillaProtocol = {
|
|
42
|
+
create() {
|
|
43
|
+
return Protocol.from({
|
|
44
|
+
modules: {
|
|
45
|
+
StateTransitionProver,
|
|
46
|
+
BlockProver,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AreProofsEnabled, Configurable, ZkProgrammable } from "@proto-kit/common";
|
|
2
|
+
import type { Protocol, ProtocolModulesRecord } from "./Protocol";
|
|
3
|
+
export declare abstract class ProtocolModule<PublicInput, PublicOutput> extends ZkProgrammable<PublicInput, PublicOutput> implements Configurable<unknown> {
|
|
4
|
+
config: {};
|
|
5
|
+
protocol?: Protocol<ProtocolModulesRecord>;
|
|
6
|
+
get appChain(): AreProofsEnabled | undefined;
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ProtocolModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolModule.d.ts","sourceRoot":"","sources":["../../src/protocol/ProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGlE,8BAAsB,cAAc,CAAC,WAAW,EAAE,YAAY,CAC5D,SAAQ,cAAc,CAAC,WAAW,EAAE,YAAY,CAChD,YAAW,YAAY,CAAC,OAAO,CAAC;IAEzB,MAAM,KAAM;IAEZ,QAAQ,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAElD,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAIlD;;CAKF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Proof } from "snarkyjs";
|
|
2
|
+
import { StateTransitionProof } from "../statetransition/StateTransitionProvable";
|
|
3
|
+
import { MethodPublicOutput } from "../../model/MethodPublicOutput";
|
|
4
|
+
import { ZkProgrammable } from "@proto-kit/common";
|
|
5
|
+
import { ProtocolTransaction } from "../../model/transaction/ProtocolTransaction";
|
|
6
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
7
|
+
declare const BlockProverPublicInput_base: (new (value: {
|
|
8
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
9
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
10
|
+
networkStateHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
11
|
+
}) => {
|
|
12
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
13
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
14
|
+
networkStateHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
15
|
+
}) & {
|
|
16
|
+
_isStruct: true;
|
|
17
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
18
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
19
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
20
|
+
networkStateHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
21
|
+
}> & {
|
|
22
|
+
toInput: (x: {
|
|
23
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
24
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
25
|
+
networkStateHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
26
|
+
}) => {
|
|
27
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
28
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
29
|
+
};
|
|
30
|
+
toJSON: (x: {
|
|
31
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
32
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
33
|
+
networkStateHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
34
|
+
}) => {
|
|
35
|
+
transactionsHash: string;
|
|
36
|
+
stateRoot: string;
|
|
37
|
+
networkStateHash: string;
|
|
38
|
+
};
|
|
39
|
+
fromJSON: (x: {
|
|
40
|
+
transactionsHash: string;
|
|
41
|
+
stateRoot: string;
|
|
42
|
+
networkStateHash: string;
|
|
43
|
+
}) => {
|
|
44
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
45
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
46
|
+
networkStateHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export declare class BlockProverPublicInput extends BlockProverPublicInput_base {
|
|
50
|
+
}
|
|
51
|
+
declare const BlockProverPublicOutput_base: (new (value: {
|
|
52
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
53
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
54
|
+
}) => {
|
|
55
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
56
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
57
|
+
}) & {
|
|
58
|
+
_isStruct: true;
|
|
59
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
60
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
61
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
62
|
+
}> & {
|
|
63
|
+
toInput: (x: {
|
|
64
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
65
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
66
|
+
}) => {
|
|
67
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
68
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
69
|
+
};
|
|
70
|
+
toJSON: (x: {
|
|
71
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
72
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
73
|
+
}) => {
|
|
74
|
+
transactionsHash: string;
|
|
75
|
+
stateRoot: string;
|
|
76
|
+
};
|
|
77
|
+
fromJSON: (x: {
|
|
78
|
+
transactionsHash: string;
|
|
79
|
+
stateRoot: string;
|
|
80
|
+
}) => {
|
|
81
|
+
transactionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
82
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export declare class BlockProverPublicOutput extends BlockProverPublicOutput_base {
|
|
86
|
+
}
|
|
87
|
+
export type BlockProverProof = Proof<BlockProverPublicInput, BlockProverPublicOutput>;
|
|
88
|
+
declare const BlockProverExecutionData_base: (new (value: {
|
|
89
|
+
transaction: ProtocolTransaction;
|
|
90
|
+
networkState: NetworkState;
|
|
91
|
+
}) => {
|
|
92
|
+
transaction: ProtocolTransaction;
|
|
93
|
+
networkState: NetworkState;
|
|
94
|
+
}) & {
|
|
95
|
+
_isStruct: true;
|
|
96
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
97
|
+
transaction: ProtocolTransaction;
|
|
98
|
+
networkState: NetworkState;
|
|
99
|
+
}> & {
|
|
100
|
+
toInput: (x: {
|
|
101
|
+
transaction: ProtocolTransaction;
|
|
102
|
+
networkState: NetworkState;
|
|
103
|
+
}) => {
|
|
104
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
105
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
106
|
+
};
|
|
107
|
+
toJSON: (x: {
|
|
108
|
+
transaction: ProtocolTransaction;
|
|
109
|
+
networkState: NetworkState;
|
|
110
|
+
}) => {
|
|
111
|
+
transaction: {
|
|
112
|
+
methodId: string;
|
|
113
|
+
nonce: string;
|
|
114
|
+
sender: string;
|
|
115
|
+
argsHash: string;
|
|
116
|
+
signature: any;
|
|
117
|
+
};
|
|
118
|
+
networkState: {
|
|
119
|
+
block: {
|
|
120
|
+
height: string;
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
fromJSON: (x: {
|
|
125
|
+
transaction: {
|
|
126
|
+
methodId: string;
|
|
127
|
+
nonce: string;
|
|
128
|
+
sender: string;
|
|
129
|
+
argsHash: string;
|
|
130
|
+
signature: any;
|
|
131
|
+
};
|
|
132
|
+
networkState: {
|
|
133
|
+
block: {
|
|
134
|
+
height: string;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
}) => {
|
|
138
|
+
transaction: ProtocolTransaction;
|
|
139
|
+
networkState: NetworkState;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
export declare class BlockProverExecutionData extends BlockProverExecutionData_base {
|
|
143
|
+
}
|
|
144
|
+
export interface BlockProvable extends ZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput> {
|
|
145
|
+
proveTransaction: (publicInput: BlockProverPublicInput, stateProof: StateTransitionProof, appProof: Proof<void, MethodPublicOutput>, executionData: BlockProverExecutionData) => BlockProverPublicOutput;
|
|
146
|
+
merge: (publicInput: BlockProverPublicInput, proof1: BlockProverProof, proof2: BlockProverProof) => BlockProverPublicOutput;
|
|
147
|
+
}
|
|
148
|
+
export {};
|
|
149
|
+
//# sourceMappingURL=BlockProvable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockProvable.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProvable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAkB,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,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,cAAc,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;IACvE,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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Field, Struct } from "snarkyjs";
|
|
2
|
+
import { ProtocolTransaction } from "../../model/transaction/ProtocolTransaction";
|
|
3
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
4
|
+
export class BlockProverPublicInput extends Struct({
|
|
5
|
+
transactionsHash: Field,
|
|
6
|
+
stateRoot: Field,
|
|
7
|
+
networkStateHash: Field,
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
export class BlockProverPublicOutput extends Struct({
|
|
11
|
+
transactionsHash: Field,
|
|
12
|
+
stateRoot: Field,
|
|
13
|
+
}) {
|
|
14
|
+
}
|
|
15
|
+
export class BlockProverExecutionData extends Struct({
|
|
16
|
+
transaction: ProtocolTransaction,
|
|
17
|
+
networkState: NetworkState,
|
|
18
|
+
// accountstate
|
|
19
|
+
}) {
|
|
20
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Field, type Proof } from "snarkyjs";
|
|
2
|
+
import { PlainZkProgram, WithZkProgrammable, ZkProgrammable } from "@proto-kit/common";
|
|
3
|
+
import { MethodPublicOutput } from "../../model/MethodPublicOutput";
|
|
4
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
5
|
+
import { StateTransitionProof, StateTransitionProverPublicInput, StateTransitionProverPublicOutput } from "../statetransition/StateTransitionProvable";
|
|
6
|
+
import { BlockProvable, BlockProverExecutionData, BlockProverProof, BlockProverPublicInput, BlockProverPublicOutput } from "./BlockProvable";
|
|
7
|
+
export interface BlockProverState {
|
|
8
|
+
stateRoot: Field;
|
|
9
|
+
/**
|
|
10
|
+
* The current commitment of the transaction-list which
|
|
11
|
+
* will at the end equal the bundle hash
|
|
12
|
+
*/
|
|
13
|
+
transactionsHash: Field;
|
|
14
|
+
/**
|
|
15
|
+
* The network state which gives access to values such as blockHeight
|
|
16
|
+
* This value is the same for the whole batch (L2 block)
|
|
17
|
+
*/
|
|
18
|
+
networkStateHash: Field;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* BlockProver class, which aggregates a AppChainProof and
|
|
22
|
+
* a StateTransitionProof into a single BlockProof, that can
|
|
23
|
+
* then be merged to be committed to the base-layer contract
|
|
24
|
+
*/
|
|
25
|
+
export declare class BlockProver extends ProtocolModule<BlockProverPublicInput, BlockProverPublicOutput> implements BlockProvable {
|
|
26
|
+
private readonly stateTransitionProver;
|
|
27
|
+
private readonly runtime;
|
|
28
|
+
constructor(stateTransitionProver: ZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, runtime: WithZkProgrammable<void, MethodPublicOutput>);
|
|
29
|
+
/**
|
|
30
|
+
* Applies and checks the two proofs and applies the corresponding state
|
|
31
|
+
* changes to the given state
|
|
32
|
+
*
|
|
33
|
+
* @param state The from-state of the BlockProver
|
|
34
|
+
* @param stateTransitionProof
|
|
35
|
+
* @param appProof
|
|
36
|
+
* @returns The new BlockProver-state to be used as public output
|
|
37
|
+
*/
|
|
38
|
+
applyTransaction(state: BlockProverState, stateTransitionProof: Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>, appProof: Proof<void, MethodPublicOutput>, { transaction, networkState }: BlockProverExecutionData): BlockProverState;
|
|
39
|
+
proveTransaction(publicInput: BlockProverPublicInput, stateProof: StateTransitionProof, appProof: Proof<void, MethodPublicOutput>, executionData: BlockProverExecutionData): BlockProverPublicOutput;
|
|
40
|
+
merge(publicInput: BlockProverPublicInput, proof1: BlockProverProof, proof2: BlockProverProof): BlockProverPublicOutput;
|
|
41
|
+
/**
|
|
42
|
+
* Creates the BlockProver ZkProgram.
|
|
43
|
+
* Recursive linking of proofs is done via the previously
|
|
44
|
+
* injected StateTransitionProver and the required AppChainProof class
|
|
45
|
+
*/
|
|
46
|
+
zkProgramFactory(): PlainZkProgram<BlockProverPublicInput, BlockProverPublicOutput>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=BlockProver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockProver.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockProver.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,EAAE,KAAK,KAAK,EAAuB,MAAM,UAAU,CAAC;AAEhF,OAAO,EACL,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;AAiBzB,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;;;;GAIG;AACH,qBACa,WACX,SAAQ,cAAc,CAAC,sBAAsB,EAAE,uBAAuB,CACtE,YAAW,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAKtC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBALP,qBAAqB,EAAE,cAAc,CACpD,gCAAgC,EAChC,iCAAiC,CAClC,EAEgB,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAKxE;;;;;;;;OAQG;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,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,wBAAwB,GACtD,gBAAgB;IAyEZ,gBAAgB,CACrB,WAAW,EAAE,sBAAsB,EACnC,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACzC,aAAa,EAAE,wBAAwB,GACtC,uBAAuB;IAgBnB,KAAK,CACV,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,GACvB,uBAAuB;IA8B1B;;;;OAIG;IACI,gBAAgB,IAAI,cAAc,CACvC,sBAAsB,EACtB,uBAAuB,CACxB;CAkEF"}
|