@proto-kit/protocol 0.1.1-develop.191 → 0.1.1-develop.2024
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 +59 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -9
- 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 +70 -46
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +62 -57
- 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 +389 -16
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- package/dist/model/StateTransitionProvableBatch.js +87 -10
- 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 +47 -21
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +127 -26
- 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 -7
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +10 -7
- 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 +35 -0
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
- package/dist/protocol/ProvableTransactionHook.js +28 -0
- package/dist/protocol/ProvableTransactionHook.js.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.js +9 -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 +52 -37
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +327 -107
- 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 -48
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
- package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +29 -17
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +171 -73
- 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 +53 -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 +119 -0
- package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContract.js +269 -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 +494 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js +40 -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 +25 -0
- package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
- package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -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 +68 -0
- package/dist/state/State.d.ts.map +1 -0
- package/dist/state/State.js +141 -0
- package/dist/state/State.js.map +1 -0
- package/dist/state/StateMap.d.ts +37 -0
- package/dist/state/StateMap.d.ts.map +1 -0
- package/dist/state/StateMap.js +56 -0
- package/dist/state/StateMap.js.map +1 -0
- package/dist/state/StateService.d.ts +6 -0
- package/dist/state/StateService.d.ts.map +1 -0
- package/dist/state/StateService.js +2 -0
- package/dist/state/StateService.js.map +1 -0
- package/dist/state/StateServiceProvider.d.ts +8 -0
- package/dist/state/StateServiceProvider.d.ts.map +1 -0
- package/dist/state/StateServiceProvider.js +37 -0
- 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 +42 -0
- package/dist/state/WitnessBlockContext.js.map +1 -0
- package/dist/state/assert/assert.d.ts +12 -0
- package/dist/state/assert/assert.d.ts.map +1 -0
- package/dist/state/assert/assert.js +33 -0
- package/dist/state/assert/assert.js.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
- package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
- package/dist/state/protocol/ProtocolState.d.ts +13 -0
- package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
- package/dist/state/protocol/ProtocolState.js +58 -0
- 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 +11 -9
- 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/hooks/NoopTransactionHook.ts +13 -0
- package/src/index.ts +59 -9
- package/src/model/AppliedStateTransitionBatch.ts +16 -0
- package/src/model/MethodPublicOutput.ts +3 -1
- package/src/model/Option.ts +99 -73
- 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 +114 -12
- 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 +201 -69
- package/src/protocol/ProtocolEnvironment.ts +10 -0
- package/src/protocol/ProtocolModule.ts +16 -15
- package/src/protocol/ProvableBlockHook.ts +67 -0
- package/src/protocol/ProvableTransactionHook.ts +96 -0
- package/src/protocol/TransitioningProtocolModule.ts +12 -0
- 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 +721 -186
- 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 +26 -19
- package/src/prover/statetransition/StateTransitionProver.ts +337 -126
- 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 +60 -0
- package/src/settlement/ContractModule.ts +31 -0
- package/src/settlement/SettlementContractModule.ts +150 -0
- package/src/settlement/contracts/BridgeContract.ts +385 -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 +73 -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 +53 -0
- package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -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 +190 -0
- package/src/state/StateMap.ts +73 -0
- package/src/state/StateService.ts +6 -0
- package/src/state/StateServiceProvider.ts +37 -0
- package/src/state/WitnessBlockContext.ts +50 -0
- package/src/state/assert/assert.ts +38 -0
- package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
- package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
- package/src/state/protocol/ProtocolState.ts +98 -0
- 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 +161 -74
- package/test/Protocol.test.ts +20 -10
- 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/test/state/assert/assert.test.ts +56 -0
- 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/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/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/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/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/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
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Field, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { DefaultProvableHashList } from "../../utils/ProvableHashList";
|
|
4
|
+
import type { TransactionProverState } from "../transaction/TransactionProvable";
|
|
5
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
6
|
+
|
|
7
|
+
export class BundlePreimage extends Struct({
|
|
8
|
+
preimage: Field,
|
|
9
|
+
fromStateTransitionsHash: Field,
|
|
10
|
+
fromWitnessedRootsHash: Field,
|
|
11
|
+
}) {}
|
|
12
|
+
|
|
13
|
+
export class FieldTransition extends Struct({
|
|
14
|
+
from: Field,
|
|
15
|
+
to: Field,
|
|
16
|
+
}) {}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A bundle represents an ordered list of transactions and their evaluated effects.
|
|
20
|
+
* Specifically, this includes beforeTransaction, runtime and afterTransaction evaluation,
|
|
21
|
+
* but not block hooks.
|
|
22
|
+
*/
|
|
23
|
+
export class Bundle extends Struct({
|
|
24
|
+
// Those are per-block trackers
|
|
25
|
+
networkStateHash: Field,
|
|
26
|
+
transactionsHash: Field,
|
|
27
|
+
|
|
28
|
+
// Those are non-linear trackers that we assert later in the blockprover
|
|
29
|
+
pendingSTBatchesHash: FieldTransition,
|
|
30
|
+
witnessedRootsHash: FieldTransition,
|
|
31
|
+
}) {}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This hash list collects an ordered list of Bundle instances.
|
|
35
|
+
* "Pushing" onto this list can mean either appending a new bundle or updating the
|
|
36
|
+
* bundle at the tip of this list, according to the following rules:
|
|
37
|
+
* The validated preimage (via checkLastBundleElement) is:
|
|
38
|
+
* - == commitment: A new bundle will be appended
|
|
39
|
+
* - something else: The preimage is the actual preimage, therefore as a operation,
|
|
40
|
+
* the old one will be popped (silently) and the updates bundle will be pushed,
|
|
41
|
+
* resulting in an semantic update of the tip.
|
|
42
|
+
*/
|
|
43
|
+
export class BundleHashList extends DefaultProvableHashList<Bundle> {
|
|
44
|
+
public constructor(
|
|
45
|
+
commitment: Field = Field(0),
|
|
46
|
+
// TODO Refactor this into preimage and "auxiliary batch information" - this is confusing
|
|
47
|
+
public preimage?: BundlePreimage
|
|
48
|
+
) {
|
|
49
|
+
super(Bundle, commitment);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Verifies this list's preimage against the prover's state
|
|
53
|
+
* The main impact this function has is that it makes the preimage trusted
|
|
54
|
+
* i.e. we can safely use it to add to the bundle/open a new bundle
|
|
55
|
+
*/
|
|
56
|
+
public checkLastBundleElement(
|
|
57
|
+
state: TransactionProverState,
|
|
58
|
+
networkState: NetworkState
|
|
59
|
+
) {
|
|
60
|
+
const { preimage, fromWitnessedRootsHash, fromStateTransitionsHash } =
|
|
61
|
+
this.preimage!;
|
|
62
|
+
|
|
63
|
+
// Check and append to bundlelist
|
|
64
|
+
const lastElement = new Bundle({
|
|
65
|
+
networkStateHash: networkState.hash(),
|
|
66
|
+
transactionsHash: state.transactionList.commitment,
|
|
67
|
+
pendingSTBatchesHash: {
|
|
68
|
+
from: fromStateTransitionsHash,
|
|
69
|
+
to: state.pendingSTBatches.commitment,
|
|
70
|
+
},
|
|
71
|
+
witnessedRootsHash: {
|
|
72
|
+
from: fromWitnessedRootsHash,
|
|
73
|
+
to: state.witnessedRoots.commitment,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const newBundle = this.commitment.equals(preimage);
|
|
78
|
+
this.witnessTip(preimage, lastElement)
|
|
79
|
+
.or(newBundle)
|
|
80
|
+
.assertTrue("Last element not valid");
|
|
81
|
+
|
|
82
|
+
newBundle
|
|
83
|
+
.implies(state.transactionList.isEmpty())
|
|
84
|
+
.assertTrue("Transaction list not empty for new bundle");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* This function pushes a new bundle onto this list or updates the bundle at
|
|
89
|
+
* the tip of this list, according to the rules of the preimage algorithms (see class docs)
|
|
90
|
+
*/
|
|
91
|
+
public addToBundle(
|
|
92
|
+
state: TransactionProverState,
|
|
93
|
+
networkState: NetworkState
|
|
94
|
+
) {
|
|
95
|
+
const { preimage, fromWitnessedRootsHash, fromStateTransitionsHash } =
|
|
96
|
+
this.preimage!;
|
|
97
|
+
|
|
98
|
+
const newElement = new Bundle({
|
|
99
|
+
networkStateHash: networkState.hash(),
|
|
100
|
+
transactionsHash: state.transactionList.commitment,
|
|
101
|
+
pendingSTBatchesHash: {
|
|
102
|
+
from: fromStateTransitionsHash,
|
|
103
|
+
to: state.pendingSTBatches.commitment,
|
|
104
|
+
},
|
|
105
|
+
witnessedRootsHash: {
|
|
106
|
+
from: fromWitnessedRootsHash,
|
|
107
|
+
to: state.witnessedRoots.commitment,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// We always overwrite here, the invariant is that the preimage is
|
|
112
|
+
// either the actual preimage in case of addition to the existing bundle
|
|
113
|
+
// or the current commitment in case of a new bundle
|
|
114
|
+
this.commitment = preimage;
|
|
115
|
+
this.push(newElement);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Provable } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ProvableOption } from "../../model/Option";
|
|
4
|
+
import {
|
|
5
|
+
ProvableStateTransition,
|
|
6
|
+
StateTransition,
|
|
7
|
+
} from "../../model/StateTransition";
|
|
8
|
+
import { ProvableReductionHashList } from "../../utils/ProvableReductionHashList";
|
|
9
|
+
|
|
10
|
+
export class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
|
|
11
|
+
public push(value: ProvableStateTransition) {
|
|
12
|
+
this.pushWithMetadata(value);
|
|
13
|
+
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public pushWithMetadata(value: ProvableStateTransition) {
|
|
18
|
+
return this.pushAndReduce(value, (previous: ProvableStateTransition) => {
|
|
19
|
+
const pathsMatch = previous.path.equals(value.path);
|
|
20
|
+
|
|
21
|
+
// Take the previous.from if the paths match, otherwise leave ST as is
|
|
22
|
+
const from = Provable.if(
|
|
23
|
+
pathsMatch,
|
|
24
|
+
ProvableOption,
|
|
25
|
+
previous.from,
|
|
26
|
+
value.from
|
|
27
|
+
);
|
|
28
|
+
// In case we have a layout like
|
|
29
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
30
|
+
// we just take the first and discard the second
|
|
31
|
+
const to = Provable.if(
|
|
32
|
+
value.to.isSome.or(pathsMatch.not()),
|
|
33
|
+
ProvableOption,
|
|
34
|
+
value.to,
|
|
35
|
+
previous.to
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const transition = new ProvableStateTransition({
|
|
39
|
+
path: value.path,
|
|
40
|
+
from: new ProvableOption(from),
|
|
41
|
+
to: new ProvableOption(to),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Assert that connection is correct
|
|
45
|
+
previous.to.value
|
|
46
|
+
.equals(value.from.value)
|
|
47
|
+
.or(
|
|
48
|
+
previous.to.isSome
|
|
49
|
+
.not()
|
|
50
|
+
.and(previous.from.value.equals(value.from.value))
|
|
51
|
+
)
|
|
52
|
+
.or(pathsMatch.not())
|
|
53
|
+
.assertTrue();
|
|
54
|
+
|
|
55
|
+
return [transition, pathsMatch];
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public toField() {
|
|
60
|
+
return this.commitment;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function reduceStateTransitions(
|
|
65
|
+
transitions: StateTransition<unknown>[]
|
|
66
|
+
): StateTransition<unknown>[] {
|
|
67
|
+
const reduced: StateTransition<unknown>[] = [];
|
|
68
|
+
|
|
69
|
+
transitions.forEach((st) => {
|
|
70
|
+
if (reduced.length === 0) {
|
|
71
|
+
reduced.push(st);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const last = reduced.at(-1)!;
|
|
76
|
+
if (last.path.equals(st.path).toBoolean()) {
|
|
77
|
+
if (st.toValue.isSome.toBoolean()) {
|
|
78
|
+
reduced.pop();
|
|
79
|
+
reduced.push(
|
|
80
|
+
new StateTransition<unknown>(st.path, last.fromValue, st.toValue)
|
|
81
|
+
);
|
|
82
|
+
} else {
|
|
83
|
+
// Do nothing, because we discard that ST
|
|
84
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
85
|
+
// cancel the 2nd
|
|
86
|
+
}
|
|
87
|
+
} else {
|
|
88
|
+
reduced.push(st);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return reduced;
|
|
92
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Field } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { DefaultProvableHashList } from "../../utils/ProvableHashList";
|
|
4
|
+
|
|
5
|
+
export class TransactionHashList extends DefaultProvableHashList<Field> {
|
|
6
|
+
public constructor(commitment: Field = Field(0)) {
|
|
7
|
+
super(Field, commitment);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Bool, Field, Provable, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { DefaultProvableHashList } from "../../utils/ProvableHashList";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Link between a certain applied batch stack and a given root hash that the
|
|
7
|
+
* stack has to evaluate to at that given point in time
|
|
8
|
+
*/
|
|
9
|
+
export class WitnessedRoot extends Struct({
|
|
10
|
+
appliedBatchListState: Field,
|
|
11
|
+
root: Field,
|
|
12
|
+
}) {}
|
|
13
|
+
|
|
14
|
+
export class WitnessedRootWitness extends Struct({
|
|
15
|
+
witnessedRoot: Field,
|
|
16
|
+
}) {}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Accumulator as of section "Intermediary state roots" of the STProver v2 spec
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
export class WitnessedRootHashList extends DefaultProvableHashList<WitnessedRoot> {
|
|
23
|
+
public constructor(
|
|
24
|
+
commitment: Field = Field(0),
|
|
25
|
+
public preimage: Field = Field(0)
|
|
26
|
+
) {
|
|
27
|
+
super(WitnessedRoot, commitment);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* To be used by the BlockProver or for tracing
|
|
32
|
+
*
|
|
33
|
+
* The main purpose of this method compared to the simple push methods
|
|
34
|
+
* is for deduplicating witnessed roots. We need to do this because the
|
|
35
|
+
* STProver can only witness once per batch, therefore if multiple witness
|
|
36
|
+
* points fall back to the same ST (because any batches in between were empty),
|
|
37
|
+
* this has to be detected and compensated for.
|
|
38
|
+
* This function does this using the preimage of the current list state.
|
|
39
|
+
*/
|
|
40
|
+
public witnessRoot(witnessedRoot: WitnessedRoot, condition: Bool) {
|
|
41
|
+
// Note, we don't have to validate the preimage here because of the following
|
|
42
|
+
// 1. If the sequencer doesn't provide the correct witness, the BlockProver's
|
|
43
|
+
// equality check will fail
|
|
44
|
+
// 2. If the list is empty, no preimage exists, therefore condition (2) doesn't
|
|
45
|
+
// apply, which is the same outcome when the sequencer provides an arbitrary witness
|
|
46
|
+
const preimageCheckList = new WitnessedRootHashList(this.preimage).push(
|
|
47
|
+
witnessedRoot
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
// Conditions:
|
|
51
|
+
// (1) don't append if witnessedRoot == finalizedRoot -> Already covered in BlockProver
|
|
52
|
+
// (2) don't append if preimage.push({ finalizedRoot, pendingSTBatchesHash }) == this.commitment
|
|
53
|
+
const skipPush = preimageCheckList.commitment.equals(this.commitment);
|
|
54
|
+
|
|
55
|
+
const fromCommitment = this.commitment;
|
|
56
|
+
|
|
57
|
+
const pushCondition = condition.and(skipPush.not());
|
|
58
|
+
this.pushIf(witnessedRoot, pushCondition);
|
|
59
|
+
|
|
60
|
+
this.preimage = Provable.if(pushCondition, fromCommitment, this.preimage);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,45 +1,377 @@
|
|
|
1
|
-
import { Field, Proof, Struct } from "
|
|
2
|
-
import {
|
|
1
|
+
import { Bool, Field, Poseidon, Proof, Provable, Struct } from "o1js";
|
|
2
|
+
import { CompilableModule, WithZkProgrammable } from "@proto-kit/common";
|
|
3
3
|
|
|
4
4
|
import { StateTransitionProof } from "../statetransition/StateTransitionProvable";
|
|
5
|
-
import { MethodPublicOutput } from "../../model/MethodPublicOutput";
|
|
6
|
-
import { ProtocolTransaction } from "../../model/transaction/ProtocolTransaction";
|
|
7
5
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
6
|
+
import { TransactionHashList } from "../accumulators/TransactionHashList";
|
|
7
|
+
import { MinaActionsHashList } from "../../utils/MinaPrefixedProvableHashList";
|
|
8
|
+
import { AppliedBatchHashList } from "../accumulators/AppliedBatchHashList";
|
|
9
|
+
import {
|
|
10
|
+
WitnessedRootHashList,
|
|
11
|
+
WitnessedRootWitness,
|
|
12
|
+
} from "../accumulators/WitnessedRootHashList";
|
|
13
|
+
import { TransactionProof } from "../transaction/TransactionProvable";
|
|
14
|
+
import { BundleHashList, FieldTransition } from "../accumulators/BlockHashList";
|
|
15
|
+
import { NonMethods } from "../../utils/utils";
|
|
8
16
|
|
|
9
|
-
|
|
17
|
+
import { BlockHashMerkleTreeWitness } from "./accummulators/BlockHashMerkleTree";
|
|
18
|
+
|
|
19
|
+
export const BLOCK_ARGUMENT_BATCH_SIZE = 4;
|
|
20
|
+
|
|
21
|
+
export class BlockArguments extends Struct({
|
|
22
|
+
afterBlockRootWitness: WitnessedRootWitness,
|
|
10
23
|
transactionsHash: Field,
|
|
11
|
-
|
|
12
|
-
|
|
24
|
+
pendingSTBatchesHash: FieldTransition,
|
|
25
|
+
witnessedRootsHash: FieldTransition,
|
|
26
|
+
isDummy: Bool,
|
|
27
|
+
}) {
|
|
28
|
+
public static noop(
|
|
29
|
+
state: NonMethods<Omit<BlockProverState, "blockWitness">>,
|
|
30
|
+
stateRoot: Field
|
|
31
|
+
) {
|
|
32
|
+
return new BlockArguments({
|
|
33
|
+
afterBlockRootWitness: {
|
|
34
|
+
witnessedRoot: stateRoot,
|
|
35
|
+
},
|
|
36
|
+
transactionsHash: Field(0),
|
|
37
|
+
pendingSTBatchesHash: {
|
|
38
|
+
from: state.pendingSTBatches.commitment,
|
|
39
|
+
to: state.pendingSTBatches.commitment,
|
|
40
|
+
},
|
|
41
|
+
witnessedRootsHash: {
|
|
42
|
+
from: state.witnessedRoots.commitment,
|
|
43
|
+
to: state.witnessedRoots.commitment,
|
|
44
|
+
},
|
|
45
|
+
isDummy: Bool(true),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class BlockArgumentsBatch extends Struct({
|
|
51
|
+
batch: Provable.Array(BlockArguments, BLOCK_ARGUMENT_BATCH_SIZE),
|
|
13
52
|
}) {}
|
|
14
53
|
|
|
15
|
-
|
|
16
|
-
|
|
54
|
+
const BlockProverStateBaseFields = {
|
|
55
|
+
eternalTransactionsHash: Field,
|
|
56
|
+
incomingMessagesHash: Field,
|
|
17
57
|
stateRoot: Field,
|
|
18
|
-
|
|
58
|
+
blockHashRoot: Field,
|
|
59
|
+
blockNumber: Field,
|
|
60
|
+
networkStateHash: Field,
|
|
61
|
+
};
|
|
19
62
|
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
63
|
+
export class BlockProverPublicInput extends Struct({
|
|
64
|
+
// Tracker of the current block prover state
|
|
65
|
+
proverStateRemainder: Field,
|
|
66
|
+
...BlockProverStateBaseFields,
|
|
67
|
+
}) {
|
|
68
|
+
public equals(input: BlockProverPublicInput): Bool {
|
|
69
|
+
const output2 = BlockProverPublicInput.toFields(input);
|
|
70
|
+
const output1 = BlockProverPublicInput.toFields(this);
|
|
71
|
+
return output1
|
|
72
|
+
.map((value1, index) => value1.equals(output2[index]))
|
|
73
|
+
.reduce((a, b) => a.and(b));
|
|
74
|
+
}
|
|
24
75
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
76
|
+
public clone() {
|
|
77
|
+
return new BlockProverPublicInput(
|
|
78
|
+
BlockProverPublicInput.fromFields(BlockProverPublicInput.toFields(this))
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export const BlockProverStateCommitments = {
|
|
84
|
+
remainders: {
|
|
85
|
+
// Commitment to the list of unprocessed (pending) batches of STs that need to be proven
|
|
86
|
+
pendingSTBatchesHash: Field,
|
|
87
|
+
witnessedRootsHash: Field,
|
|
88
|
+
bundlesHash: Field,
|
|
89
|
+
witnessedRootsPreimage: Field,
|
|
90
|
+
},
|
|
91
|
+
...BlockProverStateBaseFields,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export class BlockProverStateInput extends Struct(BlockProverStateCommitments) {
|
|
95
|
+
public hash() {
|
|
96
|
+
return Poseidon.hash(BlockProverStateInput.toFields(this));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public static fromPublicInput(input: BlockProverPublicInput) {
|
|
100
|
+
return new BlockProverStateInput({
|
|
101
|
+
remainders: {
|
|
102
|
+
bundlesHash: Field(0),
|
|
103
|
+
pendingSTBatchesHash: Field(0),
|
|
104
|
+
witnessedRootsHash: Field(0),
|
|
105
|
+
witnessedRootsPreimage: Field(0),
|
|
106
|
+
},
|
|
107
|
+
eternalTransactionsHash: input.eternalTransactionsHash,
|
|
108
|
+
incomingMessagesHash: input.incomingMessagesHash,
|
|
109
|
+
stateRoot: input.stateRoot,
|
|
110
|
+
blockHashRoot: input.blockHashRoot,
|
|
111
|
+
blockNumber: input.blockNumber,
|
|
112
|
+
networkStateHash: input.networkStateHash,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public finalize(condition: Bool) {
|
|
117
|
+
condition
|
|
118
|
+
.implies(
|
|
119
|
+
this.remainders.bundlesHash
|
|
120
|
+
.equals(0)
|
|
121
|
+
.and(this.remainders.pendingSTBatchesHash.equals(0))
|
|
122
|
+
.and(this.remainders.witnessedRootsHash.equals(0))
|
|
123
|
+
)
|
|
124
|
+
.assertTrue("Remainers not fully removed");
|
|
125
|
+
|
|
126
|
+
return new BlockProverPublicInput({
|
|
127
|
+
proverStateRemainder: Field(0),
|
|
128
|
+
eternalTransactionsHash: this.eternalTransactionsHash,
|
|
129
|
+
incomingMessagesHash: this.incomingMessagesHash,
|
|
130
|
+
stateRoot: this.stateRoot,
|
|
131
|
+
blockHashRoot: this.blockHashRoot,
|
|
132
|
+
blockNumber: this.blockNumber,
|
|
133
|
+
networkStateHash: this.networkStateHash,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export class BlockProverPublicOutput extends BlockProverPublicInput {}
|
|
139
|
+
|
|
140
|
+
export class BlockProverState {
|
|
141
|
+
/**
|
|
142
|
+
* The network state which gives access to values such as blockHeight
|
|
143
|
+
* This value is the same for the whole batch (L2 block)
|
|
144
|
+
*/
|
|
145
|
+
bundleList: BundleHashList;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* A variant of the transactionsHash that is never reset.
|
|
149
|
+
* Thought for usage in the sequence state mempool.
|
|
150
|
+
* In comparison, transactionsHash restarts at 0 for every new block
|
|
151
|
+
*/
|
|
152
|
+
eternalTransactionsList: TransactionHashList;
|
|
153
|
+
|
|
154
|
+
pendingSTBatches: AppliedBatchHashList;
|
|
155
|
+
|
|
156
|
+
incomingMessages: MinaActionsHashList;
|
|
157
|
+
|
|
158
|
+
witnessedRoots: WitnessedRootHashList;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The current state root of the block prover
|
|
162
|
+
*/
|
|
163
|
+
stateRoot: Field;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* The root of the merkle tree encoding all block hashes,
|
|
167
|
+
* see `BlockHashMerkleTree`
|
|
168
|
+
*/
|
|
169
|
+
blockHashRoot: Field;
|
|
170
|
+
|
|
171
|
+
blockNumber: Field;
|
|
172
|
+
|
|
173
|
+
blockWitness: BlockHashMerkleTreeWitness;
|
|
174
|
+
|
|
175
|
+
networkState: NetworkState;
|
|
176
|
+
|
|
177
|
+
constructor(args: {
|
|
178
|
+
networkState: NetworkState;
|
|
179
|
+
eternalTransactionsList: TransactionHashList;
|
|
180
|
+
pendingSTBatches: AppliedBatchHashList;
|
|
181
|
+
stateRoot: Field;
|
|
182
|
+
blockHashRoot: Field;
|
|
183
|
+
blockNumber: Field;
|
|
184
|
+
bundleList: BundleHashList;
|
|
185
|
+
blockWitness: BlockHashMerkleTreeWitness;
|
|
186
|
+
witnessedRoots: WitnessedRootHashList;
|
|
187
|
+
incomingMessages: MinaActionsHashList;
|
|
188
|
+
}) {
|
|
189
|
+
this.bundleList = args.bundleList;
|
|
190
|
+
this.eternalTransactionsList = args.eternalTransactionsList;
|
|
191
|
+
this.pendingSTBatches = args.pendingSTBatches;
|
|
192
|
+
this.stateRoot = args.stateRoot;
|
|
193
|
+
this.blockHashRoot = args.blockHashRoot;
|
|
194
|
+
this.blockNumber = args.blockNumber;
|
|
195
|
+
this.networkState = args.networkState;
|
|
196
|
+
this.blockWitness = args.blockWitness;
|
|
197
|
+
this.witnessedRoots = args.witnessedRoots;
|
|
198
|
+
this.incomingMessages = args.incomingMessages;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
public toCommitments(): BlockProverStateInput {
|
|
202
|
+
return new BlockProverStateInput({
|
|
203
|
+
remainders: {
|
|
204
|
+
bundlesHash: this.bundleList.commitment,
|
|
205
|
+
pendingSTBatchesHash: this.pendingSTBatches.commitment,
|
|
206
|
+
witnessedRootsHash: this.witnessedRoots.commitment,
|
|
207
|
+
witnessedRootsPreimage: this.witnessedRoots.preimage,
|
|
208
|
+
},
|
|
209
|
+
eternalTransactionsHash: this.eternalTransactionsList.commitment,
|
|
210
|
+
incomingMessagesHash: this.incomingMessages.commitment,
|
|
211
|
+
stateRoot: this.stateRoot,
|
|
212
|
+
blockHashRoot: this.blockHashRoot,
|
|
213
|
+
blockNumber: this.blockNumber,
|
|
214
|
+
networkStateHash: this.networkState.hash(),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public static blockProverFromCommitments(
|
|
219
|
+
stateInput: NonMethods<BlockProverStateInput>,
|
|
220
|
+
networkState: NetworkState,
|
|
221
|
+
blockWitness: BlockHashMerkleTreeWitness
|
|
222
|
+
): BlockProverState {
|
|
223
|
+
return new BlockProverState({
|
|
224
|
+
bundleList: new BundleHashList(stateInput.remainders.bundlesHash),
|
|
225
|
+
eternalTransactionsList: new TransactionHashList(
|
|
226
|
+
stateInput.eternalTransactionsHash
|
|
227
|
+
),
|
|
228
|
+
incomingMessages: new MinaActionsHashList(
|
|
229
|
+
stateInput.incomingMessagesHash
|
|
230
|
+
),
|
|
231
|
+
pendingSTBatches: new AppliedBatchHashList(
|
|
232
|
+
stateInput.remainders.pendingSTBatchesHash
|
|
233
|
+
),
|
|
234
|
+
witnessedRoots: new WitnessedRootHashList(
|
|
235
|
+
stateInput.remainders.witnessedRootsHash,
|
|
236
|
+
stateInput.remainders.witnessedRootsPreimage
|
|
237
|
+
),
|
|
238
|
+
stateRoot: stateInput.stateRoot,
|
|
239
|
+
blockHashRoot: stateInput.blockHashRoot,
|
|
240
|
+
blockNumber: stateInput.blockNumber,
|
|
241
|
+
networkState,
|
|
242
|
+
blockWitness,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
public copy() {
|
|
247
|
+
return BlockProverState.fromFields(this.toFields());
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
public toFields() {
|
|
251
|
+
return [
|
|
252
|
+
this.bundleList.commitment,
|
|
253
|
+
this.eternalTransactionsList.commitment,
|
|
254
|
+
this.pendingSTBatches.commitment,
|
|
255
|
+
this.incomingMessages.commitment,
|
|
256
|
+
this.witnessedRoots.commitment,
|
|
257
|
+
this.witnessedRoots.preimage,
|
|
258
|
+
this.stateRoot,
|
|
259
|
+
this.blockHashRoot,
|
|
260
|
+
this.blockNumber,
|
|
261
|
+
...NetworkState.toFields(this.networkState),
|
|
262
|
+
...BlockHashMerkleTreeWitness.toFields(this.blockWitness),
|
|
263
|
+
];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// TODO Unit test
|
|
267
|
+
public static fromFields(fields: Field[]) {
|
|
268
|
+
return new BlockProverState({
|
|
269
|
+
bundleList: new BundleHashList(fields[0]),
|
|
270
|
+
eternalTransactionsList: new TransactionHashList(fields[1]),
|
|
271
|
+
pendingSTBatches: new AppliedBatchHashList(fields[2]),
|
|
272
|
+
incomingMessages: new MinaActionsHashList(fields[3]),
|
|
273
|
+
witnessedRoots: new WitnessedRootHashList(fields[4], fields[5]),
|
|
274
|
+
stateRoot: fields[6],
|
|
275
|
+
blockHashRoot: fields[7],
|
|
276
|
+
blockNumber: fields[8],
|
|
277
|
+
networkState: new NetworkState(NetworkState.fromFields(fields.slice(9))),
|
|
278
|
+
blockWitness: new BlockHashMerkleTreeWitness(
|
|
279
|
+
BlockHashMerkleTreeWitness.fromFields(
|
|
280
|
+
fields.slice(9 + NetworkState.sizeInFields())
|
|
281
|
+
)
|
|
282
|
+
),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
public static choose(
|
|
287
|
+
condition: Bool,
|
|
288
|
+
a: BlockProverState,
|
|
289
|
+
b: BlockProverState
|
|
290
|
+
) {
|
|
291
|
+
return new BlockProverState({
|
|
292
|
+
bundleList: new BundleHashList(
|
|
293
|
+
Provable.if(condition, a.bundleList.commitment, b.bundleList.commitment)
|
|
294
|
+
),
|
|
295
|
+
eternalTransactionsList: new TransactionHashList(
|
|
296
|
+
Provable.if(
|
|
297
|
+
condition,
|
|
298
|
+
a.eternalTransactionsList.commitment,
|
|
299
|
+
b.eternalTransactionsList.commitment
|
|
300
|
+
)
|
|
301
|
+
),
|
|
302
|
+
pendingSTBatches: new AppliedBatchHashList(
|
|
303
|
+
Provable.if(
|
|
304
|
+
condition,
|
|
305
|
+
a.pendingSTBatches.commitment,
|
|
306
|
+
b.pendingSTBatches.commitment
|
|
307
|
+
)
|
|
308
|
+
),
|
|
309
|
+
incomingMessages: new MinaActionsHashList(
|
|
310
|
+
Provable.if(
|
|
311
|
+
condition,
|
|
312
|
+
a.incomingMessages.commitment,
|
|
313
|
+
b.incomingMessages.commitment
|
|
314
|
+
)
|
|
315
|
+
),
|
|
316
|
+
witnessedRoots: new WitnessedRootHashList(
|
|
317
|
+
Provable.if(
|
|
318
|
+
condition,
|
|
319
|
+
a.witnessedRoots.commitment,
|
|
320
|
+
b.witnessedRoots.commitment
|
|
321
|
+
),
|
|
322
|
+
Provable.if(
|
|
323
|
+
condition,
|
|
324
|
+
a.witnessedRoots.preimage,
|
|
325
|
+
b.witnessedRoots.preimage
|
|
326
|
+
)
|
|
327
|
+
),
|
|
328
|
+
stateRoot: Provable.if(condition, a.stateRoot, b.stateRoot),
|
|
329
|
+
blockHashRoot: Provable.if(condition, a.blockHashRoot, b.blockHashRoot),
|
|
330
|
+
blockWitness: new BlockHashMerkleTreeWitness(
|
|
331
|
+
Provable.if(
|
|
332
|
+
condition,
|
|
333
|
+
BlockHashMerkleTreeWitness,
|
|
334
|
+
a.blockWitness,
|
|
335
|
+
b.blockWitness
|
|
336
|
+
)
|
|
337
|
+
),
|
|
338
|
+
blockNumber: Provable.if(condition, a.blockNumber, b.blockNumber),
|
|
339
|
+
networkState: new NetworkState(
|
|
340
|
+
Provable.if(condition, NetworkState, a.networkState, b.networkState)
|
|
341
|
+
),
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export type BlockProof = Proof<BlockProverPublicInput, BlockProverPublicOutput>;
|
|
30
347
|
|
|
31
348
|
export interface BlockProvable
|
|
32
|
-
extends
|
|
33
|
-
|
|
349
|
+
extends WithZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
350
|
+
CompilableModule {
|
|
351
|
+
proveBlockBatchNoProofs: (
|
|
352
|
+
publicInput: BlockProverPublicInput,
|
|
353
|
+
stateWitness: BlockProverStateInput,
|
|
354
|
+
networkState: NetworkState,
|
|
355
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
356
|
+
batch: BlockArgumentsBatch,
|
|
357
|
+
finalize: Bool
|
|
358
|
+
) => Promise<BlockProverPublicOutput>;
|
|
359
|
+
|
|
360
|
+
proveBlockBatchWithProofs: (
|
|
34
361
|
publicInput: BlockProverPublicInput,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
362
|
+
stateWitness: BlockProverStateInput,
|
|
363
|
+
networkState: NetworkState,
|
|
364
|
+
blockWitness: BlockHashMerkleTreeWitness,
|
|
365
|
+
batch: BlockArgumentsBatch,
|
|
366
|
+
deferSTProof: Bool,
|
|
367
|
+
deferTransactionProof: Bool,
|
|
368
|
+
stateTransitionProof: StateTransitionProof,
|
|
369
|
+
transactionProof: TransactionProof
|
|
370
|
+
) => Promise<BlockProverPublicOutput>;
|
|
39
371
|
|
|
40
372
|
merge: (
|
|
41
373
|
publicInput: BlockProverPublicInput,
|
|
42
|
-
proof1:
|
|
43
|
-
proof2:
|
|
44
|
-
) => BlockProverPublicOutput
|
|
374
|
+
proof1: BlockProof,
|
|
375
|
+
proof2: BlockProof
|
|
376
|
+
) => Promise<BlockProverPublicOutput>;
|
|
45
377
|
}
|