@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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
State,
|
|
3
|
+
UInt32,
|
|
4
|
+
AccountUpdateForest,
|
|
5
|
+
state,
|
|
6
|
+
method,
|
|
7
|
+
PublicKey,
|
|
8
|
+
Field,
|
|
9
|
+
Signature,
|
|
10
|
+
DeployArgs,
|
|
11
|
+
Permissions,
|
|
12
|
+
} from "o1js";
|
|
13
|
+
import { O1PublicKeyOption } from "@proto-kit/common";
|
|
14
|
+
|
|
15
|
+
import { NetworkState } from "../../../model/network/NetworkState";
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
DynamicBlockProof,
|
|
19
|
+
SettlementBase,
|
|
20
|
+
SettlementContractType,
|
|
21
|
+
} from "./SettlementBase";
|
|
22
|
+
|
|
23
|
+
export class SettlementContract
|
|
24
|
+
extends SettlementBase
|
|
25
|
+
implements SettlementContractType
|
|
26
|
+
{
|
|
27
|
+
@state(Field) sequencerKey = State<Field>();
|
|
28
|
+
|
|
29
|
+
@state(UInt32) lastSettlementL1BlockHeight = State<UInt32>();
|
|
30
|
+
|
|
31
|
+
@state(Field) stateRoot = State<Field>();
|
|
32
|
+
|
|
33
|
+
@state(Field) networkStateHash = State<Field>();
|
|
34
|
+
|
|
35
|
+
@state(Field) blockHashRoot = State<Field>();
|
|
36
|
+
|
|
37
|
+
public async deployAndInitialize(
|
|
38
|
+
args: DeployArgs | undefined,
|
|
39
|
+
permissions: Permissions,
|
|
40
|
+
sequencer: PublicKey,
|
|
41
|
+
dispatchContract: O1PublicKeyOption
|
|
42
|
+
): Promise<void> {
|
|
43
|
+
dispatchContract.assertNone(
|
|
44
|
+
"Non-bridging settlement contract doesn't require a dispatch contract"
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
await super.deploy(args);
|
|
48
|
+
|
|
49
|
+
this.self.account.permissions.set(permissions);
|
|
50
|
+
|
|
51
|
+
await this.initializeBase(sequencer);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@method async approveBase(forest: AccountUpdateForest) {
|
|
55
|
+
this.checkZeroBalanceChange(forest);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@method async settle(
|
|
59
|
+
blockProof: DynamicBlockProof,
|
|
60
|
+
signature: Signature,
|
|
61
|
+
publicKey: PublicKey,
|
|
62
|
+
inputNetworkState: NetworkState,
|
|
63
|
+
outputNetworkState: NetworkState,
|
|
64
|
+
newPromisedMessagesHash: Field
|
|
65
|
+
): Promise<void> {
|
|
66
|
+
await super.settleBase(
|
|
67
|
+
blockProof,
|
|
68
|
+
signature,
|
|
69
|
+
publicKey,
|
|
70
|
+
inputNetworkState,
|
|
71
|
+
outputNetworkState,
|
|
72
|
+
newPromisedMessagesHash
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Field, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
export class OutgoingMessageKeyStruct extends Struct({
|
|
4
|
+
index: Field,
|
|
5
|
+
tokenId: Field,
|
|
6
|
+
}) {}
|
|
7
|
+
|
|
8
|
+
export type OutgoingMessageEvent<T> = {
|
|
9
|
+
key: OutgoingMessageKeyStruct;
|
|
10
|
+
value: T;
|
|
11
|
+
messageType: Field;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type OutgoingMessage<T> = {
|
|
15
|
+
value: T;
|
|
16
|
+
messageType: Field;
|
|
17
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Bool,
|
|
3
|
+
Field,
|
|
4
|
+
FlexibleProvablePure,
|
|
5
|
+
Provable,
|
|
6
|
+
Struct,
|
|
7
|
+
Unconstrained,
|
|
8
|
+
} from "o1js";
|
|
9
|
+
import {
|
|
10
|
+
LinkedMerkleTree,
|
|
11
|
+
LinkedMerkleTreeReadWitness,
|
|
12
|
+
} from "@proto-kit/common";
|
|
13
|
+
|
|
14
|
+
import { OutgoingMessage } from "./OutgoingMessage";
|
|
15
|
+
|
|
16
|
+
// TODO Make that dynamic based on processors configured
|
|
17
|
+
export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
|
|
18
|
+
|
|
19
|
+
export function createMessageStruct<T>(type: FlexibleProvablePure<T>) {
|
|
20
|
+
return class MessageStruct extends Struct({
|
|
21
|
+
value: type,
|
|
22
|
+
messageType: Field,
|
|
23
|
+
}) {} satisfies FlexibleProvablePure<OutgoingMessage<T>>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class OutgoingMessageArgument extends Struct({
|
|
27
|
+
witness: LinkedMerkleTreeReadWitness,
|
|
28
|
+
messageType: Field,
|
|
29
|
+
data: Unconstrained<Field[]>,
|
|
30
|
+
}) {
|
|
31
|
+
public static dummy(): OutgoingMessageArgument {
|
|
32
|
+
return new OutgoingMessageArgument({
|
|
33
|
+
witness: LinkedMerkleTree.dummyReadWitness(),
|
|
34
|
+
messageType: Field(0),
|
|
35
|
+
data: Unconstrained.from([]),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class OutgoingMessageArgumentBatch extends Struct({
|
|
41
|
+
arguments: Provable.Array(
|
|
42
|
+
OutgoingMessageArgument,
|
|
43
|
+
OUTGOING_MESSAGE_BATCH_SIZE
|
|
44
|
+
),
|
|
45
|
+
|
|
46
|
+
isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
|
|
47
|
+
}) {
|
|
48
|
+
public static fromMessages(providedArguments: OutgoingMessageArgument[]) {
|
|
49
|
+
const batch = providedArguments.slice();
|
|
50
|
+
const isDummys = batch.map(() => Bool(false));
|
|
51
|
+
|
|
52
|
+
while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
|
|
53
|
+
batch.push(OutgoingMessageArgument.dummy());
|
|
54
|
+
isDummys.push(Bool(true));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return new OutgoingMessageArgumentBatch({
|
|
58
|
+
arguments: batch,
|
|
59
|
+
isDummys,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AccountUpdate,
|
|
3
|
+
Bool,
|
|
4
|
+
Field,
|
|
5
|
+
FlexibleProvablePure,
|
|
6
|
+
Poseidon,
|
|
7
|
+
PublicKey,
|
|
8
|
+
} from "o1js";
|
|
9
|
+
import { implement, NoConfig, prefixToField } from "@proto-kit/common";
|
|
10
|
+
|
|
11
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
12
|
+
|
|
13
|
+
export function outgoingMessageProcessor() {
|
|
14
|
+
return implement("OutgoingMessageProcessor");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type MessageProcessorArgs = {
|
|
18
|
+
bridgeContract: {
|
|
19
|
+
publicKey: PublicKey;
|
|
20
|
+
tokenId: Field;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export abstract class OutgoingMessageProcessor<
|
|
25
|
+
T,
|
|
26
|
+
Config = NoConfig,
|
|
27
|
+
> extends ProtocolModule<Config> {
|
|
28
|
+
private status: Bool = Bool(false);
|
|
29
|
+
|
|
30
|
+
private statusMessage?: string = undefined;
|
|
31
|
+
|
|
32
|
+
public assertTrue(b: Bool, msg?: string) {
|
|
33
|
+
this.status = this.status.and(b);
|
|
34
|
+
if (this.statusMessage === undefined) {
|
|
35
|
+
this.statusMessage = msg;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
processMessage(
|
|
40
|
+
message: T,
|
|
41
|
+
args: MessageProcessorArgs
|
|
42
|
+
): {
|
|
43
|
+
accountUpdates: AccountUpdate[];
|
|
44
|
+
status: Bool;
|
|
45
|
+
statusMessage?: string;
|
|
46
|
+
} {
|
|
47
|
+
this.status = Bool(true);
|
|
48
|
+
this.statusMessage = undefined;
|
|
49
|
+
|
|
50
|
+
const accountUpdates = this.process(message, args);
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
accountUpdates,
|
|
54
|
+
status: this.status,
|
|
55
|
+
statusMessage: this.statusMessage,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public getMessageType(): Field {
|
|
60
|
+
// TODO static salt/prefix
|
|
61
|
+
// This executes the bigint poseidon behind the scenes, therefore creates a constant
|
|
62
|
+
const messageType = Poseidon.hash([prefixToField(this.messageType)]);
|
|
63
|
+
if (!messageType.isConstant()) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
"Underlying poseidon implementation has changed and doesn't create a constant anymore"
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
return messageType;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
abstract type: FlexibleProvablePure<T> & { name: string };
|
|
72
|
+
|
|
73
|
+
abstract messageType: string;
|
|
74
|
+
|
|
75
|
+
abstract dummy(): T;
|
|
76
|
+
|
|
77
|
+
abstract process(message: T, args: MessageProcessorArgs): AccountUpdate[];
|
|
78
|
+
}
|
|
@@ -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 */
|
package/src/state/State.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mixin } from "ts-mixer";
|
|
2
|
-
import { Bool, Field, Provable, type FlexibleProvablePure } from "
|
|
2
|
+
import { Bool, Field, Provable, type FlexibleProvablePure, Struct } from "o1js";
|
|
3
3
|
import { container } from "tsyringe";
|
|
4
4
|
import { dummyValue } from "@proto-kit/common";
|
|
5
5
|
|
|
@@ -9,6 +9,7 @@ import { StateTransition } from "../model/StateTransition";
|
|
|
9
9
|
|
|
10
10
|
import { StateServiceProvider } from "./StateServiceProvider";
|
|
11
11
|
import { RuntimeMethodExecutionContext } from "./context/RuntimeMethodExecutionContext";
|
|
12
|
+
import { WitnessBlockContext } from "./WitnessBlockContext";
|
|
12
13
|
|
|
13
14
|
export class WithPath {
|
|
14
15
|
public path?: Field;
|
|
@@ -54,7 +55,19 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
54
55
|
super();
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
private
|
|
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 }> {
|
|
58
71
|
this.hasStateServiceOrFail();
|
|
59
72
|
this.hasPathOrFail();
|
|
60
73
|
|
|
@@ -64,9 +77,13 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
64
77
|
.resolve(RuntimeMethodExecutionContext)
|
|
65
78
|
.current().result;
|
|
66
79
|
|
|
80
|
+
// TODO Use Stateservice for this
|
|
67
81
|
// First try to find a match inside already created stateTransitions
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
let previousMutatingTransitions: StateTransition<any>[] = [];
|
|
83
|
+
previousMutatingTransitions = stateTransitions.filter(
|
|
84
|
+
(transition) =>
|
|
85
|
+
transition.path.toConstant().toBigInt() ===
|
|
86
|
+
path.toConstant().toBigInt() && transition.to.isSome.toBoolean()
|
|
70
87
|
);
|
|
71
88
|
const pmtLength = previousMutatingTransitions.length;
|
|
72
89
|
|
|
@@ -81,7 +98,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
81
98
|
}
|
|
82
99
|
|
|
83
100
|
// If the value is still undefined, look it up in the stateService
|
|
84
|
-
const fields = stateServiceProvider.stateService.get(path);
|
|
101
|
+
const fields = await stateServiceProvider.stateService.get(path);
|
|
85
102
|
if (fields) {
|
|
86
103
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
87
104
|
value = valueType.fromFields(fields) as Value;
|
|
@@ -99,12 +116,13 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
99
116
|
*
|
|
100
117
|
* @returns Optional value of the current state
|
|
101
118
|
*/
|
|
102
|
-
private
|
|
119
|
+
private async witnessFromState() {
|
|
103
120
|
// get the value from storage, or return a dummy value instead
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
+
);
|
|
108
126
|
|
|
109
127
|
return Option.from(isSome, value, this.valueType);
|
|
110
128
|
}
|
|
@@ -115,16 +133,22 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
115
133
|
*
|
|
116
134
|
* @returns Option representation of the current state.
|
|
117
135
|
*/
|
|
118
|
-
public get(): Option<Value
|
|
119
|
-
const option = this.
|
|
136
|
+
public async get(): Promise<Option<Value>> {
|
|
137
|
+
const option = await this.witnessFromState();
|
|
120
138
|
|
|
121
139
|
this.hasPathOrFail();
|
|
122
140
|
|
|
123
|
-
const
|
|
141
|
+
const { isInWitnessBlock } = container.resolve(WitnessBlockContext);
|
|
124
142
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
+
}
|
|
128
152
|
|
|
129
153
|
return option;
|
|
130
154
|
}
|
|
@@ -140,10 +164,10 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
140
164
|
*
|
|
141
165
|
* @param value - Value to be set as the current state
|
|
142
166
|
*/
|
|
143
|
-
public set(value: Value) {
|
|
167
|
+
public async set(value: Value) {
|
|
144
168
|
// link the transition to the current state
|
|
145
|
-
const fromOption = this.
|
|
146
|
-
const toOption = Option.
|
|
169
|
+
const fromOption = await this.witnessFromState();
|
|
170
|
+
const toOption = Option.fromValue(value, this.valueType);
|
|
147
171
|
|
|
148
172
|
this.hasPathOrFail();
|
|
149
173
|
|
|
@@ -153,6 +177,12 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
153
177
|
toOption
|
|
154
178
|
);
|
|
155
179
|
|
|
180
|
+
const { isInWitnessBlock } = container.resolve(WitnessBlockContext);
|
|
181
|
+
|
|
182
|
+
if (isInWitnessBlock) {
|
|
183
|
+
throw new Error("Cannot set state inside of provable block.");
|
|
184
|
+
}
|
|
185
|
+
|
|
156
186
|
container
|
|
157
187
|
.resolve(RuntimeMethodExecutionContext)
|
|
158
188
|
.addStateTransition(stateTransition);
|
package/src/state/StateMap.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Field, FlexibleProvablePure } from "
|
|
1
|
+
import type { Field, FlexibleProvablePure } from "o1js";
|
|
2
2
|
import { Mixin } from "ts-mixer";
|
|
3
3
|
|
|
4
4
|
import { Path } from "../model/Path";
|
|
@@ -9,7 +9,6 @@ import { State, WithStateServiceProvider, WithPath } from "./State";
|
|
|
9
9
|
/**
|
|
10
10
|
* Map-like wrapper for state
|
|
11
11
|
*/
|
|
12
|
-
// eslint-disable-next-line new-cap
|
|
13
12
|
export class StateMap<KeyType, ValueType> extends Mixin(
|
|
14
13
|
WithPath,
|
|
15
14
|
WithStateServiceProvider
|
|
@@ -46,14 +45,14 @@ export class StateMap<KeyType, ValueType> extends Mixin(
|
|
|
46
45
|
* @param key - Key to obtain the state for
|
|
47
46
|
* @returns Value for the provided key.
|
|
48
47
|
*/
|
|
49
|
-
public get(key: KeyType): Option<ValueType
|
|
48
|
+
public async get(key: KeyType): Promise<Option<ValueType>> {
|
|
50
49
|
const state = State.from(this.valueType);
|
|
51
50
|
this.hasPathOrFail();
|
|
52
51
|
this.hasStateServiceOrFail();
|
|
53
52
|
|
|
54
53
|
state.path = this.getPath(key);
|
|
55
54
|
state.stateServiceProvider = this.stateServiceProvider;
|
|
56
|
-
return state.get();
|
|
55
|
+
return await state.get();
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
/**
|
|
@@ -62,13 +61,13 @@ export class StateMap<KeyType, ValueType> extends Mixin(
|
|
|
62
61
|
* @param key - Key to store the value under
|
|
63
62
|
* @param value - Value to be stored under the given key
|
|
64
63
|
*/
|
|
65
|
-
public set(key: KeyType, value: ValueType): void {
|
|
64
|
+
public async set(key: KeyType, value: ValueType): Promise<void> {
|
|
66
65
|
const state = State.from(this.valueType);
|
|
67
66
|
this.hasPathOrFail();
|
|
68
67
|
this.hasStateServiceOrFail();
|
|
69
68
|
|
|
70
69
|
state.path = Path.fromKey(this.path, this.keyType, key);
|
|
71
70
|
state.stateServiceProvider = this.stateServiceProvider;
|
|
72
|
-
state.set(value);
|
|
71
|
+
return await state.set(value);
|
|
73
72
|
}
|
|
74
73
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Field } from "
|
|
1
|
+
import { Field } from "o1js";
|
|
2
2
|
|
|
3
|
-
export interface
|
|
4
|
-
get: (key: Field) => Field[] | undefined
|
|
5
|
-
set: (key: Field, value: Field[] | undefined) => void
|
|
6
|
-
}
|
|
3
|
+
export interface SimpleAsyncStateService {
|
|
4
|
+
get: (key: Field) => Promise<Field[] | undefined>;
|
|
5
|
+
set: (key: Field, value: Field[] | undefined) => Promise<void>;
|
|
6
|
+
}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { injectable } from "tsyringe";
|
|
2
|
+
import { log } from "@proto-kit/common";
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
+
import { SimpleAsyncStateService } from "./StateService";
|
|
4
5
|
|
|
5
6
|
const errors = {
|
|
6
7
|
stateServiceNotSet: () =>
|
|
7
8
|
new Error(
|
|
8
|
-
|
|
9
|
-
protocol function by creating them with an AppChain or by setting the
|
|
10
|
-
stateService manually.`
|
|
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."
|
|
11
10
|
),
|
|
12
11
|
};
|
|
13
12
|
|
|
14
13
|
@injectable()
|
|
15
14
|
export class StateServiceProvider {
|
|
16
|
-
private readonly
|
|
17
|
-
this.currentStateService;
|
|
15
|
+
private readonly stateServiceStack: SimpleAsyncStateService[] = [];
|
|
18
16
|
|
|
19
|
-
public
|
|
20
|
-
|
|
21
|
-
) {}
|
|
22
|
-
|
|
23
|
-
public get stateService(): StateService {
|
|
24
|
-
if (this.currentStateService === undefined) {
|
|
17
|
+
public get stateService(): SimpleAsyncStateService {
|
|
18
|
+
if (this.stateServiceStack.length === 0) {
|
|
25
19
|
throw errors.stateServiceNotSet();
|
|
26
20
|
}
|
|
27
|
-
|
|
21
|
+
|
|
22
|
+
// Assertion here is ok, because we check that the array is not empty above
|
|
23
|
+
return this.stateServiceStack.at(-1)!;
|
|
28
24
|
}
|
|
29
25
|
|
|
30
|
-
public setCurrentStateService(service:
|
|
31
|
-
this.
|
|
26
|
+
public setCurrentStateService(service: SimpleAsyncStateService) {
|
|
27
|
+
this.stateServiceStack.push(service);
|
|
32
28
|
}
|
|
33
29
|
|
|
34
|
-
public
|
|
35
|
-
this.
|
|
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
36
|
}
|
|
37
37
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
try {
|
|
23
|
+
return await originalFuncDef(...args);
|
|
24
|
+
} finally {
|
|
25
|
+
context.witnessBlockDepth -= 1;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const proxySyncWitnessFunction = <
|
|
31
|
+
Params extends any[],
|
|
32
|
+
Ret,
|
|
33
|
+
F extends (...args: Params) => Ret,
|
|
34
|
+
>(
|
|
35
|
+
originalFuncDef: F
|
|
36
|
+
) => {
|
|
37
|
+
return (...args: Params): Ret => {
|
|
38
|
+
const context = container.resolve(WitnessBlockContext);
|
|
39
|
+
context.witnessBlockDepth += 1;
|
|
40
|
+
try {
|
|
41
|
+
return originalFuncDef(...args);
|
|
42
|
+
} finally {
|
|
43
|
+
context.witnessBlockDepth -= 1;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
Provable.witnessAsync = asyncProxyWitnessFunction(Provable.witnessAsync);
|
|
49
|
+
|
|
50
|
+
Provable.witness = proxySyncWitnessFunction(Provable.witness);
|
|
51
|
+
|
|
52
|
+
Provable.witnessFields = proxySyncWitnessFunction(Provable.witnessFields);
|
|
53
|
+
|
|
54
|
+
Provable.asProver = proxySyncWitnessFunction(Provable.asProver);
|