@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,86 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createMerkleTree,
|
|
3
|
+
InMemoryMerkleTreeStorage,
|
|
4
|
+
log,
|
|
5
|
+
} from "@proto-kit/common";
|
|
6
|
+
import {
|
|
7
|
+
Field,
|
|
8
|
+
Poseidon,
|
|
9
|
+
PublicKey,
|
|
10
|
+
SmartContract,
|
|
11
|
+
Struct,
|
|
12
|
+
UInt32,
|
|
13
|
+
} from "o1js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Merkle tree that contains all the deployed token bridges as a mapping of
|
|
17
|
+
* tokenId => PublicKey
|
|
18
|
+
*
|
|
19
|
+
* It should be used as an append-only tree with incremental indizes - this allows
|
|
20
|
+
* us to reduce the height of it
|
|
21
|
+
*/
|
|
22
|
+
export class TokenBridgeTree extends createMerkleTree(256) {
|
|
23
|
+
public indizes: Record<string, bigint> = {};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Initializes and fills the tree based on all on-chain events that have been
|
|
27
|
+
* emitted by every emit
|
|
28
|
+
*/
|
|
29
|
+
public static async buildTreeFromEvents(
|
|
30
|
+
contract: SmartContract & {
|
|
31
|
+
events: { "token-bridge-added": typeof TokenBridgeTreeAddition };
|
|
32
|
+
},
|
|
33
|
+
endHeight?: UInt32
|
|
34
|
+
) {
|
|
35
|
+
const events = await contract.fetchEvents(
|
|
36
|
+
UInt32.from(0),
|
|
37
|
+
endHeight?.add(1)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
log.debug(
|
|
41
|
+
`Found ${events.length} token bridge add events (height: ${endHeight?.toString() ?? "open end"})`
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const tree = new TokenBridgeTree(new InMemoryMerkleTreeStorage());
|
|
45
|
+
const indizes: Record<string, bigint> = {};
|
|
46
|
+
|
|
47
|
+
events.forEach(({ type, event }) => {
|
|
48
|
+
if (type === "token-bridge-added") {
|
|
49
|
+
const addition =
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
51
|
+
event.data as unknown as TokenBridgeTreeAddition;
|
|
52
|
+
|
|
53
|
+
tree.setLeaf(addition.index.toBigInt(), addition.value.hash());
|
|
54
|
+
|
|
55
|
+
indizes[addition.value.tokenId.toString()] = addition.index.toBigInt();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
tree.indizes = indizes;
|
|
59
|
+
return tree;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public getIndex(tokenId: Field): bigint {
|
|
63
|
+
return this.indizes[tokenId.toString()];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export class TokenBridgeTreeWitness extends TokenBridgeTree.WITNESS {}
|
|
68
|
+
|
|
69
|
+
export class TokenBridgeEntry extends Struct({
|
|
70
|
+
address: PublicKey,
|
|
71
|
+
tokenId: Field,
|
|
72
|
+
}) {
|
|
73
|
+
public hash() {
|
|
74
|
+
return Poseidon.hash(TokenBridgeEntry.toFields(this));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export class TokenBridgeAttestation extends Struct({
|
|
79
|
+
witness: TokenBridgeTreeWitness,
|
|
80
|
+
index: Field,
|
|
81
|
+
}) {}
|
|
82
|
+
|
|
83
|
+
export class TokenBridgeTreeAddition extends Struct({
|
|
84
|
+
index: Field,
|
|
85
|
+
value: TokenBridgeEntry,
|
|
86
|
+
}) {}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Field, PublicKey } from "o1js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Interface for cross-contract call authorization
|
|
5
|
+
* See https://github.com/proto-kit/framework/issues/202#issuecomment-2407263173
|
|
6
|
+
*/
|
|
7
|
+
export interface ContractAuthorization {
|
|
8
|
+
target: PublicKey;
|
|
9
|
+
|
|
10
|
+
hash: () => Field;
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Field, Poseidon, PublicKey, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ContractAuthorization } from "./ContractAuthorization";
|
|
4
|
+
|
|
5
|
+
export class TokenBridgeDeploymentAuth
|
|
6
|
+
extends Struct({
|
|
7
|
+
target: PublicKey,
|
|
8
|
+
tokenId: Field,
|
|
9
|
+
address: PublicKey,
|
|
10
|
+
})
|
|
11
|
+
implements ContractAuthorization
|
|
12
|
+
{
|
|
13
|
+
public hash() {
|
|
14
|
+
return Poseidon.hash(TokenBridgeDeploymentAuth.toFields(this));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Field, Poseidon, PublicKey, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ContractAuthorization } from "./ContractAuthorization";
|
|
4
|
+
|
|
5
|
+
export class UpdateMessagesHashAuth
|
|
6
|
+
extends Struct({
|
|
7
|
+
target: PublicKey,
|
|
8
|
+
executedMessagesHash: Field,
|
|
9
|
+
newPromisedMessagesHash: Field,
|
|
10
|
+
})
|
|
11
|
+
implements ContractAuthorization
|
|
12
|
+
{
|
|
13
|
+
public hash() {
|
|
14
|
+
return Poseidon.hash(UpdateMessagesHashAuth.toFields(this));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { TypedClass, O1PublicKeyOption } from "@proto-kit/common";
|
|
2
|
+
import {
|
|
3
|
+
AccountUpdate,
|
|
4
|
+
Bool,
|
|
5
|
+
Field,
|
|
6
|
+
method,
|
|
7
|
+
PublicKey,
|
|
8
|
+
Signature,
|
|
9
|
+
SmartContract,
|
|
10
|
+
State,
|
|
11
|
+
state,
|
|
12
|
+
UInt32,
|
|
13
|
+
AccountUpdateForest,
|
|
14
|
+
VerificationKey,
|
|
15
|
+
Permissions,
|
|
16
|
+
Struct,
|
|
17
|
+
TokenId,
|
|
18
|
+
DeployArgs,
|
|
19
|
+
} from "o1js";
|
|
20
|
+
import { container } from "tsyringe";
|
|
21
|
+
|
|
22
|
+
import { NetworkState } from "../../../model/network/NetworkState";
|
|
23
|
+
import { DispatchContractType } from "../DispatchSmartContract";
|
|
24
|
+
import { BridgeContractType } from "../BridgeContract";
|
|
25
|
+
import { TokenBridgeDeploymentAuth } from "../authorizations/TokenBridgeDeploymentAuth";
|
|
26
|
+
import { UpdateMessagesHashAuth } from "../authorizations/UpdateMessagesHashAuth";
|
|
27
|
+
import {
|
|
28
|
+
ContractArgsRegistry,
|
|
29
|
+
NaiveObjectSchema,
|
|
30
|
+
StaticInitializationContract,
|
|
31
|
+
} from "../../ContractArgsRegistry";
|
|
32
|
+
|
|
33
|
+
import {
|
|
34
|
+
DynamicBlockProof,
|
|
35
|
+
SettlementBase,
|
|
36
|
+
SettlementContractArgs,
|
|
37
|
+
SettlementContractArgsSchema,
|
|
38
|
+
SettlementContractType,
|
|
39
|
+
} from "./SettlementBase";
|
|
40
|
+
|
|
41
|
+
/* eslint-disable @typescript-eslint/lines-between-class-members */
|
|
42
|
+
|
|
43
|
+
export class TokenMapping extends Struct({
|
|
44
|
+
tokenId: Field,
|
|
45
|
+
publicKey: PublicKey,
|
|
46
|
+
}) {}
|
|
47
|
+
|
|
48
|
+
export interface BridgingSettlementContractType extends SettlementContractType {
|
|
49
|
+
authorizationField: State<Field>;
|
|
50
|
+
|
|
51
|
+
assertStateRoot: (root: Field) => AccountUpdate;
|
|
52
|
+
addTokenBridge: (tokenId: Field, address: PublicKey) => Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface BridgingSettlementContractArgs extends SettlementContractArgs {
|
|
56
|
+
DispatchContract: TypedClass<DispatchContractType & SmartContract>;
|
|
57
|
+
BridgeContract: TypedClass<BridgeContractType> & typeof SmartContract;
|
|
58
|
+
// Lazily initialized
|
|
59
|
+
BridgeContractVerificationKey: VerificationKey | undefined;
|
|
60
|
+
BridgeContractPermissions: Permissions;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const BridgingSettlementContractArgsSchema: NaiveObjectSchema<BridgingSettlementContractArgs> =
|
|
64
|
+
{
|
|
65
|
+
...SettlementContractArgsSchema,
|
|
66
|
+
DispatchContract: "Required",
|
|
67
|
+
BridgeContract: "Required",
|
|
68
|
+
BridgeContractVerificationKey: "Optional",
|
|
69
|
+
BridgeContractPermissions: "Required",
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export abstract class BridgingSettlementContractBase
|
|
73
|
+
extends SettlementBase
|
|
74
|
+
implements StaticInitializationContract<BridgingSettlementContractArgs>
|
|
75
|
+
{
|
|
76
|
+
public getInitializationArgs(): BridgingSettlementContractArgs {
|
|
77
|
+
return container
|
|
78
|
+
.resolve(ContractArgsRegistry)
|
|
79
|
+
.getArgs("SettlementContract", BridgingSettlementContractArgsSchema);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
events = {
|
|
83
|
+
"token-bridge-deployed": TokenMapping,
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
abstract dispatchContractAddress: State<PublicKey>;
|
|
87
|
+
|
|
88
|
+
abstract authorizationField: State<Field>;
|
|
89
|
+
|
|
90
|
+
// Not @state
|
|
91
|
+
// abstract offchainStateCommitmentsHash: State<Field>;
|
|
92
|
+
|
|
93
|
+
public assertStateRoot(root: Field): AccountUpdate {
|
|
94
|
+
this.stateRoot.requireEquals(root);
|
|
95
|
+
return this.self;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected async initializeBaseBridging(
|
|
99
|
+
sequencer: PublicKey,
|
|
100
|
+
dispatchContract: PublicKey
|
|
101
|
+
) {
|
|
102
|
+
await super.initializeBase(sequencer);
|
|
103
|
+
|
|
104
|
+
this.dispatchContractAddress.set(dispatchContract);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// TODO We should move this to the dispatchcontract eventually - or after mesa
|
|
108
|
+
// to the combined settlement & dispatch contract
|
|
109
|
+
protected async deployTokenBridge(tokenId: Field, address: PublicKey) {
|
|
110
|
+
const {
|
|
111
|
+
BridgeContractVerificationKey,
|
|
112
|
+
signedSettlements,
|
|
113
|
+
BridgeContractPermissions,
|
|
114
|
+
BridgeContract: BridgeContractClass,
|
|
115
|
+
DispatchContract,
|
|
116
|
+
} = this.getInitializationArgs();
|
|
117
|
+
|
|
118
|
+
const bridgeContract = new BridgeContractClass(address, tokenId);
|
|
119
|
+
|
|
120
|
+
if (
|
|
121
|
+
BridgeContractVerificationKey !== undefined &&
|
|
122
|
+
!BridgeContractVerificationKey.hash.isConstant()
|
|
123
|
+
) {
|
|
124
|
+
throw new Error("Bridge contract verification key has to be constants");
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// This function is not a zkapps method, therefore it will be part of this methods execution
|
|
128
|
+
// The returning account update (owner.self) is therefore part of this circuit and is assertable
|
|
129
|
+
const deploymentAccountUpdate = await bridgeContract.deployProvable(
|
|
130
|
+
BridgeContractVerificationKey,
|
|
131
|
+
signedSettlements!,
|
|
132
|
+
BridgeContractPermissions!,
|
|
133
|
+
this.address
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
this.approve(deploymentAccountUpdate);
|
|
137
|
+
|
|
138
|
+
this.self.body.mayUseToken = {
|
|
139
|
+
// Only set this if we deploy a custom token
|
|
140
|
+
parentsOwnToken: tokenId.equals(TokenId.default).not(),
|
|
141
|
+
inheritFromParent: Bool(false),
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
this.emitEvent(
|
|
145
|
+
"token-bridge-deployed",
|
|
146
|
+
new TokenMapping({
|
|
147
|
+
tokenId: tokenId,
|
|
148
|
+
publicKey: address,
|
|
149
|
+
})
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
const dispatchContractAddress =
|
|
153
|
+
this.dispatchContractAddress.getAndRequireEquals();
|
|
154
|
+
|
|
155
|
+
// Set authorization for the auth callback, that we need
|
|
156
|
+
this.authorizationField.set(
|
|
157
|
+
new TokenBridgeDeploymentAuth({
|
|
158
|
+
target: dispatchContractAddress,
|
|
159
|
+
tokenId,
|
|
160
|
+
address,
|
|
161
|
+
}).hash()
|
|
162
|
+
);
|
|
163
|
+
const dispatchContract = new DispatchContract(dispatchContractAddress);
|
|
164
|
+
await dispatchContract.enableTokenDeposits(tokenId, address, this.address);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
protected async settleBaseBridging(
|
|
168
|
+
blockProof: DynamicBlockProof,
|
|
169
|
+
signature: Signature,
|
|
170
|
+
publicKey: PublicKey,
|
|
171
|
+
inputNetworkState: NetworkState,
|
|
172
|
+
outputNetworkState: NetworkState,
|
|
173
|
+
newPromisedMessagesHash: Field
|
|
174
|
+
) {
|
|
175
|
+
await super.settleBase(
|
|
176
|
+
blockProof,
|
|
177
|
+
signature,
|
|
178
|
+
publicKey,
|
|
179
|
+
inputNetworkState,
|
|
180
|
+
outputNetworkState,
|
|
181
|
+
newPromisedMessagesHash
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
const dispatchContractAddress =
|
|
185
|
+
this.dispatchContractAddress.getAndRequireEquals();
|
|
186
|
+
|
|
187
|
+
const { DispatchContract } = this.getInitializationArgs();
|
|
188
|
+
|
|
189
|
+
// Get dispatch contract values
|
|
190
|
+
// These values are witnesses but will be checked later on the AU
|
|
191
|
+
// call to the dispatch contract via .updateMessagesHash()
|
|
192
|
+
const dispatchContract = new DispatchContract(dispatchContractAddress);
|
|
193
|
+
const promisedMessagesHash = dispatchContract.promisedMessagesHash.get();
|
|
194
|
+
|
|
195
|
+
// Assert and apply deposit commitments
|
|
196
|
+
promisedMessagesHash.assertEquals(
|
|
197
|
+
blockProof.publicOutput.incomingMessagesHash,
|
|
198
|
+
"Promised messages not honored"
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
// Set authorization for the dispatchContract to verify the messages hash update
|
|
202
|
+
this.authorizationField.set(
|
|
203
|
+
new UpdateMessagesHashAuth({
|
|
204
|
+
target: dispatchContract.address,
|
|
205
|
+
executedMessagesHash: promisedMessagesHash,
|
|
206
|
+
newPromisedMessagesHash,
|
|
207
|
+
}).hash()
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// Call DispatchContract
|
|
211
|
+
// This call checks that the promisedMessagesHash, which is already proven
|
|
212
|
+
// to be the blockProofs publicoutput, is actually the current on-chain
|
|
213
|
+
// promisedMessageHash. It also checks the newPromisedMessagesHash to be
|
|
214
|
+
// a current sequencestate value
|
|
215
|
+
await dispatchContract.updateMessagesHash(
|
|
216
|
+
promisedMessagesHash,
|
|
217
|
+
newPromisedMessagesHash
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export class BridgingSettlementContract
|
|
223
|
+
extends BridgingSettlementContractBase
|
|
224
|
+
implements BridgingSettlementContractType
|
|
225
|
+
{
|
|
226
|
+
@state(Field) public sequencerKey = State<Field>();
|
|
227
|
+
@state(UInt32) public lastSettlementL1BlockHeight = State<UInt32>();
|
|
228
|
+
|
|
229
|
+
@state(Field) public stateRoot = State<Field>();
|
|
230
|
+
@state(Field) public networkStateHash = State<Field>();
|
|
231
|
+
@state(Field) public blockHashRoot = State<Field>();
|
|
232
|
+
|
|
233
|
+
@state(PublicKey) public dispatchContractAddress = State<PublicKey>();
|
|
234
|
+
|
|
235
|
+
@state(Field) public authorizationField = State<Field>();
|
|
236
|
+
|
|
237
|
+
public async deployAndInitialize(
|
|
238
|
+
args: DeployArgs | undefined,
|
|
239
|
+
permissions: Permissions,
|
|
240
|
+
sequencer: PublicKey,
|
|
241
|
+
dispatchContract: O1PublicKeyOption
|
|
242
|
+
): Promise<void> {
|
|
243
|
+
dispatchContract.assertSome(
|
|
244
|
+
"Bridging-enabled settlement contract requires a dispatch contract address"
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
await super.deploy(args);
|
|
248
|
+
|
|
249
|
+
this.self.account.permissions.set(permissions);
|
|
250
|
+
|
|
251
|
+
await this.initializeBaseBridging(sequencer, dispatchContract.value);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
@method async approveBase(forest: AccountUpdateForest) {
|
|
255
|
+
this.checkZeroBalanceChange(forest);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@method
|
|
259
|
+
public async addTokenBridge(tokenId: Field, address: PublicKey) {
|
|
260
|
+
await this.deployTokenBridge(tokenId, address);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@method
|
|
264
|
+
public async settle(
|
|
265
|
+
blockProof: DynamicBlockProof,
|
|
266
|
+
signature: Signature,
|
|
267
|
+
publicKey: PublicKey,
|
|
268
|
+
inputNetworkState: NetworkState,
|
|
269
|
+
outputNetworkState: NetworkState,
|
|
270
|
+
newPromisedMessagesHash: Field
|
|
271
|
+
) {
|
|
272
|
+
return await this.settleBaseBridging(
|
|
273
|
+
blockProof,
|
|
274
|
+
signature,
|
|
275
|
+
publicKey,
|
|
276
|
+
inputNetworkState,
|
|
277
|
+
outputNetworkState,
|
|
278
|
+
newPromisedMessagesHash
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* eslint-enable @typescript-eslint/lines-between-class-members */
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DeployArgs,
|
|
3
|
+
DynamicProof,
|
|
4
|
+
Field,
|
|
5
|
+
Option,
|
|
6
|
+
PublicKey,
|
|
7
|
+
Signature,
|
|
8
|
+
State,
|
|
9
|
+
TokenContract,
|
|
10
|
+
UInt32,
|
|
11
|
+
Permissions,
|
|
12
|
+
} from "o1js";
|
|
13
|
+
import {
|
|
14
|
+
ChildVerificationKeyService,
|
|
15
|
+
LinkedMerkleTree,
|
|
16
|
+
mapSequential,
|
|
17
|
+
prefixToField,
|
|
18
|
+
} from "@proto-kit/common";
|
|
19
|
+
import { container } from "tsyringe";
|
|
20
|
+
|
|
21
|
+
import { BlockHashMerkleTree } from "../../../prover/block/accummulators/BlockHashMerkleTree";
|
|
22
|
+
import { NetworkState } from "../../../model/network/NetworkState";
|
|
23
|
+
import {
|
|
24
|
+
ProvableSettlementHook,
|
|
25
|
+
SettlementHookInputs,
|
|
26
|
+
SettlementStateRecord,
|
|
27
|
+
} from "../../modularity/ProvableSettlementHook";
|
|
28
|
+
import {
|
|
29
|
+
BlockProverPublicInput,
|
|
30
|
+
BlockProverPublicOutput,
|
|
31
|
+
} from "../../../prover/block/BlockProvable";
|
|
32
|
+
import {
|
|
33
|
+
ContractArgsRegistry,
|
|
34
|
+
NaiveObjectSchema,
|
|
35
|
+
StaticInitializationContract,
|
|
36
|
+
} from "../../ContractArgsRegistry";
|
|
37
|
+
|
|
38
|
+
/* eslint-disable @typescript-eslint/lines-between-class-members */
|
|
39
|
+
|
|
40
|
+
// Some random prefix for the sequencer signature
|
|
41
|
+
export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
|
|
42
|
+
|
|
43
|
+
export class DynamicBlockProof extends DynamicProof<
|
|
44
|
+
BlockProverPublicInput,
|
|
45
|
+
BlockProverPublicOutput
|
|
46
|
+
> {
|
|
47
|
+
public static publicInputType = BlockProverPublicInput;
|
|
48
|
+
|
|
49
|
+
public static publicOutputType = BlockProverPublicOutput;
|
|
50
|
+
|
|
51
|
+
public static maxProofsVerified = 2 as const;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface SettlementContractType {
|
|
55
|
+
sequencerKey: State<Field>;
|
|
56
|
+
lastSettlementL1BlockHeight: State<UInt32>;
|
|
57
|
+
stateRoot: State<Field>;
|
|
58
|
+
networkStateHash: State<Field>;
|
|
59
|
+
blockHashRoot: State<Field>;
|
|
60
|
+
|
|
61
|
+
deployAndInitialize: (
|
|
62
|
+
args: DeployArgs | undefined,
|
|
63
|
+
permissions: Permissions,
|
|
64
|
+
sequencer: PublicKey,
|
|
65
|
+
dispatchContract: Option<PublicKey>
|
|
66
|
+
) => Promise<void>;
|
|
67
|
+
|
|
68
|
+
settle: (
|
|
69
|
+
blockProof: DynamicBlockProof,
|
|
70
|
+
signature: Signature,
|
|
71
|
+
publicKey: PublicKey,
|
|
72
|
+
inputNetworkState: NetworkState,
|
|
73
|
+
outputNetworkState: NetworkState,
|
|
74
|
+
newPromisedMessagesHash: Field
|
|
75
|
+
) => Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface SettlementContractArgs {
|
|
79
|
+
hooks: ProvableSettlementHook<unknown>[];
|
|
80
|
+
escapeHatchSlotsInterval: number;
|
|
81
|
+
signedSettlements: boolean;
|
|
82
|
+
ChildVerificationKeyService: ChildVerificationKeyService;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export const SettlementContractArgsSchema: NaiveObjectSchema<SettlementContractArgs> =
|
|
86
|
+
{
|
|
87
|
+
ChildVerificationKeyService: "Required",
|
|
88
|
+
hooks: "Required",
|
|
89
|
+
escapeHatchSlotsInterval: "Required",
|
|
90
|
+
signedSettlements: "Required",
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export abstract class SettlementBase
|
|
94
|
+
extends TokenContract
|
|
95
|
+
implements StaticInitializationContract<SettlementContractArgs>
|
|
96
|
+
{
|
|
97
|
+
getInitializationArgs(): SettlementContractArgs {
|
|
98
|
+
return container
|
|
99
|
+
.resolve(ContractArgsRegistry)
|
|
100
|
+
.getArgs("SettlementContract", SettlementContractArgsSchema);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
abstract sequencerKey: State<Field>;
|
|
104
|
+
abstract lastSettlementL1BlockHeight: State<UInt32>;
|
|
105
|
+
abstract stateRoot: State<Field>;
|
|
106
|
+
abstract networkStateHash: State<Field>;
|
|
107
|
+
abstract blockHashRoot: State<Field>;
|
|
108
|
+
|
|
109
|
+
protected async initializeBase(sequencer: PublicKey) {
|
|
110
|
+
this.sequencerKey.set(sequencer.x);
|
|
111
|
+
this.stateRoot.set(LinkedMerkleTree.EMPTY_ROOT);
|
|
112
|
+
this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
|
|
113
|
+
this.networkStateHash.set(NetworkState.empty().hash());
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
abstract settle(
|
|
117
|
+
blockProof: DynamicBlockProof,
|
|
118
|
+
signature: Signature,
|
|
119
|
+
publicKey: PublicKey,
|
|
120
|
+
inputNetworkState: NetworkState,
|
|
121
|
+
outputNetworkState: NetworkState,
|
|
122
|
+
newPromisedMessagesHash: Field
|
|
123
|
+
): Promise<void>;
|
|
124
|
+
|
|
125
|
+
abstract deployAndInitialize(
|
|
126
|
+
args: DeployArgs | undefined,
|
|
127
|
+
permissions: Permissions,
|
|
128
|
+
sequencer: PublicKey,
|
|
129
|
+
dispatchContract: Option<PublicKey>
|
|
130
|
+
): Promise<void>;
|
|
131
|
+
|
|
132
|
+
protected async settleBase(
|
|
133
|
+
blockProof: DynamicBlockProof,
|
|
134
|
+
signature: Signature,
|
|
135
|
+
publicKey: PublicKey,
|
|
136
|
+
inputNetworkState: NetworkState,
|
|
137
|
+
outputNetworkState: NetworkState,
|
|
138
|
+
newPromisedMessagesHash: Field
|
|
139
|
+
) {
|
|
140
|
+
const {
|
|
141
|
+
escapeHatchSlotsInterval,
|
|
142
|
+
hooks,
|
|
143
|
+
ChildVerificationKeyService: childVerificationKeyService,
|
|
144
|
+
} = this.getInitializationArgs();
|
|
145
|
+
|
|
146
|
+
// Brought in as a constant
|
|
147
|
+
const blockProofVk =
|
|
148
|
+
childVerificationKeyService.getVerificationKey("BlockProver");
|
|
149
|
+
if (!blockProofVk.hash.isConstant()) {
|
|
150
|
+
throw new Error("Sanity check - vk hash has to be constant");
|
|
151
|
+
}
|
|
152
|
+
// Verify the blockproof
|
|
153
|
+
|
|
154
|
+
blockProof.verify(blockProofVk);
|
|
155
|
+
// Get and assert on-chain values
|
|
156
|
+
const stateRoot = this.stateRoot.getAndRequireEquals();
|
|
157
|
+
const networkStateHash = this.networkStateHash.getAndRequireEquals();
|
|
158
|
+
const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
|
|
159
|
+
const sequencerKey = this.sequencerKey.getAndRequireEquals();
|
|
160
|
+
|
|
161
|
+
const lastSettlementL1BlockHeight =
|
|
162
|
+
this.lastSettlementL1BlockHeight.getAndRequireEquals();
|
|
163
|
+
|
|
164
|
+
// Get block height and use the lower bound for all ops
|
|
165
|
+
const minBlockHeightIncluded = this.network.blockchainLength.get();
|
|
166
|
+
this.network.blockchainLength.requireBetween(
|
|
167
|
+
minBlockHeightIncluded,
|
|
168
|
+
// 5 because that is the length the newPromisedMessagesHash will be valid
|
|
169
|
+
minBlockHeightIncluded.add(4)
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
// Check signature/escape catch
|
|
173
|
+
publicKey.x.assertEquals(
|
|
174
|
+
sequencerKey,
|
|
175
|
+
"Sequencer public key witness not matching"
|
|
176
|
+
);
|
|
177
|
+
const signatureValid = signature.verify(publicKey, [
|
|
178
|
+
BATCH_SIGNATURE_PREFIX,
|
|
179
|
+
lastSettlementL1BlockHeight.value,
|
|
180
|
+
]);
|
|
181
|
+
const escapeHatchActivated = lastSettlementL1BlockHeight
|
|
182
|
+
.add(UInt32.from(escapeHatchSlotsInterval))
|
|
183
|
+
.lessThan(minBlockHeightIncluded);
|
|
184
|
+
signatureValid
|
|
185
|
+
.or(escapeHatchActivated)
|
|
186
|
+
.assertTrue(
|
|
187
|
+
"Sequencer signature not valid and escape hatch not activated"
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
// Assert correctness of networkState witness
|
|
191
|
+
inputNetworkState
|
|
192
|
+
.hash()
|
|
193
|
+
.assertEquals(networkStateHash, "InputNetworkState witness not valid");
|
|
194
|
+
outputNetworkState
|
|
195
|
+
.hash()
|
|
196
|
+
.assertEquals(
|
|
197
|
+
blockProof.publicOutput.networkStateHash,
|
|
198
|
+
"OutputNetworkState witness not valid"
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
// Check remainders are zero
|
|
202
|
+
blockProof.publicOutput.proverStateRemainder.assertEquals(
|
|
203
|
+
Field(0),
|
|
204
|
+
"Supplied proof is has outstanding block prover state to be proven"
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
// Execute onSettlementHooks for additional checks
|
|
208
|
+
const stateRecord: SettlementStateRecord = {
|
|
209
|
+
blockHashRoot,
|
|
210
|
+
stateRoot,
|
|
211
|
+
networkStateHash,
|
|
212
|
+
lastSettlementL1BlockHeight,
|
|
213
|
+
sequencerKey: publicKey,
|
|
214
|
+
};
|
|
215
|
+
const inputs: SettlementHookInputs = {
|
|
216
|
+
blockProof,
|
|
217
|
+
contractState: stateRecord,
|
|
218
|
+
newPromisedMessagesHash,
|
|
219
|
+
fromNetworkState: inputNetworkState,
|
|
220
|
+
toNetworkState: outputNetworkState,
|
|
221
|
+
currentL1BlockHeight: minBlockHeightIncluded,
|
|
222
|
+
};
|
|
223
|
+
await mapSequential(hooks, async (hook) => {
|
|
224
|
+
await hook.beforeSettlement(this, inputs);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// Apply blockProof
|
|
228
|
+
stateRoot.assertEquals(
|
|
229
|
+
blockProof.publicInput.stateRoot,
|
|
230
|
+
"Input state root not matching"
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
networkStateHash.assertEquals(
|
|
234
|
+
blockProof.publicInput.networkStateHash,
|
|
235
|
+
"Input networkStateHash not matching"
|
|
236
|
+
);
|
|
237
|
+
blockHashRoot.assertEquals(
|
|
238
|
+
blockProof.publicInput.blockHashRoot,
|
|
239
|
+
"Input blockHashRoot not matching"
|
|
240
|
+
);
|
|
241
|
+
this.stateRoot.set(blockProof.publicOutput.stateRoot);
|
|
242
|
+
this.networkStateHash.set(blockProof.publicOutput.networkStateHash);
|
|
243
|
+
this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
|
|
244
|
+
|
|
245
|
+
this.lastSettlementL1BlockHeight.set(minBlockHeightIncluded);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* eslint-enable @typescript-eslint/lines-between-class-members */
|