@proto-kit/protocol 0.1.1-develop.0
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/LICENSE.md +201 -0
- package/README.md +45 -0
- package/dist/Constants.d.ts +4 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +4 -0
- package/dist/Constants.js.map +1 -0
- package/dist/hooks/AccountStateHook.d.ts +52 -0
- package/dist/hooks/AccountStateHook.d.ts.map +1 -0
- package/dist/hooks/AccountStateHook.js +48 -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 +8 -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 +9 -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/hooks/NoopSettlementHook.js +18 -0
- 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 +8 -0
- package/dist/hooks/NoopTransactionHook.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/model/MethodPublicOutput.d.ts +113 -0
- package/dist/model/MethodPublicOutput.d.ts.map +1 -0
- package/dist/model/MethodPublicOutput.js +15 -0
- package/dist/model/MethodPublicOutput.js.map +1 -0
- package/dist/model/Option.d.ts +122 -0
- package/dist/model/Option.d.ts.map +1 -0
- package/dist/model/Option.js +111 -0
- package/dist/model/Option.js.map +1 -0
- package/dist/model/Path.d.ts +31 -0
- package/dist/model/Path.d.ts.map +1 -0
- package/dist/model/Path.js +43 -0
- 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 +135 -0
- package/dist/model/StateTransition.d.ts.map +1 -0
- package/dist/model/StateTransition.js +69 -0
- package/dist/model/StateTransition.js.map +1 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +198 -0
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
- package/dist/model/StateTransitionProvableBatch.js +91 -0
- package/dist/model/StateTransitionProvableBatch.js.map +1 -0
- package/dist/model/network/NetworkState.d.ts +160 -0
- package/dist/model/network/NetworkState.d.ts.map +1 -0
- package/dist/model/network/NetworkState.js +32 -0
- package/dist/model/network/NetworkState.js.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts +122 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.js +87 -0
- package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
- package/dist/model/transaction/SignedTransaction.d.ts +107 -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 +173 -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 +43 -0
- package/dist/protocol/Protocol.d.ts.map +1 -0
- package/dist/protocol/Protocol.js +120 -0
- 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 +9 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -0
- package/dist/protocol/ProtocolModule.js +13 -0
- package/dist/protocol/ProtocolModule.js.map +1 -0
- package/dist/protocol/ProvableBlockHook.d.ts +8 -0
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
- package/dist/protocol/ProvableBlockHook.js +5 -0
- package/dist/protocol/ProvableBlockHook.js.map +1 -0
- package/dist/protocol/ProvableTransactionHook.d.ts +7 -0
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
- package/dist/protocol/ProvableTransactionHook.js +4 -0
- package/dist/protocol/ProvableTransactionHook.js.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.js +9 -0
- package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
- package/dist/prover/block/BlockProvable.d.ts +409 -0
- package/dist/prover/block/BlockProvable.d.ts.map +1 -0
- package/dist/prover/block/BlockProvable.js +48 -0
- package/dist/prover/block/BlockProvable.js.map +1 -0
- package/dist/prover/block/BlockProver.d.ts +94 -0
- package/dist/prover/block/BlockProver.d.ts.map +1 -0
- package/dist/prover/block/BlockProver.js +510 -0
- package/dist/prover/block/BlockProver.js.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +64 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +17 -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/block/services/RuntimeVerificationKeyRootService.js +23 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +172 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.js +16 -0
- package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +48 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.js +187 -0
- package/dist/prover/statetransition/StateTransitionProver.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 +53 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +80 -0
- package/dist/settlement/SettlementContractModule.js.map +1 -0
- package/dist/settlement/contracts/BridgeContract.d.ts +97 -0
- package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContract.js +164 -0
- package/dist/settlement/contracts/BridgeContract.js.map +1 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +14 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.js +30 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +21 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +57 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +44 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.js +230 -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 +82 -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 +309 -0
- package/dist/settlement/contracts/SettlementSmartContract.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/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/OutgoingMessageArgument.d.ts +197 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js +33 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
- package/dist/settlement/messages/Withdrawal.d.ts +78 -0
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
- package/dist/settlement/messages/Withdrawal.js +16 -0
- package/dist/settlement/messages/Withdrawal.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 +8 -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/State.d.ts +68 -0
- package/dist/state/State.d.ts.map +1 -0
- package/dist/state/State.js +130 -0
- package/dist/state/State.js.map +1 -0
- package/dist/state/StateMap.d.ts +37 -0
- package/dist/state/StateMap.d.ts.map +1 -0
- package/dist/state/StateMap.js +56 -0
- package/dist/state/StateMap.js.map +1 -0
- package/dist/state/StateService.d.ts +6 -0
- package/dist/state/StateService.d.ts.map +1 -0
- package/dist/state/StateService.js +2 -0
- package/dist/state/StateService.js.map +1 -0
- package/dist/state/StateServiceProvider.d.ts +8 -0
- package/dist/state/StateServiceProvider.d.ts.map +1 -0
- package/dist/state/StateServiceProvider.js +37 -0
- package/dist/state/StateServiceProvider.js.map +1 -0
- package/dist/state/assert/assert.d.ts +12 -0
- package/dist/state/assert/assert.d.ts.map +1 -0
- package/dist/state/assert/assert.js +31 -0
- package/dist/state/assert/assert.js.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js +136 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
- package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
- package/dist/state/protocol/ProtocolState.d.ts +7 -0
- package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
- package/dist/state/protocol/ProtocolState.js +40 -0
- package/dist/state/protocol/ProtocolState.js.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js +53 -0
- package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedProvableHashList.js +13 -0
- package/dist/utils/PrefixedProvableHashList.js.map +1 -0
- package/dist/utils/ProvableHashList.d.ts +27 -0
- package/dist/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/utils/ProvableHashList.js +44 -0
- package/dist/utils/ProvableHashList.js.map +1 -0
- package/dist/utils/ProvableReductionHashList.d.ts +14 -0
- package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
- package/dist/utils/ProvableReductionHashList.js +51 -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 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +45 -0
- package/dist/utils/utils.js.map +1 -0
- package/jest.config.cjs +12 -0
- package/package.json +36 -0
- package/src/Constants.ts +3 -0
- package/src/hooks/AccountStateHook.ts +48 -0
- package/src/hooks/BlockHeightHook.ts +17 -0
- package/src/hooks/LastStateRootBlockHook.ts +26 -0
- package/src/hooks/NoopBlockHook.ts +21 -0
- package/src/hooks/NoopSettlementHook.ts +20 -0
- package/src/hooks/NoopTransactionHook.ts +10 -0
- package/src/index.ts +57 -0
- package/src/model/MethodPublicOutput.ts +14 -0
- package/src/model/Option.ts +172 -0
- package/src/model/Path.ts +50 -0
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +88 -0
- package/src/model/StateTransitionProvableBatch.ts +145 -0
- package/src/model/Transaction.ts +31 -0
- package/src/model/network/NetworkState.ts +33 -0
- package/src/model/transaction/RuntimeTransaction.ts +105 -0
- package/src/model/transaction/SignedTransaction.ts +47 -0
- package/src/model/transaction/ValueOption.ts +28 -0
- package/src/protocol/Protocol.ts +226 -0
- package/src/protocol/ProtocolEnvironment.ts +10 -0
- package/src/protocol/ProtocolModule.ts +27 -0
- package/src/protocol/ProvableBlockHook.ts +19 -0
- package/src/protocol/ProvableTransactionHook.ts +13 -0
- package/src/protocol/TransitioningProtocolModule.ts +12 -0
- package/src/prover/block/BlockProvable.ts +99 -0
- package/src/prover/block/BlockProver.ts +990 -0
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -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 +41 -0
- package/src/prover/statetransition/StateTransitionProver.ts +377 -0
- package/src/settlement/ContractModule.ts +31 -0
- package/src/settlement/SettlementContractModule.ts +145 -0
- package/src/settlement/contracts/BridgeContract.ts +237 -0
- package/src/settlement/contracts/BridgeContractProtocolModule.ts +43 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +73 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +326 -0
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +108 -0
- package/src/settlement/contracts/SettlementSmartContract.ts +498 -0
- package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
- package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
- package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
- package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
- package/src/settlement/messages/Deposit.ts +7 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
- package/src/settlement/messages/Withdrawal.ts +16 -0
- package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
- package/src/settlement/modularity/types.ts +22 -0
- package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
- package/src/state/State.ts +175 -0
- package/src/state/StateMap.ts +73 -0
- package/src/state/StateService.ts +6 -0
- package/src/state/StateServiceProvider.ts +37 -0
- package/src/state/assert/assert.ts +35 -0
- package/src/state/context/RuntimeMethodExecutionContext.ts +174 -0
- package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
- package/src/state/protocol/ProtocolState.ts +61 -0
- package/src/utils/MinaPrefixedProvableHashList.ts +73 -0
- package/src/utils/PrefixedProvableHashList.ts +21 -0
- package/src/utils/ProvableHashList.ts +50 -0
- package/src/utils/ProvableReductionHashList.ts +68 -0
- package/src/utils/StateTransitionReductionList.ts +89 -0
- package/src/utils/utils.ts +75 -0
- package/test/BlockProver.test.ts +212 -0
- package/test/Protocol.test.ts +37 -0
- package/test/State.test.ts +45 -0
- package/test/StateTransition.test.ts +174 -0
- package/test/TestingProtocol.ts +52 -0
- package/test/compiling/types.ts +28 -0
- package/test/model/Option.test.ts +72 -0
- package/test/modularity/types.ts +35 -0
- package/test/state/assert/assert.test.ts +56 -0
- package/test/tsconfig.json +7 -0
- package/test/utils/ProvableReductionHashList.test.ts +117 -0
- package/test/utils.test.ts +27 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createMerkleTree } from "@proto-kit/common";
|
|
2
|
+
import { Bool, Field, Poseidon, Struct } from "o1js";
|
|
3
|
+
|
|
4
|
+
export class BlockHashMerkleTree extends createMerkleTree(40) {}
|
|
5
|
+
export class BlockHashMerkleTreeWitness extends BlockHashMerkleTree.WITNESS {}
|
|
6
|
+
|
|
7
|
+
export class BlockHashTreeEntry extends Struct({
|
|
8
|
+
blockHash: Field,
|
|
9
|
+
closed: Bool,
|
|
10
|
+
// TODO We could add startingEternalTransactionsHash here to offer
|
|
11
|
+
// a more trivial connection to the sequence state
|
|
12
|
+
}) {
|
|
13
|
+
public hash(): Field {
|
|
14
|
+
return Poseidon.hash([this.blockHash, ...this.closed.toFields()]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createMerkleTree } from "@proto-kit/common";
|
|
2
|
+
import { Field, Poseidon, Struct, VerificationKey } from "o1js";
|
|
3
|
+
|
|
4
|
+
export const treeFeeHeight = 10;
|
|
5
|
+
export class VKTree extends createMerkleTree(treeFeeHeight) {}
|
|
6
|
+
export class VKTreeWitness extends VKTree.WITNESS {}
|
|
7
|
+
|
|
8
|
+
export class RuntimeVerificationKeyAttestation extends Struct({
|
|
9
|
+
verificationKey: VerificationKey,
|
|
10
|
+
witness: VKTreeWitness,
|
|
11
|
+
}) {}
|
|
12
|
+
|
|
13
|
+
export class MethodVKConfigData extends Struct({
|
|
14
|
+
methodId: Field,
|
|
15
|
+
vkHash: Field,
|
|
16
|
+
}) {
|
|
17
|
+
public hash() {
|
|
18
|
+
return Poseidon.hash(MethodVKConfigData.toFields(this));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface MinimalVKTreeService {
|
|
23
|
+
getRoot: () => bigint;
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
2
|
+
|
|
3
|
+
import { MinimalVKTreeService } from "../accummulators/RuntimeVerificationKeyTree";
|
|
4
|
+
|
|
5
|
+
@injectable()
|
|
6
|
+
@scoped(Lifecycle.ContainerScoped)
|
|
7
|
+
export class RuntimeVerificationKeyRootService implements MinimalVKTreeService {
|
|
8
|
+
private injectedRoot?: bigint;
|
|
9
|
+
|
|
10
|
+
public setRoot(root: bigint) {
|
|
11
|
+
this.injectedRoot = root;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public getRoot() {
|
|
15
|
+
if (this.injectedRoot === undefined) {
|
|
16
|
+
throw new Error("VKTree root not set");
|
|
17
|
+
}
|
|
18
|
+
return this.injectedRoot;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Field, Proof, Struct } from "o1js";
|
|
2
|
+
import { WithZkProgrammable, CompilableModule } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
|
|
5
|
+
|
|
6
|
+
export class StateTransitionProverPublicInput extends Struct({
|
|
7
|
+
stateTransitionsHash: Field,
|
|
8
|
+
protocolTransitionsHash: Field,
|
|
9
|
+
stateRoot: Field,
|
|
10
|
+
protocolStateRoot: Field,
|
|
11
|
+
}) {}
|
|
12
|
+
|
|
13
|
+
export class StateTransitionProverPublicOutput extends Struct({
|
|
14
|
+
stateTransitionsHash: Field,
|
|
15
|
+
protocolTransitionsHash: Field,
|
|
16
|
+
stateRoot: Field,
|
|
17
|
+
protocolStateRoot: Field,
|
|
18
|
+
}) {}
|
|
19
|
+
|
|
20
|
+
export type StateTransitionProof = Proof<
|
|
21
|
+
StateTransitionProverPublicInput,
|
|
22
|
+
StateTransitionProverPublicOutput
|
|
23
|
+
>;
|
|
24
|
+
|
|
25
|
+
export interface StateTransitionProvable
|
|
26
|
+
extends WithZkProgrammable<
|
|
27
|
+
StateTransitionProverPublicInput,
|
|
28
|
+
StateTransitionProverPublicOutput
|
|
29
|
+
>,
|
|
30
|
+
CompilableModule {
|
|
31
|
+
runBatch: (
|
|
32
|
+
publicInput: StateTransitionProverPublicInput,
|
|
33
|
+
batch: StateTransitionProvableBatch
|
|
34
|
+
) => Promise<StateTransitionProverPublicOutput>;
|
|
35
|
+
|
|
36
|
+
merge: (
|
|
37
|
+
publicInput: StateTransitionProverPublicInput,
|
|
38
|
+
proof1: StateTransitionProof,
|
|
39
|
+
proof2: StateTransitionProof
|
|
40
|
+
) => Promise<StateTransitionProverPublicOutput>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AreProofsEnabled,
|
|
3
|
+
PlainZkProgram,
|
|
4
|
+
provableMethod,
|
|
5
|
+
RollupMerkleTreeWitness,
|
|
6
|
+
ZkProgrammable,
|
|
7
|
+
CompilableModule,
|
|
8
|
+
type ArtifactRecord,
|
|
9
|
+
type CompileRegistry,
|
|
10
|
+
} from "@proto-kit/common";
|
|
11
|
+
import { Field, Provable, SelfProof, ZkProgram } from "o1js";
|
|
12
|
+
import { injectable } from "tsyringe";
|
|
13
|
+
|
|
14
|
+
import { constants } from "../../Constants";
|
|
15
|
+
import { ProvableStateTransition } from "../../model/StateTransition";
|
|
16
|
+
import {
|
|
17
|
+
ProvableStateTransitionType,
|
|
18
|
+
StateTransitionProvableBatch,
|
|
19
|
+
} from "../../model/StateTransitionProvableBatch";
|
|
20
|
+
import { StateTransitionProverType } from "../../protocol/Protocol";
|
|
21
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
22
|
+
import {
|
|
23
|
+
DefaultProvableHashList,
|
|
24
|
+
ProvableHashList,
|
|
25
|
+
} from "../../utils/ProvableHashList";
|
|
26
|
+
|
|
27
|
+
import {
|
|
28
|
+
StateTransitionProof,
|
|
29
|
+
StateTransitionProvable,
|
|
30
|
+
StateTransitionProverPublicInput,
|
|
31
|
+
StateTransitionProverPublicOutput,
|
|
32
|
+
} from "./StateTransitionProvable";
|
|
33
|
+
|
|
34
|
+
const errors = {
|
|
35
|
+
propertyNotMatching: (property: string, step: string) =>
|
|
36
|
+
`${property} not matching ${step}`,
|
|
37
|
+
|
|
38
|
+
merkleWitnessNotCorrect: (
|
|
39
|
+
index: number,
|
|
40
|
+
type: ProvableStateTransitionType
|
|
41
|
+
) => {
|
|
42
|
+
let s = `MerkleWitness not valid for StateTransition (${index}, type unknown)`;
|
|
43
|
+
Provable.asProver(() => {
|
|
44
|
+
s = s.replace(
|
|
45
|
+
"unknown",
|
|
46
|
+
type.isNormal().toBoolean() ? "normal" : "protocol"
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
return s;
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
noWitnessProviderSet: () =>
|
|
53
|
+
new Error(
|
|
54
|
+
"WitnessProvider not set, set it before you use StateTransitionProvider"
|
|
55
|
+
),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
interface StateTransitionProverExecutionState {
|
|
59
|
+
stateRoot: Field;
|
|
60
|
+
protocolStateRoot: Field;
|
|
61
|
+
stateTransitionList: ProvableHashList<ProvableStateTransition>;
|
|
62
|
+
protocolTransitionList: ProvableHashList<ProvableStateTransition>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const StateTransitionSelfProofClass = SelfProof<
|
|
66
|
+
StateTransitionProverPublicInput,
|
|
67
|
+
StateTransitionProverPublicOutput
|
|
68
|
+
>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* StateTransitionProver is the prover that proves the application of some state
|
|
72
|
+
* transitions and checks and updates their merkle-tree entries
|
|
73
|
+
*/
|
|
74
|
+
export class StateTransitionProverProgrammable extends ZkProgrammable<
|
|
75
|
+
StateTransitionProverPublicInput,
|
|
76
|
+
StateTransitionProverPublicOutput
|
|
77
|
+
> {
|
|
78
|
+
public constructor(
|
|
79
|
+
private readonly stateTransitionProver: StateTransitionProver
|
|
80
|
+
) {
|
|
81
|
+
super();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public get areProofsEnabled(): AreProofsEnabled | undefined {
|
|
85
|
+
return this.stateTransitionProver.areProofsEnabled;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public zkProgramFactory(): PlainZkProgram<
|
|
89
|
+
StateTransitionProverPublicInput,
|
|
90
|
+
StateTransitionProverPublicOutput
|
|
91
|
+
>[] {
|
|
92
|
+
const instance = this;
|
|
93
|
+
|
|
94
|
+
const program = ZkProgram({
|
|
95
|
+
name: "StateTransitionProver",
|
|
96
|
+
publicInput: StateTransitionProverPublicInput,
|
|
97
|
+
publicOutput: StateTransitionProverPublicOutput,
|
|
98
|
+
|
|
99
|
+
methods: {
|
|
100
|
+
runBatch: {
|
|
101
|
+
privateInputs: [StateTransitionProvableBatch],
|
|
102
|
+
|
|
103
|
+
async method(
|
|
104
|
+
publicInput: StateTransitionProverPublicInput,
|
|
105
|
+
batch: StateTransitionProvableBatch
|
|
106
|
+
) {
|
|
107
|
+
return await instance.runBatch(publicInput, batch);
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
merge: {
|
|
112
|
+
privateInputs: [
|
|
113
|
+
StateTransitionSelfProofClass,
|
|
114
|
+
StateTransitionSelfProofClass,
|
|
115
|
+
],
|
|
116
|
+
|
|
117
|
+
async method(
|
|
118
|
+
publicInput: StateTransitionProverPublicInput,
|
|
119
|
+
proof1: StateTransitionProof,
|
|
120
|
+
proof2: StateTransitionProof
|
|
121
|
+
) {
|
|
122
|
+
return await instance.merge(publicInput, proof1, proof2);
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const methods = {
|
|
129
|
+
runBatch: program.runBatch.bind(program),
|
|
130
|
+
merge: program.merge.bind(program),
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const SelfProofClass = ZkProgram.Proof(program);
|
|
134
|
+
|
|
135
|
+
return [
|
|
136
|
+
{
|
|
137
|
+
name: program.name,
|
|
138
|
+
compile: program.compile.bind(program),
|
|
139
|
+
verify: program.verify.bind(program),
|
|
140
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
141
|
+
Proof: SelfProofClass,
|
|
142
|
+
methods,
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Applies the state transitions to the current stateRoot
|
|
149
|
+
* and returns the new prover state
|
|
150
|
+
*/
|
|
151
|
+
public applyTransitions(
|
|
152
|
+
stateRoot: Field,
|
|
153
|
+
protocolStateRoot: Field,
|
|
154
|
+
stateTransitionCommitmentFrom: Field,
|
|
155
|
+
protocolTransitionCommitmentFrom: Field,
|
|
156
|
+
transitionBatch: StateTransitionProvableBatch
|
|
157
|
+
): StateTransitionProverExecutionState {
|
|
158
|
+
const state: StateTransitionProverExecutionState = {
|
|
159
|
+
stateRoot,
|
|
160
|
+
protocolStateRoot,
|
|
161
|
+
|
|
162
|
+
stateTransitionList: new DefaultProvableHashList(
|
|
163
|
+
ProvableStateTransition,
|
|
164
|
+
stateTransitionCommitmentFrom
|
|
165
|
+
),
|
|
166
|
+
|
|
167
|
+
protocolTransitionList: new DefaultProvableHashList(
|
|
168
|
+
ProvableStateTransition,
|
|
169
|
+
protocolTransitionCommitmentFrom
|
|
170
|
+
),
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const transitions = transitionBatch.batch;
|
|
174
|
+
const types = transitionBatch.transitionTypes;
|
|
175
|
+
const merkleWitness = transitionBatch.merkleWitnesses;
|
|
176
|
+
for (
|
|
177
|
+
let index = 0;
|
|
178
|
+
index < constants.stateTransitionProverBatchSize;
|
|
179
|
+
index++
|
|
180
|
+
) {
|
|
181
|
+
this.applyTransition(
|
|
182
|
+
state,
|
|
183
|
+
transitions[index],
|
|
184
|
+
types[index],
|
|
185
|
+
merkleWitness[index],
|
|
186
|
+
index
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return state;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Applies a single state transition to the given state
|
|
195
|
+
* and mutates it in place
|
|
196
|
+
*/
|
|
197
|
+
public applyTransition(
|
|
198
|
+
state: StateTransitionProverExecutionState,
|
|
199
|
+
transition: ProvableStateTransition,
|
|
200
|
+
type: ProvableStateTransitionType,
|
|
201
|
+
merkleWitness: RollupMerkleTreeWitness,
|
|
202
|
+
index = 0
|
|
203
|
+
) {
|
|
204
|
+
const membershipValid = merkleWitness.checkMembership(
|
|
205
|
+
state.stateRoot,
|
|
206
|
+
transition.path,
|
|
207
|
+
transition.from.value
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
membershipValid
|
|
211
|
+
.or(transition.from.isSome.not())
|
|
212
|
+
.assertTrue(errors.merkleWitnessNotCorrect(index, type));
|
|
213
|
+
|
|
214
|
+
const newRoot = merkleWitness.calculateRoot(transition.to.value);
|
|
215
|
+
|
|
216
|
+
state.stateRoot = Provable.if(
|
|
217
|
+
transition.to.isSome,
|
|
218
|
+
newRoot,
|
|
219
|
+
state.stateRoot
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// Only update protocol state root if ST is also of type protocol
|
|
223
|
+
// Since protocol STs are all at the start of the batch, this works
|
|
224
|
+
state.protocolStateRoot = Provable.if(
|
|
225
|
+
transition.to.isSome.and(type.isProtocol()),
|
|
226
|
+
newRoot,
|
|
227
|
+
state.protocolStateRoot
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
const isNotDummy = transition.path.equals(Field(0)).not();
|
|
231
|
+
|
|
232
|
+
state.stateTransitionList.pushIf(
|
|
233
|
+
transition,
|
|
234
|
+
isNotDummy.and(type.isNormal())
|
|
235
|
+
);
|
|
236
|
+
state.protocolTransitionList.pushIf(
|
|
237
|
+
transition,
|
|
238
|
+
isNotDummy.and(type.isProtocol())
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Applies a whole batch of StateTransitions at once
|
|
244
|
+
*/
|
|
245
|
+
@provableMethod()
|
|
246
|
+
public async runBatch(
|
|
247
|
+
publicInput: StateTransitionProverPublicInput,
|
|
248
|
+
batch: StateTransitionProvableBatch
|
|
249
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
250
|
+
const result = this.applyTransitions(
|
|
251
|
+
publicInput.stateRoot,
|
|
252
|
+
publicInput.protocolStateRoot,
|
|
253
|
+
publicInput.stateTransitionsHash,
|
|
254
|
+
publicInput.protocolTransitionsHash,
|
|
255
|
+
batch
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
return new StateTransitionProverPublicOutput({
|
|
259
|
+
stateRoot: result.stateRoot,
|
|
260
|
+
stateTransitionsHash: result.stateTransitionList.commitment,
|
|
261
|
+
protocolTransitionsHash: result.protocolTransitionList.commitment,
|
|
262
|
+
protocolStateRoot: result.protocolStateRoot,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@provableMethod()
|
|
267
|
+
public async merge(
|
|
268
|
+
publicInput: StateTransitionProverPublicInput,
|
|
269
|
+
proof1: StateTransitionProof,
|
|
270
|
+
proof2: StateTransitionProof
|
|
271
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
272
|
+
proof1.verify();
|
|
273
|
+
proof2.verify();
|
|
274
|
+
|
|
275
|
+
// Check state
|
|
276
|
+
publicInput.stateRoot.assertEquals(
|
|
277
|
+
proof1.publicInput.stateRoot,
|
|
278
|
+
errors.propertyNotMatching("stateRoot", "publicInput.from -> proof1.from")
|
|
279
|
+
);
|
|
280
|
+
proof1.publicOutput.stateRoot.assertEquals(
|
|
281
|
+
proof2.publicInput.stateRoot,
|
|
282
|
+
errors.propertyNotMatching("stateRoot", "proof1.to -> proof2.from")
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
// Check ST list
|
|
286
|
+
publicInput.stateTransitionsHash.assertEquals(
|
|
287
|
+
proof1.publicInput.stateTransitionsHash,
|
|
288
|
+
errors.propertyNotMatching(
|
|
289
|
+
"stateTransitionsHash",
|
|
290
|
+
"publicInput.from -> proof1.from"
|
|
291
|
+
)
|
|
292
|
+
);
|
|
293
|
+
proof1.publicOutput.stateTransitionsHash.assertEquals(
|
|
294
|
+
proof2.publicInput.stateTransitionsHash,
|
|
295
|
+
errors.propertyNotMatching(
|
|
296
|
+
"stateTransitionsHash",
|
|
297
|
+
"proof1.to -> proof2.from"
|
|
298
|
+
)
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
// Check Protocol ST list
|
|
302
|
+
publicInput.protocolTransitionsHash.assertEquals(
|
|
303
|
+
proof1.publicInput.protocolTransitionsHash,
|
|
304
|
+
errors.propertyNotMatching(
|
|
305
|
+
"protocolTransitionsHash",
|
|
306
|
+
"publicInput.from -> proof1.from"
|
|
307
|
+
)
|
|
308
|
+
);
|
|
309
|
+
proof1.publicOutput.protocolTransitionsHash.assertEquals(
|
|
310
|
+
proof2.publicInput.protocolTransitionsHash,
|
|
311
|
+
errors.propertyNotMatching(
|
|
312
|
+
"protocolTransitionsHash",
|
|
313
|
+
"proof1.to -> proof2.from"
|
|
314
|
+
)
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
// Check protocol state root
|
|
318
|
+
publicInput.protocolStateRoot.assertEquals(
|
|
319
|
+
proof1.publicInput.protocolStateRoot,
|
|
320
|
+
errors.propertyNotMatching(
|
|
321
|
+
"protocolStateRoot",
|
|
322
|
+
"publicInput.from -> proof1.from"
|
|
323
|
+
)
|
|
324
|
+
);
|
|
325
|
+
proof1.publicOutput.protocolStateRoot.assertEquals(
|
|
326
|
+
proof2.publicInput.protocolStateRoot,
|
|
327
|
+
errors.propertyNotMatching(
|
|
328
|
+
"protocolStateRoot",
|
|
329
|
+
"proof1.to -> proof2.from"
|
|
330
|
+
)
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
return new StateTransitionProverPublicInput({
|
|
334
|
+
stateRoot: proof2.publicOutput.stateRoot,
|
|
335
|
+
stateTransitionsHash: proof2.publicOutput.stateTransitionsHash,
|
|
336
|
+
protocolTransitionsHash: proof2.publicOutput.protocolTransitionsHash,
|
|
337
|
+
protocolStateRoot: proof2.publicOutput.protocolStateRoot,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
@injectable()
|
|
343
|
+
export class StateTransitionProver
|
|
344
|
+
extends ProtocolModule
|
|
345
|
+
implements
|
|
346
|
+
StateTransitionProvable,
|
|
347
|
+
StateTransitionProverType,
|
|
348
|
+
CompilableModule
|
|
349
|
+
{
|
|
350
|
+
public zkProgrammable: StateTransitionProverProgrammable;
|
|
351
|
+
|
|
352
|
+
public constructor() {
|
|
353
|
+
super();
|
|
354
|
+
this.zkProgrammable = new StateTransitionProverProgrammable(this);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
public async compile(
|
|
358
|
+
registry: CompileRegistry
|
|
359
|
+
): Promise<void | ArtifactRecord> {
|
|
360
|
+
return await this.zkProgrammable.compile(registry);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
public runBatch(
|
|
364
|
+
publicInput: StateTransitionProverPublicInput,
|
|
365
|
+
batch: StateTransitionProvableBatch
|
|
366
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
367
|
+
return this.zkProgrammable.runBatch(publicInput, batch);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
public merge(
|
|
371
|
+
publicInput: StateTransitionProverPublicInput,
|
|
372
|
+
proof1: StateTransitionProof,
|
|
373
|
+
proof2: StateTransitionProof
|
|
374
|
+
): Promise<StateTransitionProverPublicOutput> {
|
|
375
|
+
return this.zkProgrammable.merge(publicInput, proof1, proof2);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ArtifactRecord,
|
|
3
|
+
type CompilableModule,
|
|
4
|
+
CompileRegistry,
|
|
5
|
+
ConfigurableModule,
|
|
6
|
+
NoConfig,
|
|
7
|
+
TypedClass,
|
|
8
|
+
} from "@proto-kit/common";
|
|
9
|
+
import { SmartContract } from "o1js";
|
|
10
|
+
|
|
11
|
+
export type SmartContractClassFromInterface<Type> = typeof SmartContract &
|
|
12
|
+
TypedClass<Type>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This module type is used to define a contract module that can be used to
|
|
16
|
+
* construct and inject smart contract instances.
|
|
17
|
+
* It defines a method contractFactory, whose arguments can be configured via
|
|
18
|
+
* the Argument generic. It returns a smart contract class that is a subclass
|
|
19
|
+
* of SmartContract and implements a certain interface as specified by the
|
|
20
|
+
* ContractType generic.
|
|
21
|
+
*/
|
|
22
|
+
export abstract class ContractModule<ContractType, Config = NoConfig>
|
|
23
|
+
extends ConfigurableModule<Config>
|
|
24
|
+
implements CompilableModule
|
|
25
|
+
{
|
|
26
|
+
public abstract contractFactory(): SmartContractClassFromInterface<ContractType>;
|
|
27
|
+
|
|
28
|
+
public abstract compile(
|
|
29
|
+
registry: CompileRegistry
|
|
30
|
+
): Promise<ArtifactRecord | undefined>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AreProofsEnabled,
|
|
3
|
+
ChildContainerProvider,
|
|
4
|
+
ModuleContainer,
|
|
5
|
+
ModulesRecord,
|
|
6
|
+
TypedClass,
|
|
7
|
+
noop,
|
|
8
|
+
StringKeyOf,
|
|
9
|
+
} from "@proto-kit/common";
|
|
10
|
+
import { Field, PublicKey, SmartContract } from "o1js";
|
|
11
|
+
import { injectable } from "tsyringe";
|
|
12
|
+
|
|
13
|
+
import { ProtocolEnvironment } from "../protocol/ProtocolEnvironment";
|
|
14
|
+
import { ProtocolModule } from "../protocol/ProtocolModule";
|
|
15
|
+
|
|
16
|
+
import { ContractModule } from "./ContractModule";
|
|
17
|
+
import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
|
|
18
|
+
import { DispatchContractType } from "./contracts/DispatchSmartContract";
|
|
19
|
+
import {
|
|
20
|
+
SettlementContractConfig,
|
|
21
|
+
SettlementContractProtocolModule,
|
|
22
|
+
} from "./contracts/SettlementContractProtocolModule";
|
|
23
|
+
import { SettlementContractType } from "./contracts/SettlementSmartContract";
|
|
24
|
+
import { BridgeContractType } from "./contracts/BridgeContract";
|
|
25
|
+
import {
|
|
26
|
+
BridgeContractConfig,
|
|
27
|
+
BridgeContractProtocolModule,
|
|
28
|
+
} from "./contracts/BridgeContractProtocolModule";
|
|
29
|
+
import { GetContracts } from "./modularity/types";
|
|
30
|
+
|
|
31
|
+
export type SettlementModulesRecord = ModulesRecord<
|
|
32
|
+
TypedClass<ContractModule<unknown, unknown>>
|
|
33
|
+
>;
|
|
34
|
+
|
|
35
|
+
export type MandatorySettlementModulesRecord = {
|
|
36
|
+
SettlementContract: TypedClass<
|
|
37
|
+
ContractModule<SettlementContractType, SettlementContractConfig>
|
|
38
|
+
>;
|
|
39
|
+
DispatchContract: TypedClass<ContractModule<DispatchContractType, unknown>>;
|
|
40
|
+
BridgeContract: TypedClass<
|
|
41
|
+
ContractModule<BridgeContractType, BridgeContractConfig>
|
|
42
|
+
>;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
@injectable()
|
|
46
|
+
export class SettlementContractModule<
|
|
47
|
+
SettlementModules extends SettlementModulesRecord &
|
|
48
|
+
MandatorySettlementModulesRecord,
|
|
49
|
+
>
|
|
50
|
+
extends ModuleContainer<SettlementModules>
|
|
51
|
+
implements ProtocolModule<unknown>
|
|
52
|
+
{
|
|
53
|
+
public constructor(definition: { modules: SettlementModules }) {
|
|
54
|
+
super(definition);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public static from<
|
|
58
|
+
SettlementModules extends SettlementModulesRecord &
|
|
59
|
+
MandatorySettlementModulesRecord,
|
|
60
|
+
>(
|
|
61
|
+
modules: SettlementModules
|
|
62
|
+
): TypedClass<SettlementContractModule<SettlementModules>> {
|
|
63
|
+
return class ScopedSettlementContractModule extends SettlementContractModule<SettlementModules> {
|
|
64
|
+
public constructor() {
|
|
65
|
+
super({ modules });
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public static mandatoryModules() {
|
|
71
|
+
return {
|
|
72
|
+
SettlementContract: SettlementContractProtocolModule,
|
|
73
|
+
DispatchContract: DispatchContractProtocolModule,
|
|
74
|
+
BridgeContract: BridgeContractProtocolModule,
|
|
75
|
+
} as const;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public static fromDefaults() {
|
|
79
|
+
return SettlementContractModule.from(
|
|
80
|
+
SettlementContractModule.mandatoryModules()
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public static with<AdditionalModules extends SettlementModulesRecord>(
|
|
85
|
+
additionalModules: AdditionalModules
|
|
86
|
+
) {
|
|
87
|
+
return SettlementContractModule.from({
|
|
88
|
+
...SettlementContractModule.mandatoryModules(),
|
|
89
|
+
...additionalModules,
|
|
90
|
+
} as const);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// ** For protocol module
|
|
94
|
+
public protocol?: ProtocolEnvironment;
|
|
95
|
+
|
|
96
|
+
public get areProofsEnabled(): AreProofsEnabled | undefined {
|
|
97
|
+
return this.protocol?.getAreProofsEnabled();
|
|
98
|
+
}
|
|
99
|
+
// **
|
|
100
|
+
|
|
101
|
+
public create(childContainerProvider: ChildContainerProvider) {
|
|
102
|
+
super.create(childContainerProvider);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public async start() {
|
|
106
|
+
noop();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
public getContractClasses(): GetContracts<SettlementModules> {
|
|
110
|
+
const contracts =
|
|
111
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
112
|
+
(this.moduleNames as StringKeyOf<SettlementModules>[]).map((name) => {
|
|
113
|
+
const module = this.resolve(name);
|
|
114
|
+
return [name, module.contractFactory()];
|
|
115
|
+
});
|
|
116
|
+
return Object.fromEntries(contracts);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public createContracts(addresses: {
|
|
120
|
+
settlement: PublicKey;
|
|
121
|
+
dispatch: PublicKey;
|
|
122
|
+
}): {
|
|
123
|
+
settlement: SettlementContractType & SmartContract;
|
|
124
|
+
dispatch: DispatchContractType & SmartContract;
|
|
125
|
+
} {
|
|
126
|
+
const { DispatchContract, SettlementContract } = this.getContractClasses();
|
|
127
|
+
|
|
128
|
+
const dispatchInstance = new DispatchContract(addresses.dispatch);
|
|
129
|
+
const settlementInstance = new SettlementContract(addresses.settlement);
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
dispatch: dispatchInstance,
|
|
133
|
+
settlement: settlementInstance,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public createBridgeContract(
|
|
138
|
+
address: PublicKey,
|
|
139
|
+
tokenId?: Field
|
|
140
|
+
): BridgeContractType & SmartContract {
|
|
141
|
+
const { BridgeContract } = this.getContractClasses();
|
|
142
|
+
|
|
143
|
+
return new BridgeContract(address, tokenId);
|
|
144
|
+
}
|
|
145
|
+
}
|