@proto-kit/protocol 0.1.1-develop.651 → 0.1.1-develop.833
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 -201
- package/dist/blockmodules/AccountStateModule.d.ts +37 -37
- package/dist/blockmodules/AccountStateModule.js +43 -43
- package/dist/blockmodules/BlockHeightHook.d.ts +6 -6
- package/dist/blockmodules/BlockHeightHook.js +15 -15
- package/dist/blockmodules/LastStateRootBlockHook.d.ts +7 -7
- package/dist/blockmodules/LastStateRootBlockHook.js +15 -15
- package/dist/blockmodules/NoopBlockHook.d.ts +8 -8
- package/dist/blockmodules/NoopBlockHook.js +9 -9
- package/dist/blockmodules/NoopSettlementHook.d.ts +5 -5
- package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
- package/dist/blockmodules/NoopSettlementHook.js +18 -18
- package/dist/blockmodules/NoopTransactionHook.d.ts +5 -5
- package/dist/blockmodules/NoopTransactionHook.js +4 -4
- package/dist/hooks/AccountStateHook.d.ts +19 -5
- package/dist/hooks/AccountStateHook.d.ts.map +1 -1
- package/dist/hooks/AccountStateHook.js +9 -10
- package/dist/hooks/BlockHeightHook.d.ts +2 -2
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
- package/dist/hooks/BlockHeightHook.js +3 -3
- package/dist/hooks/LastStateRootBlockHook.d.ts +2 -2
- package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -1
- package/dist/hooks/LastStateRootBlockHook.js +2 -2
- package/dist/hooks/NoopBlockHook.d.ts +3 -3
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
- package/dist/hooks/NoopBlockHook.js +2 -2
- package/dist/hooks/NoopSettlementHook.d.ts +1 -1
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
- package/dist/hooks/NoopSettlementHook.js +2 -3
- package/dist/hooks/NoopTransactionHook.d.ts +1 -1
- package/dist/hooks/NoopTransactionHook.d.ts.map +1 -1
- package/dist/hooks/NoopTransactionHook.js +4 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/model/MethodPublicOutput.d.ts +68 -34
- package/dist/model/MethodPublicOutput.d.ts.map +1 -1
- package/dist/model/Option.d.ts +39 -20
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +1 -0
- package/dist/model/Path.d.ts +1 -1
- package/dist/model/Path.d.ts.map +1 -1
- package/dist/model/Path.js +0 -2
- package/dist/model/StateTransition.d.ts +48 -12
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- package/dist/model/StateTransitionReduction.d.ts +2 -2
- package/dist/model/StateTransitionReduction.js +26 -26
- package/dist/model/network/NetworkState.d.ts +73 -18
- package/dist/model/network/NetworkState.d.ts.map +1 -1
- package/dist/model/network/NetworkState.js +2 -2
- package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
- package/dist/model/transaction/ProtocolTransaction.js +18 -18
- package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
- package/dist/model/transaction/RuntimeTransaction.js +4 -4
- package/dist/model/transaction/SignedTransaction.d.ts +39 -3
- package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
- package/dist/model/transaction/SignedTransaction.js +1 -1
- package/dist/model/transaction/ValueOption.d.ts +86 -32
- package/dist/model/transaction/ValueOption.d.ts.map +1 -1
- package/dist/model/transaction/ValueOption.js +1 -1
- package/dist/protocol/Protocol.d.ts +6 -5
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +12 -3
- package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
- package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.d.ts +1 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +3 -1
- package/dist/protocol/ProvableBlockHook.d.ts +2 -2
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
- package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
- package/dist/prover/block/BlockProvable.d.ts +240 -98
- package/dist/prover/block/BlockProvable.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.d.ts +8 -8
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +48 -40
- package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
- package/dist/prover/block/BlockTransactionPosition.js +25 -25
- package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
- package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
- package/dist/prover/block/BundleTransactionPosition.js +25 -0
- package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
- package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
- package/dist/prover/block/SplitPrefilledStateService.js +1 -0
- package/dist/prover/block/SplitStateService.d.ts +11 -0
- package/dist/prover/block/SplitStateService.d.ts.map +1 -0
- package/dist/prover/block/SplitStateService.js +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
- package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
- package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
- package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.d.ts +8 -8
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +17 -22
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
- package/dist/settlement/DispatchContract.d.ts +20 -0
- package/dist/settlement/DispatchContract.d.ts.map +1 -0
- package/dist/settlement/DispatchContract.js +112 -0
- package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
- package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/OutgoingMessageArgument.js +32 -0
- package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
- package/dist/settlement/ProvableSettlementHook.js +3 -3
- package/dist/settlement/SettlementContract.d.ts +229 -229
- package/dist/settlement/SettlementContract.js +346 -346
- package/dist/settlement/SettlementContractModule.d.ts +1 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
- package/dist/settlement/SettlementContractModule.js +7 -4
- package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
- package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContract.js +111 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +1 -2
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +8 -8
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
- package/dist/settlement/contracts/DispatchSmartContract.js +14 -14
- package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
- package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementContract.js +43 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -1
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +4 -4
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +18 -17
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
- package/dist/settlement/contracts/SettlementSmartContract.js +46 -35
- package/dist/settlement/messages/Deposit.d.ts +29 -4
- package/dist/settlement/messages/Deposit.d.ts.map +1 -1
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +94 -14
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
- package/dist/settlement/messages/Withdrawal.d.ts +29 -4
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +2 -2
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.js +3 -1
- package/dist/state/State.d.ts +4 -3
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +16 -11
- package/dist/state/StateMap.d.ts +3 -3
- package/dist/state/StateMap.d.ts.map +1 -1
- package/dist/state/StateMap.js +4 -5
- package/dist/state/StateService.d.ts +3 -3
- package/dist/state/StateService.d.ts.map +1 -1
- package/dist/state/StateServiceProvider.d.ts +3 -3
- package/dist/state/StateServiceProvider.d.ts.map +1 -1
- package/dist/state/StateServiceProvider.js +1 -3
- package/dist/state/assert/assert.d.ts +1 -1
- package/dist/state/assert/assert.d.ts.map +1 -1
- package/dist/state/assert/assert.js +4 -1
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +54 -3
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +4 -5
- package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
- package/dist/state/context/contextExecution.d.ts +14 -0
- package/dist/state/context/contextExecution.d.ts.map +1 -0
- package/dist/state/context/contextExecution.js +30 -0
- package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
- package/dist/state/protocol/ProtocolState.js +0 -3
- package/dist/utils/AppliedBatchHashList.d.ts +17 -0
- package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
- package/dist/utils/AppliedBatchHashList.js +24 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
- package/dist/utils/ProvableHashList.d.ts +1 -1
- package/dist/utils/StateTransitionReductionList.d.ts +1 -1
- package/dist/utils/StateTransitionReductionList.d.ts.map +1 -1
- package/dist/utils/StateTransitionReductionList.js +3 -3
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -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 +133 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
- package/dist/utils/utils.d.ts +1 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +5 -10
- package/package.json +5 -5
- package/src/hooks/AccountStateHook.ts +11 -9
- package/src/hooks/BlockHeightHook.ts +3 -4
- package/src/hooks/LastStateRootBlockHook.ts +4 -4
- package/src/hooks/NoopBlockHook.ts +6 -5
- package/src/hooks/NoopSettlementHook.ts +2 -2
- package/src/hooks/NoopTransactionHook.ts +5 -1
- package/src/index.ts +0 -2
- package/src/model/MethodPublicOutput.ts +2 -2
- package/src/model/Option.ts +5 -1
- package/src/model/Path.ts +1 -3
- package/src/model/StateTransition.ts +1 -1
- package/src/model/Transaction.ts +2 -0
- package/src/model/network/NetworkState.ts +2 -2
- package/src/model/transaction/RuntimeTransaction.ts +5 -12
- package/src/model/transaction/SignedTransaction.ts +1 -8
- package/src/model/transaction/ValueOption.ts +1 -1
- package/src/protocol/Protocol.ts +24 -13
- package/src/protocol/ProtocolEnvironment.ts +7 -6
- package/src/protocol/ProtocolModule.ts +5 -2
- package/src/protocol/ProvableBlockHook.ts +3 -3
- package/src/protocol/ProvableTransactionHook.ts +4 -2
- package/src/protocol/TransitioningProtocolModule.ts +1 -1
- package/src/prover/block/BlockProvable.ts +3 -3
- package/src/prover/block/BlockProver.ts +78 -55
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +1 -1
- package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
- package/src/prover/statetransition/StateTransitionProver.ts +23 -27
- package/src/settlement/ContractModule.ts +1 -1
- package/src/settlement/SettlementContractModule.ts +14 -9
- package/src/settlement/contracts/DispatchSmartContract.ts +15 -14
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +6 -4
- package/src/settlement/contracts/SettlementSmartContract.ts +55 -34
- package/src/settlement/messages/OutgoingMessageArgument.ts +1 -0
- package/src/settlement/modularity/ProvableSettlementHook.ts +3 -4
- package/src/settlement/modules/NetworkStateSettlementModule.ts +5 -2
- package/src/state/State.ts +19 -12
- package/src/state/StateMap.ts +4 -5
- package/src/state/StateService.ts +3 -3
- package/src/state/StateServiceProvider.ts +6 -7
- package/src/state/assert/assert.ts +6 -2
- package/src/state/context/RuntimeMethodExecutionContext.ts +5 -2
- package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
- package/src/state/protocol/ProtocolState.ts +1 -4
- package/src/utils/MinaPrefixedProvableHashList.ts +2 -1
- package/src/utils/ProvableHashList.ts +1 -1
- package/src/utils/StateTransitionReductionList.ts +4 -3
- package/src/utils/utils.ts +4 -9
- package/test/BlockProver.test.ts +110 -128
- package/test/Protocol.test.ts +8 -20
- package/test/State.test.ts +8 -8
- package/test/StateTransition.test.ts +56 -66
- package/test/TestingProtocol.ts +48 -0
- package/test/model/Option.test.ts +72 -0
- package/{src → test}/state/assert/assert.test.ts +4 -4
- package/test/tsconfig.json +7 -0
- package/test/utils/ProvableReductionHashList.test.ts +5 -2
- package/test/utils.test.ts +0 -3
- package/dist/hooks/TransactionFeeHook.d.ts +0 -16
- package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
- package/dist/hooks/TransactionFeeHook.js +0 -39
- package/src/hooks/SequenceStateTransactionModule.ts +0 -25
- package/src/model/Option.test.ts +0 -21
- package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
- package/test/Option.test.ts +0 -64
- package/test/settlement/SettlementContract.test.ts +0 -45
- package/tsconfig.test.json +0 -9
|
@@ -1,36 +1,34 @@
|
|
|
1
|
-
/* eslint-disable max-lines */
|
|
2
|
-
import { Bool, Experimental, Field, Provable, SelfProof } from "o1js";
|
|
3
|
-
import { injectable } from "tsyringe";
|
|
4
1
|
import {
|
|
5
2
|
AreProofsEnabled,
|
|
6
|
-
log,
|
|
7
3
|
PlainZkProgram,
|
|
8
4
|
provableMethod,
|
|
9
5
|
RollupMerkleTreeWitness,
|
|
10
6
|
ZkProgrammable,
|
|
11
7
|
} from "@proto-kit/common";
|
|
8
|
+
import { Field, Provable, SelfProof, ZkProgram } from "o1js";
|
|
9
|
+
import { injectable } from "tsyringe";
|
|
12
10
|
|
|
13
|
-
import {
|
|
14
|
-
DefaultProvableHashList,
|
|
15
|
-
ProvableHashList,
|
|
16
|
-
} from "../../utils/ProvableHashList";
|
|
11
|
+
import { constants } from "../../Constants";
|
|
17
12
|
import { ProvableStateTransition } from "../../model/StateTransition";
|
|
18
13
|
import {
|
|
19
14
|
ProvableStateTransitionType,
|
|
20
15
|
StateTransitionProvableBatch,
|
|
21
16
|
} from "../../model/StateTransitionProvableBatch";
|
|
22
|
-
import {
|
|
17
|
+
import { StateTransitionProverType } from "../../protocol/Protocol";
|
|
23
18
|
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
19
|
+
import {
|
|
20
|
+
DefaultProvableHashList,
|
|
21
|
+
ProvableHashList,
|
|
22
|
+
} from "../../utils/ProvableHashList";
|
|
24
23
|
|
|
25
|
-
import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
|
|
26
24
|
import {
|
|
25
|
+
StateTransitionProof,
|
|
27
26
|
StateTransitionProvable,
|
|
28
27
|
StateTransitionProverPublicInput,
|
|
29
|
-
StateTransitionProof,
|
|
30
28
|
StateTransitionProverPublicOutput,
|
|
31
29
|
} from "./StateTransitionProvable";
|
|
30
|
+
import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
|
|
32
31
|
import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
|
|
33
|
-
import { StateTransitionProverType } from "../../protocol/Protocol";
|
|
34
32
|
|
|
35
33
|
const errors = {
|
|
36
34
|
propertyNotMatching: (property: string, step: string) =>
|
|
@@ -66,7 +64,6 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
66
64
|
StateTransitionProverPublicOutput
|
|
67
65
|
> {
|
|
68
66
|
public constructor(
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
70
67
|
private readonly stateTransitionProver: StateTransitionProver,
|
|
71
68
|
public readonly witnessProviderReference: StateTransitionWitnessProviderReference
|
|
72
69
|
) {
|
|
@@ -81,11 +78,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
81
78
|
StateTransitionProverPublicInput,
|
|
82
79
|
StateTransitionProverPublicOutput
|
|
83
80
|
> {
|
|
84
|
-
// eslint-disable-next-line max-len
|
|
85
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this,unicorn/no-this-assignment
|
|
86
81
|
const instance = this;
|
|
87
82
|
|
|
88
|
-
const program =
|
|
83
|
+
const program = ZkProgram({
|
|
84
|
+
name: "StateTransitionProver",
|
|
89
85
|
publicInput: StateTransitionProverPublicInput,
|
|
90
86
|
publicOutput: StateTransitionProverPublicOutput,
|
|
91
87
|
|
|
@@ -93,11 +89,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
93
89
|
proveBatch: {
|
|
94
90
|
privateInputs: [StateTransitionProvableBatch],
|
|
95
91
|
|
|
96
|
-
method(
|
|
92
|
+
async method(
|
|
97
93
|
publicInput: StateTransitionProverPublicInput,
|
|
98
94
|
batch: StateTransitionProvableBatch
|
|
99
95
|
) {
|
|
100
|
-
return instance.runBatch(publicInput, batch);
|
|
96
|
+
return await instance.runBatch(publicInput, batch);
|
|
101
97
|
},
|
|
102
98
|
},
|
|
103
99
|
|
|
@@ -107,12 +103,12 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
107
103
|
StateTransitionSelfProofClass,
|
|
108
104
|
],
|
|
109
105
|
|
|
110
|
-
method(
|
|
106
|
+
async method(
|
|
111
107
|
publicInput: StateTransitionProverPublicInput,
|
|
112
108
|
proof1: StateTransitionProof,
|
|
113
109
|
proof2: StateTransitionProof
|
|
114
110
|
) {
|
|
115
|
-
return instance.merge(publicInput, proof1, proof2);
|
|
111
|
+
return await instance.merge(publicInput, proof1, proof2);
|
|
116
112
|
},
|
|
117
113
|
},
|
|
118
114
|
},
|
|
@@ -123,7 +119,7 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
123
119
|
merge: program.merge.bind(program),
|
|
124
120
|
};
|
|
125
121
|
|
|
126
|
-
const SelfProofClass =
|
|
122
|
+
const SelfProofClass = ZkProgram.Proof(program);
|
|
127
123
|
|
|
128
124
|
return {
|
|
129
125
|
compile: program.compile.bind(program),
|
|
@@ -242,10 +238,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
242
238
|
* Applies a whole batch of StateTransitions at once
|
|
243
239
|
*/
|
|
244
240
|
@provableMethod()
|
|
245
|
-
public runBatch(
|
|
241
|
+
public async runBatch(
|
|
246
242
|
publicInput: StateTransitionProverPublicInput,
|
|
247
243
|
batch: StateTransitionProvableBatch
|
|
248
|
-
): StateTransitionProverPublicOutput {
|
|
244
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
249
245
|
const result = this.applyTransitions(
|
|
250
246
|
publicInput.stateRoot,
|
|
251
247
|
publicInput.protocolStateRoot,
|
|
@@ -263,11 +259,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
263
259
|
}
|
|
264
260
|
|
|
265
261
|
@provableMethod()
|
|
266
|
-
public merge(
|
|
262
|
+
public async merge(
|
|
267
263
|
publicInput: StateTransitionProverPublicInput,
|
|
268
264
|
proof1: StateTransitionProof,
|
|
269
265
|
proof2: StateTransitionProof
|
|
270
|
-
): StateTransitionProverPublicOutput {
|
|
266
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
271
267
|
proof1.verify();
|
|
272
268
|
proof2.verify();
|
|
273
269
|
|
|
@@ -359,7 +355,7 @@ export class StateTransitionProver
|
|
|
359
355
|
public runBatch(
|
|
360
356
|
publicInput: StateTransitionProverPublicInput,
|
|
361
357
|
batch: StateTransitionProvableBatch
|
|
362
|
-
): StateTransitionProverPublicOutput {
|
|
358
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
363
359
|
return this.zkProgrammable.runBatch(publicInput, batch);
|
|
364
360
|
}
|
|
365
361
|
|
|
@@ -367,7 +363,7 @@ export class StateTransitionProver
|
|
|
367
363
|
publicInput: StateTransitionProverPublicInput,
|
|
368
364
|
proof1: StateTransitionProof,
|
|
369
365
|
proof2: StateTransitionProof
|
|
370
|
-
): StateTransitionProverPublicOutput {
|
|
366
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
371
367
|
return this.zkProgrammable.merge(publicInput, proof1, proof2);
|
|
372
368
|
}
|
|
373
369
|
}
|
|
@@ -2,8 +2,9 @@ import {
|
|
|
2
2
|
AreProofsEnabled,
|
|
3
3
|
ChildContainerProvider,
|
|
4
4
|
ModuleContainer,
|
|
5
|
-
ModulesRecord,
|
|
6
|
-
TypedClass
|
|
5
|
+
ModulesRecord,
|
|
6
|
+
TypedClass,
|
|
7
|
+
noop,
|
|
7
8
|
} from "@proto-kit/common";
|
|
8
9
|
import { PublicKey, SmartContract } from "o1js";
|
|
9
10
|
import { injectable } from "tsyringe";
|
|
@@ -43,7 +44,7 @@ export type MandatorySettlementModulesRecord = {
|
|
|
43
44
|
@injectable()
|
|
44
45
|
export class SettlementContractModule<
|
|
45
46
|
SettlementModules extends SettlementModulesRecord &
|
|
46
|
-
MandatorySettlementModulesRecord
|
|
47
|
+
MandatorySettlementModulesRecord,
|
|
47
48
|
>
|
|
48
49
|
extends ModuleContainer<SettlementModules>
|
|
49
50
|
implements ProtocolModule<unknown>
|
|
@@ -54,7 +55,7 @@ export class SettlementContractModule<
|
|
|
54
55
|
|
|
55
56
|
public static from<
|
|
56
57
|
SettlementModules extends SettlementModulesRecord &
|
|
57
|
-
MandatorySettlementModulesRecord
|
|
58
|
+
MandatorySettlementModulesRecord,
|
|
58
59
|
>(
|
|
59
60
|
modules: SettlementModules
|
|
60
61
|
): TypedClass<SettlementContractModule<SettlementModules>> {
|
|
@@ -84,16 +85,18 @@ export class SettlementContractModule<
|
|
|
84
85
|
super.create(childContainerProvider);
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
|
|
88
|
+
public async start() {
|
|
89
|
+
noop();
|
|
90
|
+
}
|
|
88
91
|
|
|
89
92
|
public getContractClasses(): {
|
|
90
93
|
settlement: SmartContractClassFromInterface<SettlementContractType>;
|
|
91
94
|
dispatch: SmartContractClassFromInterface<DispatchContractType>;
|
|
92
95
|
} {
|
|
93
|
-
const settlementContractKey = "SettlementContract"
|
|
94
|
-
const dispatchContractKey = "DispatchContract"
|
|
95
|
-
this.assertIsValidModuleName(settlementContractKey)
|
|
96
|
-
this.assertIsValidModuleName(dispatchContractKey)
|
|
96
|
+
const settlementContractKey = "SettlementContract";
|
|
97
|
+
const dispatchContractKey = "DispatchContract";
|
|
98
|
+
this.assertIsValidModuleName(settlementContractKey);
|
|
99
|
+
this.assertIsValidModuleName(dispatchContractKey);
|
|
97
100
|
|
|
98
101
|
const settlementModule = this.resolve(settlementContractKey);
|
|
99
102
|
const dispatchModule = this.resolve(dispatchContractKey);
|
|
@@ -116,7 +119,9 @@ export class SettlementContractModule<
|
|
|
116
119
|
} {
|
|
117
120
|
const { dispatch, settlement } = this.getContractClasses();
|
|
118
121
|
|
|
122
|
+
// eslint-disable-next-line new-cap
|
|
119
123
|
const dispatchInstance = new dispatch(addresses.dispatch);
|
|
124
|
+
// eslint-disable-next-line new-cap
|
|
120
125
|
const settlementInstance = new settlement(addresses.settlement);
|
|
121
126
|
|
|
122
127
|
return {
|
|
@@ -26,8 +26,8 @@ export interface DispatchContractType {
|
|
|
26
26
|
updateMessagesHash: (
|
|
27
27
|
executedMessagesHash: Field,
|
|
28
28
|
newPromisedMessagesHash: Field
|
|
29
|
-
) => void
|
|
30
|
-
initialize: (settlementContract: PublicKey) => void
|
|
29
|
+
) => Promise<void>;
|
|
30
|
+
initialize: (settlementContract: PublicKey) => Promise<void>;
|
|
31
31
|
|
|
32
32
|
promisedMessagesHash: State<Field>;
|
|
33
33
|
}
|
|
@@ -48,29 +48,30 @@ export class DispatchSmartContract
|
|
|
48
48
|
@state(PublicKey) public settlementContract = State<PublicKey>();
|
|
49
49
|
|
|
50
50
|
@method
|
|
51
|
-
public updateMessagesHash(
|
|
51
|
+
public async updateMessagesHash(
|
|
52
52
|
executedMessagesHash: Field,
|
|
53
53
|
newPromisedMessagesHash: Field
|
|
54
54
|
) {
|
|
55
|
-
const promisedMessagesHash =
|
|
56
|
-
|
|
55
|
+
const promisedMessagesHash =
|
|
56
|
+
this.promisedMessagesHash.getAndRequireEquals();
|
|
57
|
+
this.honoredMessagesHash.getAndRequireEquals();
|
|
57
58
|
|
|
58
59
|
executedMessagesHash.assertEquals(promisedMessagesHash);
|
|
59
60
|
|
|
60
61
|
this.honoredMessagesHash.set(executedMessagesHash);
|
|
61
62
|
|
|
62
63
|
// Assert and apply new promisedMessagesHash
|
|
63
|
-
this.self.account.actionState.
|
|
64
|
+
this.self.account.actionState.requireEquals(newPromisedMessagesHash);
|
|
64
65
|
this.promisedMessagesHash.set(newPromisedMessagesHash);
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
@method
|
|
68
|
-
public initialize(settlementContract: PublicKey) {
|
|
69
|
-
this.promisedMessagesHash.
|
|
70
|
-
this.honoredMessagesHash.
|
|
69
|
+
public async initialize(settlementContract: PublicKey) {
|
|
70
|
+
this.promisedMessagesHash.getAndRequireEquals().assertEquals(Field(0));
|
|
71
|
+
this.honoredMessagesHash.getAndRequireEquals().assertEquals(Field(0));
|
|
71
72
|
this.settlementContract
|
|
72
|
-
.
|
|
73
|
-
.assertEquals(PublicKey.empty());
|
|
73
|
+
.getAndRequireEquals()
|
|
74
|
+
.assertEquals(PublicKey.empty<typeof PublicKey>());
|
|
74
75
|
|
|
75
76
|
this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
|
|
76
77
|
this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
|
|
@@ -107,12 +108,12 @@ export class DispatchSmartContract
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
@method
|
|
110
|
-
public deposit(amount: UInt64) {
|
|
111
|
+
public async deposit(amount: UInt64) {
|
|
111
112
|
// Save this, since otherwise it would be a second witness later,
|
|
112
113
|
// which could be a different values than the first
|
|
113
|
-
const
|
|
114
|
+
const sender = this.sender.getUnconstrained();
|
|
114
115
|
|
|
115
|
-
const settlementContract = this.settlementContract.
|
|
116
|
+
const settlementContract = this.settlementContract.getAndRequireEquals();
|
|
116
117
|
|
|
117
118
|
// Credit the amount to the settlement contract
|
|
118
119
|
const balanceAU = AccountUpdate.create(settlementContract);
|
|
@@ -46,12 +46,14 @@ export class SettlementContractProtocolModule extends ContractModule<
|
|
|
46
46
|
): SmartContractClassFromInterface<SettlementContractType> {
|
|
47
47
|
const { hooks, config } = this;
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
50
|
+
const withdrawalStatePathSplit = config.withdrawalStatePath.split(".") as [
|
|
51
|
+
string,
|
|
52
|
+
string,
|
|
53
|
+
];
|
|
52
54
|
|
|
53
55
|
const escapeHatchSlotsInterval =
|
|
54
|
-
|
|
56
|
+
config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
|
|
55
57
|
|
|
56
58
|
SettlementSmartContract.args = {
|
|
57
59
|
DispatchContract: dispatchContract,
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
prefixToField,
|
|
3
|
+
RollupMerkleTree,
|
|
4
|
+
TypedClass,
|
|
5
|
+
mapSequential,
|
|
6
|
+
} from "@proto-kit/common";
|
|
2
7
|
import {
|
|
3
8
|
AccountUpdate,
|
|
4
9
|
Bool,
|
|
@@ -16,7 +21,10 @@ import {
|
|
|
16
21
|
TokenId,
|
|
17
22
|
UInt32,
|
|
18
23
|
UInt64,
|
|
24
|
+
TokenContract,
|
|
25
|
+
AccountUpdateForest,
|
|
19
26
|
} from "o1js";
|
|
27
|
+
|
|
20
28
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
21
29
|
import { Path } from "../../model/Path";
|
|
22
30
|
import { BlockHashMerkleTree } from "../../prover/block/accummulators/BlockHashMerkleTree";
|
|
@@ -37,6 +45,8 @@ import {
|
|
|
37
45
|
|
|
38
46
|
import { DispatchContractType } from "./DispatchSmartContract";
|
|
39
47
|
|
|
48
|
+
/* eslint-disable @typescript-eslint/lines-between-class-members */
|
|
49
|
+
|
|
40
50
|
export class LazyBlockProof extends Proof<
|
|
41
51
|
BlockProverPublicInput,
|
|
42
52
|
BlockProverPublicOutput
|
|
@@ -51,7 +61,10 @@ export class LazyBlockProof extends Proof<
|
|
|
51
61
|
}
|
|
52
62
|
|
|
53
63
|
export interface SettlementContractType {
|
|
54
|
-
initialize: (
|
|
64
|
+
initialize: (
|
|
65
|
+
sequencer: PublicKey,
|
|
66
|
+
dispatchContract: PublicKey
|
|
67
|
+
) => Promise<void>;
|
|
55
68
|
settle: (
|
|
56
69
|
blockProof: LazyBlockProof,
|
|
57
70
|
signature: Signature,
|
|
@@ -60,16 +73,18 @@ export interface SettlementContractType {
|
|
|
60
73
|
inputNetworkState: NetworkState,
|
|
61
74
|
outputNetworkState: NetworkState,
|
|
62
75
|
newPromisedMessagesHash: Field
|
|
63
|
-
) => void
|
|
64
|
-
rollupOutgoingMessages: (
|
|
65
|
-
|
|
76
|
+
) => Promise<void>;
|
|
77
|
+
rollupOutgoingMessages: (
|
|
78
|
+
batch: OutgoingMessageArgumentBatch
|
|
79
|
+
) => Promise<void>;
|
|
80
|
+
redeem: (additionUpdate: AccountUpdate) => Promise<void>;
|
|
66
81
|
}
|
|
67
82
|
|
|
68
83
|
// Some random prefix for the sequencer signature
|
|
69
84
|
export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
|
|
70
85
|
|
|
71
86
|
export class SettlementSmartContract
|
|
72
|
-
extends
|
|
87
|
+
extends TokenContract
|
|
73
88
|
implements SettlementContractType
|
|
74
89
|
{
|
|
75
90
|
// This pattern of injecting args into a smartcontract is currently the only
|
|
@@ -92,13 +107,17 @@ export class SettlementSmartContract
|
|
|
92
107
|
|
|
93
108
|
@state(Field) public outgoingMessageCursor = State<Field>();
|
|
94
109
|
|
|
110
|
+
@method async approveBase(forest: AccountUpdateForest) {
|
|
111
|
+
this.checkZeroBalanceChange(forest);
|
|
112
|
+
}
|
|
113
|
+
|
|
95
114
|
@method
|
|
96
|
-
public initialize(sequencer: PublicKey, dispatchContract: PublicKey) {
|
|
97
|
-
this.sequencerKey.
|
|
98
|
-
this.stateRoot.
|
|
99
|
-
this.blockHashRoot.
|
|
100
|
-
this.networkStateHash.
|
|
101
|
-
this.dispatchContractAddressX.
|
|
115
|
+
public async initialize(sequencer: PublicKey, dispatchContract: PublicKey) {
|
|
116
|
+
this.sequencerKey.getAndRequireEquals().assertEquals(Field(0));
|
|
117
|
+
this.stateRoot.getAndRequireEquals().assertEquals(Field(0));
|
|
118
|
+
this.blockHashRoot.getAndRequireEquals().assertEquals(Field(0));
|
|
119
|
+
this.networkStateHash.getAndRequireEquals().assertEquals(Field(0));
|
|
120
|
+
this.dispatchContractAddressX.getAndRequireEquals().assertEquals(Field(0));
|
|
102
121
|
|
|
103
122
|
this.sequencerKey.set(sequencer.x);
|
|
104
123
|
this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
|
|
@@ -106,12 +125,12 @@ export class SettlementSmartContract
|
|
|
106
125
|
this.networkStateHash.set(NetworkState.empty().hash());
|
|
107
126
|
this.dispatchContractAddressX.set(dispatchContract.x);
|
|
108
127
|
|
|
109
|
-
const DispatchContract = SettlementSmartContract.args
|
|
110
|
-
new DispatchContract(dispatchContract).initialize(this.address);
|
|
128
|
+
const { DispatchContract } = SettlementSmartContract.args;
|
|
129
|
+
await new DispatchContract(dispatchContract).initialize(this.address);
|
|
111
130
|
}
|
|
112
131
|
|
|
113
132
|
@method
|
|
114
|
-
public settle(
|
|
133
|
+
public async settle(
|
|
115
134
|
blockProof: LazyBlockProof,
|
|
116
135
|
signature: Signature,
|
|
117
136
|
dispatchContractAddress: PublicKey,
|
|
@@ -124,14 +143,14 @@ export class SettlementSmartContract
|
|
|
124
143
|
blockProof.verify();
|
|
125
144
|
|
|
126
145
|
// Get and assert on-chain values
|
|
127
|
-
const stateRoot = this.stateRoot.
|
|
128
|
-
const networkStateHash = this.networkStateHash.
|
|
129
|
-
const blockHashRoot = this.blockHashRoot.
|
|
130
|
-
const sequencerKey = this.sequencerKey.
|
|
146
|
+
const stateRoot = this.stateRoot.getAndRequireEquals();
|
|
147
|
+
const networkStateHash = this.networkStateHash.getAndRequireEquals();
|
|
148
|
+
const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
|
|
149
|
+
const sequencerKey = this.sequencerKey.getAndRequireEquals();
|
|
131
150
|
const lastSettlementL1Block =
|
|
132
|
-
this.lastSettlementL1Block.
|
|
151
|
+
this.lastSettlementL1Block.getAndRequireEquals();
|
|
133
152
|
const onChainDispatchContractAddressX =
|
|
134
|
-
this.dispatchContractAddressX.
|
|
153
|
+
this.dispatchContractAddressX.getAndRequireEquals();
|
|
135
154
|
|
|
136
155
|
onChainDispatchContractAddressX.assertEquals(
|
|
137
156
|
dispatchContractAddress.x,
|
|
@@ -149,7 +168,7 @@ export class SettlementSmartContract
|
|
|
149
168
|
|
|
150
169
|
// Get block height and use the lower bound for all ops
|
|
151
170
|
const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
|
|
152
|
-
this.network.globalSlotSinceGenesis.
|
|
171
|
+
this.network.globalSlotSinceGenesis.requireBetween(
|
|
153
172
|
minBlockIncluded,
|
|
154
173
|
// 5 because that is the length the newPromisedMessagesHash will be valid
|
|
155
174
|
minBlockIncluded.add(4)
|
|
@@ -209,8 +228,8 @@ export class SettlementSmartContract
|
|
|
209
228
|
toNetworkState: outputNetworkState,
|
|
210
229
|
currentL1Block: minBlockIncluded,
|
|
211
230
|
};
|
|
212
|
-
hooks
|
|
213
|
-
hook.beforeSettlement(this, inputs);
|
|
231
|
+
await mapSequential(hooks, async (hook) => {
|
|
232
|
+
await hook.beforeSettlement(this, inputs);
|
|
214
233
|
});
|
|
215
234
|
|
|
216
235
|
// Apply blockProof
|
|
@@ -245,7 +264,7 @@ export class SettlementSmartContract
|
|
|
245
264
|
// to be the blockProofs publicoutput, is actually the current on-chain
|
|
246
265
|
// promisedMessageHash. It also checks the newPromisedMessagesHash to be
|
|
247
266
|
// a current sequencestate value
|
|
248
|
-
dispatchContract.updateMessagesHash(
|
|
267
|
+
await dispatchContract.updateMessagesHash(
|
|
249
268
|
promisedMessagesHash,
|
|
250
269
|
newPromisedMessagesHash
|
|
251
270
|
);
|
|
@@ -254,9 +273,9 @@ export class SettlementSmartContract
|
|
|
254
273
|
}
|
|
255
274
|
|
|
256
275
|
@method
|
|
257
|
-
public rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch) {
|
|
258
|
-
let counter = this.outgoingMessageCursor.
|
|
259
|
-
const stateRoot = this.stateRoot.
|
|
276
|
+
public async rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch) {
|
|
277
|
+
let counter = this.outgoingMessageCursor.getAndRequireEquals();
|
|
278
|
+
const stateRoot = this.stateRoot.getAndRequireEquals();
|
|
260
279
|
|
|
261
280
|
const [withdrawalModule, withdrawalStateName] =
|
|
262
281
|
SettlementSmartContract.args.withdrawalStatePath;
|
|
@@ -282,13 +301,13 @@ export class SettlementSmartContract
|
|
|
282
301
|
const { address, amount } = args.value;
|
|
283
302
|
const isDummy = address.equals(this.address);
|
|
284
303
|
|
|
285
|
-
const tokenAu = this.
|
|
286
|
-
const isNewAccount = tokenAu.account.isNew.
|
|
304
|
+
const tokenAu = this.internal.mint({ address, amount });
|
|
305
|
+
const isNewAccount = tokenAu.account.isNew.getAndRequireEquals();
|
|
287
306
|
tokenAu.body.balanceChange.magnitude =
|
|
288
307
|
tokenAu.body.balanceChange.magnitude.sub(
|
|
289
308
|
Provable.if(
|
|
290
309
|
isNewAccount,
|
|
291
|
-
Mina.
|
|
310
|
+
Mina.getNetworkConstants().accountCreationFee.toConstant(),
|
|
292
311
|
UInt64.zero
|
|
293
312
|
)
|
|
294
313
|
);
|
|
@@ -300,13 +319,13 @@ export class SettlementSmartContract
|
|
|
300
319
|
counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
|
|
301
320
|
}
|
|
302
321
|
|
|
303
|
-
this.balance.subInPlace(UInt64.
|
|
322
|
+
this.balance.subInPlace(UInt64.Unsafe.fromField(accountCreationFeePaid));
|
|
304
323
|
|
|
305
324
|
this.outgoingMessageCursor.set(counter);
|
|
306
325
|
}
|
|
307
326
|
|
|
308
327
|
@method
|
|
309
|
-
public redeem(additionUpdate: AccountUpdate) {
|
|
328
|
+
public async redeem(additionUpdate: AccountUpdate) {
|
|
310
329
|
additionUpdate.body.tokenId.assertEquals(
|
|
311
330
|
TokenId.default,
|
|
312
331
|
"Tokenid not default token"
|
|
@@ -317,7 +336,7 @@ export class SettlementSmartContract
|
|
|
317
336
|
const amount = additionUpdate.body.balanceChange.magnitude;
|
|
318
337
|
|
|
319
338
|
// Burn tokens
|
|
320
|
-
this.
|
|
339
|
+
this.internal.burn({
|
|
321
340
|
address: additionUpdate.publicKey,
|
|
322
341
|
amount,
|
|
323
342
|
});
|
|
@@ -327,3 +346,5 @@ export class SettlementSmartContract
|
|
|
327
346
|
this.balance.subInPlace(amount);
|
|
328
347
|
}
|
|
329
348
|
}
|
|
349
|
+
|
|
350
|
+
/* eslint-enable @typescript-eslint/lines-between-class-members */
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Field, PublicKey, UInt32 } from "o1js";
|
|
2
2
|
|
|
3
|
-
import type { BlockProof } from "../../prover/block/BlockProver";
|
|
4
3
|
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
5
4
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
6
|
-
|
|
5
|
+
import type { BlockProof } from "../../prover/block/BlockProver";
|
|
7
6
|
import type { SettlementSmartContract } from "../contracts/SettlementSmartContract";
|
|
8
7
|
|
|
9
8
|
export type SettlementStateRecord = {
|
|
@@ -25,10 +24,10 @@ export type SettlementHookInputs = {
|
|
|
25
24
|
};
|
|
26
25
|
|
|
27
26
|
export abstract class ProvableSettlementHook<
|
|
28
|
-
Config
|
|
27
|
+
Config,
|
|
29
28
|
> extends ProtocolModule<Config> {
|
|
30
29
|
public abstract beforeSettlement(
|
|
31
30
|
smartContract: SettlementSmartContract,
|
|
32
31
|
inputs: SettlementHookInputs
|
|
33
|
-
): void
|
|
32
|
+
): Promise<void>;
|
|
34
33
|
}
|
|
@@ -10,8 +10,9 @@ type NetworkStateSettlementModuleConfig = {
|
|
|
10
10
|
blocksPerL1Block: UInt64;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
13
14
|
export class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
|
|
14
|
-
public beforeSettlement(
|
|
15
|
+
public async beforeSettlement(
|
|
15
16
|
smartContract: SettlementSmartContract,
|
|
16
17
|
{
|
|
17
18
|
blockProof,
|
|
@@ -20,7 +21,7 @@ export class NetworkStateSettlementModule extends ProvableSettlementHook<Network
|
|
|
20
21
|
contractState,
|
|
21
22
|
currentL1Block,
|
|
22
23
|
}: SettlementHookInputs
|
|
23
|
-
)
|
|
24
|
+
) {
|
|
24
25
|
const { lastSettlementL1Block } = contractState;
|
|
25
26
|
|
|
26
27
|
const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
|
|
@@ -37,3 +38,5 @@ export class NetworkStateSettlementModule extends ProvableSettlementHook<Network
|
|
|
37
38
|
// TODO Check within bounds efficiently
|
|
38
39
|
}
|
|
39
40
|
}
|
|
41
|
+
|
|
42
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
package/src/state/State.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mixin } from "ts-mixer";
|
|
2
|
-
import { Bool, Field, Provable, type FlexibleProvablePure } from "o1js";
|
|
2
|
+
import { Bool, Field, Provable, type FlexibleProvablePure, Struct } from "o1js";
|
|
3
3
|
import { container } from "tsyringe";
|
|
4
4
|
import { dummyValue } from "@proto-kit/common";
|
|
5
5
|
|
|
@@ -54,6 +54,11 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
54
54
|
super();
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
private stateType = class StateType extends Struct({
|
|
58
|
+
value: this.valueType,
|
|
59
|
+
isSome: Bool,
|
|
60
|
+
}) {};
|
|
61
|
+
|
|
57
62
|
/**
|
|
58
63
|
* Returns the state that is currently the current state tree
|
|
59
64
|
* value: The value-fields, or if not state was found, dummy values
|
|
@@ -61,7 +66,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
61
66
|
* (Basically, whether the value-fields are dummy values or actual values
|
|
62
67
|
* @private
|
|
63
68
|
*/
|
|
64
|
-
private getState(): { value: Value; isSome: Bool } {
|
|
69
|
+
private async getState(): Promise<{ value: Value; isSome: Bool }> {
|
|
65
70
|
this.hasStateServiceOrFail();
|
|
66
71
|
this.hasPathOrFail();
|
|
67
72
|
|
|
@@ -71,6 +76,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
71
76
|
.resolve(RuntimeMethodExecutionContext)
|
|
72
77
|
.current().result;
|
|
73
78
|
|
|
79
|
+
// TODO Use Stateservice for this
|
|
74
80
|
// First try to find a match inside already created stateTransitions
|
|
75
81
|
let previousMutatingTransitions: StateTransition<any>[] = [];
|
|
76
82
|
previousMutatingTransitions = stateTransitions.filter((transition) =>
|
|
@@ -89,7 +95,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
89
95
|
}
|
|
90
96
|
|
|
91
97
|
// If the value is still undefined, look it up in the stateService
|
|
92
|
-
const fields = stateServiceProvider.stateService.get(path);
|
|
98
|
+
const fields = await stateServiceProvider.stateService.get(path);
|
|
93
99
|
if (fields) {
|
|
94
100
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
95
101
|
value = valueType.fromFields(fields) as Value;
|
|
@@ -107,12 +113,13 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
107
113
|
*
|
|
108
114
|
* @returns Optional value of the current state
|
|
109
115
|
*/
|
|
110
|
-
private witnessFromState() {
|
|
116
|
+
private async witnessFromState() {
|
|
111
117
|
// get the value from storage, or return a dummy value instead
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
118
|
+
// also check if the value exists in the storage or not
|
|
119
|
+
const { value, isSome } = await Provable.witnessAsync(
|
|
120
|
+
this.stateType,
|
|
121
|
+
async () => await this.getState()
|
|
122
|
+
);
|
|
116
123
|
|
|
117
124
|
return Option.from(isSome, value, this.valueType);
|
|
118
125
|
}
|
|
@@ -123,8 +130,8 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
123
130
|
*
|
|
124
131
|
* @returns Option representation of the current state.
|
|
125
132
|
*/
|
|
126
|
-
public get(): Option<Value
|
|
127
|
-
const option = this.witnessFromState();
|
|
133
|
+
public async get(): Promise<Option<Value>> {
|
|
134
|
+
const option = await this.witnessFromState();
|
|
128
135
|
|
|
129
136
|
this.hasPathOrFail();
|
|
130
137
|
|
|
@@ -148,9 +155,9 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
148
155
|
*
|
|
149
156
|
* @param value - Value to be set as the current state
|
|
150
157
|
*/
|
|
151
|
-
public set(value: Value) {
|
|
158
|
+
public async set(value: Value) {
|
|
152
159
|
// link the transition to the current state
|
|
153
|
-
const fromOption = this.witnessFromState();
|
|
160
|
+
const fromOption = await this.witnessFromState();
|
|
154
161
|
const toOption = Option.fromValue(value, this.valueType);
|
|
155
162
|
|
|
156
163
|
this.hasPathOrFail();
|