@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,9 +1,8 @@
|
|
|
1
|
-
import { Bool, Provable } from "
|
|
1
|
+
import { Bool, Provable } from "o1js";
|
|
2
2
|
import { container } from "tsyringe";
|
|
3
3
|
import { log } from "@proto-kit/common";
|
|
4
4
|
|
|
5
5
|
import { RuntimeMethodExecutionContext } from "../context/RuntimeMethodExecutionContext";
|
|
6
|
-
import { exec } from "child_process";
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* Maintains an execution status of the current runtime module method,
|
|
@@ -14,15 +13,26 @@ import { exec } from "child_process";
|
|
|
14
13
|
* @param condition - Result of the assertion made about the execution status
|
|
15
14
|
* @param message - Optional message describing the prior status
|
|
16
15
|
*/
|
|
17
|
-
export function assert(condition: Bool, message?: string) {
|
|
16
|
+
export function assert(condition: Bool, message?: string | (() => string)) {
|
|
18
17
|
const executionContext = container.resolve(RuntimeMethodExecutionContext);
|
|
19
18
|
const previousStatus = executionContext.current().result.status;
|
|
20
|
-
const status =
|
|
19
|
+
const status = condition.and(previousStatus);
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
Provable.asProver(() => {
|
|
22
|
+
if (!condition.toBoolean() && previousStatus.toBoolean()) {
|
|
23
|
+
const messageString =
|
|
24
|
+
message !== undefined && typeof message === "function"
|
|
25
|
+
? message()
|
|
26
|
+
: message;
|
|
27
|
+
|
|
28
|
+
// If no isSimulated was set, we treat it as not simulated,
|
|
29
|
+
// therefore printing the log
|
|
30
|
+
if (!(executionContext.current().isSimulated ?? false)) {
|
|
31
|
+
log.debug("Assertion failed: ", messageString);
|
|
32
|
+
}
|
|
33
|
+
executionContext.setStatusMessage(messageString, new Error().stack);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
26
36
|
|
|
27
37
|
executionContext.setStatus(status);
|
|
28
38
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { Bool } from "
|
|
1
|
+
import { Bool, FlexibleProvablePure, Provable, Struct } from "o1js";
|
|
2
2
|
import { singleton } from "tsyringe";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
ProvableMethodExecutionContext,
|
|
5
|
+
ProvableMethodExecutionResult,
|
|
6
|
+
} from "@proto-kit/common";
|
|
7
|
+
|
|
4
8
|
import { StateTransition } from "../../model/StateTransition";
|
|
5
9
|
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
6
10
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
@@ -13,12 +17,20 @@ const errors = {
|
|
|
13
17
|
};
|
|
14
18
|
|
|
15
19
|
export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
20
|
public stateTransitions: StateTransition<any>[] = [];
|
|
18
21
|
|
|
19
22
|
public status: Bool = Bool(true);
|
|
20
23
|
|
|
21
24
|
public statusMessage?: string;
|
|
25
|
+
|
|
26
|
+
public stackTrace?: string;
|
|
27
|
+
|
|
28
|
+
public events: {
|
|
29
|
+
eventType: FlexibleProvablePure<any>;
|
|
30
|
+
event: any;
|
|
31
|
+
eventName: string;
|
|
32
|
+
condition: Bool;
|
|
33
|
+
}[] = [];
|
|
22
34
|
}
|
|
23
35
|
|
|
24
36
|
export interface RuntimeMethodExecutionData {
|
|
@@ -26,6 +38,13 @@ export interface RuntimeMethodExecutionData {
|
|
|
26
38
|
networkState: NetworkState;
|
|
27
39
|
}
|
|
28
40
|
|
|
41
|
+
export class RuntimeMethodExecutionDataStruct
|
|
42
|
+
extends Struct({
|
|
43
|
+
transaction: RuntimeTransaction,
|
|
44
|
+
networkState: NetworkState,
|
|
45
|
+
})
|
|
46
|
+
implements RuntimeMethodExecutionData {}
|
|
47
|
+
|
|
29
48
|
/**
|
|
30
49
|
* Execution context used to wrap runtime module methods,
|
|
31
50
|
* allowing them to post relevant information (such as execution status)
|
|
@@ -37,12 +56,17 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
37
56
|
|
|
38
57
|
public input: RuntimeMethodExecutionData | undefined;
|
|
39
58
|
|
|
40
|
-
|
|
41
|
-
private lastInput: RuntimeMethodExecutionData | undefined;
|
|
59
|
+
private isSimulated: boolean = false;
|
|
42
60
|
|
|
43
|
-
|
|
61
|
+
// The inputs corresponding to the current result
|
|
62
|
+
private lastInputs:
|
|
63
|
+
| {
|
|
64
|
+
input: RuntimeMethodExecutionData | undefined;
|
|
65
|
+
isSimulated: boolean;
|
|
66
|
+
}
|
|
67
|
+
| undefined;
|
|
44
68
|
|
|
45
|
-
|
|
69
|
+
public override result = new RuntimeProvableMethodExecutionResult();
|
|
46
70
|
|
|
47
71
|
private assertSetupCalled(): asserts this is {
|
|
48
72
|
input: RuntimeMethodExecutionData;
|
|
@@ -61,15 +85,31 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
61
85
|
this.result.stateTransitions.push(stateTransition);
|
|
62
86
|
}
|
|
63
87
|
|
|
88
|
+
public addEvent<T>(
|
|
89
|
+
eventType: FlexibleProvablePure<T>,
|
|
90
|
+
event: T,
|
|
91
|
+
eventName: string,
|
|
92
|
+
condition: Bool = Bool(true)
|
|
93
|
+
) {
|
|
94
|
+
this.assertSetupCalled();
|
|
95
|
+
this.result.events.push({
|
|
96
|
+
eventType,
|
|
97
|
+
event,
|
|
98
|
+
eventName,
|
|
99
|
+
condition,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
64
103
|
/**
|
|
65
104
|
* @param message - Status message to acompany the current status
|
|
66
105
|
*/
|
|
67
|
-
public setStatusMessage(message?: string) {
|
|
106
|
+
public setStatusMessage(message?: string, stackTrace?: string) {
|
|
68
107
|
this.assertSetupCalled();
|
|
69
108
|
if (this.isSimulated) {
|
|
70
109
|
return;
|
|
71
110
|
}
|
|
72
111
|
this.result.statusMessage ??= message;
|
|
112
|
+
this.result.stackTrace ??= stackTrace;
|
|
73
113
|
}
|
|
74
114
|
|
|
75
115
|
/**
|
|
@@ -90,6 +130,18 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
90
130
|
this.input = input;
|
|
91
131
|
}
|
|
92
132
|
|
|
133
|
+
public witnessInput(): RuntimeMethodExecutionDataStruct {
|
|
134
|
+
this.assertSetupCalled();
|
|
135
|
+
return Provable.witness(RuntimeMethodExecutionDataStruct, () => {
|
|
136
|
+
// TODO Is that right? Or this.current().input
|
|
137
|
+
const { transaction, networkState } = this.input!;
|
|
138
|
+
return new RuntimeMethodExecutionDataStruct({
|
|
139
|
+
networkState,
|
|
140
|
+
transaction,
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
93
145
|
public setSimulated(simulated: boolean) {
|
|
94
146
|
this.isSimulated = simulated;
|
|
95
147
|
}
|
|
@@ -104,8 +156,12 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
104
156
|
public afterMethod() {
|
|
105
157
|
super.afterMethod();
|
|
106
158
|
if (this.isFinished) {
|
|
107
|
-
this.
|
|
108
|
-
|
|
159
|
+
this.lastInputs = {
|
|
160
|
+
input: this.input,
|
|
161
|
+
isSimulated: this.isSimulated,
|
|
162
|
+
};
|
|
163
|
+
// TODO: find out why input isnt set in TransactionFeeHook during assert
|
|
164
|
+
// this.input = undefined;
|
|
109
165
|
this.isSimulated = false;
|
|
110
166
|
}
|
|
111
167
|
}
|
|
@@ -118,7 +174,8 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
118
174
|
return {
|
|
119
175
|
isFinished: this.isFinished,
|
|
120
176
|
result: this.result,
|
|
121
|
-
input: this.
|
|
177
|
+
input: this.lastInputs?.input,
|
|
178
|
+
isSimulated: this.lastInputs?.isSimulated,
|
|
122
179
|
};
|
|
123
180
|
}
|
|
124
181
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { createReference, Reference } from "@proto-kit/common";
|
|
2
|
+
|
|
3
|
+
import { WithPath, WithStateServiceProvider } from "../State";
|
|
3
4
|
import { Path } from "../../model/Path";
|
|
5
|
+
import { StateServiceProvider } from "../StateServiceProvider";
|
|
6
|
+
import { PROTOKIT_PREFIXES } from "../../hashing/protokit-prefixes";
|
|
4
7
|
import { TransitioningProtocolModule } from "../../protocol/TransitioningProtocolModule";
|
|
5
8
|
|
|
6
9
|
const errors = {
|
|
@@ -10,53 +13,85 @@ const errors = {
|
|
|
10
13
|
Did you forget to extend your block module with 'extends ...Hook'?`
|
|
11
14
|
),
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
missingParent: (className: string, type: string, moduleType: string) =>
|
|
14
17
|
new Error(
|
|
15
|
-
`Unable to provide '
|
|
16
|
-
Did you forget to extend your
|
|
18
|
+
`Unable to provide parent '${type}' for state, ${className} is missing a name.
|
|
19
|
+
Did you forget to extend your module with 'extends ${moduleType}'?`
|
|
17
20
|
),
|
|
18
21
|
};
|
|
19
22
|
|
|
23
|
+
export interface StatefulModule {
|
|
24
|
+
name?: string;
|
|
25
|
+
parent?: {
|
|
26
|
+
stateServiceProvider: StateServiceProvider;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
20
30
|
/**
|
|
21
31
|
* Decorates a runtime module property as state, passing down some
|
|
22
32
|
* underlying values to improve developer experience.
|
|
23
33
|
*/
|
|
24
|
-
export function
|
|
25
|
-
return <TargetTransitioningModule extends
|
|
34
|
+
export function state() {
|
|
35
|
+
return <TargetTransitioningModule extends StatefulModule>(
|
|
26
36
|
target: TargetTransitioningModule,
|
|
27
37
|
propertyKey: string
|
|
28
38
|
) => {
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
30
|
-
let value: State<unknown> | undefined;
|
|
31
|
-
|
|
32
39
|
Object.defineProperty(target, propertyKey, {
|
|
33
40
|
enumerable: true,
|
|
34
41
|
|
|
35
|
-
get: function get() {
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
|
|
42
|
+
get: function get(this: TargetTransitioningModule) {
|
|
43
|
+
// The reason for why we store the state value in this weird way is that
|
|
44
|
+
// in the decorator on the prototype of the class. This means that if there
|
|
45
|
+
// are multiple instances of this class, any closure that this getter shares
|
|
46
|
+
// will be the same for all instances.
|
|
47
|
+
// Therefore, we need to somehow save the set instance on the instance itself
|
|
39
48
|
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
50
|
+
const reference:
|
|
51
|
+
| Reference<WithPath & WithStateServiceProvider>
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
53
|
+
| undefined = (this as any)[`protokit_state_cache_${propertyKey}`];
|
|
54
|
+
|
|
55
|
+
// Short-circuit this to return the state in case its already initialized
|
|
56
|
+
if (reference !== undefined && reference.value.path !== undefined) {
|
|
57
|
+
return reference.value;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (this.name === undefined) {
|
|
61
|
+
throw errors.missingName(this.constructor.name);
|
|
42
62
|
}
|
|
43
63
|
|
|
44
|
-
|
|
45
|
-
|
|
64
|
+
const isProtocol = target instanceof TransitioningProtocolModule;
|
|
65
|
+
|
|
66
|
+
if (!this.parent) {
|
|
67
|
+
const debugInfo = isProtocol
|
|
68
|
+
? { parentName: "protocol", baseModuleNames: "...Hook" }
|
|
69
|
+
: { parentName: "runtime", baseModuleNames: "RuntimeModule" };
|
|
70
|
+
|
|
71
|
+
throw errors.missingParent(
|
|
72
|
+
this.constructor.name,
|
|
73
|
+
debugInfo.parentName,
|
|
74
|
+
debugInfo.baseModuleNames
|
|
75
|
+
);
|
|
46
76
|
}
|
|
47
77
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
78
|
+
const statePrefix = isProtocol
|
|
79
|
+
? PROTOKIT_PREFIXES.STATE_PROTOCOL
|
|
80
|
+
: PROTOKIT_PREFIXES.STATE_RUNTIME;
|
|
81
|
+
const path = Path.fromProperty(this.name, propertyKey, statePrefix);
|
|
82
|
+
if (reference) {
|
|
83
|
+
const { value } = reference;
|
|
52
84
|
value.path = path;
|
|
53
|
-
value.stateServiceProvider =
|
|
85
|
+
value.stateServiceProvider = this.parent.stateServiceProvider;
|
|
54
86
|
}
|
|
55
|
-
return value;
|
|
87
|
+
return reference?.value;
|
|
56
88
|
},
|
|
57
89
|
|
|
58
|
-
set: (
|
|
59
|
-
|
|
90
|
+
set: function set(
|
|
91
|
+
this: TargetTransitioningModule & any,
|
|
92
|
+
newValue: WithPath & WithStateServiceProvider
|
|
93
|
+
) {
|
|
94
|
+
this[`protokit_state_cache_${propertyKey}`] = createReference(newValue);
|
|
60
95
|
},
|
|
61
96
|
});
|
|
62
97
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Bool, Field, Provable, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
export class FieldOption extends Struct({
|
|
4
|
+
isSome: Bool,
|
|
5
|
+
value: Field,
|
|
6
|
+
}) {
|
|
7
|
+
public static from(isSome: Bool, potentialValue: Field) {
|
|
8
|
+
return {
|
|
9
|
+
isSome,
|
|
10
|
+
value: Provable.if(isSome, potentialValue, Field(0)),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Field, Poseidon, ProvablePure } from "o1js";
|
|
2
|
+
import { hashWithPrefix, prefixToField } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
import { MINA_PREFIXES, MINA_SALTS } from "../hashing/mina-prefixes";
|
|
5
|
+
|
|
6
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
7
|
+
|
|
8
|
+
function salt(prefix: string) {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
10
|
+
return Poseidon.update(
|
|
11
|
+
[Field(0), Field(0), Field(0)],
|
|
12
|
+
[prefixToField(prefix)]
|
|
13
|
+
) as [Field, Field, Field];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function emptyActions(): Field {
|
|
17
|
+
return salt(MINA_SALTS.empty_actions)[0];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function emptyEvents(): Field {
|
|
21
|
+
return salt(MINA_SALTS.empty_events)[0];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class MinaActions {
|
|
25
|
+
static actionHash(
|
|
26
|
+
action: Field[],
|
|
27
|
+
previousHash: Field = emptyActions()
|
|
28
|
+
): Field {
|
|
29
|
+
const actionDataHash = hashWithPrefix(MINA_PREFIXES.event, action);
|
|
30
|
+
return hashWithPrefix(MINA_PREFIXES.sequenceEvents, [
|
|
31
|
+
previousHash,
|
|
32
|
+
actionDataHash,
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export class MinaEvents {
|
|
38
|
+
static eventHash(event: Field[], previousHash: Field = emptyEvents()): Field {
|
|
39
|
+
const actionDataHash = hashWithPrefix(MINA_PREFIXES.event, event);
|
|
40
|
+
return hashWithPrefix(MINA_PREFIXES.events, [previousHash, actionDataHash]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export class MinaPrefixedProvableHashList<
|
|
45
|
+
Value,
|
|
46
|
+
> extends ProvableHashList<Value> {
|
|
47
|
+
public constructor(
|
|
48
|
+
valueType: ProvablePure<Value>,
|
|
49
|
+
public readonly prefix: string,
|
|
50
|
+
internalCommitment?: Field
|
|
51
|
+
) {
|
|
52
|
+
super(valueType, internalCommitment);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public empty(): Field {
|
|
56
|
+
return Field(0);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
protected hash(elements: Field[]): Field {
|
|
60
|
+
const init = salt(this.prefix);
|
|
61
|
+
const digest = Poseidon.update(init, elements);
|
|
62
|
+
return digest[0];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
|
|
67
|
+
public constructor(internalCommitment?: Field) {
|
|
68
|
+
super(Field, MINA_PREFIXES.sequenceEvents, internalCommitment);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, ProvablePure, Poseidon } from "o1js";
|
|
2
2
|
|
|
3
3
|
import { ProvableHashList } from "./ProvableHashList.js";
|
|
4
4
|
import { stringToField } from "./utils";
|
|
@@ -7,7 +7,7 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
|
7
7
|
private readonly prefix: Field;
|
|
8
8
|
|
|
9
9
|
public constructor(
|
|
10
|
-
valueType:
|
|
10
|
+
valueType: ProvablePure<Value>,
|
|
11
11
|
prefix: string,
|
|
12
12
|
internalCommitment: Field = Field(0)
|
|
13
13
|
) {
|
|
@@ -15,6 +15,10 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
|
15
15
|
this.prefix = stringToField(prefix);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
public empty(): Field {
|
|
19
|
+
return Field(0);
|
|
20
|
+
}
|
|
21
|
+
|
|
18
22
|
protected hash(elements: Field[]): Field {
|
|
19
23
|
return Poseidon.hash([this.prefix, ...elements]);
|
|
20
24
|
}
|
|
@@ -1,16 +1,101 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Field,
|
|
3
|
+
Poseidon,
|
|
4
|
+
Bool,
|
|
5
|
+
Provable,
|
|
6
|
+
ProvablePure,
|
|
7
|
+
Unconstrained,
|
|
8
|
+
} from "o1js";
|
|
9
|
+
|
|
10
|
+
import { NonMethods } from "./utils";
|
|
11
|
+
|
|
12
|
+
export type ProvableHashListData<Value> = {
|
|
13
|
+
preimage: Field;
|
|
14
|
+
value: NonMethods<Value>;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type VerifiedTransition<T> = {
|
|
18
|
+
from: T;
|
|
19
|
+
to: T;
|
|
20
|
+
};
|
|
2
21
|
|
|
3
22
|
/**
|
|
4
23
|
* Utilities for creating a hash list from a given value type.
|
|
5
24
|
*/
|
|
6
25
|
export abstract class ProvableHashList<Value> {
|
|
26
|
+
public commitment: Field;
|
|
27
|
+
|
|
7
28
|
public constructor(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
29
|
+
protected readonly valueType: ProvablePure<Value>,
|
|
30
|
+
commitment?: Field | undefined,
|
|
31
|
+
private unconstrainedList: Unconstrained<
|
|
32
|
+
ProvableHashListData<Value>[]
|
|
33
|
+
> = Unconstrained.from([])
|
|
34
|
+
) {
|
|
35
|
+
this.commitment = commitment ?? this.empty();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
protected abstract empty(): Field;
|
|
11
39
|
|
|
12
40
|
protected abstract hash(elements: Field[]): Field;
|
|
13
41
|
|
|
42
|
+
private pushUnconstrained(preimage: Field, value: Value, condition?: Bool) {
|
|
43
|
+
this.unconstrainedList.updateAsProver((array) => {
|
|
44
|
+
if (condition !== undefined && !condition.toBoolean()) {
|
|
45
|
+
return array;
|
|
46
|
+
}
|
|
47
|
+
return [
|
|
48
|
+
...array,
|
|
49
|
+
{
|
|
50
|
+
preimage: preimage.toConstant(),
|
|
51
|
+
value: Provable.toConstant(this.valueType, value),
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Fast-forwards the state of the hashlist to a specified new tip.
|
|
59
|
+
* This assumes the transition (from -> to) to be already verified somewhere
|
|
60
|
+
* else that is outside this scope.
|
|
61
|
+
*/
|
|
62
|
+
public fastForward(
|
|
63
|
+
transition: VerifiedTransition<Field>,
|
|
64
|
+
message: string = "some hashlist"
|
|
65
|
+
) {
|
|
66
|
+
const { from, to } = transition;
|
|
67
|
+
from.assertEquals(
|
|
68
|
+
this.commitment,
|
|
69
|
+
`From-commitment for ${message} not matching`
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
this.commitment = to;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public fastForwardIf(
|
|
76
|
+
transition: VerifiedTransition<Field>,
|
|
77
|
+
condition: Bool,
|
|
78
|
+
message: string = "some hashlist"
|
|
79
|
+
) {
|
|
80
|
+
const { from, to } = transition;
|
|
81
|
+
|
|
82
|
+
// Equal to condition -> (from == this.commitment)
|
|
83
|
+
from
|
|
84
|
+
.mul(condition.toField())
|
|
85
|
+
.assertEquals(
|
|
86
|
+
this.commitment.mul(condition.toField()),
|
|
87
|
+
`From-commitment for ${message} not matching`
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
this.commitment = Provable.if(condition, to, this.commitment);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public witnessTip(preimage: Field, value: Value): Bool {
|
|
94
|
+
return this.hash([preimage, ...this.valueType.toFields(value)]).equals(
|
|
95
|
+
this.commitment
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
14
99
|
/**
|
|
15
100
|
* Converts the provided value to Field[] and appends it to
|
|
16
101
|
* the current hashlist.
|
|
@@ -19,19 +104,25 @@ export abstract class ProvableHashList<Value> {
|
|
|
19
104
|
* @returns Current hash list.
|
|
20
105
|
*/
|
|
21
106
|
public push(value: Value) {
|
|
107
|
+
this.pushUnconstrained(this.commitment, value);
|
|
108
|
+
|
|
22
109
|
this.commitment = this.hash([
|
|
23
110
|
this.commitment,
|
|
24
111
|
...this.valueType.toFields(value),
|
|
25
112
|
]);
|
|
113
|
+
|
|
26
114
|
return this;
|
|
27
115
|
}
|
|
28
116
|
|
|
29
117
|
public pushIf(value: Value, condition: Bool) {
|
|
118
|
+
this.pushUnconstrained(this.commitment, value, condition);
|
|
119
|
+
|
|
30
120
|
const newCommitment = this.hash([
|
|
31
121
|
this.commitment,
|
|
32
122
|
...this.valueType.toFields(value),
|
|
33
123
|
]);
|
|
34
124
|
this.commitment = Provable.if(condition, newCommitment, this.commitment);
|
|
125
|
+
|
|
35
126
|
return this;
|
|
36
127
|
}
|
|
37
128
|
|
|
@@ -41,10 +132,24 @@ export abstract class ProvableHashList<Value> {
|
|
|
41
132
|
public toField() {
|
|
42
133
|
return this.commitment;
|
|
43
134
|
}
|
|
135
|
+
|
|
136
|
+
public isEmpty(): Bool {
|
|
137
|
+
return this.commitment.equals(this.empty());
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
public getUnconstrainedValues(): Unconstrained<
|
|
141
|
+
ProvableHashListData<Value>[]
|
|
142
|
+
> {
|
|
143
|
+
return this.unconstrainedList;
|
|
144
|
+
}
|
|
44
145
|
}
|
|
45
146
|
|
|
46
147
|
export class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
|
|
47
148
|
public hash(elements: Field[]): Field {
|
|
48
149
|
return Poseidon.hash(elements);
|
|
49
150
|
}
|
|
151
|
+
|
|
152
|
+
public empty(): Field {
|
|
153
|
+
return Field(0);
|
|
154
|
+
}
|
|
50
155
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Bool, Field, Poseidon, Provable, ProvablePure } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { NonMethods } from "./utils";
|
|
4
|
+
|
|
5
|
+
export class ProvableReductionHashList<Value> {
|
|
6
|
+
public constructor(
|
|
7
|
+
protected readonly valueType: ProvablePure<Value>,
|
|
8
|
+
public commitment: Field = Field(0)
|
|
9
|
+
) {}
|
|
10
|
+
|
|
11
|
+
public unconstrainedList: Value[] = [];
|
|
12
|
+
|
|
13
|
+
private constrainedLastValue: Value | undefined = undefined;
|
|
14
|
+
|
|
15
|
+
private preimage: Field = this.commitment;
|
|
16
|
+
|
|
17
|
+
public pushAndReduce(
|
|
18
|
+
value: Value,
|
|
19
|
+
reduce: (previous: Value) => [Value, Bool]
|
|
20
|
+
): { popLast: Bool; value: Value } {
|
|
21
|
+
let valueToPush = value;
|
|
22
|
+
let popLast = Bool(false);
|
|
23
|
+
|
|
24
|
+
// Theoretically, we can feed the preimage + last value as a witness
|
|
25
|
+
// for non-zero commitment starts (like used in the BlockProver), because
|
|
26
|
+
// currently it won't reduce across chunks. But this is okay for now I think
|
|
27
|
+
if (this.constrainedLastValue !== undefined) {
|
|
28
|
+
[valueToPush, popLast] = reduce(this.constrainedLastValue);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Provable.asProver(() => {
|
|
32
|
+
if (popLast.toBoolean()) {
|
|
33
|
+
this.unconstrainedList.pop();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const valueAsConstant = this.valueType.fromFields(
|
|
37
|
+
this.valueType.toFields(valueToPush).map((field) => field.toConstant())
|
|
38
|
+
);
|
|
39
|
+
this.unconstrainedList.push(valueAsConstant);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const currentCommitment = this.commitment;
|
|
43
|
+
const noPopCommitment = this.hash([
|
|
44
|
+
currentCommitment,
|
|
45
|
+
...this.valueType.toFields(valueToPush),
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
const popCommitment = this.hash([
|
|
49
|
+
this.preimage,
|
|
50
|
+
...this.valueType.toFields(valueToPush),
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
|
|
54
|
+
|
|
55
|
+
this.constrainedLastValue = valueToPush;
|
|
56
|
+
this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
popLast,
|
|
60
|
+
value: valueToPush,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public pushIf(value: Value, condition: Bool) {
|
|
65
|
+
throw new Error("pushIf is not implemented for ReducedHashList");
|
|
66
|
+
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public hash(elements: Field[]): Field {
|
|
71
|
+
return Poseidon.hash(elements);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public getUnconstrainedValues(): NonMethods<Value>[] {
|
|
75
|
+
return this.unconstrainedList;
|
|
76
|
+
}
|
|
77
|
+
}
|