@proto-kit/protocol 0.1.1-develop.600 → 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 +15 -9
- 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 +17 -0
- 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 +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -8
- package/dist/model/MethodPublicOutput.d.ts +68 -34
- package/dist/model/MethodPublicOutput.d.ts.map +1 -1
- package/dist/model/Option.d.ts +39 -19
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +6 -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/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 +51 -14
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransition.js +3 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- 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/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 +14 -20
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +13 -27
- 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 +4 -2
- 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 +55 -45
- 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/accummulators/BlockHashMerkleTree.js +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 +10 -9
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +18 -22
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
- 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/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 +40 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +71 -0
- 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.d.ts +12 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/{hooks/TransactionFeeHook.js → settlement/contracts/DispatchContractProtocolModule.js} +17 -21
- 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/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 +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 +42 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.js +246 -0
- package/dist/settlement/messages/Deposit.d.ts +64 -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 +189 -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 +65 -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 +4 -2
- package/dist/state/State.d.ts +4 -3
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +18 -12
- 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 +11 -5
- 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 +55 -4
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +6 -6
- 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 +2 -2
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableHashList.d.ts +4 -4
- 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/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/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +13 -9
- package/src/{blockmodules → hooks}/BlockHeightHook.ts +3 -4
- package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +4 -4
- package/src/{blockmodules → hooks}/NoopBlockHook.ts +6 -5
- package/src/{blockmodules → hooks}/NoopSettlementHook.ts +3 -4
- package/src/{blockmodules → hooks}/NoopTransactionHook.ts +5 -1
- package/src/index.ts +18 -8
- package/src/model/MethodPublicOutput.ts +2 -2
- package/src/model/Option.ts +21 -1
- package/src/model/Path.ts +1 -3
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +9 -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 +34 -48
- package/src/protocol/ProtocolEnvironment.ts +7 -6
- package/src/protocol/ProtocolModule.ts +8 -4
- 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 +98 -63
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +2 -2
- package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
- package/src/prover/statetransition/StateTransitionProver.ts +26 -28
- package/src/settlement/ContractModule.ts +24 -0
- package/src/settlement/SettlementContractModule.ts +132 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
- package/src/settlement/contracts/SettlementSmartContract.ts +350 -0
- package/src/settlement/messages/Deposit.ts +6 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
- package/src/settlement/messages/Withdrawal.ts +14 -0
- package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +9 -13
- package/src/settlement/modules/NetworkStateSettlementModule.ts +8 -5
- package/src/state/State.ts +21 -13
- 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 +13 -7
- package/src/state/context/RuntimeMethodExecutionContext.ts +13 -7
- package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
- package/src/state/protocol/ProtocolState.ts +1 -4
- package/src/utils/MinaPrefixedProvableHashList.ts +4 -3
- package/src/utils/PrefixedProvableHashList.ts +2 -2
- package/src/utils/ProvableHashList.ts +2 -2
- package/src/utils/ProvableReductionHashList.ts +68 -0
- package/src/utils/StateTransitionReductionList.ts +89 -0
- package/src/utils/utils.ts +4 -9
- package/test/BlockProver.test.ts +110 -128
- package/test/Protocol.test.ts +14 -21
- 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 +117 -0
- 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/src/blockmodules/SequenceStateTransactionModule.ts +0 -25
- package/src/model/Option.test.ts +0 -21
- package/src/settlement/SettlementContract.ts +0 -444
- package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
- package/test/Option.test.ts +0 -64
- package/tsconfig.test.json +0 -9
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
/* eslint-disable max-lines */
|
|
2
1
|
import {
|
|
3
2
|
Bool,
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Field,
|
|
4
|
+
Poseidon,
|
|
6
5
|
type Proof,
|
|
7
6
|
Provable,
|
|
8
|
-
SelfProof
|
|
7
|
+
SelfProof,
|
|
8
|
+
ZkProgram,
|
|
9
9
|
} from "o1js";
|
|
10
10
|
import { container, inject, injectable, injectAll } from "tsyringe";
|
|
11
11
|
import {
|
|
12
12
|
AreProofsEnabled,
|
|
13
|
-
hashWithPrefix,
|
|
14
13
|
PlainZkProgram,
|
|
15
14
|
provableMethod,
|
|
16
15
|
WithZkProgrammable,
|
|
@@ -35,7 +34,11 @@ import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethod
|
|
|
35
34
|
import { ProvableBlockHook } from "../../protocol/ProvableBlockHook";
|
|
36
35
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
37
36
|
import { SignedTransaction } from "../../model/transaction/SignedTransaction";
|
|
38
|
-
import {
|
|
37
|
+
import {
|
|
38
|
+
MinaActions,
|
|
39
|
+
MinaActionsHashList,
|
|
40
|
+
} from "../../utils/MinaPrefixedProvableHashList";
|
|
41
|
+
import { StateTransitionReductionList } from "../../utils/StateTransitionReductionList";
|
|
39
42
|
|
|
40
43
|
import {
|
|
41
44
|
BlockProvable,
|
|
@@ -118,7 +121,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
118
121
|
BlockProverPublicOutput
|
|
119
122
|
> {
|
|
120
123
|
public constructor(
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
122
124
|
private readonly prover: BlockProver,
|
|
123
125
|
public readonly stateTransitionProver: ZkProgrammable<
|
|
124
126
|
StateTransitionProverPublicInput,
|
|
@@ -145,7 +147,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
145
147
|
* @param executionData
|
|
146
148
|
* @returns The new BlockProver-state to be used as public output
|
|
147
149
|
*/
|
|
148
|
-
public applyTransaction(
|
|
150
|
+
public async applyTransaction(
|
|
149
151
|
state: BlockProverState,
|
|
150
152
|
stateTransitionProof: Proof<
|
|
151
153
|
StateTransitionProverPublicInput,
|
|
@@ -153,10 +155,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
153
155
|
>,
|
|
154
156
|
runtimeProof: RuntimeProof,
|
|
155
157
|
executionData: BlockProverExecutionData
|
|
156
|
-
): BlockProverState {
|
|
158
|
+
): Promise<BlockProverState> {
|
|
157
159
|
const { transaction, networkState, signature } = executionData;
|
|
158
160
|
|
|
159
|
-
const isMessage = runtimeProof.publicOutput
|
|
161
|
+
const { isMessage } = runtimeProof.publicOutput;
|
|
160
162
|
|
|
161
163
|
runtimeProof.verify();
|
|
162
164
|
stateTransitionProof.verify();
|
|
@@ -189,7 +191,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
189
191
|
);
|
|
190
192
|
|
|
191
193
|
// Apply protocol state transitions
|
|
192
|
-
this.assertProtocolTransitions(
|
|
194
|
+
await this.assertProtocolTransitions(
|
|
193
195
|
stateTransitionProof,
|
|
194
196
|
executionData,
|
|
195
197
|
runtimeProof
|
|
@@ -235,10 +237,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
235
237
|
return stateTo;
|
|
236
238
|
}
|
|
237
239
|
|
|
238
|
-
// eslint-disable-next-line
|
|
240
|
+
// eslint-disable-next-line max-len
|
|
239
241
|
// TODO How does this interact with the RuntimeMethodExecutionContext when executing runtimemethods?
|
|
240
242
|
|
|
241
|
-
public assertProtocolTransitions(
|
|
243
|
+
public async assertProtocolTransitions(
|
|
242
244
|
stateTransitionProof: Proof<
|
|
243
245
|
StateTransitionProverPublicInput,
|
|
244
246
|
StateTransitionProverPublicOutput
|
|
@@ -259,9 +261,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
259
261
|
});
|
|
260
262
|
executionContext.beforeMethod("", "", []);
|
|
261
263
|
|
|
262
|
-
this.transactionHooks
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
for (const module of this.transactionHooks) {
|
|
265
|
+
// eslint-disable-next-line no-await-in-loop
|
|
266
|
+
await module.onTransaction(executionData);
|
|
267
|
+
}
|
|
265
268
|
|
|
266
269
|
executionContext.afterMethod();
|
|
267
270
|
|
|
@@ -274,7 +277,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
274
277
|
transition.toProvable()
|
|
275
278
|
);
|
|
276
279
|
|
|
277
|
-
const hashList = new
|
|
280
|
+
const hashList = new StateTransitionReductionList(
|
|
278
281
|
ProvableStateTransition,
|
|
279
282
|
stateTransitionProof.publicInput.protocolTransitionsHash
|
|
280
283
|
);
|
|
@@ -289,38 +292,38 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
289
292
|
);
|
|
290
293
|
}
|
|
291
294
|
|
|
292
|
-
private executeBlockHooks(
|
|
295
|
+
private async executeBlockHooks(
|
|
293
296
|
state: BlockProverState,
|
|
294
297
|
inputNetworkState: NetworkState,
|
|
295
298
|
type: "afterBlock" | "beforeBlock"
|
|
296
|
-
): {
|
|
299
|
+
): Promise<{
|
|
297
300
|
networkState: NetworkState;
|
|
298
301
|
stateTransitions: StateTransition<unknown>[];
|
|
299
|
-
} {
|
|
302
|
+
}> {
|
|
300
303
|
const executionContext = container.resolve(RuntimeMethodExecutionContext);
|
|
301
304
|
executionContext.clear();
|
|
302
305
|
executionContext.beforeMethod("", "", []);
|
|
303
306
|
|
|
304
|
-
const resultingNetworkState = this.blockHooks.reduce<
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
);
|
|
307
|
+
const resultingNetworkState = await this.blockHooks.reduce<
|
|
308
|
+
Promise<NetworkState>
|
|
309
|
+
>(async (networkStatePromise, blockHook) => {
|
|
310
|
+
const networkState = await networkStatePromise;
|
|
311
|
+
// Setup context for potential calls to runtime methods.
|
|
312
|
+
// With the special case that we set the new networkstate for every hook
|
|
313
|
+
// We also have to put in a dummy transaction for network.transaction
|
|
314
|
+
executionContext.setup({
|
|
315
|
+
transaction: RuntimeTransaction.dummyTransaction(),
|
|
316
|
+
networkState,
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
if (type === "beforeBlock") {
|
|
320
|
+
return await blockHook.beforeBlock(networkState, state);
|
|
321
|
+
}
|
|
322
|
+
if (type === "afterBlock") {
|
|
323
|
+
return await blockHook.afterBlock(networkState, state);
|
|
324
|
+
}
|
|
325
|
+
throw new Error("Unreachable");
|
|
326
|
+
}, Promise.resolve(inputNetworkState));
|
|
324
327
|
|
|
325
328
|
executionContext.afterMethod();
|
|
326
329
|
|
|
@@ -356,7 +359,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
356
359
|
stateTo.transactionsHash = transactionList.commitment;
|
|
357
360
|
|
|
358
361
|
// Append tx to eternal transaction list
|
|
359
|
-
// eslint-disable-next-line no-warning-comments
|
|
360
362
|
// TODO Change that to the a sequence-state compatible transaction struct
|
|
361
363
|
const eternalTransactionList = new DefaultProvableHashList(
|
|
362
364
|
Field,
|
|
@@ -369,7 +371,9 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
369
371
|
// Append tx to incomingMessagesHash
|
|
370
372
|
const actionHash = MinaActions.actionHash(transaction.hashData());
|
|
371
373
|
|
|
372
|
-
const incomingMessagesList = new MinaActionsHashList(
|
|
374
|
+
const incomingMessagesList = new MinaActionsHashList(
|
|
375
|
+
state.incomingMessagesHash
|
|
376
|
+
);
|
|
373
377
|
incomingMessagesList.pushIf(actionHash, isMessage);
|
|
374
378
|
|
|
375
379
|
stateTo.incomingMessagesHash = incomingMessagesList.commitment;
|
|
@@ -378,12 +382,12 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
378
382
|
}
|
|
379
383
|
|
|
380
384
|
@provableMethod()
|
|
381
|
-
public proveTransaction(
|
|
385
|
+
public async proveTransaction(
|
|
382
386
|
publicInput: BlockProverPublicInput,
|
|
383
387
|
stateProof: StateTransitionProof,
|
|
384
388
|
runtimeProof: RuntimeProof,
|
|
385
389
|
executionData: BlockProverExecutionData
|
|
386
|
-
): BlockProverPublicOutput {
|
|
390
|
+
): Promise<BlockProverPublicOutput> {
|
|
387
391
|
const state: BlockProverState = {
|
|
388
392
|
...publicInput,
|
|
389
393
|
};
|
|
@@ -399,7 +403,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
399
403
|
executionData.transaction
|
|
400
404
|
);
|
|
401
405
|
|
|
402
|
-
const stateTo = this.applyTransaction(
|
|
406
|
+
const stateTo = await this.applyTransaction(
|
|
403
407
|
bundleInclusionState,
|
|
404
408
|
stateProof,
|
|
405
409
|
runtimeProof,
|
|
@@ -434,13 +438,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
434
438
|
}
|
|
435
439
|
|
|
436
440
|
@provableMethod()
|
|
437
|
-
public proveBlock(
|
|
441
|
+
public async proveBlock(
|
|
438
442
|
publicInput: BlockProverPublicInput,
|
|
439
443
|
networkState: NetworkState,
|
|
440
444
|
blockWitness: BlockHashMerkleTreeWitness,
|
|
441
445
|
stateTransitionProof: StateTransitionProof,
|
|
442
446
|
transactionProof: BlockProverProof
|
|
443
|
-
): BlockProverPublicOutput {
|
|
447
|
+
): Promise<BlockProverPublicOutput> {
|
|
444
448
|
const state: BlockProverState = {
|
|
445
449
|
...publicInput,
|
|
446
450
|
};
|
|
@@ -500,13 +504,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
500
504
|
transactionProof.verifyIf(verifyTransactionProof);
|
|
501
505
|
|
|
502
506
|
// 2. Execute beforeBlock hooks
|
|
503
|
-
const beforeBlockResult = this.executeBlockHooks(
|
|
507
|
+
const beforeBlockResult = await this.executeBlockHooks(
|
|
504
508
|
state,
|
|
505
509
|
networkState,
|
|
506
510
|
"beforeBlock"
|
|
507
511
|
);
|
|
508
512
|
|
|
509
|
-
const beforeBlockHashList = new
|
|
513
|
+
const beforeBlockHashList = new StateTransitionReductionList(
|
|
510
514
|
ProvableStateTransition
|
|
511
515
|
);
|
|
512
516
|
beforeBlockResult.stateTransitions.forEach((st) => {
|
|
@@ -548,13 +552,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
548
552
|
// 5. Execute afterBlock hooks
|
|
549
553
|
this.assertSTProofInput(stateTransitionProof, state.stateRoot);
|
|
550
554
|
|
|
551
|
-
const afterBlockResult = this.executeBlockHooks(
|
|
555
|
+
const afterBlockResult = await this.executeBlockHooks(
|
|
552
556
|
state,
|
|
553
557
|
beforeBlockResult.networkState,
|
|
554
558
|
"afterBlock"
|
|
555
559
|
);
|
|
556
560
|
|
|
557
|
-
const afterBlockHashList = new
|
|
561
|
+
const afterBlockHashList = new StateTransitionReductionList(
|
|
558
562
|
ProvableStateTransition
|
|
559
563
|
);
|
|
560
564
|
afterBlockResult.stateTransitions.forEach((st) => {
|
|
@@ -568,7 +572,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
568
572
|
afterBlockHashList.commitment,
|
|
569
573
|
"STProof from-ST-hash not matching generated ST-hash from afterBlock hooks"
|
|
570
574
|
);
|
|
571
|
-
state.stateRoot =
|
|
575
|
+
state.stateRoot = Provable.if(
|
|
576
|
+
stsEmitted,
|
|
577
|
+
stateTransitionProof.publicOutput.stateRoot,
|
|
578
|
+
state.stateRoot
|
|
579
|
+
);
|
|
572
580
|
|
|
573
581
|
// 6. Close block
|
|
574
582
|
|
|
@@ -598,11 +606,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
598
606
|
}
|
|
599
607
|
|
|
600
608
|
@provableMethod()
|
|
601
|
-
public merge(
|
|
609
|
+
public async merge(
|
|
602
610
|
publicInput: BlockProverPublicInput,
|
|
603
611
|
proof1: BlockProverProof,
|
|
604
612
|
proof2: BlockProverProof
|
|
605
|
-
): BlockProverPublicOutput {
|
|
613
|
+
): Promise<BlockProverPublicOutput> {
|
|
606
614
|
proof1.verify();
|
|
607
615
|
proof2.verify();
|
|
608
616
|
|
|
@@ -744,9 +752,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
744
752
|
const RuntimeProofClass = runtime.zkProgram.Proof;
|
|
745
753
|
|
|
746
754
|
const proveTransaction = prover.proveTransaction.bind(prover);
|
|
755
|
+
const proveBlock = prover.proveBlock.bind(prover);
|
|
747
756
|
const merge = prover.merge.bind(prover);
|
|
748
757
|
|
|
749
|
-
const program =
|
|
758
|
+
const program = ZkProgram({
|
|
759
|
+
name: "BlockProver",
|
|
750
760
|
publicInput: BlockProverPublicInput,
|
|
751
761
|
publicOutput: BlockProverPublicOutput,
|
|
752
762
|
|
|
@@ -758,13 +768,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
758
768
|
BlockProverExecutionData,
|
|
759
769
|
],
|
|
760
770
|
|
|
761
|
-
method(
|
|
771
|
+
async method(
|
|
762
772
|
publicInput: BlockProverPublicInput,
|
|
763
773
|
stateProof: StateTransitionProof,
|
|
764
774
|
appProof: Proof<void, MethodPublicOutput>,
|
|
765
775
|
executionData: BlockProverExecutionData
|
|
766
776
|
) {
|
|
767
|
-
return proveTransaction(
|
|
777
|
+
return await proveTransaction(
|
|
768
778
|
publicInput,
|
|
769
779
|
stateProof,
|
|
770
780
|
appProof,
|
|
@@ -773,18 +783,42 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
773
783
|
},
|
|
774
784
|
},
|
|
775
785
|
|
|
786
|
+
proveBlock: {
|
|
787
|
+
privateInputs: [
|
|
788
|
+
NetworkState,
|
|
789
|
+
BlockHashMerkleTreeWitness,
|
|
790
|
+
StateTransitionProofClass,
|
|
791
|
+
SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
792
|
+
],
|
|
793
|
+
async method(
|
|
794
|
+
publicInput: BlockProverPublicInput,
|
|
795
|
+
networkState: NetworkState,
|
|
796
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
797
|
+
stateTransitionProof: StateTransitionProof,
|
|
798
|
+
transactionProof: BlockProverProof
|
|
799
|
+
) {
|
|
800
|
+
return await proveBlock(
|
|
801
|
+
publicInput,
|
|
802
|
+
networkState,
|
|
803
|
+
blockWitness,
|
|
804
|
+
stateTransitionProof,
|
|
805
|
+
transactionProof
|
|
806
|
+
);
|
|
807
|
+
},
|
|
808
|
+
},
|
|
809
|
+
|
|
776
810
|
merge: {
|
|
777
811
|
privateInputs: [
|
|
778
812
|
SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
779
813
|
SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
780
814
|
],
|
|
781
815
|
|
|
782
|
-
method(
|
|
816
|
+
async method(
|
|
783
817
|
publicInput: BlockProverPublicInput,
|
|
784
818
|
proof1: BlockProverProof,
|
|
785
819
|
proof2: BlockProverProof
|
|
786
820
|
) {
|
|
787
|
-
return merge(publicInput, proof1, proof2);
|
|
821
|
+
return await merge(publicInput, proof1, proof2);
|
|
788
822
|
},
|
|
789
823
|
},
|
|
790
824
|
},
|
|
@@ -795,11 +829,12 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
795
829
|
merge: program.merge,
|
|
796
830
|
};
|
|
797
831
|
|
|
798
|
-
const SelfProofClass =
|
|
832
|
+
const SelfProofClass = ZkProgram.Proof(program);
|
|
799
833
|
|
|
800
834
|
return {
|
|
801
835
|
compile: program.compile.bind(program),
|
|
802
836
|
verify: program.verify.bind(program),
|
|
837
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
803
838
|
Proof: SelfProofClass,
|
|
804
839
|
methods,
|
|
805
840
|
};
|
|
@@ -843,7 +878,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
843
878
|
stateProof: StateTransitionProof,
|
|
844
879
|
appProof: Proof<void, MethodPublicOutput>,
|
|
845
880
|
executionData: BlockProverExecutionData
|
|
846
|
-
): BlockProverPublicOutput {
|
|
881
|
+
): Promise<BlockProverPublicOutput> {
|
|
847
882
|
return this.zkProgrammable.proveTransaction(
|
|
848
883
|
publicInput,
|
|
849
884
|
stateProof,
|
|
@@ -858,7 +893,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
858
893
|
blockWitness: BlockHashMerkleTreeWitness,
|
|
859
894
|
stateTransitionProof: StateTransitionProof,
|
|
860
895
|
transactionProof: BlockProverProof
|
|
861
|
-
): BlockProverPublicOutput {
|
|
896
|
+
): Promise<BlockProverPublicOutput> {
|
|
862
897
|
return this.zkProgrammable.proveBlock(
|
|
863
898
|
publicInput,
|
|
864
899
|
networkState,
|
|
@@ -872,7 +907,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
872
907
|
publicInput: BlockProverPublicInput,
|
|
873
908
|
proof1: BlockProverProof,
|
|
874
909
|
proof2: BlockProverProof
|
|
875
|
-
): BlockProverPublicOutput {
|
|
910
|
+
): Promise<BlockProverPublicOutput> {
|
|
876
911
|
return this.zkProgrammable.merge(publicInput, proof1, proof2);
|
|
877
912
|
}
|
|
878
913
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createMerkleTree } from "@proto-kit/common";
|
|
2
|
-
import { Bool, Field, Poseidon,
|
|
2
|
+
import { Bool, Field, Poseidon, 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({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Field, Proof, Struct } from "o1js";
|
|
2
|
-
import { WithZkProgrammable
|
|
2
|
+
import { WithZkProgrammable } from "@proto-kit/common";
|
|
3
3
|
|
|
4
4
|
import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
|
|
5
5
|
|
|
@@ -34,11 +34,11 @@ export interface StateTransitionProvable
|
|
|
34
34
|
runBatch: (
|
|
35
35
|
publicInput: StateTransitionProverPublicInput,
|
|
36
36
|
batch: StateTransitionProvableBatch
|
|
37
|
-
) => StateTransitionProverPublicOutput
|
|
37
|
+
) => Promise<StateTransitionProverPublicOutput>;
|
|
38
38
|
|
|
39
39
|
merge: (
|
|
40
40
|
publicInput: StateTransitionProverPublicInput,
|
|
41
41
|
proof1: StateTransitionProof,
|
|
42
42
|
proof2: StateTransitionProof
|
|
43
|
-
) => StateTransitionProverPublicOutput
|
|
43
|
+
) => Promise<StateTransitionProverPublicOutput>;
|
|
44
44
|
}
|
|
@@ -1,34 +1,33 @@
|
|
|
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
32
|
|
|
34
33
|
const errors = {
|
|
@@ -65,7 +64,6 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
65
64
|
StateTransitionProverPublicOutput
|
|
66
65
|
> {
|
|
67
66
|
public constructor(
|
|
68
|
-
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
69
67
|
private readonly stateTransitionProver: StateTransitionProver,
|
|
70
68
|
public readonly witnessProviderReference: StateTransitionWitnessProviderReference
|
|
71
69
|
) {
|
|
@@ -80,11 +78,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
80
78
|
StateTransitionProverPublicInput,
|
|
81
79
|
StateTransitionProverPublicOutput
|
|
82
80
|
> {
|
|
83
|
-
// eslint-disable-next-line max-len
|
|
84
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this,unicorn/no-this-assignment
|
|
85
81
|
const instance = this;
|
|
86
82
|
|
|
87
|
-
const program =
|
|
83
|
+
const program = ZkProgram({
|
|
84
|
+
name: "StateTransitionProver",
|
|
88
85
|
publicInput: StateTransitionProverPublicInput,
|
|
89
86
|
publicOutput: StateTransitionProverPublicOutput,
|
|
90
87
|
|
|
@@ -92,11 +89,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
92
89
|
proveBatch: {
|
|
93
90
|
privateInputs: [StateTransitionProvableBatch],
|
|
94
91
|
|
|
95
|
-
method(
|
|
92
|
+
async method(
|
|
96
93
|
publicInput: StateTransitionProverPublicInput,
|
|
97
94
|
batch: StateTransitionProvableBatch
|
|
98
95
|
) {
|
|
99
|
-
return instance.runBatch(publicInput, batch);
|
|
96
|
+
return await instance.runBatch(publicInput, batch);
|
|
100
97
|
},
|
|
101
98
|
},
|
|
102
99
|
|
|
@@ -106,12 +103,12 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
106
103
|
StateTransitionSelfProofClass,
|
|
107
104
|
],
|
|
108
105
|
|
|
109
|
-
method(
|
|
106
|
+
async method(
|
|
110
107
|
publicInput: StateTransitionProverPublicInput,
|
|
111
108
|
proof1: StateTransitionProof,
|
|
112
109
|
proof2: StateTransitionProof
|
|
113
110
|
) {
|
|
114
|
-
return instance.merge(publicInput, proof1, proof2);
|
|
111
|
+
return await instance.merge(publicInput, proof1, proof2);
|
|
115
112
|
},
|
|
116
113
|
},
|
|
117
114
|
},
|
|
@@ -122,11 +119,12 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
122
119
|
merge: program.merge.bind(program),
|
|
123
120
|
};
|
|
124
121
|
|
|
125
|
-
const SelfProofClass =
|
|
122
|
+
const SelfProofClass = ZkProgram.Proof(program);
|
|
126
123
|
|
|
127
124
|
return {
|
|
128
125
|
compile: program.compile.bind(program),
|
|
129
126
|
verify: program.verify.bind(program),
|
|
127
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
130
128
|
Proof: SelfProofClass,
|
|
131
129
|
methods,
|
|
132
130
|
};
|
|
@@ -240,10 +238,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
240
238
|
* Applies a whole batch of StateTransitions at once
|
|
241
239
|
*/
|
|
242
240
|
@provableMethod()
|
|
243
|
-
public runBatch(
|
|
241
|
+
public async runBatch(
|
|
244
242
|
publicInput: StateTransitionProverPublicInput,
|
|
245
243
|
batch: StateTransitionProvableBatch
|
|
246
|
-
): StateTransitionProverPublicOutput {
|
|
244
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
247
245
|
const result = this.applyTransitions(
|
|
248
246
|
publicInput.stateRoot,
|
|
249
247
|
publicInput.protocolStateRoot,
|
|
@@ -261,11 +259,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
261
259
|
}
|
|
262
260
|
|
|
263
261
|
@provableMethod()
|
|
264
|
-
public merge(
|
|
262
|
+
public async merge(
|
|
265
263
|
publicInput: StateTransitionProverPublicInput,
|
|
266
264
|
proof1: StateTransitionProof,
|
|
267
265
|
proof2: StateTransitionProof
|
|
268
|
-
): StateTransitionProverPublicOutput {
|
|
266
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
269
267
|
proof1.verify();
|
|
270
268
|
proof2.verify();
|
|
271
269
|
|
|
@@ -339,9 +337,9 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
|
339
337
|
@injectable()
|
|
340
338
|
export class StateTransitionProver
|
|
341
339
|
extends ProtocolModule
|
|
342
|
-
implements StateTransitionProvable
|
|
340
|
+
implements StateTransitionProvable, StateTransitionProverType
|
|
343
341
|
{
|
|
344
|
-
public
|
|
342
|
+
public zkProgrammable: StateTransitionProverProgrammable;
|
|
345
343
|
|
|
346
344
|
public constructor(
|
|
347
345
|
// Injected
|
|
@@ -357,7 +355,7 @@ export class StateTransitionProver
|
|
|
357
355
|
public runBatch(
|
|
358
356
|
publicInput: StateTransitionProverPublicInput,
|
|
359
357
|
batch: StateTransitionProvableBatch
|
|
360
|
-
): StateTransitionProverPublicOutput {
|
|
358
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
361
359
|
return this.zkProgrammable.runBatch(publicInput, batch);
|
|
362
360
|
}
|
|
363
361
|
|
|
@@ -365,7 +363,7 @@ export class StateTransitionProver
|
|
|
365
363
|
publicInput: StateTransitionProverPublicInput,
|
|
366
364
|
proof1: StateTransitionProof,
|
|
367
365
|
proof2: StateTransitionProof
|
|
368
|
-
): StateTransitionProverPublicOutput {
|
|
366
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
369
367
|
return this.zkProgrammable.merge(publicInput, proof1, proof2);
|
|
370
368
|
}
|
|
371
369
|
}
|
|
@@ -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
|
+
}
|