@proto-kit/protocol 0.1.1-develop.600 → 0.1.1-develop.651
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
- package/dist/blockmodules/NoopSettlementHook.js +1 -1
- package/dist/hooks/AccountStateHook.d.ts.map +1 -1
- package/dist/hooks/AccountStateHook.js +10 -3
- package/dist/hooks/BlockHeightHook.d.ts +3 -3
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
- package/dist/hooks/BlockHeightHook.js +5 -4
- package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
- package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
- package/dist/hooks/LastStateRootBlockHook.js +15 -0
- package/dist/hooks/NoopBlockHook.d.ts +6 -4
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
- package/dist/hooks/NoopBlockHook.js +4 -4
- package/dist/hooks/NoopSettlementHook.d.ts +6 -0
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
- package/dist/hooks/NoopSettlementHook.js +18 -0
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -6
- package/dist/model/Option.d.ts +3 -2
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +5 -0
- package/dist/model/RuntimeLike.d.ts +11 -0
- package/dist/model/RuntimeLike.d.ts.map +1 -0
- package/dist/model/RuntimeLike.js +1 -0
- package/dist/model/StateTransition.d.ts +6 -5
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransition.js +3 -0
- package/dist/model/StateTransitionReduction.d.ts +3 -0
- package/dist/model/StateTransitionReduction.d.ts.map +1 -0
- package/dist/model/StateTransitionReduction.js +26 -0
- package/dist/protocol/Protocol.d.ts +11 -18
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +4 -27
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +1 -1
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +8 -6
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
- package/dist/prover/statetransition/StateTransitionProver.d.ts +3 -2
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +1 -0
- package/dist/settlement/ContractModule.d.ts +15 -0
- package/dist/settlement/ContractModule.d.ts.map +1 -0
- package/dist/settlement/ContractModule.js +11 -0
- package/dist/settlement/SettlementContractModule.d.ts +39 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +68 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +36 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +41 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.js +235 -0
- package/dist/settlement/messages/Deposit.d.ts +39 -0
- package/dist/settlement/messages/Deposit.d.ts.map +1 -0
- package/dist/settlement/messages/Deposit.js +6 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +109 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
- package/dist/settlement/messages/Withdrawal.d.ts +40 -0
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
- package/dist/settlement/messages/Withdrawal.js +13 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +3 -3
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.js +1 -1
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +2 -1
- package/dist/state/assert/assert.d.ts.map +1 -1
- package/dist/state/assert/assert.js +8 -5
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +2 -1
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableHashList.d.ts +3 -3
- package/dist/utils/ProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableReductionHashList.d.ts +14 -0
- package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
- package/dist/utils/ProvableReductionHashList.js +50 -0
- package/dist/utils/StateTransitionReductionList.d.ts +11 -0
- package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
- package/dist/utils/StateTransitionReductionList.js +60 -0
- package/package.json +2 -2
- package/src/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +3 -1
- package/src/{blockmodules → hooks}/NoopSettlementHook.ts +1 -2
- package/src/index.ts +18 -6
- package/src/model/Option.ts +16 -0
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +10 -2
- package/src/protocol/Protocol.ts +19 -44
- package/src/protocol/ProtocolModule.ts +3 -2
- package/src/prover/block/BlockProver.ts +20 -8
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +1 -1
- package/src/prover/statetransition/StateTransitionProver.ts +4 -2
- package/src/settlement/ContractModule.ts +24 -0
- package/src/settlement/SettlementContractModule.ts +127 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +135 -0
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +65 -0
- package/src/settlement/{SettlementContract.ts → contracts/SettlementSmartContract.ts} +87 -202
- package/src/settlement/messages/Deposit.ts +6 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +41 -0
- package/src/settlement/messages/Withdrawal.ts +14 -0
- package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +7 -10
- package/src/settlement/modules/NetworkStateSettlementModule.ts +3 -3
- package/src/state/State.ts +2 -1
- package/src/state/assert/assert.ts +8 -6
- package/src/state/context/RuntimeMethodExecutionContext.ts +8 -5
- package/src/utils/MinaPrefixedProvableHashList.ts +2 -2
- package/src/utils/PrefixedProvableHashList.ts +2 -2
- package/src/utils/ProvableHashList.ts +3 -3
- package/src/utils/ProvableReductionHashList.ts +68 -0
- package/src/utils/StateTransitionReductionList.ts +88 -0
- package/test/BlockProver.test.ts +2 -2
- package/test/Protocol.test.ts +15 -10
- package/test/settlement/SettlementContract.test.ts +45 -0
- package/test/utils/ProvableReductionHashList.test.ts +114 -0
- /package/src/{blockmodules → hooks}/BlockHeightHook.ts +0 -0
- /package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +0 -0
- /package/src/{blockmodules → hooks}/NoopBlockHook.ts +0 -0
- /package/src/{blockmodules → hooks}/NoopTransactionHook.ts +0 -0
- /package/src/{blockmodules → hooks}/SequenceStateTransactionModule.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinaPrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/MinaPrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"MinaPrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/MinaPrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,wBAAgB,YAAY,IAAI,KAAK,CAEpC;AAED,wBAAgB,WAAW,IAAI,KAAK,CAEnC;AAED,qBAAa,WAAW;IACtB,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,GAAE,KAAsB,GACnC,KAAK;CAOT;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,GAAE,KAAqB,GAAG,KAAK;CAO7E;AAED,qBAAa,4BAA4B,CACvC,KAAK,CACL,SAAQ,gBAAgB,CAAC,KAAK,CAAC;aAGb,MAAM,EAAE,MAAM;gBAD9B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EACd,MAAM,EAAE,MAAM,EAC9B,kBAAkB,GAAE,KAAgB;IAKtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAKzC;AAED,qBAAa,mBAAoB,SAAQ,4BAA4B,CAAC,KAAK,CAAC;gBACvD,kBAAkB,GAAE,KAAgB;CAGxD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, ProvablePure } from "o1js";
|
|
2
2
|
import { ProvableHashList } from "./ProvableHashList.js";
|
|
3
3
|
export declare class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
4
4
|
private readonly prefix;
|
|
5
|
-
constructor(valueType:
|
|
5
|
+
constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
|
|
6
6
|
protected hash(elements: Field[]): Field;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=PrefixedProvableHashList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAY,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,qBAAa,wBAAwB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAG7B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,KAAgB;IAMtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGzC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, Bool, ProvablePure } from "o1js";
|
|
2
2
|
/**
|
|
3
3
|
* Utilities for creating a hash list from a given value type.
|
|
4
4
|
*/
|
|
5
5
|
export declare abstract class ProvableHashList<Value> {
|
|
6
|
-
|
|
6
|
+
protected readonly valueType: ProvablePure<Value>;
|
|
7
7
|
commitment: Field;
|
|
8
|
-
constructor(valueType:
|
|
8
|
+
constructor(valueType: ProvablePure<Value>, commitment?: Field);
|
|
9
9
|
protected abstract hash(elements: Field[]): Field;
|
|
10
10
|
/**
|
|
11
11
|
* Converts the provided value to Field[] and appends it to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,
|
|
1
|
+
{"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,IAAI,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAErE;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,KAAK;IAExC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;IAC1C,UAAU,EAAE,KAAK;gBADL,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC1C,UAAU,GAAE,KAAgB;IAGrC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;IAEjD;;;;;;OAMG;IACI,IAAI,CAAC,KAAK,EAAE,KAAK;IAQjB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAS3C;;OAEG;IACI,OAAO;CAGf;AAED,qBAAa,uBAAuB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Bool, Field } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
3
|
+
export declare class ProvableReductionHashList<Value> extends ProvableHashList<Value> {
|
|
4
|
+
unconstrainedList: Value[];
|
|
5
|
+
private constrainedLastValue;
|
|
6
|
+
private preimage;
|
|
7
|
+
pushAndReduce(value: Value, reduce: (previous: Value) => [Value, Bool]): {
|
|
8
|
+
popLast: Bool;
|
|
9
|
+
value: Value;
|
|
10
|
+
};
|
|
11
|
+
pushIf(value: Value, condition: Bool): this;
|
|
12
|
+
hash(elements: Field[]): Field;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ProvableReductionHashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProvableReductionHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableReductionHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAsB,MAAM,MAAM,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,yBAAyB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IACpE,iBAAiB,EAAE,KAAK,EAAE,CAAM;IAEvC,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,OAAO,CAAC,QAAQ,CAA0B;IAEnC,aAAa,CAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GACzC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE;IA4C3B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAMpC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Bool, Poseidon, Provable } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
3
|
+
export class ProvableReductionHashList extends ProvableHashList {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.unconstrainedList = [];
|
|
7
|
+
this.constrainedLastValue = undefined;
|
|
8
|
+
this.preimage = this.commitment;
|
|
9
|
+
}
|
|
10
|
+
pushAndReduce(value, reduce) {
|
|
11
|
+
let valueToPush = value;
|
|
12
|
+
let popLast = Bool(false);
|
|
13
|
+
// Theoretically, we can feed the preimage + last value as a witness
|
|
14
|
+
// for non-zero commitment starts (like used in the BlockProver), because
|
|
15
|
+
// currently it won't reduce across chunks. But this is okay for now I think
|
|
16
|
+
if (this.constrainedLastValue !== undefined) {
|
|
17
|
+
[valueToPush, popLast] = reduce(this.constrainedLastValue);
|
|
18
|
+
}
|
|
19
|
+
Provable.asProver(() => {
|
|
20
|
+
if (popLast.toBoolean()) {
|
|
21
|
+
this.unconstrainedList.pop();
|
|
22
|
+
}
|
|
23
|
+
const valueAsConstant = this.valueType.fromFields(this.valueType.toFields(valueToPush).map((field) => field.toConstant()));
|
|
24
|
+
this.unconstrainedList.push(valueAsConstant);
|
|
25
|
+
});
|
|
26
|
+
const currentCommitment = this.commitment;
|
|
27
|
+
const noPopCommitment = this.hash([
|
|
28
|
+
currentCommitment,
|
|
29
|
+
...this.valueType.toFields(valueToPush),
|
|
30
|
+
]);
|
|
31
|
+
const popCommitment = this.hash([
|
|
32
|
+
this.preimage,
|
|
33
|
+
...this.valueType.toFields(valueToPush),
|
|
34
|
+
]);
|
|
35
|
+
this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
|
|
36
|
+
this.constrainedLastValue = valueToPush;
|
|
37
|
+
this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
|
|
38
|
+
return {
|
|
39
|
+
popLast,
|
|
40
|
+
value: valueToPush,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
pushIf(value, condition) {
|
|
44
|
+
throw new Error("pushIf is not implemented for ReducedHashList");
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
hash(elements) {
|
|
48
|
+
return Poseidon.hash(elements);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProvableStateTransition, StateTransition } from "../model/StateTransition";
|
|
2
|
+
import { ProvableReductionHashList } from "./ProvableReductionHashList";
|
|
3
|
+
export declare class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
|
|
4
|
+
push(value: ProvableStateTransition): this;
|
|
5
|
+
pushWithMetadata(value: ProvableStateTransition): {
|
|
6
|
+
popLast: import("o1js/dist/node/lib/bool").Bool;
|
|
7
|
+
value: ProvableStateTransition;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare function reduceStateTransitions(transitions: StateTransition<unknown>[]): StateTransition<unknown>[];
|
|
11
|
+
//# sourceMappingURL=StateTransitionReductionList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionReductionList.d.ts","sourceRoot":"","sources":["../../src/utils/StateTransitionReductionList.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,qBAAa,4BAA6B,SAAQ,yBAAyB,CAAC,uBAAuB,CAAC;IAC3F,IAAI,CAAC,KAAK,EAAE,uBAAuB;IAMnC,gBAAgB,CAAC,KAAK,EAAE,uBAAuB;;;;CAyCvD;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GACtC,eAAe,CAAC,OAAO,CAAC,EAAE,CA0B5B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Provable } from "o1js";
|
|
2
|
+
import { ProvableOption } from "../model/Option";
|
|
3
|
+
import { ProvableStateTransition, StateTransition, } from "../model/StateTransition";
|
|
4
|
+
import { ProvableReductionHashList } from "./ProvableReductionHashList";
|
|
5
|
+
export class StateTransitionReductionList extends ProvableReductionHashList {
|
|
6
|
+
push(value) {
|
|
7
|
+
this.pushWithMetadata(value);
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
pushWithMetadata(value) {
|
|
11
|
+
return this.pushAndReduce(value, (previous) => {
|
|
12
|
+
const pathsMatch = previous.path.equals(value.path);
|
|
13
|
+
// Take the previous.from if the paths match, otherwise leave ST as is
|
|
14
|
+
const from = Provable.if(pathsMatch, ProvableOption, previous.from, value.from);
|
|
15
|
+
// In case we have a layout like
|
|
16
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
17
|
+
// we just take the first and discard the second
|
|
18
|
+
const to = Provable.if(value.to.isSome.or(pathsMatch.not()), ProvableOption, value.to, previous.to);
|
|
19
|
+
const transition = new ProvableStateTransition({
|
|
20
|
+
path: value.path,
|
|
21
|
+
from: new ProvableOption(from),
|
|
22
|
+
to: new ProvableOption(to),
|
|
23
|
+
});
|
|
24
|
+
// Assert that connection is correct
|
|
25
|
+
previous.to.value
|
|
26
|
+
.equals(value.from.value)
|
|
27
|
+
.or(previous.to.isSome
|
|
28
|
+
.not()
|
|
29
|
+
.and(previous.from.value.equals(value.from.value)))
|
|
30
|
+
.or(pathsMatch.not())
|
|
31
|
+
.assertTrue();
|
|
32
|
+
return [transition, pathsMatch];
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function reduceStateTransitions(transitions) {
|
|
37
|
+
const reduced = [];
|
|
38
|
+
for (const st of transitions) {
|
|
39
|
+
if (reduced.length === 0) {
|
|
40
|
+
reduced.push(st);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const last = reduced.at(-1);
|
|
44
|
+
if (last.path.equals(st.path).toBoolean()) {
|
|
45
|
+
if (st.toValue.isSome.toBoolean()) {
|
|
46
|
+
reduced.pop();
|
|
47
|
+
reduced.push(new StateTransition(st.path, last.fromValue, st.toValue));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// Do nothing, because we discard that ST
|
|
51
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
52
|
+
// cancel the 2nd
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
reduced.push(st);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return reduced;
|
|
60
|
+
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "0.1.1-develop.
|
|
6
|
+
"version": "0.1.1-develop.651+7591cb6",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc -p tsconfig.json",
|
|
9
9
|
"dev": "tsc -p tsconfig.json --watch",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"@jest/globals": "^29.5.0",
|
|
33
33
|
"@types/lodash": "^4.14.194"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "7591cb6bdf58a6cd525a10902c25bc292efcfc6b"
|
|
36
36
|
}
|
|
@@ -5,12 +5,14 @@ import { StateMap } from "../state/StateMap";
|
|
|
5
5
|
import { protocolState } from "../state/protocol/ProtocolState";
|
|
6
6
|
import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
|
|
7
7
|
import { assert } from "../state/assert/assert";
|
|
8
|
+
import { injectable } from "tsyringe";
|
|
8
9
|
|
|
9
10
|
export class AccountState extends Struct({
|
|
10
11
|
nonce: UInt64,
|
|
11
12
|
}) {}
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
@injectable()
|
|
15
|
+
export class AccountStateHook extends ProvableTransactionHook {
|
|
14
16
|
@protocolState() public accountState = StateMap.from<PublicKey, AccountState>(
|
|
15
17
|
PublicKey,
|
|
16
18
|
AccountState
|
|
@@ -2,11 +2,10 @@ import { injectable } from "tsyringe";
|
|
|
2
2
|
import { noop } from "@proto-kit/common";
|
|
3
3
|
import { SmartContract } from "o1js";
|
|
4
4
|
|
|
5
|
-
import { BlockProof } from "../prover/block/BlockProver";
|
|
6
5
|
import {
|
|
7
6
|
ProvableSettlementHook,
|
|
8
7
|
SettlementHookInputs,
|
|
9
|
-
} from "../settlement/ProvableSettlementHook";
|
|
8
|
+
} from "../settlement/modularity/ProvableSettlementHook";
|
|
10
9
|
|
|
11
10
|
@injectable()
|
|
12
11
|
export class NoopSettlementHook extends ProvableSettlementHook<
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./blockmodules/LastStateRootBlockHook";
|
|
1
|
+
export * from "./hooks/AccountStateHook";
|
|
2
|
+
export * from "./hooks/BlockHeightHook";
|
|
4
3
|
export * from "./utils/ProvableHashList";
|
|
4
|
+
export * from "./hooks/LastStateRootBlockHook";
|
|
5
5
|
export * from "./model/StateTransition";
|
|
6
6
|
export * from "./model/StateTransitionProvableBatch";
|
|
7
7
|
export * from "./model/Option";
|
|
@@ -10,8 +10,13 @@ export * from "./model/network/NetworkState";
|
|
|
10
10
|
export * from "./model/transaction/SignedTransaction";
|
|
11
11
|
export * from "./model/transaction/RuntimeTransaction";
|
|
12
12
|
export * from "./model/transaction/ValueOption";
|
|
13
|
+
export * from "./model/MethodPublicOutput";
|
|
14
|
+
export * from "./model/RuntimeLike";
|
|
15
|
+
export * from "./utils/ProvableHashList";
|
|
13
16
|
export * from "./utils/PrefixedProvableHashList";
|
|
14
17
|
export * from "./utils/MinaPrefixedProvableHashList";
|
|
18
|
+
export * from "./utils/ProvableReductionHashList";
|
|
19
|
+
export * from "./utils/StateTransitionReductionList";
|
|
15
20
|
export * from "./utils/utils";
|
|
16
21
|
export * from "./prover/block/BlockProver";
|
|
17
22
|
export * from "./prover/block/BlockProvable";
|
|
@@ -19,7 +24,6 @@ export * from "./prover/block/accummulators/BlockHashMerkleTree";
|
|
|
19
24
|
export * from "./prover/statetransition/StateTransitionProver";
|
|
20
25
|
export * from "./prover/statetransition/StateTransitionProvable";
|
|
21
26
|
export * from "./prover/statetransition/StateTransitionWitnessProvider";
|
|
22
|
-
export * from "./model/MethodPublicOutput";
|
|
23
27
|
export * from "./prover/statetransition/StateTransitionWitnessProviderReference";
|
|
24
28
|
export * from "./protocol/Protocol";
|
|
25
29
|
export * from "./protocol/ProtocolModule";
|
|
@@ -35,7 +39,15 @@ export * from "./state/StateMap";
|
|
|
35
39
|
export * from "./state/StateService";
|
|
36
40
|
export * from "./state/StateServiceProvider";
|
|
37
41
|
export * from "./state/assert/assert";
|
|
38
|
-
export * from "./settlement/
|
|
39
|
-
export * from "./settlement/
|
|
42
|
+
export * from "./settlement/contracts/SettlementSmartContract";
|
|
43
|
+
export * from "./settlement/contracts/SettlementContractProtocolModule";
|
|
44
|
+
export * from "./settlement/contracts/DispatchSmartContract";
|
|
45
|
+
export * from "./settlement/contracts/DispatchContractProtocolModule";
|
|
46
|
+
export * from "./settlement/SettlementContractModule";
|
|
47
|
+
export * from "./settlement/ContractModule";
|
|
48
|
+
export * from "./settlement/modularity/ProvableSettlementHook";
|
|
49
|
+
export * from "./settlement/messages/OutgoingMessageArgument";
|
|
40
50
|
export * from "./settlement/modules/NetworkStateSettlementModule";
|
|
51
|
+
export * from "./settlement/messages/Deposit";
|
|
52
|
+
export * from "./settlement/messages/Withdrawal";
|
|
41
53
|
export { constants as ProtocolConstants } from "./Constants";
|
package/src/model/Option.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
type FlexibleProvablePure,
|
|
5
5
|
Poseidon,
|
|
6
6
|
Provable,
|
|
7
|
+
ProvablePure,
|
|
7
8
|
Struct,
|
|
8
9
|
} from "o1js";
|
|
9
10
|
|
|
@@ -149,4 +150,19 @@ export class Option<Value> extends OptionBase {
|
|
|
149
150
|
defaultValue
|
|
150
151
|
);
|
|
151
152
|
}
|
|
153
|
+
|
|
154
|
+
public toConstant() {
|
|
155
|
+
const valueConstant = (this.valueType as ProvablePure<Value>).fromFields(
|
|
156
|
+
this.valueType.toFields(this.value).map((field) => field.toConstant())
|
|
157
|
+
);
|
|
158
|
+
const boolConstant = (bool: Bool) =>
|
|
159
|
+
Bool.fromFields([bool.toField().toConstant()]);
|
|
160
|
+
|
|
161
|
+
return new Option(
|
|
162
|
+
boolConstant(this.isSome),
|
|
163
|
+
valueConstant,
|
|
164
|
+
this.valueType,
|
|
165
|
+
boolConstant(this.isForcedSome)
|
|
166
|
+
);
|
|
167
|
+
}
|
|
152
168
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type RuntimeMethodInvocationType = "INCOMING_MESSAGE" | "SIGNATURE";
|
|
2
|
+
|
|
3
|
+
export type RuntimeMethodIdMapping = Record<
|
|
4
|
+
`${string}.${string}`,
|
|
5
|
+
{ methodId: bigint; type: RuntimeMethodInvocationType }
|
|
6
|
+
>;
|
|
7
|
+
|
|
8
|
+
export interface RuntimeLike {
|
|
9
|
+
get methodIdResolver(): {
|
|
10
|
+
methodIdMap: () => RuntimeMethodIdMapping;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field, Struct } from "o1js";
|
|
1
|
+
import { Bool, Field, ProvablePure, Struct } from "o1js";
|
|
2
2
|
|
|
3
3
|
import { Option, ProvableOption } from "./Option";
|
|
4
4
|
|
|
@@ -44,7 +44,7 @@ export class StateTransition<Value> {
|
|
|
44
44
|
|
|
45
45
|
public constructor(
|
|
46
46
|
public path: Field,
|
|
47
|
-
public fromValue: Option<
|
|
47
|
+
public fromValue: Option<Value>,
|
|
48
48
|
public toValue: Option<Field> | Option<Value>
|
|
49
49
|
) {}
|
|
50
50
|
|
|
@@ -77,4 +77,12 @@ export class StateTransition<Value> {
|
|
|
77
77
|
to: this.toValue.toJSON(),
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
|
+
|
|
81
|
+
public toConstant(): StateTransition<Value> {
|
|
82
|
+
return new StateTransition<Value>(
|
|
83
|
+
this.path.toConstant(),
|
|
84
|
+
this.fromValue.toConstant(),
|
|
85
|
+
this.toValue.toConstant()
|
|
86
|
+
);
|
|
87
|
+
}
|
|
80
88
|
}
|
package/src/protocol/Protocol.ts
CHANGED
|
@@ -19,15 +19,15 @@ import { StateService } from "../state/StateService";
|
|
|
19
19
|
|
|
20
20
|
import { ProtocolModule } from "./ProtocolModule";
|
|
21
21
|
import { ProvableTransactionHook } from "./ProvableTransactionHook";
|
|
22
|
-
import { NoopTransactionHook } from "../
|
|
22
|
+
import { NoopTransactionHook } from "../hooks/NoopTransactionHook";
|
|
23
23
|
import { ProtocolEnvironment } from "./ProtocolEnvironment";
|
|
24
|
-
import {
|
|
24
|
+
import { AccountStateHook } from "../hooks/AccountStateHook";
|
|
25
25
|
import { ProvableBlockHook } from "./ProvableBlockHook";
|
|
26
|
-
import { NoopBlockHook } from "../
|
|
27
|
-
import { BlockHeightHook } from "../
|
|
28
|
-
import { LastStateRootBlockHook } from "../
|
|
29
|
-
import { ProvableSettlementHook } from "../settlement/ProvableSettlementHook";
|
|
30
|
-
import { NoopSettlementHook } from "../
|
|
26
|
+
import { NoopBlockHook } from "../hooks/NoopBlockHook";
|
|
27
|
+
import { BlockHeightHook } from "../hooks/BlockHeightHook";
|
|
28
|
+
import { LastStateRootBlockHook } from "../hooks/LastStateRootBlockHook";
|
|
29
|
+
import { ProvableSettlementHook } from "../settlement/modularity/ProvableSettlementHook";
|
|
30
|
+
import { NoopSettlementHook } from "../hooks/NoopSettlementHook";
|
|
31
31
|
|
|
32
32
|
const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
|
|
33
33
|
ProvableTransactionHook: "ProvableTransactionHook",
|
|
@@ -35,42 +35,38 @@ const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
|
|
|
35
35
|
ProvableSettlementHook: "ProvableSettlementHook",
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
export type
|
|
38
|
+
export type ProtocolModulesRecord = ModulesRecord<
|
|
39
39
|
TypedClass<ProtocolModule<unknown>>
|
|
40
40
|
>;
|
|
41
41
|
|
|
42
|
-
interface BlockProverType extends ProtocolModule, BlockProvable {}
|
|
42
|
+
export interface BlockProverType extends ProtocolModule, BlockProvable {}
|
|
43
43
|
|
|
44
|
-
interface StateTransitionProverType
|
|
44
|
+
export interface StateTransitionProverType
|
|
45
45
|
extends ProtocolModule,
|
|
46
46
|
StateTransitionProvable {}
|
|
47
47
|
|
|
48
|
-
export
|
|
49
|
-
extends GenericProtocolModuleRecord {
|
|
48
|
+
export type MandatoryProtocolModulesRecord = {
|
|
50
49
|
BlockProver: TypedClass<BlockProverType>;
|
|
51
50
|
StateTransitionProver: TypedClass<StateTransitionProverType>;
|
|
52
|
-
AccountState: TypedClass<
|
|
51
|
+
AccountState: TypedClass<AccountStateHook>;
|
|
53
52
|
BlockHeight: TypedClass<BlockHeightHook>;
|
|
54
53
|
LastStateRoot: TypedClass<LastStateRootBlockHook>;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface ProtocolModulesRecord
|
|
58
|
-
extends GenericProtocolModuleRecord,
|
|
59
|
-
ProtocolCustomModulesRecord {}
|
|
54
|
+
};
|
|
60
55
|
|
|
61
56
|
export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
|
|
62
57
|
modules: Modules;
|
|
63
58
|
config?: ModulesConfig<Modules>;
|
|
64
59
|
}
|
|
65
60
|
|
|
66
|
-
export class Protocol<
|
|
61
|
+
export class Protocol<
|
|
62
|
+
Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord
|
|
63
|
+
>
|
|
67
64
|
extends ModuleContainer<Modules>
|
|
68
65
|
implements ProtocolEnvironment
|
|
69
66
|
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
): TypedClass<Protocol<Modules>> {
|
|
67
|
+
public static from<
|
|
68
|
+
Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord
|
|
69
|
+
>(modules: ProtocolDefinition<Modules>): TypedClass<Protocol<Modules>> {
|
|
74
70
|
return class ScopedProtocol extends Protocol<Modules> {
|
|
75
71
|
public constructor() {
|
|
76
72
|
super(modules);
|
|
@@ -188,24 +184,3 @@ export class Protocol<Modules extends ProtocolModulesRecord>
|
|
|
188
184
|
});
|
|
189
185
|
}
|
|
190
186
|
}
|
|
191
|
-
|
|
192
|
-
export const VanillaProtocol = {
|
|
193
|
-
create() {
|
|
194
|
-
return VanillaProtocol.from({});
|
|
195
|
-
},
|
|
196
|
-
|
|
197
|
-
from<AdditonalModules extends GenericProtocolModuleRecord>(
|
|
198
|
-
additionalModules: AdditonalModules
|
|
199
|
-
): TypedClass<Protocol<ProtocolCustomModulesRecord & AdditonalModules>> {
|
|
200
|
-
return Protocol.from<ProtocolCustomModulesRecord & AdditonalModules>({
|
|
201
|
-
modules: {
|
|
202
|
-
StateTransitionProver,
|
|
203
|
-
BlockProver,
|
|
204
|
-
AccountState: AccountStateModule,
|
|
205
|
-
BlockHeight: BlockHeightHook,
|
|
206
|
-
LastStateRoot: LastStateRootBlockHook,
|
|
207
|
-
...additionalModules,
|
|
208
|
-
},
|
|
209
|
-
});
|
|
210
|
-
},
|
|
211
|
-
};
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
Bool,
|
|
4
4
|
Experimental,
|
|
5
|
-
Field,
|
|
5
|
+
Field,
|
|
6
|
+
Poseidon,
|
|
6
7
|
type Proof,
|
|
7
8
|
Provable,
|
|
8
|
-
SelfProof
|
|
9
|
+
SelfProof,
|
|
9
10
|
} from "o1js";
|
|
10
11
|
import { container, inject, injectable, injectAll } from "tsyringe";
|
|
11
12
|
import {
|
|
@@ -35,7 +36,11 @@ import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethod
|
|
|
35
36
|
import { ProvableBlockHook } from "../../protocol/ProvableBlockHook";
|
|
36
37
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
37
38
|
import { SignedTransaction } from "../../model/transaction/SignedTransaction";
|
|
38
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
MinaActions,
|
|
41
|
+
MinaActionsHashList,
|
|
42
|
+
} from "../../utils/MinaPrefixedProvableHashList";
|
|
43
|
+
import { StateTransitionReductionList } from "../../utils/StateTransitionReductionList";
|
|
39
44
|
|
|
40
45
|
import {
|
|
41
46
|
BlockProvable,
|
|
@@ -274,7 +279,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
274
279
|
transition.toProvable()
|
|
275
280
|
);
|
|
276
281
|
|
|
277
|
-
const hashList = new
|
|
282
|
+
const hashList = new StateTransitionReductionList(
|
|
278
283
|
ProvableStateTransition,
|
|
279
284
|
stateTransitionProof.publicInput.protocolTransitionsHash
|
|
280
285
|
);
|
|
@@ -369,7 +374,9 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
369
374
|
// Append tx to incomingMessagesHash
|
|
370
375
|
const actionHash = MinaActions.actionHash(transaction.hashData());
|
|
371
376
|
|
|
372
|
-
const incomingMessagesList = new MinaActionsHashList(
|
|
377
|
+
const incomingMessagesList = new MinaActionsHashList(
|
|
378
|
+
state.incomingMessagesHash
|
|
379
|
+
);
|
|
373
380
|
incomingMessagesList.pushIf(actionHash, isMessage);
|
|
374
381
|
|
|
375
382
|
stateTo.incomingMessagesHash = incomingMessagesList.commitment;
|
|
@@ -506,7 +513,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
506
513
|
"beforeBlock"
|
|
507
514
|
);
|
|
508
515
|
|
|
509
|
-
const beforeBlockHashList = new
|
|
516
|
+
const beforeBlockHashList = new StateTransitionReductionList(
|
|
510
517
|
ProvableStateTransition
|
|
511
518
|
);
|
|
512
519
|
beforeBlockResult.stateTransitions.forEach((st) => {
|
|
@@ -554,7 +561,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
554
561
|
"afterBlock"
|
|
555
562
|
);
|
|
556
563
|
|
|
557
|
-
const afterBlockHashList = new
|
|
564
|
+
const afterBlockHashList = new StateTransitionReductionList(
|
|
558
565
|
ProvableStateTransition
|
|
559
566
|
);
|
|
560
567
|
afterBlockResult.stateTransitions.forEach((st) => {
|
|
@@ -568,7 +575,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
568
575
|
afterBlockHashList.commitment,
|
|
569
576
|
"STProof from-ST-hash not matching generated ST-hash from afterBlock hooks"
|
|
570
577
|
);
|
|
571
|
-
state.stateRoot =
|
|
578
|
+
state.stateRoot = Provable.if(
|
|
579
|
+
stsEmitted,
|
|
580
|
+
stateTransitionProof.publicOutput.stateRoot,
|
|
581
|
+
state.stateRoot
|
|
582
|
+
);
|
|
572
583
|
|
|
573
584
|
// 6. Close block
|
|
574
585
|
|
|
@@ -800,6 +811,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
800
811
|
return {
|
|
801
812
|
compile: program.compile.bind(program),
|
|
802
813
|
verify: program.verify.bind(program),
|
|
814
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
803
815
|
Proof: SelfProofClass,
|
|
804
816
|
methods,
|
|
805
817
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createMerkleTree } from "@proto-kit/common";
|
|
2
2
|
import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
|
|
3
3
|
|
|
4
|
-
export class BlockHashMerkleTree extends createMerkleTree(
|
|
4
|
+
export class BlockHashMerkleTree extends createMerkleTree(40) {}
|
|
5
5
|
export class BlockHashMerkleTreeWitness extends BlockHashMerkleTree.WITNESS {}
|
|
6
6
|
|
|
7
7
|
export class BlockHashTreeEntry extends Struct({
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
StateTransitionProverPublicOutput,
|
|
31
31
|
} from "./StateTransitionProvable";
|
|
32
32
|
import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
|
|
33
|
+
import { StateTransitionProverType } from "../../protocol/Protocol";
|
|
33
34
|
|
|
34
35
|
const errors = {
|
|
35
36
|
propertyNotMatching: (property: string, step: string) =>
|
|
@@ -127,6 +128,7 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
127
128
|
return {
|
|
128
129
|
compile: program.compile.bind(program),
|
|
129
130
|
verify: program.verify.bind(program),
|
|
131
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
130
132
|
Proof: SelfProofClass,
|
|
131
133
|
methods,
|
|
132
134
|
};
|
|
@@ -339,9 +341,9 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
339
341
|
@injectable()
|
|
340
342
|
export class StateTransitionProver
|
|
341
343
|
extends ProtocolModule
|
|
342
|
-
implements StateTransitionProvable
|
|
344
|
+
implements StateTransitionProvable, StateTransitionProverType
|
|
343
345
|
{
|
|
344
|
-
public
|
|
346
|
+
public zkProgrammable: StateTransitionProverProgrammable;
|
|
345
347
|
|
|
346
348
|
public constructor(
|
|
347
349
|
// Injected
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ConfigurableModule, NoConfig, TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { SmartContract } from "o1js";
|
|
3
|
+
|
|
4
|
+
export type SmartContractClassFromInterface<Type> = typeof SmartContract &
|
|
5
|
+
TypedClass<Type>;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* This module type is used to define a contract module that can be used to
|
|
9
|
+
* construct and inject smart contract instances.
|
|
10
|
+
* It defines a method contractFactory, whose arguments can be configured via
|
|
11
|
+
* the Argument generic. It returns a smart contract class that is a subclass
|
|
12
|
+
* of SmartContract and implements a certain interface as specified by the
|
|
13
|
+
* ContractType generic.
|
|
14
|
+
*/
|
|
15
|
+
export abstract class ContractModule<
|
|
16
|
+
ContractType,
|
|
17
|
+
// undefined = no args
|
|
18
|
+
Arguments = undefined,
|
|
19
|
+
Config = NoConfig
|
|
20
|
+
> extends ConfigurableModule<Config> {
|
|
21
|
+
public abstract contractFactory(
|
|
22
|
+
args: Arguments
|
|
23
|
+
): SmartContractClassFromInterface<ContractType>;
|
|
24
|
+
}
|