@proto-kit/protocol 0.1.1-develop.211 → 0.1.1-develop.2137
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/Constants.js +1 -0
- package/dist/Constants.js.map +1 -0
- package/dist/hashing/mina-prefixes.d.ts +10 -0
- package/dist/hashing/mina-prefixes.d.ts.map +1 -0
- package/dist/hashing/mina-prefixes.js +10 -0
- package/dist/hashing/mina-prefixes.js.map +1 -0
- package/dist/hashing/protokit-prefixes.d.ts +10 -0
- package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
- package/dist/hashing/protokit-prefixes.js +24 -0
- package/dist/hashing/protokit-prefixes.js.map +1 -0
- package/dist/hooks/AccountStateHook.d.ts +56 -0
- package/dist/hooks/AccountStateHook.d.ts.map +1 -0
- package/dist/hooks/AccountStateHook.js +62 -0
- package/dist/hooks/AccountStateHook.js.map +1 -0
- package/dist/hooks/BlockHeightHook.d.ts +7 -0
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
- package/dist/hooks/BlockHeightHook.js +16 -0
- package/dist/hooks/BlockHeightHook.js.map +1 -0
- package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
- package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
- package/dist/hooks/LastStateRootBlockHook.js +16 -0
- package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
- package/dist/hooks/NoopBlockHook.d.ts +8 -0
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
- package/dist/hooks/NoopBlockHook.js +10 -0
- package/dist/hooks/NoopBlockHook.js.map +1 -0
- package/dist/hooks/NoopSettlementHook.d.ts +6 -0
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
- package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
- package/dist/hooks/NoopSettlementHook.js.map +1 -0
- package/dist/hooks/NoopTransactionHook.d.ts +6 -0
- package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
- package/dist/hooks/NoopTransactionHook.js +11 -0
- package/dist/hooks/NoopTransactionHook.js.map +1 -0
- package/dist/index.d.ts +51 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -13
- package/dist/index.js.map +1 -0
- package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
- package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
- package/dist/model/AppliedStateTransitionBatch.js +16 -0
- package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
- package/dist/model/MethodPublicOutput.d.ts +83 -28
- package/dist/model/MethodPublicOutput.d.ts.map +1 -1
- package/dist/model/MethodPublicOutput.js +4 -1
- package/dist/model/MethodPublicOutput.js.map +1 -0
- package/dist/model/Option.d.ts +66 -42
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +58 -45
- package/dist/model/Option.js.map +1 -0
- package/dist/model/Path.d.ts +4 -3
- package/dist/model/Path.d.ts.map +1 -1
- package/dist/model/Path.js +6 -5
- package/dist/model/Path.js.map +1 -0
- package/dist/model/RuntimeLike.d.ts +11 -0
- package/dist/model/RuntimeLike.d.ts.map +1 -0
- package/dist/model/RuntimeLike.js +2 -0
- package/dist/model/RuntimeLike.js.map +1 -0
- package/dist/model/StateTransition.d.ts +58 -18
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransition.js +13 -4
- package/dist/model/StateTransition.js.map +1 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +369 -54
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- package/dist/model/StateTransitionProvableBatch.js +74 -51
- package/dist/model/StateTransitionProvableBatch.js.map +1 -0
- package/dist/model/network/NetworkState.d.ts +105 -9
- package/dist/model/network/NetworkState.d.ts.map +1 -1
- package/dist/model/network/NetworkState.js +22 -2
- package/dist/model/network/NetworkState.js.map +1 -0
- package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
- package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
- package/dist/model/transaction/AuthorizedTransaction.js +39 -0
- package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
- package/dist/model/transaction/RuntimeTransaction.js +72 -11
- package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
- package/dist/model/transaction/SignedTransaction.d.ts +110 -0
- package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
- package/dist/model/transaction/SignedTransaction.js +34 -0
- package/dist/model/transaction/SignedTransaction.js.map +1 -0
- package/dist/model/transaction/ValueOption.d.ts +187 -0
- package/dist/model/transaction/ValueOption.d.ts.map +1 -0
- package/dist/model/transaction/ValueOption.js +25 -0
- package/dist/model/transaction/ValueOption.js.map +1 -0
- package/dist/protocol/Protocol.d.ts +45 -34
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +115 -57
- package/dist/protocol/Protocol.js.map +1 -0
- package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
- package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
- package/dist/protocol/ProtocolEnvironment.js +2 -0
- package/dist/protocol/ProtocolEnvironment.js.map +1 -0
- package/dist/protocol/ProtocolModule.d.ts +7 -6
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +10 -5
- package/dist/protocol/ProtocolModule.js.map +1 -0
- package/dist/protocol/ProvableBlockHook.d.ts +29 -0
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
- package/dist/protocol/ProvableBlockHook.js +20 -0
- package/dist/protocol/ProvableBlockHook.js.map +1 -0
- package/dist/protocol/ProvableTransactionHook.d.ts +32 -3
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
- package/dist/protocol/ProvableTransactionHook.js +25 -0
- package/dist/protocol/ProvableTransactionHook.js.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts +6 -1
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
- package/dist/protocol/TransitioningProtocolModule.js +6 -0
- package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
- package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
- package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
- package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
- package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
- package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
- package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
- package/dist/prover/accumulators/BlockHashList.js +97 -0
- package/dist/prover/accumulators/BlockHashList.js.map +1 -0
- package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
- package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
- package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
- package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
- package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
- package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
- package/dist/prover/accumulators/TransactionHashList.js +8 -0
- package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
- package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
- package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
- package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
- package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
- package/dist/prover/block/BlockProvable.d.ts +565 -96
- package/dist/prover/block/BlockProvable.d.ts.map +1 -1
- package/dist/prover/block/BlockProvable.js +196 -12
- package/dist/prover/block/BlockProvable.js.map +1 -0
- package/dist/prover/block/BlockProver.d.ts +45 -44
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +306 -143
- package/dist/prover/block/BlockProver.js.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
- package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -64
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProvable.js +10 -7
- package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +26 -24
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +159 -93
- package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
- package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
- package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
- package/dist/prover/transaction/TransactionProvable.js +87 -0
- package/dist/prover/transaction/TransactionProvable.js.map +1 -0
- package/dist/prover/transaction/TransactionProver.d.ts +68 -0
- package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
- package/dist/prover/transaction/TransactionProver.js +301 -0
- package/dist/prover/transaction/TransactionProver.js.map +1 -0
- package/dist/prover/utils.d.ts +19 -0
- package/dist/prover/utils.d.ts.map +1 -0
- package/dist/prover/utils.js +67 -0
- package/dist/prover/utils.js.map +1 -0
- package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
- package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
- package/dist/settlement/ContractArgsRegistry.js +58 -0
- package/dist/settlement/ContractArgsRegistry.js.map +1 -0
- package/dist/settlement/ContractModule.d.ts +16 -0
- package/dist/settlement/ContractModule.d.ts.map +1 -0
- package/dist/settlement/ContractModule.js +12 -0
- package/dist/settlement/ContractModule.js.map +1 -0
- package/dist/settlement/SettlementContractModule.d.ts +47 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +81 -0
- package/dist/settlement/SettlementContractModule.js.map +1 -0
- package/dist/settlement/contracts/BridgeContract.d.ts +114 -0
- package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContract.js +270 -0
- package/dist/settlement/contracts/BridgeContract.js.map +1 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
- package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
- package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
- package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
- package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
- package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
- package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
- package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
- package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
- package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
- package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
- package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
- package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
- package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
- package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
- package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
- package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
- package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
- package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
- package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
- package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
- package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
- package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
- package/dist/settlement/messages/Deposit.d.ts +77 -0
- package/dist/settlement/messages/Deposit.d.ts.map +1 -0
- package/dist/settlement/messages/Deposit.js +8 -0
- package/dist/settlement/messages/Deposit.js.map +1 -0
- package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
- package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessage.js +7 -0
- package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +588 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js +42 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
- package/dist/settlement/messages/Withdrawal.d.ts +2 -0
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
- package/dist/settlement/messages/Withdrawal.js +3 -0
- package/dist/settlement/messages/Withdrawal.js.map +1 -0
- package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +28 -0
- package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
- package/dist/settlement/modularity/OutgoingMessageProcessor.js +39 -0
- package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
- package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
- package/dist/settlement/modularity/types.d.ts +9 -0
- package/dist/settlement/modularity/types.d.ts.map +1 -0
- package/dist/settlement/modularity/types.js +2 -0
- package/dist/settlement/modularity/types.js.map +1 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
- package/dist/state/SimpleAsyncStateService.d.ts +6 -0
- package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
- package/dist/state/SimpleAsyncStateService.js +2 -0
- package/dist/state/SimpleAsyncStateService.js.map +1 -0
- package/dist/state/State.d.ts +13 -5
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +42 -17
- package/dist/state/State.js.map +1 -0
- package/dist/state/StateMap.d.ts +4 -4
- package/dist/state/StateMap.d.ts.map +1 -1
- package/dist/state/StateMap.js +5 -5
- package/dist/state/StateMap.js.map +1 -0
- package/dist/state/StateService.d.ts +4 -4
- package/dist/state/StateService.d.ts.map +1 -1
- package/dist/state/StateService.js +1 -0
- package/dist/state/StateService.js.map +1 -0
- package/dist/state/StateServiceProvider.d.ts +5 -7
- package/dist/state/StateServiceProvider.d.ts.map +1 -1
- package/dist/state/StateServiceProvider.js +18 -23
- package/dist/state/StateServiceProvider.js.map +1 -0
- package/dist/state/WitnessBlockContext.d.ts +5 -0
- package/dist/state/WitnessBlockContext.d.ts.map +1 -0
- package/dist/state/WitnessBlockContext.js +48 -0
- package/dist/state/WitnessBlockContext.js.map +1 -0
- package/dist/state/assert/assert.d.ts +2 -2
- package/dist/state/assert/assert.d.ts.map +1 -1
- package/dist/state/assert/assert.js +16 -6
- package/dist/state/assert/assert.js.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +137 -4
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +44 -11
- package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/TransitionMethodExecutionContext.js +1 -1
- package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
- package/dist/state/protocol/ProtocolState.d.ts +8 -2
- package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
- package/dist/state/protocol/ProtocolState.js +36 -20
- package/dist/state/protocol/ProtocolState.js.map +1 -0
- package/dist/utils/FieldOptions.d.ts +62 -0
- package/dist/utils/FieldOptions.d.ts.map +1 -0
- package/dist/utils/FieldOptions.js +13 -0
- package/dist/utils/FieldOptions.js.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
- package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/PrefixedProvableHashList.js +5 -1
- package/dist/utils/PrefixedProvableHashList.js.map +1 -0
- package/dist/utils/ProvableHashList.d.ts +27 -4
- package/dist/utils/ProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableHashList.js +51 -3
- package/dist/utils/ProvableHashList.js.map +1 -0
- package/dist/utils/ProvableReductionHashList.d.ts +18 -0
- package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
- package/dist/utils/ProvableReductionHashList.js +54 -0
- package/dist/utils/ProvableReductionHashList.js.map +1 -0
- package/dist/utils/StateTransitionReductionList.d.ts +11 -0
- package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
- package/dist/utils/StateTransitionReductionList.js +61 -0
- package/dist/utils/StateTransitionReductionList.js.map +1 -0
- package/dist/utils/utils.d.ts +11 -5
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +13 -13
- package/dist/utils/utils.js.map +1 -0
- package/jest.config.cjs +12 -1
- package/package.json +10 -10
- package/src/hashing/mina-prefixes.ts +10 -0
- package/src/hashing/protokit-prefixes.ts +37 -0
- package/src/hooks/AccountStateHook.ts +80 -0
- package/src/hooks/BlockHeightHook.ts +17 -0
- package/src/hooks/LastStateRootBlockHook.ts +25 -0
- package/src/hooks/NoopBlockHook.ts +24 -0
- package/src/hooks/NoopSettlementHook.ts +20 -0
- package/src/{blockmodules → hooks}/NoopTransactionHook.ts +9 -3
- package/src/index.ts +51 -13
- package/src/model/AppliedStateTransitionBatch.ts +16 -0
- package/src/model/MethodPublicOutput.ts +3 -1
- package/src/model/Option.ts +87 -57
- package/src/model/Path.ts +9 -5
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +19 -5
- package/src/model/StateTransitionProvableBatch.ts +94 -73
- package/src/model/Transaction.ts +3 -1
- package/src/model/network/NetworkState.ts +22 -2
- package/src/model/transaction/AuthorizedTransaction.ts +50 -0
- package/src/model/transaction/RuntimeTransaction.ts +86 -15
- package/src/model/transaction/ValueOption.ts +28 -0
- package/src/protocol/Protocol.ts +186 -116
- package/src/protocol/ProtocolEnvironment.ts +10 -0
- package/src/protocol/ProtocolModule.ts +18 -11
- package/src/protocol/ProvableBlockHook.ts +67 -0
- package/src/protocol/ProvableTransactionHook.ts +92 -3
- package/src/protocol/TransitioningProtocolModule.ts +8 -1
- package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
- package/src/prover/accumulators/BlockHashList.ts +117 -0
- package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
- package/src/prover/accumulators/TransactionHashList.ts +9 -0
- package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
- package/src/prover/block/BlockProvable.ts +360 -28
- package/src/prover/block/BlockProver.ts +668 -251
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
- package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
- package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
- package/src/prover/statetransition/StateTransitionProvable.ts +25 -20
- package/src/prover/statetransition/StateTransitionProver.ts +299 -168
- package/src/prover/transaction/TransactionProvable.ts +183 -0
- package/src/prover/transaction/TransactionProver.ts +561 -0
- package/src/prover/utils.ts +108 -0
- package/src/settlement/ContractArgsRegistry.ts +64 -0
- package/src/settlement/ContractModule.ts +31 -0
- package/src/settlement/SettlementContractModule.ts +150 -0
- package/src/settlement/contracts/BridgeContract.ts +383 -0
- package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
- package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
- package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
- package/src/settlement/contracts/TokenBridgeTree.ts +86 -0
- package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
- package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
- package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
- package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
- package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
- package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
- package/src/settlement/messages/Deposit.ts +7 -0
- package/src/settlement/messages/OutgoingMessage.ts +17 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +62 -0
- package/src/settlement/modularity/OutgoingMessageProcessor.ts +78 -0
- package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
- package/src/settlement/modularity/types.ts +23 -0
- package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
- package/src/state/State.ts +49 -19
- package/src/state/StateMap.ts +5 -6
- package/src/state/StateService.ts +5 -5
- package/src/state/StateServiceProvider.ts +18 -18
- package/src/state/WitnessBlockContext.ts +54 -0
- package/src/state/assert/assert.ts +18 -8
- package/src/state/context/RuntimeMethodExecutionContext.ts +68 -11
- package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
- package/src/state/protocol/ProtocolState.ts +61 -26
- package/src/utils/FieldOptions.ts +13 -0
- package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
- package/src/utils/PrefixedProvableHashList.ts +6 -2
- package/src/utils/ProvableHashList.ts +109 -4
- package/src/utils/ProvableReductionHashList.ts +77 -0
- package/src/utils/utils.ts +21 -16
- package/test/BlockProver.test.ts +124 -140
- package/test/Protocol.test.ts +14 -21
- package/test/State.test.ts +45 -0
- package/test/StateTransition.test.ts +57 -65
- package/test/TestingProtocol.ts +36 -0
- package/test/compiling/types.ts +28 -0
- package/test/model/Option.test.ts +72 -0
- package/test/model/StateTransitionProvableBatch.test.ts +137 -0
- package/test/modularity/types.ts +35 -0
- package/test/prover/block/BlockProver.test.ts +18 -0
- package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
- package/{src → test}/state/assert/assert.test.ts +10 -3
- package/test/tsconfig.json +7 -0
- package/test/utils/ProvableHashList.test.ts +44 -0
- package/test/utils/ProvableReductionHashList.test.ts +117 -0
- package/test/utils.test.ts +0 -3
- package/LICENSE.md +0 -201
- package/dist/blockmodules/AccountStateModule.d.ts +0 -38
- package/dist/blockmodules/AccountStateModule.d.ts.map +0 -1
- package/dist/blockmodules/AccountStateModule.js +0 -38
- package/dist/blockmodules/NoopTransactionHook.d.ts +0 -6
- package/dist/blockmodules/NoopTransactionHook.d.ts.map +0 -1
- package/dist/blockmodules/NoopTransactionHook.js +0 -5
- package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
- package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
- package/dist/model/transaction/ProtocolTransaction.js +0 -18
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts +0 -22
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +0 -1
- package/dist/state/context/ProtocolMethodExecutionContext.js +0 -28
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
- package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
- package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
- package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
- package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
- package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
- package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
- package/src/blockmodules/AccountStateModule.ts +0 -31
- package/src/model/Option.test.ts +0 -21
- package/src/model/transaction/ProtocolTransaction.ts +0 -25
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
- package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
- package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
- package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
- package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
- package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
- package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
- package/tsconfig.test.json +0 -9
|
@@ -1,298 +1,615 @@
|
|
|
1
|
-
|
|
2
|
-
import { Experimental, Field, type Proof, Provable, SelfProof } from "snarkyjs";
|
|
1
|
+
import { Bool, Field, Provable, SelfProof, ZkProgram } from "o1js";
|
|
3
2
|
import { container, inject, injectable, injectAll } from "tsyringe";
|
|
4
3
|
import {
|
|
5
4
|
AreProofsEnabled,
|
|
5
|
+
CompilableModule,
|
|
6
|
+
CompileArtifact,
|
|
7
|
+
CompileRegistry,
|
|
8
|
+
log,
|
|
9
|
+
NonMethods,
|
|
6
10
|
PlainZkProgram,
|
|
7
11
|
provableMethod,
|
|
12
|
+
reduceSequential,
|
|
8
13
|
WithZkProgrammable,
|
|
9
14
|
ZkProgrammable,
|
|
10
15
|
} from "@proto-kit/common";
|
|
11
16
|
|
|
12
|
-
import { DefaultProvableHashList } from "../../utils/ProvableHashList";
|
|
13
|
-
import { MethodPublicOutput } from "../../model/MethodPublicOutput";
|
|
14
17
|
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
15
18
|
import {
|
|
16
19
|
StateTransitionProof,
|
|
20
|
+
StateTransitionProvable,
|
|
17
21
|
StateTransitionProverPublicInput,
|
|
18
22
|
StateTransitionProverPublicOutput,
|
|
19
23
|
} from "../statetransition/StateTransitionProvable";
|
|
20
24
|
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
25
|
+
import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethodExecutionContext";
|
|
26
|
+
import {
|
|
27
|
+
AfterBlockHookArguments,
|
|
28
|
+
BeforeBlockHookArguments,
|
|
29
|
+
ProvableBlockHook,
|
|
30
|
+
toAfterBlockHookArgument,
|
|
31
|
+
toBeforeBlockHookArgument,
|
|
32
|
+
} from "../../protocol/ProvableBlockHook";
|
|
33
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
34
|
+
import { assertEqualsIf } from "../../utils/utils";
|
|
35
|
+
import { StateServiceProvider } from "../../state/StateServiceProvider";
|
|
36
|
+
import { executeHooks } from "../utils";
|
|
37
|
+
import {
|
|
38
|
+
TransactionProof,
|
|
39
|
+
TransactionProvable,
|
|
40
|
+
TransactionProverPublicInput,
|
|
41
|
+
TransactionProverPublicOutput,
|
|
42
|
+
} from "../transaction/TransactionProvable";
|
|
43
|
+
import { Bundle } from "../accumulators/BlockHashList";
|
|
21
44
|
|
|
22
45
|
import {
|
|
46
|
+
BlockArguments,
|
|
47
|
+
BlockArgumentsBatch,
|
|
48
|
+
BlockProof,
|
|
23
49
|
BlockProvable,
|
|
24
|
-
BlockProverExecutionData,
|
|
25
|
-
BlockProverProof,
|
|
26
50
|
BlockProverPublicInput,
|
|
27
51
|
BlockProverPublicOutput,
|
|
52
|
+
BlockProverState,
|
|
53
|
+
BlockProverStateInput,
|
|
28
54
|
} from "./BlockProvable";
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
55
|
+
import {
|
|
56
|
+
BlockHashMerkleTreeWitness,
|
|
57
|
+
BlockHashTreeEntry,
|
|
58
|
+
} from "./accummulators/BlockHashMerkleTree";
|
|
33
59
|
|
|
34
60
|
const errors = {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
stateTransitionsHashNotEqual: () =>
|
|
39
|
-
"StateTransition list commitments are not equal",
|
|
61
|
+
propertyNotMatchingStep: (propertyName: string, step: string) =>
|
|
62
|
+
`${propertyName} not matching: ${step}`,
|
|
40
63
|
|
|
41
64
|
propertyNotMatching: (propertyName: string) => `${propertyName} not matching`,
|
|
42
|
-
|
|
43
|
-
stateRootNotMatching: (step: string) => `StateRoots not matching ${step}`,
|
|
44
|
-
|
|
45
|
-
transactionsHashNotMatching: (step: string) =>
|
|
46
|
-
`transactions hash not matching ${step}`,
|
|
47
65
|
};
|
|
48
66
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* The current commitment of the transaction-list which
|
|
55
|
-
* will at the end equal the bundle hash
|
|
56
|
-
*/
|
|
57
|
-
transactionsHash: Field;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The network state which gives access to values such as blockHeight
|
|
61
|
-
* This value is the same for the whole batch (L2 block)
|
|
62
|
-
*/
|
|
63
|
-
networkStateHash: Field;
|
|
64
|
-
}
|
|
67
|
+
type BlockHookArgument<T extends "before" | "after"> = T extends "before"
|
|
68
|
+
? BeforeBlockHookArguments
|
|
69
|
+
: AfterBlockHookArguments;
|
|
65
70
|
|
|
66
71
|
export class BlockProverProgrammable extends ZkProgrammable<
|
|
67
72
|
BlockProverPublicInput,
|
|
68
73
|
BlockProverPublicOutput
|
|
69
74
|
> {
|
|
70
75
|
public constructor(
|
|
71
|
-
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
72
76
|
private readonly prover: BlockProver,
|
|
73
77
|
public readonly stateTransitionProver: ZkProgrammable<
|
|
74
78
|
StateTransitionProverPublicInput,
|
|
75
79
|
StateTransitionProverPublicOutput
|
|
76
80
|
>,
|
|
77
|
-
public readonly
|
|
78
|
-
|
|
81
|
+
public readonly transactionProver: ZkProgrammable<
|
|
82
|
+
TransactionProverPublicInput,
|
|
83
|
+
TransactionProverPublicOutput
|
|
84
|
+
>,
|
|
85
|
+
private readonly blockHooks: ProvableBlockHook<unknown>[],
|
|
86
|
+
private readonly stateServiceProvider: StateServiceProvider
|
|
79
87
|
) {
|
|
80
88
|
super();
|
|
81
89
|
}
|
|
82
90
|
|
|
83
|
-
|
|
84
|
-
return this.prover.appChain;
|
|
85
|
-
}
|
|
91
|
+
name = "BlockProver";
|
|
86
92
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
*
|
|
91
|
-
* @param state The from-state of the BlockProver
|
|
92
|
-
* @param stateTransitionProof
|
|
93
|
-
* @param appProof
|
|
94
|
-
* @param executionData
|
|
95
|
-
* @returns The new BlockProver-state to be used as public output
|
|
96
|
-
*/
|
|
97
|
-
public applyTransaction(
|
|
98
|
-
state: BlockProverState,
|
|
99
|
-
stateTransitionProof: Proof<
|
|
100
|
-
StateTransitionProverPublicInput,
|
|
101
|
-
StateTransitionProverPublicOutput
|
|
102
|
-
>,
|
|
103
|
-
appProof: Proof<void, MethodPublicOutput>,
|
|
104
|
-
executionData: BlockProverExecutionData
|
|
105
|
-
): BlockProverState {
|
|
106
|
-
const { transaction, networkState } = executionData;
|
|
93
|
+
public get areProofsEnabled(): AreProofsEnabled | undefined {
|
|
94
|
+
return this.prover.areProofsEnabled;
|
|
95
|
+
}
|
|
107
96
|
|
|
108
|
-
|
|
109
|
-
|
|
97
|
+
public async executeBlockHooks<T extends "before" | "after">(
|
|
98
|
+
type: T,
|
|
99
|
+
hook: (
|
|
100
|
+
module: ProvableBlockHook<unknown>,
|
|
101
|
+
networkState: NetworkState,
|
|
102
|
+
args: BlockHookArgument<T>
|
|
103
|
+
) => Promise<NetworkState>,
|
|
104
|
+
hookArguments: BlockHookArgument<T>,
|
|
105
|
+
inputNetworkState: NetworkState,
|
|
106
|
+
isDummy: Bool
|
|
107
|
+
) {
|
|
108
|
+
const transaction = RuntimeTransaction.dummyTransaction();
|
|
109
|
+
const startingInputs = {
|
|
110
|
+
transaction,
|
|
111
|
+
networkState: inputNetworkState,
|
|
112
|
+
};
|
|
110
113
|
|
|
111
|
-
|
|
114
|
+
return await executeHooks(
|
|
115
|
+
startingInputs,
|
|
116
|
+
`${type}Block`,
|
|
117
|
+
async () => {
|
|
118
|
+
const executionContext = container.resolve(
|
|
119
|
+
RuntimeMethodExecutionContext
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
return await this.blockHooks.reduce<Promise<NetworkState>>(
|
|
123
|
+
async (networkStatePromise, blockHook) => {
|
|
124
|
+
const networkState = await networkStatePromise;
|
|
125
|
+
|
|
126
|
+
// Setup context for potential calls to runtime methods.
|
|
127
|
+
// With the special case that we set the new networkstate for every hook
|
|
128
|
+
// We also have to put in a dummy transaction for network.transaction
|
|
129
|
+
executionContext.setup({
|
|
130
|
+
transaction: RuntimeTransaction.dummyTransaction(),
|
|
131
|
+
networkState,
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
return await hook(blockHook, networkState, hookArguments);
|
|
135
|
+
},
|
|
136
|
+
Promise.resolve(inputNetworkState)
|
|
137
|
+
);
|
|
138
|
+
},
|
|
139
|
+
isDummy
|
|
140
|
+
);
|
|
141
|
+
}
|
|
112
142
|
|
|
113
|
-
|
|
114
|
-
|
|
143
|
+
public includeSTProof(
|
|
144
|
+
stateTransitionProof: StateTransitionProof,
|
|
145
|
+
apply: Bool,
|
|
146
|
+
stateRoot: Field,
|
|
147
|
+
pendingSTBatchesHash: Field,
|
|
148
|
+
witnessedRootsHash: Field
|
|
149
|
+
): {
|
|
150
|
+
stateRoot: Field;
|
|
151
|
+
pendingSTBatchesHash: Field;
|
|
152
|
+
witnessedRootsHash: Field;
|
|
153
|
+
} {
|
|
154
|
+
assertEqualsIf(
|
|
155
|
+
stateTransitionProof.publicInput.currentBatchStateHash,
|
|
156
|
+
Field(0),
|
|
157
|
+
apply,
|
|
158
|
+
"State for STProof has to be empty at the start"
|
|
159
|
+
);
|
|
160
|
+
assertEqualsIf(
|
|
161
|
+
stateTransitionProof.publicOutput.currentBatchStateHash,
|
|
162
|
+
Field(0),
|
|
163
|
+
apply,
|
|
164
|
+
"State for STProof has to be empty at the end"
|
|
165
|
+
);
|
|
115
166
|
|
|
116
|
-
|
|
117
|
-
|
|
167
|
+
assertEqualsIf(
|
|
168
|
+
stateTransitionProof.publicInput.batchesHash,
|
|
118
169
|
Field(0),
|
|
119
|
-
|
|
170
|
+
apply,
|
|
171
|
+
"Batcheshash doesn't start at 0"
|
|
120
172
|
);
|
|
121
173
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
174
|
+
// Assert from state root
|
|
175
|
+
assertEqualsIf(
|
|
176
|
+
stateRoot,
|
|
177
|
+
stateTransitionProof.publicInput.root,
|
|
178
|
+
apply,
|
|
179
|
+
errors.propertyNotMatching("from state root")
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
// Assert the stBatchesHash executed is the same
|
|
183
|
+
assertEqualsIf(
|
|
184
|
+
pendingSTBatchesHash,
|
|
185
|
+
stateTransitionProof.publicOutput.batchesHash,
|
|
186
|
+
apply,
|
|
187
|
+
"Pending STBatches are not the same that have been executed by the ST proof"
|
|
125
188
|
);
|
|
126
189
|
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
190
|
+
// Assert root Accumulator
|
|
191
|
+
assertEqualsIf(
|
|
192
|
+
Field(0),
|
|
193
|
+
stateTransitionProof.publicInput.witnessedRootsHash,
|
|
194
|
+
apply,
|
|
130
195
|
errors.propertyNotMatching("from state root")
|
|
131
196
|
);
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
stateTransitionProof.
|
|
197
|
+
// Assert the witnessedRootsHash created is the same
|
|
198
|
+
assertEqualsIf(
|
|
199
|
+
witnessedRootsHash,
|
|
200
|
+
stateTransitionProof.publicOutput.witnessedRootsHash,
|
|
201
|
+
apply,
|
|
202
|
+
"Root accumulator Commitment is not the same that have been executed by the ST proof"
|
|
136
203
|
);
|
|
137
204
|
|
|
138
|
-
//
|
|
139
|
-
|
|
205
|
+
// update root only if we didn't defer
|
|
206
|
+
const newRoot = Provable.if(
|
|
207
|
+
apply,
|
|
208
|
+
stateTransitionProof.publicOutput.root,
|
|
209
|
+
stateRoot
|
|
210
|
+
);
|
|
211
|
+
// Reset only if we didn't defer
|
|
212
|
+
const newBatchesHash = Provable.if(apply, Field(0), pendingSTBatchesHash);
|
|
213
|
+
const newWitnessedRootsHash = Provable.if(
|
|
214
|
+
apply,
|
|
215
|
+
Field(0),
|
|
216
|
+
witnessedRootsHash
|
|
217
|
+
);
|
|
218
|
+
return {
|
|
219
|
+
stateRoot: newRoot,
|
|
220
|
+
pendingSTBatchesHash: newBatchesHash,
|
|
221
|
+
witnessedRootsHash: newWitnessedRootsHash,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
140
224
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
225
|
+
private verifySTProof(
|
|
226
|
+
state: BlockProverState,
|
|
227
|
+
stateTransitionProof: StateTransitionProof,
|
|
228
|
+
deferSTProof: Bool
|
|
229
|
+
) {
|
|
230
|
+
// Verify ST Proof only if STs have been emitted,
|
|
231
|
+
// and we don't defer the verification of the STs
|
|
232
|
+
// otherwise we can input a dummy proof
|
|
233
|
+
const batchesEmpty = state.pendingSTBatches.commitment.equals(Field(0));
|
|
234
|
+
const verifyStProof = deferSTProof.not().and(batchesEmpty.not());
|
|
235
|
+
log.provable.debug("Verify STProof", verifyStProof);
|
|
236
|
+
stateTransitionProof.verifyIf(verifyStProof);
|
|
237
|
+
|
|
238
|
+
// Apply STProof if not deferred
|
|
239
|
+
const stateProofResult = this.includeSTProof(
|
|
240
|
+
stateTransitionProof,
|
|
241
|
+
verifyStProof,
|
|
242
|
+
state.stateRoot,
|
|
243
|
+
state.pendingSTBatches.commitment,
|
|
244
|
+
state.witnessedRoots.commitment
|
|
245
|
+
);
|
|
246
|
+
state.stateRoot = stateProofResult.stateRoot;
|
|
247
|
+
state.pendingSTBatches.commitment = stateProofResult.pendingSTBatchesHash;
|
|
248
|
+
state.witnessedRoots.commitment = stateProofResult.witnessedRootsHash;
|
|
249
|
+
}
|
|
145
250
|
|
|
146
|
-
|
|
147
|
-
|
|
251
|
+
private verifyTransactionProof(
|
|
252
|
+
state: BlockProverState,
|
|
253
|
+
transactionProof: TransactionProof,
|
|
254
|
+
deferTransactionProof: Bool
|
|
255
|
+
) {
|
|
256
|
+
// Verify Transaction proof if it has at least 1 tx and it isn't deferred
|
|
257
|
+
const finalizeBlockProof = deferTransactionProof.not();
|
|
258
|
+
const verifyTransactionProof = finalizeBlockProof.and(
|
|
259
|
+
state.bundleList.isEmpty().not()
|
|
260
|
+
);
|
|
148
261
|
|
|
149
|
-
|
|
150
|
-
const blockTransactionHash =
|
|
151
|
-
RuntimeTransaction.fromProtocolTransaction(transaction).hash();
|
|
262
|
+
transactionProof.verifyIf(verifyTransactionProof);
|
|
152
263
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
264
|
+
// Fast-forward transaction trackers by the results of the aggregated transaction proof
|
|
265
|
+
// Implicitly, the 'from' values here are asserted against the publicInput, since the hashlists
|
|
266
|
+
// are created out of the public input
|
|
267
|
+
state.eternalTransactionsList.fastForwardIf(
|
|
268
|
+
{
|
|
269
|
+
from: transactionProof.publicInput.eternalTransactionsHash,
|
|
270
|
+
to: transactionProof.publicOutput.eternalTransactionsHash,
|
|
271
|
+
},
|
|
272
|
+
verifyTransactionProof,
|
|
273
|
+
"eternalTransactionsList"
|
|
156
274
|
);
|
|
157
275
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
276
|
+
state.incomingMessages.fastForwardIf(
|
|
277
|
+
{
|
|
278
|
+
from: transactionProof.publicInput.incomingMessagesHash,
|
|
279
|
+
to: transactionProof.publicOutput.incomingMessagesHash,
|
|
280
|
+
},
|
|
281
|
+
verifyTransactionProof,
|
|
282
|
+
"incomingMessages"
|
|
162
283
|
);
|
|
163
|
-
|
|
284
|
+
|
|
285
|
+
// Cancel out remainders for transaction proof
|
|
286
|
+
assertEqualsIf(
|
|
287
|
+
transactionProof.publicInput.bundlesHash,
|
|
288
|
+
Field(0),
|
|
289
|
+
verifyTransactionProof,
|
|
290
|
+
"TransactionProof has to start bundles at 0"
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
// Fast Backwards actually, but logic holds
|
|
294
|
+
state.bundleList.fastForwardIf(
|
|
295
|
+
{
|
|
296
|
+
from: transactionProof.publicOutput.bundlesHash,
|
|
297
|
+
to: state.bundleList.empty(),
|
|
298
|
+
},
|
|
299
|
+
verifyTransactionProof,
|
|
300
|
+
"bundles hash"
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
private parseState(
|
|
305
|
+
publicInput: BlockProverPublicInput,
|
|
306
|
+
stateWitness: BlockProverStateInput,
|
|
307
|
+
networkState: NetworkState,
|
|
308
|
+
blockWitness: BlockHashMerkleTreeWitness
|
|
309
|
+
) {
|
|
310
|
+
const hasNoStateRemained = publicInput.proverStateRemainder.equals(0);
|
|
311
|
+
|
|
312
|
+
// If the state is supplied as a witness, we check that it is equals the PI's stateHash
|
|
313
|
+
stateWitness
|
|
314
|
+
.hash()
|
|
315
|
+
.equals(publicInput.proverStateRemainder)
|
|
316
|
+
.or(hasNoStateRemained)
|
|
317
|
+
.assertTrue("Input state witness is invalid");
|
|
318
|
+
|
|
319
|
+
const stateInputs = Provable.if(
|
|
320
|
+
hasNoStateRemained,
|
|
321
|
+
BlockProverStateInput,
|
|
322
|
+
BlockProverStateInput.fromPublicInput(publicInput),
|
|
323
|
+
stateWitness
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
stateInputs.networkStateHash.assertEquals(
|
|
164
327
|
networkState.hash(),
|
|
165
|
-
"Network state
|
|
328
|
+
"Network state not valid"
|
|
166
329
|
);
|
|
167
330
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
331
|
+
const state = BlockProverState.blockProverFromCommitments(
|
|
332
|
+
stateInputs,
|
|
333
|
+
networkState,
|
|
334
|
+
blockWitness
|
|
172
335
|
);
|
|
173
336
|
|
|
174
|
-
|
|
175
|
-
|
|
337
|
+
// Verify block witness validity
|
|
338
|
+
const blockIndex = blockWitness.calculateIndex();
|
|
339
|
+
|
|
340
|
+
blockIndex.assertEquals(stateInputs.blockNumber);
|
|
176
341
|
|
|
177
|
-
|
|
342
|
+
blockWitness
|
|
343
|
+
.calculateRoot(Field(0))
|
|
344
|
+
.assertEquals(
|
|
345
|
+
stateInputs.blockHashRoot,
|
|
346
|
+
"Supplied block hash witness not matching state root"
|
|
347
|
+
);
|
|
178
348
|
|
|
179
|
-
return
|
|
349
|
+
return state;
|
|
180
350
|
}
|
|
181
351
|
|
|
182
|
-
|
|
183
|
-
|
|
352
|
+
private computeOutput(
|
|
353
|
+
publicInput: BlockProverPublicInput,
|
|
354
|
+
state: BlockProverState,
|
|
355
|
+
finalizeBlockProof: Bool
|
|
356
|
+
) {
|
|
357
|
+
const finalizedOutput = state.toCommitments();
|
|
184
358
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
359
|
+
const deferredOutput = {
|
|
360
|
+
...publicInput,
|
|
361
|
+
};
|
|
362
|
+
deferredOutput.proverStateRemainder = finalizedOutput.hash();
|
|
363
|
+
|
|
364
|
+
return new BlockProverPublicOutput(
|
|
365
|
+
Provable.if(
|
|
366
|
+
finalizeBlockProof,
|
|
367
|
+
BlockProverPublicOutput,
|
|
368
|
+
finalizedOutput.finalize(finalizeBlockProof),
|
|
369
|
+
deferredOutput
|
|
370
|
+
)
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
@provableMethod()
|
|
375
|
+
public async proveBlockBatchNoProofs(
|
|
376
|
+
publicInput: BlockProverPublicInput,
|
|
377
|
+
stateWitness: BlockProverStateInput,
|
|
378
|
+
networkState: NetworkState,
|
|
379
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
380
|
+
batch: BlockArgumentsBatch,
|
|
381
|
+
finalize: Bool
|
|
191
382
|
) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
});
|
|
205
|
-
executionContext.beforeMethod("", "", []);
|
|
383
|
+
return await this.proveBlockBatch(
|
|
384
|
+
false,
|
|
385
|
+
publicInput,
|
|
386
|
+
stateWitness,
|
|
387
|
+
networkState,
|
|
388
|
+
blockWitness,
|
|
389
|
+
batch,
|
|
390
|
+
Bool(true),
|
|
391
|
+
Bool(true),
|
|
392
|
+
finalize
|
|
393
|
+
);
|
|
394
|
+
}
|
|
206
395
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
396
|
+
@provableMethod()
|
|
397
|
+
public async proveBlockBatchWithProofs(
|
|
398
|
+
publicInput: BlockProverPublicInput,
|
|
399
|
+
stateWitness: BlockProverStateInput,
|
|
400
|
+
networkState: NetworkState,
|
|
401
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
402
|
+
batch: BlockArgumentsBatch,
|
|
403
|
+
deferSTProof: Bool,
|
|
404
|
+
deferTransactionProof: Bool,
|
|
405
|
+
stateTransitionProof: StateTransitionProof,
|
|
406
|
+
transactionProof: TransactionProof
|
|
407
|
+
) {
|
|
408
|
+
const finalize = deferTransactionProof.or(deferSTProof).not();
|
|
409
|
+
|
|
410
|
+
return await this.proveBlockBatch(
|
|
411
|
+
true,
|
|
412
|
+
publicInput,
|
|
413
|
+
stateWitness,
|
|
414
|
+
networkState,
|
|
415
|
+
blockWitness,
|
|
416
|
+
batch,
|
|
417
|
+
deferSTProof,
|
|
418
|
+
deferTransactionProof,
|
|
419
|
+
finalize,
|
|
420
|
+
stateTransitionProof,
|
|
421
|
+
transactionProof
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
public async proveBlockBatch(
|
|
426
|
+
doProofVerification: boolean,
|
|
427
|
+
publicInput: BlockProverPublicInput,
|
|
428
|
+
stateWitness: BlockProverStateInput,
|
|
429
|
+
networkState: NetworkState,
|
|
430
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
431
|
+
batch: BlockArgumentsBatch,
|
|
432
|
+
deferSTProof: Bool,
|
|
433
|
+
deferTransactionProof: Bool,
|
|
434
|
+
finalize: Bool,
|
|
435
|
+
stateTransitionProof?: StateTransitionProof,
|
|
436
|
+
transactionProof?: TransactionProof
|
|
437
|
+
): Promise<BlockProverPublicOutput> {
|
|
438
|
+
let state = this.parseState(
|
|
439
|
+
publicInput,
|
|
440
|
+
stateWitness,
|
|
441
|
+
networkState,
|
|
442
|
+
blockWitness
|
|
443
|
+
);
|
|
210
444
|
|
|
211
|
-
|
|
445
|
+
// Prove blocks iteratively
|
|
446
|
+
state = await reduceSequential(
|
|
447
|
+
batch.batch,
|
|
448
|
+
async (current, block) => {
|
|
449
|
+
const result = await this.proveBlock(current.copy(), block);
|
|
212
450
|
|
|
213
|
-
|
|
214
|
-
executionContext.current().result;
|
|
451
|
+
this.stateServiceProvider.popCurrentStateService();
|
|
215
452
|
|
|
216
|
-
|
|
453
|
+
return BlockProverState.choose(block.isDummy, current, result);
|
|
454
|
+
},
|
|
455
|
+
state
|
|
456
|
+
);
|
|
457
|
+
|
|
458
|
+
if (doProofVerification) {
|
|
459
|
+
this.verifyTransactionProof(
|
|
460
|
+
state,
|
|
461
|
+
transactionProof!,
|
|
462
|
+
deferTransactionProof
|
|
463
|
+
);
|
|
464
|
+
this.verifySTProof(state, stateTransitionProof!, deferSTProof);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return this.computeOutput(publicInput, state, finalize);
|
|
468
|
+
}
|
|
217
469
|
|
|
218
|
-
|
|
219
|
-
|
|
470
|
+
private async proveBlock(
|
|
471
|
+
state: BlockProverState,
|
|
472
|
+
args: BlockArguments
|
|
473
|
+
): Promise<BlockProverState> {
|
|
474
|
+
const { networkState, blockWitness } = state;
|
|
475
|
+
const { afterBlockRootWitness, transactionsHash, isDummy } = args;
|
|
476
|
+
|
|
477
|
+
const startingPendingStBatches = state.pendingSTBatches.commitment;
|
|
478
|
+
|
|
479
|
+
// 1. Execute beforeBlock hooks
|
|
480
|
+
const beforeBlockArgs = toBeforeBlockHookArgument(state);
|
|
481
|
+
const beforeBlockResult = await this.executeBlockHooks(
|
|
482
|
+
"before",
|
|
483
|
+
async (module, networkStateArg, hookArgs) =>
|
|
484
|
+
await module.beforeBlock(networkStateArg, hookArgs),
|
|
485
|
+
beforeBlockArgs,
|
|
486
|
+
networkState,
|
|
487
|
+
isDummy
|
|
220
488
|
);
|
|
221
489
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
490
|
+
state.pendingSTBatches.push(beforeBlockResult.batch);
|
|
491
|
+
|
|
492
|
+
// 2. "Apply" TX-type BlockProof
|
|
493
|
+
args.pendingSTBatchesHash.from.assertEquals(
|
|
494
|
+
state.pendingSTBatches.commitment
|
|
495
|
+
);
|
|
496
|
+
args.witnessedRootsHash.from.assertEquals(state.witnessedRoots.commitment);
|
|
497
|
+
const isEmptyBlock = transactionsHash.equals(Field(0));
|
|
498
|
+
const isNotEmptyBlock = isEmptyBlock.not();
|
|
499
|
+
|
|
500
|
+
// Check & fast-forward the stBatchHashList to after all transactions appended
|
|
501
|
+
state.pendingSTBatches.fastForward(
|
|
502
|
+
args.pendingSTBatchesHash,
|
|
503
|
+
"Transaction proof doesn't start their STs after the beforeBlockHook"
|
|
504
|
+
);
|
|
505
|
+
// Same for witnessedRootsHash
|
|
506
|
+
state.witnessedRoots.fastForward(
|
|
507
|
+
args.witnessedRootsHash,
|
|
508
|
+
"Transaction proof doesn't start with correct witnessed roots hash"
|
|
225
509
|
);
|
|
226
510
|
|
|
227
|
-
|
|
228
|
-
|
|
511
|
+
// Add block to bundles list
|
|
512
|
+
const bundle = new Bundle({
|
|
513
|
+
transactionsHash: transactionsHash,
|
|
514
|
+
networkStateHash: beforeBlockResult.result.hash(),
|
|
515
|
+
pendingSTBatchesHash: args.pendingSTBatchesHash,
|
|
516
|
+
witnessedRootsHash: args.witnessedRootsHash,
|
|
229
517
|
});
|
|
518
|
+
state.bundleList.pushIf(bundle, isNotEmptyBlock);
|
|
519
|
+
|
|
520
|
+
// 3.
|
|
521
|
+
// Calculate new block tree root and increment witness
|
|
522
|
+
// Blocknumber as the index here is already authenticated previously
|
|
523
|
+
const [root, newWitness] = blockWitness.calculateRootIncrement(
|
|
524
|
+
state.blockNumber,
|
|
525
|
+
new BlockHashTreeEntry({
|
|
526
|
+
block: {
|
|
527
|
+
index: state.blockNumber,
|
|
528
|
+
transactionListHash: transactionsHash,
|
|
529
|
+
},
|
|
530
|
+
closed: Bool(true),
|
|
531
|
+
}).hash()
|
|
532
|
+
);
|
|
533
|
+
|
|
534
|
+
state.blockHashRoot = root;
|
|
535
|
+
state.blockWitness = newWitness;
|
|
536
|
+
|
|
537
|
+
state.blockNumber = state.blockNumber.add(1);
|
|
230
538
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
539
|
+
// 4. Execute afterBlock hooks
|
|
540
|
+
// Witness root
|
|
541
|
+
const hasNoSTBatches = state.pendingSTBatches.commitment.equals(
|
|
542
|
+
startingPendingStBatches
|
|
234
543
|
);
|
|
235
|
-
}
|
|
236
544
|
|
|
237
|
-
|
|
238
|
-
public proveTransaction(
|
|
239
|
-
publicInput: BlockProverPublicInput,
|
|
240
|
-
stateProof: StateTransitionProof,
|
|
241
|
-
appProof: Proof<void, MethodPublicOutput>,
|
|
242
|
-
executionData: BlockProverExecutionData
|
|
243
|
-
): BlockProverPublicOutput {
|
|
244
|
-
const state: BlockProverState = {
|
|
245
|
-
transactionsHash: publicInput.transactionsHash,
|
|
246
|
-
stateRoot: publicInput.stateRoot,
|
|
247
|
-
networkStateHash: publicInput.networkStateHash,
|
|
248
|
-
};
|
|
545
|
+
// TODO Cover case when we witness root but pendingSTBatches is completely empty
|
|
249
546
|
|
|
250
|
-
|
|
547
|
+
state.witnessedRoots.witnessRoot(
|
|
548
|
+
{
|
|
549
|
+
appliedBatchListState: state.pendingSTBatches.commitment,
|
|
550
|
+
root: afterBlockRootWitness.witnessedRoot,
|
|
551
|
+
},
|
|
552
|
+
hasNoSTBatches.not()
|
|
553
|
+
);
|
|
554
|
+
|
|
555
|
+
// Switch state service to afterBlock one
|
|
556
|
+
this.stateServiceProvider.popCurrentStateService();
|
|
557
|
+
|
|
558
|
+
// Execute hooks
|
|
559
|
+
const afterBlockHookArgs = toAfterBlockHookArgument(
|
|
251
560
|
state,
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
561
|
+
afterBlockRootWitness.witnessedRoot,
|
|
562
|
+
transactionsHash
|
|
563
|
+
);
|
|
564
|
+
const afterBlockResult = await this.executeBlockHooks(
|
|
565
|
+
"after",
|
|
566
|
+
async (module, networkStateArg, hookArgs) =>
|
|
567
|
+
await module.afterBlock(networkStateArg, hookArgs),
|
|
568
|
+
{
|
|
569
|
+
...afterBlockHookArgs,
|
|
570
|
+
},
|
|
571
|
+
beforeBlockResult.result,
|
|
572
|
+
isDummy
|
|
255
573
|
);
|
|
256
574
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
575
|
+
// Apply state and network state changes
|
|
576
|
+
state.pendingSTBatches.push(afterBlockResult.batch);
|
|
577
|
+
state.networkState = afterBlockResult.result;
|
|
578
|
+
|
|
579
|
+
return state;
|
|
261
580
|
}
|
|
262
581
|
|
|
263
582
|
@provableMethod()
|
|
264
|
-
public merge(
|
|
583
|
+
public async merge(
|
|
265
584
|
publicInput: BlockProverPublicInput,
|
|
266
|
-
proof1:
|
|
267
|
-
proof2:
|
|
268
|
-
): BlockProverPublicOutput {
|
|
585
|
+
proof1: BlockProof,
|
|
586
|
+
proof2: BlockProof
|
|
587
|
+
): Promise<BlockProverPublicOutput> {
|
|
269
588
|
proof1.verify();
|
|
270
589
|
proof2.verify();
|
|
271
590
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
);
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
transactionsHash: proof2.publicOutput.transactionsHash,
|
|
295
|
-
});
|
|
591
|
+
function checkProperty<
|
|
592
|
+
Key extends keyof NonMethods<BlockProverPublicInput>,
|
|
593
|
+
>(key: Key) {
|
|
594
|
+
// Check state
|
|
595
|
+
publicInput[key].assertEquals(
|
|
596
|
+
proof1.publicInput[key],
|
|
597
|
+
errors.propertyNotMatchingStep(key, "publicInput.from -> proof1.from")
|
|
598
|
+
);
|
|
599
|
+
proof1.publicOutput[key].assertEquals(
|
|
600
|
+
proof2.publicInput[key],
|
|
601
|
+
errors.propertyNotMatchingStep(key, "proof1.to -> proof2.from")
|
|
602
|
+
);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
checkProperty("stateRoot");
|
|
606
|
+
checkProperty("networkStateHash");
|
|
607
|
+
checkProperty("blockHashRoot");
|
|
608
|
+
checkProperty("eternalTransactionsHash");
|
|
609
|
+
checkProperty("incomingMessagesHash");
|
|
610
|
+
checkProperty("proverStateRemainder");
|
|
611
|
+
|
|
612
|
+
return proof2.publicOutput;
|
|
296
613
|
}
|
|
297
614
|
|
|
298
615
|
/**
|
|
@@ -303,38 +620,85 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
303
620
|
public zkProgramFactory(): PlainZkProgram<
|
|
304
621
|
BlockProverPublicInput,
|
|
305
622
|
BlockProverPublicOutput
|
|
306
|
-
> {
|
|
307
|
-
const { prover, stateTransitionProver,
|
|
308
|
-
const StateTransitionProofClass = stateTransitionProver.zkProgram.Proof;
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
623
|
+
>[] {
|
|
624
|
+
const { prover, stateTransitionProver, transactionProver } = this;
|
|
625
|
+
const StateTransitionProofClass = stateTransitionProver.zkProgram[0].Proof;
|
|
626
|
+
const TransactionProofClass = transactionProver.zkProgram[0].Proof;
|
|
627
|
+
const proveBlockBatchWithProofs =
|
|
628
|
+
prover.proveBlockBatchWithProofs.bind(prover);
|
|
629
|
+
const proveBlockBatchNoProofs = prover.proveBlockBatchNoProofs.bind(prover);
|
|
312
630
|
const merge = prover.merge.bind(prover);
|
|
313
631
|
|
|
314
|
-
const program =
|
|
632
|
+
const program = ZkProgram({
|
|
633
|
+
name: "BlockProver",
|
|
315
634
|
publicInput: BlockProverPublicInput,
|
|
316
635
|
publicOutput: BlockProverPublicOutput,
|
|
317
636
|
|
|
318
637
|
methods: {
|
|
319
|
-
|
|
638
|
+
proveBlockBatchWithProofs: {
|
|
320
639
|
privateInputs: [
|
|
640
|
+
BlockProverStateInput,
|
|
641
|
+
NetworkState,
|
|
642
|
+
BlockHashMerkleTreeWitness,
|
|
643
|
+
BlockArgumentsBatch,
|
|
644
|
+
Bool,
|
|
645
|
+
Bool,
|
|
321
646
|
StateTransitionProofClass,
|
|
322
|
-
|
|
323
|
-
BlockProverExecutionData,
|
|
647
|
+
TransactionProofClass,
|
|
324
648
|
],
|
|
649
|
+
async method(
|
|
650
|
+
publicInput: BlockProverPublicInput,
|
|
651
|
+
stateWitness: BlockProverStateInput,
|
|
652
|
+
networkState: NetworkState,
|
|
653
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
654
|
+
batch: BlockArgumentsBatch,
|
|
655
|
+
deferSTProof: Bool,
|
|
656
|
+
deferTransactionProof: Bool,
|
|
657
|
+
stateTransitionProof: StateTransitionProof,
|
|
658
|
+
transactionProof: TransactionProof
|
|
659
|
+
) {
|
|
660
|
+
return {
|
|
661
|
+
publicOutput: await proveBlockBatchWithProofs(
|
|
662
|
+
publicInput,
|
|
663
|
+
stateWitness,
|
|
664
|
+
networkState,
|
|
665
|
+
blockWitness,
|
|
666
|
+
batch,
|
|
667
|
+
deferSTProof,
|
|
668
|
+
deferTransactionProof,
|
|
669
|
+
stateTransitionProof,
|
|
670
|
+
transactionProof
|
|
671
|
+
),
|
|
672
|
+
};
|
|
673
|
+
},
|
|
674
|
+
},
|
|
325
675
|
|
|
326
|
-
|
|
676
|
+
proveBlockBatchNoProofs: {
|
|
677
|
+
privateInputs: [
|
|
678
|
+
BlockProverStateInput,
|
|
679
|
+
NetworkState,
|
|
680
|
+
BlockHashMerkleTreeWitness,
|
|
681
|
+
BlockArgumentsBatch,
|
|
682
|
+
Bool,
|
|
683
|
+
],
|
|
684
|
+
async method(
|
|
327
685
|
publicInput: BlockProverPublicInput,
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
686
|
+
stateWitness: BlockProverStateInput,
|
|
687
|
+
networkState: NetworkState,
|
|
688
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
689
|
+
batch: BlockArgumentsBatch,
|
|
690
|
+
finalize: Bool
|
|
331
691
|
) {
|
|
332
|
-
return
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
692
|
+
return {
|
|
693
|
+
publicOutput: await proveBlockBatchNoProofs(
|
|
694
|
+
publicInput,
|
|
695
|
+
stateWitness,
|
|
696
|
+
networkState,
|
|
697
|
+
blockWitness,
|
|
698
|
+
batch,
|
|
699
|
+
finalize
|
|
700
|
+
),
|
|
701
|
+
};
|
|
338
702
|
},
|
|
339
703
|
},
|
|
340
704
|
|
|
@@ -344,30 +708,35 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
344
708
|
SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
345
709
|
],
|
|
346
710
|
|
|
347
|
-
method(
|
|
711
|
+
async method(
|
|
348
712
|
publicInput: BlockProverPublicInput,
|
|
349
|
-
proof1:
|
|
350
|
-
proof2:
|
|
713
|
+
proof1: BlockProof,
|
|
714
|
+
proof2: BlockProof
|
|
351
715
|
) {
|
|
352
|
-
return merge(publicInput, proof1, proof2);
|
|
716
|
+
return { publicOutput: await merge(publicInput, proof1, proof2) };
|
|
353
717
|
},
|
|
354
718
|
},
|
|
355
719
|
},
|
|
356
720
|
});
|
|
357
721
|
|
|
358
722
|
const methods = {
|
|
359
|
-
|
|
723
|
+
proveBlockBatchWithProofs: program.proveBlockBatchWithProofs,
|
|
724
|
+
proveBlockBatchNoProofs: program.proveBlockBatchNoProofs,
|
|
360
725
|
merge: program.merge,
|
|
361
726
|
};
|
|
362
727
|
|
|
363
|
-
const SelfProofClass =
|
|
728
|
+
const SelfProofClass = ZkProgram.Proof(program);
|
|
364
729
|
|
|
365
|
-
return
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
730
|
+
return [
|
|
731
|
+
{
|
|
732
|
+
name: program.name,
|
|
733
|
+
compile: program.compile.bind(program),
|
|
734
|
+
verify: program.verify.bind(program),
|
|
735
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
736
|
+
Proof: SelfProofClass,
|
|
737
|
+
methods,
|
|
738
|
+
},
|
|
739
|
+
];
|
|
371
740
|
}
|
|
372
741
|
}
|
|
373
742
|
|
|
@@ -377,7 +746,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
377
746
|
* then be merged to be committed to the base-layer contract
|
|
378
747
|
*/
|
|
379
748
|
@injectable()
|
|
380
|
-
export class BlockProver
|
|
749
|
+
export class BlockProver
|
|
750
|
+
extends ProtocolModule
|
|
751
|
+
implements BlockProvable, CompilableModule
|
|
752
|
+
{
|
|
381
753
|
public zkProgrammable: BlockProverProgrammable;
|
|
382
754
|
|
|
383
755
|
public constructor(
|
|
@@ -385,41 +757,86 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
385
757
|
public readonly stateTransitionProver: WithZkProgrammable<
|
|
386
758
|
StateTransitionProverPublicInput,
|
|
387
759
|
StateTransitionProverPublicOutput
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
760
|
+
> &
|
|
761
|
+
StateTransitionProvable,
|
|
762
|
+
@inject("TransactionProver")
|
|
763
|
+
public readonly transactionProver: WithZkProgrammable<
|
|
764
|
+
TransactionProverPublicInput,
|
|
765
|
+
TransactionProverPublicOutput
|
|
766
|
+
> &
|
|
767
|
+
TransactionProvable,
|
|
768
|
+
@injectAll("ProvableBlockHook")
|
|
769
|
+
blockHooks: ProvableBlockHook<unknown>[],
|
|
770
|
+
@inject("StateServiceProvider")
|
|
771
|
+
stateServiceProvider: StateServiceProvider
|
|
393
772
|
) {
|
|
394
773
|
super();
|
|
395
774
|
this.zkProgrammable = new BlockProverProgrammable(
|
|
396
775
|
this,
|
|
397
776
|
stateTransitionProver.zkProgrammable,
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
777
|
+
transactionProver.zkProgrammable,
|
|
778
|
+
blockHooks,
|
|
779
|
+
stateServiceProvider
|
|
401
780
|
);
|
|
402
781
|
}
|
|
403
782
|
|
|
404
|
-
public
|
|
783
|
+
public async compile(
|
|
784
|
+
registry: CompileRegistry
|
|
785
|
+
): Promise<Record<string, CompileArtifact> | undefined> {
|
|
786
|
+
return await registry.forceProverExists(async () => {
|
|
787
|
+
await this.stateTransitionProver.compile(registry);
|
|
788
|
+
await this.transactionProver.compile(registry);
|
|
789
|
+
return await this.zkProgrammable.compile(registry);
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
public proveBlockBatchNoProofs(
|
|
405
794
|
publicInput: BlockProverPublicInput,
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
795
|
+
stateWitness: BlockProverStateInput,
|
|
796
|
+
networkState: NetworkState,
|
|
797
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
798
|
+
batch: BlockArgumentsBatch,
|
|
799
|
+
finalize: Bool
|
|
800
|
+
): Promise<BlockProverPublicOutput> {
|
|
801
|
+
return this.zkProgrammable.proveBlockBatchNoProofs(
|
|
802
|
+
publicInput,
|
|
803
|
+
stateWitness,
|
|
804
|
+
networkState,
|
|
805
|
+
blockWitness,
|
|
806
|
+
batch,
|
|
807
|
+
finalize
|
|
808
|
+
);
|
|
410
809
|
}
|
|
411
810
|
|
|
412
|
-
public
|
|
811
|
+
public proveBlockBatchWithProofs(
|
|
413
812
|
publicInput: BlockProverPublicInput,
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
813
|
+
stateWitness: BlockProverStateInput,
|
|
814
|
+
networkState: NetworkState,
|
|
815
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
816
|
+
batch: BlockArgumentsBatch,
|
|
817
|
+
deferSTProof: Bool,
|
|
818
|
+
deferTransactionProof: Bool,
|
|
819
|
+
stateTransitionProof: StateTransitionProof,
|
|
820
|
+
transactionProof: TransactionProof
|
|
821
|
+
): Promise<BlockProverPublicOutput> {
|
|
822
|
+
return this.zkProgrammable.proveBlockBatchWithProofs(
|
|
419
823
|
publicInput,
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
824
|
+
stateWitness,
|
|
825
|
+
networkState,
|
|
826
|
+
blockWitness,
|
|
827
|
+
batch,
|
|
828
|
+
deferSTProof,
|
|
829
|
+
deferTransactionProof,
|
|
830
|
+
stateTransitionProof,
|
|
831
|
+
transactionProof
|
|
423
832
|
);
|
|
424
833
|
}
|
|
834
|
+
|
|
835
|
+
public merge(
|
|
836
|
+
publicInput: BlockProverPublicInput,
|
|
837
|
+
proof1: BlockProof,
|
|
838
|
+
proof2: BlockProof
|
|
839
|
+
): Promise<BlockProverPublicOutput> {
|
|
840
|
+
return this.zkProgrammable.merge(publicInput, proof1, proof2);
|
|
841
|
+
}
|
|
425
842
|
}
|