@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,53 @@
|
|
|
1
|
+
import { Bool, Field, FlexibleProvablePure, Provable, Struct } from "o1js";
|
|
2
|
+
import {
|
|
3
|
+
LinkedMerkleTree,
|
|
4
|
+
LinkedMerkleTreeReadWitness,
|
|
5
|
+
} from "@proto-kit/common";
|
|
6
|
+
|
|
7
|
+
import { OutgoingMessage } from "./OutgoingMessage";
|
|
8
|
+
|
|
9
|
+
// TODO Make that dynamic based on processors configured
|
|
10
|
+
export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
|
|
11
|
+
|
|
12
|
+
export function createMessageStruct<T>(type: FlexibleProvablePure<T>) {
|
|
13
|
+
return class MessageStruct extends Struct({
|
|
14
|
+
value: type,
|
|
15
|
+
messageType: Field,
|
|
16
|
+
}) {} satisfies FlexibleProvablePure<OutgoingMessage<T>>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class OutgoingMessageArgument extends Struct({
|
|
20
|
+
witness: LinkedMerkleTreeReadWitness,
|
|
21
|
+
messageType: Field,
|
|
22
|
+
}) {
|
|
23
|
+
public static dummy(): OutgoingMessageArgument {
|
|
24
|
+
return new OutgoingMessageArgument({
|
|
25
|
+
witness: LinkedMerkleTree.dummyReadWitness(),
|
|
26
|
+
messageType: Field(0),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class OutgoingMessageArgumentBatch extends Struct({
|
|
32
|
+
arguments: Provable.Array(
|
|
33
|
+
OutgoingMessageArgument,
|
|
34
|
+
OUTGOING_MESSAGE_BATCH_SIZE
|
|
35
|
+
),
|
|
36
|
+
|
|
37
|
+
isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
|
|
38
|
+
}) {
|
|
39
|
+
public static fromMessages(providedArguments: OutgoingMessageArgument[]) {
|
|
40
|
+
const batch = providedArguments.slice();
|
|
41
|
+
const isDummys = batch.map(() => Bool(false));
|
|
42
|
+
|
|
43
|
+
while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
|
|
44
|
+
batch.push(OutgoingMessageArgument.dummy());
|
|
45
|
+
isDummys.push(Bool(true));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return new OutgoingMessageArgumentBatch({
|
|
49
|
+
arguments: batch,
|
|
50
|
+
isDummys,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AccountUpdate,
|
|
3
|
+
Bool,
|
|
4
|
+
Field,
|
|
5
|
+
FlexibleProvablePure,
|
|
6
|
+
PublicKey,
|
|
7
|
+
} from "o1js";
|
|
8
|
+
import { implement, NoConfig } from "@proto-kit/common";
|
|
9
|
+
|
|
10
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
11
|
+
|
|
12
|
+
export function outgoingMessageProcessor() {
|
|
13
|
+
return implement("OutgoingMessageProcessor");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type MessageProcessorArgs = {
|
|
17
|
+
bridgeContract: {
|
|
18
|
+
publicKey: PublicKey;
|
|
19
|
+
tokenId: Field;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export abstract class OutgoingMessageProcessor<
|
|
24
|
+
T,
|
|
25
|
+
Config = NoConfig,
|
|
26
|
+
> extends ProtocolModule<Config> {
|
|
27
|
+
private status: Bool = Bool(false);
|
|
28
|
+
|
|
29
|
+
private statusMessage?: string = undefined;
|
|
30
|
+
|
|
31
|
+
public assertTrue(b: Bool, msg?: string) {
|
|
32
|
+
this.status = this.status.and(b);
|
|
33
|
+
if (this.statusMessage === undefined) {
|
|
34
|
+
this.statusMessage = msg;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
processMessage(
|
|
39
|
+
message: T,
|
|
40
|
+
args: MessageProcessorArgs
|
|
41
|
+
): {
|
|
42
|
+
accountUpdates: AccountUpdate[];
|
|
43
|
+
status: Bool;
|
|
44
|
+
statusMessage?: string;
|
|
45
|
+
} {
|
|
46
|
+
this.status = Bool(true);
|
|
47
|
+
this.statusMessage = undefined;
|
|
48
|
+
|
|
49
|
+
const accountUpdates = this.process(message, args);
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
accountUpdates,
|
|
53
|
+
status: this.status,
|
|
54
|
+
statusMessage: this.statusMessage,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
abstract type: FlexibleProvablePure<T>;
|
|
59
|
+
|
|
60
|
+
abstract messageType: string;
|
|
61
|
+
|
|
62
|
+
abstract dummy(): T;
|
|
63
|
+
|
|
64
|
+
abstract process(message: T, args: MessageProcessorArgs): AccountUpdate[];
|
|
65
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Field, PublicKey, UInt32 } from "o1js";
|
|
2
|
+
import { InferProofBase } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
5
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
6
|
+
import type { BlockProof } from "../../prover/block/BlockProvable";
|
|
7
|
+
import type { SettlementContractType } from "../contracts/settlement/SettlementBase";
|
|
8
|
+
|
|
9
|
+
export type InputBlockProof = InferProofBase<BlockProof>;
|
|
10
|
+
|
|
11
|
+
export type SettlementStateRecord = {
|
|
12
|
+
sequencerKey: PublicKey;
|
|
13
|
+
lastSettlementL1BlockHeight: UInt32;
|
|
14
|
+
|
|
15
|
+
stateRoot: Field;
|
|
16
|
+
networkStateHash: Field;
|
|
17
|
+
blockHashRoot: Field;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type SettlementHookInputs = {
|
|
21
|
+
blockProof: InputBlockProof;
|
|
22
|
+
fromNetworkState: NetworkState;
|
|
23
|
+
toNetworkState: NetworkState;
|
|
24
|
+
newPromisedMessagesHash: Field;
|
|
25
|
+
contractState: SettlementStateRecord;
|
|
26
|
+
currentL1BlockHeight: UInt32;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export abstract class ProvableSettlementHook<
|
|
30
|
+
Config,
|
|
31
|
+
> extends ProtocolModule<Config> {
|
|
32
|
+
public abstract beforeSettlement(
|
|
33
|
+
smartContract: SettlementContractType,
|
|
34
|
+
inputs: SettlementHookInputs
|
|
35
|
+
): Promise<void>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { SmartContract } from "o1js";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
ContractModule,
|
|
6
|
+
SmartContractClassFromInterface,
|
|
7
|
+
} from "../ContractModule";
|
|
8
|
+
import type { SettlementModulesRecord } from "../SettlementContractModule";
|
|
9
|
+
|
|
10
|
+
export type InferContractType<
|
|
11
|
+
Module extends TypedClass<ContractModule<any, any>>,
|
|
12
|
+
> =
|
|
13
|
+
Module extends TypedClass<infer ConcreteModule>
|
|
14
|
+
? ConcreteModule extends ContractModule<infer Contract, any>
|
|
15
|
+
? Contract & SmartContract
|
|
16
|
+
: never
|
|
17
|
+
: never;
|
|
18
|
+
|
|
19
|
+
export type GetContracts<SettlementModules extends SettlementModulesRecord> = {
|
|
20
|
+
[Key in keyof SettlementModules]: SmartContractClassFromInterface<
|
|
21
|
+
InferContractType<SettlementModules[Key]>
|
|
22
|
+
>;
|
|
23
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { UInt64 } from "o1js";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
ProvableSettlementHook,
|
|
5
|
+
SettlementHookInputs,
|
|
6
|
+
} from "../modularity/ProvableSettlementHook";
|
|
7
|
+
import { SettlementContractType } from "../contracts/settlement/SettlementBase";
|
|
8
|
+
|
|
9
|
+
type NetworkStateSettlementModuleConfig = {
|
|
10
|
+
blocksPerL1Block: UInt64;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
14
|
+
export class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
|
|
15
|
+
public async beforeSettlement(
|
|
16
|
+
smartContract: SettlementContractType,
|
|
17
|
+
{
|
|
18
|
+
blockProof,
|
|
19
|
+
fromNetworkState,
|
|
20
|
+
toNetworkState,
|
|
21
|
+
contractState,
|
|
22
|
+
currentL1BlockHeight,
|
|
23
|
+
}: SettlementHookInputs
|
|
24
|
+
) {
|
|
25
|
+
const { lastSettlementL1BlockHeight } = contractState;
|
|
26
|
+
|
|
27
|
+
const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
|
|
28
|
+
|
|
29
|
+
const numL1Blocks = currentL1BlockHeight.sub(lastSettlementL1BlockHeight);
|
|
30
|
+
const expectedHeightDiff = numL1Blocks.toUInt64().mul(blocksPerL1Block);
|
|
31
|
+
|
|
32
|
+
const actualHeightDiff = toNetworkState.block.height.sub(
|
|
33
|
+
fromNetworkState.block.height
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const acceptableDerivation = numL1Blocks.mul(1).div(10);
|
|
37
|
+
|
|
38
|
+
// TODO Check within bounds efficiently
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { Mixin } from "ts-mixer";
|
|
2
|
+
import { Bool, Field, Provable, type FlexibleProvablePure, Struct } from "o1js";
|
|
3
|
+
import { container } from "tsyringe";
|
|
4
|
+
import { dummyValue } from "@proto-kit/common";
|
|
5
|
+
|
|
6
|
+
import { Path } from "../model/Path";
|
|
7
|
+
import { Option } from "../model/Option";
|
|
8
|
+
import { StateTransition } from "../model/StateTransition";
|
|
9
|
+
|
|
10
|
+
import { StateServiceProvider } from "./StateServiceProvider";
|
|
11
|
+
import { RuntimeMethodExecutionContext } from "./context/RuntimeMethodExecutionContext";
|
|
12
|
+
import { WitnessBlockContext } from "./WitnessBlockContext";
|
|
13
|
+
|
|
14
|
+
export class WithPath {
|
|
15
|
+
public path?: Field;
|
|
16
|
+
|
|
17
|
+
public hasPathOrFail(): asserts this is { path: Path } {
|
|
18
|
+
if (!this.path) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
"Could not find 'path', did you forget to add '@state' to your state property?"
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class WithStateServiceProvider {
|
|
27
|
+
public stateServiceProvider?: StateServiceProvider;
|
|
28
|
+
|
|
29
|
+
public hasStateServiceOrFail(): asserts this is {
|
|
30
|
+
stateServiceProvider: StateServiceProvider;
|
|
31
|
+
} {
|
|
32
|
+
if (!this.stateServiceProvider) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
"Could not find 'stateServiceProvider', did you forget to add '@state' to your state property?"
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Utilities for runtime module state, such as get/set
|
|
42
|
+
*/
|
|
43
|
+
export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
44
|
+
/**
|
|
45
|
+
* Creates a new state wrapper for the provided value type.
|
|
46
|
+
*
|
|
47
|
+
* @param valueType - Type of value to be stored (e.g. UInt64, Struct, ...)
|
|
48
|
+
* @returns New state for the given value type.
|
|
49
|
+
*/
|
|
50
|
+
public static from<Value>(valueType: FlexibleProvablePure<Value>) {
|
|
51
|
+
return new State<Value>(valueType);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public constructor(public valueType: FlexibleProvablePure<Value>) {
|
|
55
|
+
super();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private stateType = class StateType extends Struct({
|
|
59
|
+
value: this.valueType,
|
|
60
|
+
isSome: Bool,
|
|
61
|
+
}) {};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Returns the state that is currently the current state tree
|
|
65
|
+
* value: The value-fields, or if not state was found, dummy values
|
|
66
|
+
* isSome: Whether the values where found in the state or not
|
|
67
|
+
* (Basically, whether the value-fields are dummy values or actual values
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
private async getState(): Promise<{ value: Value; isSome: Bool }> {
|
|
71
|
+
this.hasStateServiceOrFail();
|
|
72
|
+
this.hasPathOrFail();
|
|
73
|
+
|
|
74
|
+
const { path, stateServiceProvider, valueType } = this;
|
|
75
|
+
|
|
76
|
+
const { stateTransitions } = container
|
|
77
|
+
.resolve(RuntimeMethodExecutionContext)
|
|
78
|
+
.current().result;
|
|
79
|
+
|
|
80
|
+
// TODO Use Stateservice for this
|
|
81
|
+
// First try to find a match inside already created stateTransitions
|
|
82
|
+
let previousMutatingTransitions: StateTransition<any>[] = [];
|
|
83
|
+
previousMutatingTransitions = stateTransitions.filter(
|
|
84
|
+
(transition) =>
|
|
85
|
+
transition.path.toConstant().toBigInt() ===
|
|
86
|
+
path.toConstant().toBigInt() && transition.to.isSome.toBoolean()
|
|
87
|
+
);
|
|
88
|
+
const pmtLength = previousMutatingTransitions.length;
|
|
89
|
+
|
|
90
|
+
let value =
|
|
91
|
+
pmtLength > 0
|
|
92
|
+
? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
93
|
+
(previousMutatingTransitions[pmtLength - 1].to.value as Value)
|
|
94
|
+
: undefined;
|
|
95
|
+
|
|
96
|
+
if (value !== undefined) {
|
|
97
|
+
return { value, isSome: Bool(true) };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// If the value is still undefined, look it up in the stateService
|
|
101
|
+
const fields = await stateServiceProvider.stateService.get(path);
|
|
102
|
+
if (fields) {
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
104
|
+
value = valueType.fromFields(fields) as Value;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (value !== undefined) {
|
|
108
|
+
return { value, isSome: Bool(true) };
|
|
109
|
+
}
|
|
110
|
+
return { value: dummyValue(valueType), isSome: Bool(false) };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Provides an in-circuit witness for the current state representation,
|
|
115
|
+
* and constructs an Option out of it.
|
|
116
|
+
*
|
|
117
|
+
* @returns Optional value of the current state
|
|
118
|
+
*/
|
|
119
|
+
private async witnessFromState() {
|
|
120
|
+
// get the value from storage, or return a dummy value instead
|
|
121
|
+
// also check if the value exists in the storage or not
|
|
122
|
+
const { value, isSome } = await Provable.witnessAsync(
|
|
123
|
+
this.stateType,
|
|
124
|
+
async () => await this.getState()
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
return Option.from(isSome, value, this.valueType);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Retrieves the current state and creates a state transition
|
|
132
|
+
* anchoring the use of the current state value in the circuit.
|
|
133
|
+
*
|
|
134
|
+
* @returns Option representation of the current state.
|
|
135
|
+
*/
|
|
136
|
+
public async get(): Promise<Option<Value>> {
|
|
137
|
+
const option = await this.witnessFromState();
|
|
138
|
+
|
|
139
|
+
this.hasPathOrFail();
|
|
140
|
+
|
|
141
|
+
const { isInWitnessBlock } = container.resolve(WitnessBlockContext);
|
|
142
|
+
|
|
143
|
+
// If we're inside a witness block, we only want to retrieve the state
|
|
144
|
+
// to use as a witness but not emit an ST
|
|
145
|
+
if (!isInWitnessBlock) {
|
|
146
|
+
const stateTransition = StateTransition.from(this.path, option);
|
|
147
|
+
|
|
148
|
+
container
|
|
149
|
+
.resolve(RuntimeMethodExecutionContext)
|
|
150
|
+
.addStateTransition(stateTransition);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return option;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Sets a new state value by creating a state transition from
|
|
158
|
+
* the current value to the newly set value.
|
|
159
|
+
*
|
|
160
|
+
* The newly set value isn't available via state.get(), since the
|
|
161
|
+
* state transitions are not applied within the same circuit.
|
|
162
|
+
* You can however store and access your new value in
|
|
163
|
+
* a separate circuit variable.
|
|
164
|
+
*
|
|
165
|
+
* @param value - Value to be set as the current state
|
|
166
|
+
*/
|
|
167
|
+
public async set(value: Value) {
|
|
168
|
+
// link the transition to the current state
|
|
169
|
+
const fromOption = await this.witnessFromState();
|
|
170
|
+
const toOption = Option.fromValue(value, this.valueType);
|
|
171
|
+
|
|
172
|
+
this.hasPathOrFail();
|
|
173
|
+
|
|
174
|
+
const stateTransition = StateTransition.fromTo(
|
|
175
|
+
this.path,
|
|
176
|
+
fromOption,
|
|
177
|
+
toOption
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
const { isInWitnessBlock } = container.resolve(WitnessBlockContext);
|
|
181
|
+
|
|
182
|
+
if (isInWitnessBlock) {
|
|
183
|
+
throw new Error("Cannot set state inside of provable block.");
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
container
|
|
187
|
+
.resolve(RuntimeMethodExecutionContext)
|
|
188
|
+
.addStateTransition(stateTransition);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Field, FlexibleProvablePure } from "o1js";
|
|
2
|
+
import { Mixin } from "ts-mixer";
|
|
3
|
+
|
|
4
|
+
import { Path } from "../model/Path";
|
|
5
|
+
import { Option } from "../model/Option";
|
|
6
|
+
|
|
7
|
+
import { State, WithStateServiceProvider, WithPath } from "./State";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Map-like wrapper for state
|
|
11
|
+
*/
|
|
12
|
+
export class StateMap<KeyType, ValueType> extends Mixin(
|
|
13
|
+
WithPath,
|
|
14
|
+
WithStateServiceProvider
|
|
15
|
+
) {
|
|
16
|
+
/**
|
|
17
|
+
* Create a new state map with the given key and value types
|
|
18
|
+
*
|
|
19
|
+
* @param keyType - Type to be used as a key
|
|
20
|
+
* @param valueType - Type to be stored as a value
|
|
21
|
+
* @returns State map with provided key and value types.
|
|
22
|
+
*/
|
|
23
|
+
public static from<KeyType, ValueType>(
|
|
24
|
+
keyType: FlexibleProvablePure<KeyType>,
|
|
25
|
+
valueType: FlexibleProvablePure<ValueType>
|
|
26
|
+
): StateMap<KeyType, ValueType> {
|
|
27
|
+
return new StateMap<KeyType, ValueType>(keyType, valueType);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public constructor(
|
|
31
|
+
public keyType: FlexibleProvablePure<KeyType>,
|
|
32
|
+
public valueType: FlexibleProvablePure<ValueType>
|
|
33
|
+
) {
|
|
34
|
+
super();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public getPath(key: KeyType): Field {
|
|
38
|
+
this.hasPathOrFail();
|
|
39
|
+
return Path.fromKey(this.path, this.keyType, key);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Obtains a value for the provided key in the current state map.
|
|
44
|
+
*
|
|
45
|
+
* @param key - Key to obtain the state for
|
|
46
|
+
* @returns Value for the provided key.
|
|
47
|
+
*/
|
|
48
|
+
public async get(key: KeyType): Promise<Option<ValueType>> {
|
|
49
|
+
const state = State.from(this.valueType);
|
|
50
|
+
this.hasPathOrFail();
|
|
51
|
+
this.hasStateServiceOrFail();
|
|
52
|
+
|
|
53
|
+
state.path = this.getPath(key);
|
|
54
|
+
state.stateServiceProvider = this.stateServiceProvider;
|
|
55
|
+
return await state.get();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Sets a value for the given key in the current state map.
|
|
60
|
+
*
|
|
61
|
+
* @param key - Key to store the value under
|
|
62
|
+
* @param value - Value to be stored under the given key
|
|
63
|
+
*/
|
|
64
|
+
public async set(key: KeyType, value: ValueType): Promise<void> {
|
|
65
|
+
const state = State.from(this.valueType);
|
|
66
|
+
this.hasPathOrFail();
|
|
67
|
+
this.hasStateServiceOrFail();
|
|
68
|
+
|
|
69
|
+
state.path = Path.fromKey(this.path, this.keyType, key);
|
|
70
|
+
state.stateServiceProvider = this.stateServiceProvider;
|
|
71
|
+
return await state.set(value);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { injectable } from "tsyringe";
|
|
2
|
+
import { log } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
import { SimpleAsyncStateService } from "./StateService";
|
|
5
|
+
|
|
6
|
+
const errors = {
|
|
7
|
+
stateServiceNotSet: () =>
|
|
8
|
+
new Error(
|
|
9
|
+
"StateService has not been set yet. Be sure to either call your runtime or protocol function by creating them with an AppChain or by setting the stateService manually."
|
|
10
|
+
),
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
@injectable()
|
|
14
|
+
export class StateServiceProvider {
|
|
15
|
+
private readonly stateServiceStack: SimpleAsyncStateService[] = [];
|
|
16
|
+
|
|
17
|
+
public get stateService(): SimpleAsyncStateService {
|
|
18
|
+
if (this.stateServiceStack.length === 0) {
|
|
19
|
+
throw errors.stateServiceNotSet();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Assertion here is ok, because we check that the array is not empty above
|
|
23
|
+
return this.stateServiceStack.at(-1)!;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public setCurrentStateService(service: SimpleAsyncStateService) {
|
|
27
|
+
this.stateServiceStack.push(service);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public popCurrentStateService() {
|
|
31
|
+
if (this.stateServiceStack.length === 0) {
|
|
32
|
+
log.trace("Trying to pop from empty state-service stack");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.stateServiceStack.pop();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { container, singleton } from "tsyringe";
|
|
2
|
+
import { Provable } from "o1js";
|
|
3
|
+
|
|
4
|
+
@singleton()
|
|
5
|
+
export class WitnessBlockContext {
|
|
6
|
+
public witnessBlockDepth: number = 0;
|
|
7
|
+
|
|
8
|
+
public get isInWitnessBlock() {
|
|
9
|
+
return this.witnessBlockDepth > 0;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const asyncProxyWitnessFunction = <
|
|
14
|
+
Ret,
|
|
15
|
+
F extends (...args: any[]) => Promise<Ret>,
|
|
16
|
+
>(
|
|
17
|
+
originalFuncDef: F
|
|
18
|
+
) => {
|
|
19
|
+
return async (...args: Parameters<F>) => {
|
|
20
|
+
const context = container.resolve(WitnessBlockContext);
|
|
21
|
+
context.witnessBlockDepth += 1;
|
|
22
|
+
const ret = await originalFuncDef(...args);
|
|
23
|
+
context.witnessBlockDepth -= 1;
|
|
24
|
+
return ret;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const proxySyncWitnessFunction = <
|
|
29
|
+
Params extends any[],
|
|
30
|
+
Ret,
|
|
31
|
+
F extends (...args: Params) => Ret,
|
|
32
|
+
>(
|
|
33
|
+
originalFuncDef: F
|
|
34
|
+
) => {
|
|
35
|
+
return (...args: Params): Ret => {
|
|
36
|
+
const context = container.resolve(WitnessBlockContext);
|
|
37
|
+
context.witnessBlockDepth += 1;
|
|
38
|
+
const ret = originalFuncDef(...args);
|
|
39
|
+
context.witnessBlockDepth -= 1;
|
|
40
|
+
return ret;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
Provable.witnessAsync = asyncProxyWitnessFunction(Provable.witnessAsync);
|
|
45
|
+
|
|
46
|
+
Provable.witness = proxySyncWitnessFunction(Provable.witness);
|
|
47
|
+
|
|
48
|
+
Provable.witnessFields = proxySyncWitnessFunction(Provable.witnessFields);
|
|
49
|
+
|
|
50
|
+
Provable.asProver = proxySyncWitnessFunction(Provable.asProver);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Bool, Provable } from "o1js";
|
|
2
|
+
import { container } from "tsyringe";
|
|
3
|
+
import { log } from "@proto-kit/common";
|
|
4
|
+
|
|
5
|
+
import { RuntimeMethodExecutionContext } from "../context/RuntimeMethodExecutionContext";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Maintains an execution status of the current runtime module method,
|
|
9
|
+
* while prioritizing one-time failures. The assertion won't change the
|
|
10
|
+
* execution status if it has previously failed at least once within the
|
|
11
|
+
* same method execution context.
|
|
12
|
+
*
|
|
13
|
+
* @param condition - Result of the assertion made about the execution status
|
|
14
|
+
* @param message - Optional message describing the prior status
|
|
15
|
+
*/
|
|
16
|
+
export function assert(condition: Bool, message?: string | (() => string)) {
|
|
17
|
+
const executionContext = container.resolve(RuntimeMethodExecutionContext);
|
|
18
|
+
const previousStatus = executionContext.current().result.status;
|
|
19
|
+
const status = condition.and(previousStatus);
|
|
20
|
+
|
|
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
|
+
});
|
|
36
|
+
|
|
37
|
+
executionContext.setStatus(status);
|
|
38
|
+
}
|