@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,21 @@
|
|
|
1
|
+
import { NoConfig } from "@proto-kit/common";
|
|
2
|
+
|
|
3
|
+
import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
|
|
4
|
+
import { NetworkState } from "../model/network/NetworkState";
|
|
5
|
+
import { BlockProverState } from "../prover/block/BlockProver";
|
|
6
|
+
|
|
7
|
+
export class NoopBlockHook extends ProvableBlockHook<NoConfig> {
|
|
8
|
+
public async afterBlock(
|
|
9
|
+
networkState: NetworkState,
|
|
10
|
+
state: BlockProverState
|
|
11
|
+
): Promise<NetworkState> {
|
|
12
|
+
return networkState;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public async beforeBlock(
|
|
16
|
+
networkState: NetworkState,
|
|
17
|
+
state: BlockProverState
|
|
18
|
+
): Promise<NetworkState> {
|
|
19
|
+
return networkState;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { injectable } from "tsyringe";
|
|
2
|
+
import { noop } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
ProvableSettlementHook,
|
|
6
|
+
SettlementHookInputs,
|
|
7
|
+
} from "../settlement/modularity/ProvableSettlementHook";
|
|
8
|
+
import { SettlementSmartContractBase } from "../settlement/contracts/SettlementSmartContract";
|
|
9
|
+
|
|
10
|
+
@injectable()
|
|
11
|
+
export class NoopSettlementHook extends ProvableSettlementHook<
|
|
12
|
+
Record<string, never>
|
|
13
|
+
> {
|
|
14
|
+
public async beforeSettlement(
|
|
15
|
+
contract: SettlementSmartContractBase,
|
|
16
|
+
state: SettlementHookInputs
|
|
17
|
+
) {
|
|
18
|
+
noop();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { noop } from "@proto-kit/common";
|
|
2
|
+
|
|
3
|
+
import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
|
|
4
|
+
import { BlockProverExecutionData } from "../prover/block/BlockProvable";
|
|
5
|
+
|
|
6
|
+
export class NoopTransactionHook extends ProvableTransactionHook {
|
|
7
|
+
public async onTransaction(executionData: BlockProverExecutionData) {
|
|
8
|
+
noop();
|
|
9
|
+
}
|
|
10
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export * from "./hooks/AccountStateHook";
|
|
2
|
+
export * from "./hooks/BlockHeightHook";
|
|
3
|
+
export * from "./hooks/LastStateRootBlockHook";
|
|
4
|
+
export * from "./model/StateTransition";
|
|
5
|
+
export * from "./model/StateTransitionProvableBatch";
|
|
6
|
+
export * from "./model/Option";
|
|
7
|
+
export * from "./model/Path";
|
|
8
|
+
export * from "./model/network/NetworkState";
|
|
9
|
+
export * from "./model/transaction/SignedTransaction";
|
|
10
|
+
export * from "./model/transaction/RuntimeTransaction";
|
|
11
|
+
export * from "./model/transaction/ValueOption";
|
|
12
|
+
export * from "./model/MethodPublicOutput";
|
|
13
|
+
export * from "./model/RuntimeLike";
|
|
14
|
+
export * from "./utils/ProvableHashList";
|
|
15
|
+
export * from "./utils/PrefixedProvableHashList";
|
|
16
|
+
export * from "./utils/MinaPrefixedProvableHashList";
|
|
17
|
+
export * from "./utils/ProvableReductionHashList";
|
|
18
|
+
export * from "./utils/StateTransitionReductionList";
|
|
19
|
+
export * from "./utils/utils";
|
|
20
|
+
export * from "./prover/block/BlockProver";
|
|
21
|
+
export * from "./prover/block/BlockProvable";
|
|
22
|
+
export * from "./prover/block/accummulators/RuntimeVerificationKeyTree";
|
|
23
|
+
export * from "./prover/block/accummulators/BlockHashMerkleTree";
|
|
24
|
+
export * from "./prover/block/services/RuntimeVerificationKeyRootService";
|
|
25
|
+
export * from "./prover/statetransition/StateTransitionProver";
|
|
26
|
+
export * from "./prover/statetransition/StateTransitionProvable";
|
|
27
|
+
export * from "./protocol/Protocol";
|
|
28
|
+
export * from "./protocol/ProtocolModule";
|
|
29
|
+
export * from "./protocol/ProtocolEnvironment";
|
|
30
|
+
export * from "./protocol/ProvableTransactionHook";
|
|
31
|
+
export * from "./protocol/ProvableBlockHook";
|
|
32
|
+
export * from "./state/context/TransitionMethodExecutionContext";
|
|
33
|
+
export * from "./state/context/RuntimeMethodExecutionContext";
|
|
34
|
+
export * from "./state/protocol/ProtocolState";
|
|
35
|
+
export * from "./state/State";
|
|
36
|
+
export * from "./state/StateMap";
|
|
37
|
+
export * from "./state/StateService";
|
|
38
|
+
export * from "./state/StateServiceProvider";
|
|
39
|
+
export * from "./state/assert/assert";
|
|
40
|
+
export * from "./settlement/contracts/authorizations/ContractAuthorization";
|
|
41
|
+
export * from "./settlement/contracts/authorizations/UpdateMessagesHashAuth";
|
|
42
|
+
export * from "./settlement/contracts/authorizations/TokenBridgeDeploymentAuth";
|
|
43
|
+
export * from "./settlement/contracts/SettlementSmartContract";
|
|
44
|
+
export * from "./settlement/contracts/SettlementContractProtocolModule";
|
|
45
|
+
export * from "./settlement/contracts/DispatchSmartContract";
|
|
46
|
+
export * from "./settlement/contracts/DispatchContractProtocolModule";
|
|
47
|
+
export * from "./settlement/contracts/BridgeContract";
|
|
48
|
+
export * from "./settlement/contracts/BridgeContractProtocolModule";
|
|
49
|
+
export * from "./settlement/contracts/TokenBridgeTree";
|
|
50
|
+
export * from "./settlement/SettlementContractModule";
|
|
51
|
+
export * from "./settlement/ContractModule";
|
|
52
|
+
export * from "./settlement/modularity/ProvableSettlementHook";
|
|
53
|
+
export * from "./settlement/messages/OutgoingMessageArgument";
|
|
54
|
+
export * from "./settlement/modules/NetworkStateSettlementModule";
|
|
55
|
+
export * from "./settlement/messages/Deposit";
|
|
56
|
+
export * from "./settlement/messages/Withdrawal";
|
|
57
|
+
export { constants as ProtocolConstants } from "./Constants";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Bool, Field, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Public input used to link in-circuit execution with
|
|
5
|
+
* the proof's public input.
|
|
6
|
+
*/
|
|
7
|
+
export class MethodPublicOutput extends Struct({
|
|
8
|
+
stateTransitionsHash: Field,
|
|
9
|
+
status: Bool,
|
|
10
|
+
transactionHash: Field,
|
|
11
|
+
networkStateHash: Field,
|
|
12
|
+
isMessage: Bool,
|
|
13
|
+
eventsHash: Field,
|
|
14
|
+
}) {}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Bool,
|
|
3
|
+
Field,
|
|
4
|
+
type FlexibleProvablePure,
|
|
5
|
+
Poseidon,
|
|
6
|
+
Provable,
|
|
7
|
+
ProvablePure,
|
|
8
|
+
Struct,
|
|
9
|
+
} from "o1js";
|
|
10
|
+
|
|
11
|
+
export class ProvableOption extends Struct({
|
|
12
|
+
isSome: Bool,
|
|
13
|
+
value: Field,
|
|
14
|
+
}) {
|
|
15
|
+
public toSome() {
|
|
16
|
+
this.isSome = Bool(true);
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export abstract class OptionBase {
|
|
22
|
+
protected constructor(
|
|
23
|
+
public isSome: Bool,
|
|
24
|
+
public isForcedSome: Bool
|
|
25
|
+
) {}
|
|
26
|
+
|
|
27
|
+
protected abstract encodeValueToFields(): Field[];
|
|
28
|
+
|
|
29
|
+
protected abstract clone(): OptionBase;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @returns Tree representation of the current value
|
|
33
|
+
*/
|
|
34
|
+
public get treeValue() {
|
|
35
|
+
const treeValue = Poseidon.hash(this.encodeValueToFields());
|
|
36
|
+
|
|
37
|
+
return Provable.if(
|
|
38
|
+
this.isSome.and(this.isForcedSome.not()),
|
|
39
|
+
treeValue,
|
|
40
|
+
Field(0)
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public forceSome() {
|
|
45
|
+
this.isForcedSome = Provable.if(this.isSome, Bool(false), Bool(true));
|
|
46
|
+
this.isSome = Bool(true);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Returns the `to`-value as decoded as a list of fields
|
|
51
|
+
* Not in circuit
|
|
52
|
+
*/
|
|
53
|
+
public toFields(): Field[] {
|
|
54
|
+
if (this.isSome.toBoolean()) {
|
|
55
|
+
return this.encodeValueToFields();
|
|
56
|
+
}
|
|
57
|
+
return [Field(0)];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @returns Provable representation of the current option.
|
|
62
|
+
*/
|
|
63
|
+
public toProvable() {
|
|
64
|
+
return new ProvableOption({
|
|
65
|
+
isSome: this.isSome,
|
|
66
|
+
value: this.treeValue,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public toJSON() {
|
|
71
|
+
const value = this.encodeValueToFields().map((field) => field.toString());
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
isSome: this.isSome.toBoolean(),
|
|
75
|
+
isForcedSome: this.isForcedSome.toBoolean(),
|
|
76
|
+
value,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Option facilitating in-circuit values that may or may not exist.
|
|
83
|
+
*/
|
|
84
|
+
export class Option<Value> extends OptionBase {
|
|
85
|
+
/**
|
|
86
|
+
* Creates a new Option from the provided parameters
|
|
87
|
+
*
|
|
88
|
+
* @param isSome
|
|
89
|
+
* @param value
|
|
90
|
+
* @param valueType
|
|
91
|
+
* @returns New option from the provided parameters.
|
|
92
|
+
*/
|
|
93
|
+
public static from<Value>(
|
|
94
|
+
isSome: Bool,
|
|
95
|
+
value: Value,
|
|
96
|
+
valueType: FlexibleProvablePure<Value>
|
|
97
|
+
) {
|
|
98
|
+
return new Option(isSome, value, valueType);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Creates a new Option from the provided parameters
|
|
103
|
+
*
|
|
104
|
+
* @param value
|
|
105
|
+
* @param valueType
|
|
106
|
+
* @returns New option from the provided parameters.
|
|
107
|
+
*/
|
|
108
|
+
public static fromValue<Value>(
|
|
109
|
+
value: Value,
|
|
110
|
+
valueType: FlexibleProvablePure<Value>
|
|
111
|
+
) {
|
|
112
|
+
return this.from(Bool(true), value, valueType);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @returns Empty / none option
|
|
117
|
+
*/
|
|
118
|
+
public static none() {
|
|
119
|
+
return new Option(Bool(false), Field(0), Field);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public constructor(
|
|
123
|
+
isSome: Bool,
|
|
124
|
+
public value: Value,
|
|
125
|
+
public valueType: FlexibleProvablePure<Value>,
|
|
126
|
+
isForcedSome = Bool(false)
|
|
127
|
+
) {
|
|
128
|
+
super(isSome, isForcedSome);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public encodeValueToFields(): Field[] {
|
|
132
|
+
return this.valueType.toFields(this.value);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public clone(): Option<Value> {
|
|
136
|
+
return new Option(
|
|
137
|
+
this.isSome,
|
|
138
|
+
this.value,
|
|
139
|
+
this.valueType,
|
|
140
|
+
this.isForcedSome
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @returns Returns the value of this option if it isSome,
|
|
146
|
+
* otherwise returns the given defaultValue
|
|
147
|
+
*/
|
|
148
|
+
public orElse(defaultValue: Value): Value {
|
|
149
|
+
return Provable.if<Value>(
|
|
150
|
+
this.isSome,
|
|
151
|
+
this.valueType,
|
|
152
|
+
this.value,
|
|
153
|
+
defaultValue
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public toConstant() {
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
159
|
+
const valueConstant = (this.valueType as ProvablePure<Value>).fromFields(
|
|
160
|
+
this.valueType.toFields(this.value).map((field) => field.toConstant())
|
|
161
|
+
);
|
|
162
|
+
const boolConstant = (bool: Bool) =>
|
|
163
|
+
Bool.fromFields([bool.toField().toConstant()]);
|
|
164
|
+
|
|
165
|
+
return new Option(
|
|
166
|
+
boolConstant(this.isSome),
|
|
167
|
+
valueConstant,
|
|
168
|
+
this.valueType,
|
|
169
|
+
boolConstant(this.isForcedSome)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Field, type FlexibleProvablePure, Poseidon } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { stringToField } from "../utils/utils";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Helps manage path (key) identifiers for key-values in trees.
|
|
7
|
+
*/
|
|
8
|
+
export class Path {
|
|
9
|
+
/**
|
|
10
|
+
* Encodes a JS string as a Field
|
|
11
|
+
*
|
|
12
|
+
* @param value
|
|
13
|
+
* @returns Field representation of the provided value
|
|
14
|
+
*/
|
|
15
|
+
public static toField(value: string) {
|
|
16
|
+
return stringToField(value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Encodes a class name and its property name into a Field
|
|
21
|
+
*
|
|
22
|
+
* @param className
|
|
23
|
+
* @param propertyKey
|
|
24
|
+
* @returns Field representation of class name + property name
|
|
25
|
+
*/
|
|
26
|
+
public static fromProperty(className: string, propertyKey: string): Field {
|
|
27
|
+
return Poseidon.hash([
|
|
28
|
+
Path.toField(className),
|
|
29
|
+
Path.toField(propertyKey),
|
|
30
|
+
Field(0),
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Encodes an existing path with the provided key into a single Field.
|
|
36
|
+
*
|
|
37
|
+
* @param path
|
|
38
|
+
* @param keyType
|
|
39
|
+
* @param key
|
|
40
|
+
* @returns Field representation of the leading path + the provided key.
|
|
41
|
+
*/
|
|
42
|
+
public static fromKey<KeyType>(
|
|
43
|
+
path: Field,
|
|
44
|
+
keyType: FlexibleProvablePure<KeyType>,
|
|
45
|
+
key: KeyType
|
|
46
|
+
): Field {
|
|
47
|
+
const keyHash = Poseidon.hash(keyType.toFields(key));
|
|
48
|
+
return Poseidon.hash([path, keyHash]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type RuntimeMethodInvocationType = "INCOMING_MESSAGE" | "SIGNATURE";
|
|
2
|
+
|
|
3
|
+
export type RuntimeMethodIdMapping = Record<
|
|
4
|
+
`${string}.${string}`,
|
|
5
|
+
{ methodId: bigint; type: RuntimeMethodInvocationType }
|
|
6
|
+
>;
|
|
7
|
+
|
|
8
|
+
export interface RuntimeLike {
|
|
9
|
+
get methodIdResolver(): {
|
|
10
|
+
methodIdMap: () => RuntimeMethodIdMapping;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Field, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { Option, ProvableOption } from "./Option";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Provable representation of a State Transition, used to
|
|
7
|
+
* normalize state transitions of various value types for
|
|
8
|
+
* the state transition circuit.
|
|
9
|
+
*/
|
|
10
|
+
export class ProvableStateTransition extends Struct({
|
|
11
|
+
path: Field,
|
|
12
|
+
|
|
13
|
+
// must be applied even if `None`
|
|
14
|
+
from: ProvableOption,
|
|
15
|
+
|
|
16
|
+
// must be ignored if `None`
|
|
17
|
+
to: ProvableOption,
|
|
18
|
+
}) {
|
|
19
|
+
public static dummy(): ProvableStateTransition {
|
|
20
|
+
return new ProvableStateTransition({
|
|
21
|
+
path: Field(0),
|
|
22
|
+
from: Option.none().toProvable(),
|
|
23
|
+
to: Option.none().toProvable(),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Generic state transition that constraints the current method circuit
|
|
30
|
+
* to external state, by providing a state anchor.
|
|
31
|
+
*/
|
|
32
|
+
export class StateTransition<Value> {
|
|
33
|
+
public static from<Value>(path: Field, fromValue: Option<Value>) {
|
|
34
|
+
return new StateTransition(path, fromValue, Option.none());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public static fromTo<Value>(
|
|
38
|
+
path: Field,
|
|
39
|
+
fromValue: Option<Value>,
|
|
40
|
+
toValue: Option<Value>
|
|
41
|
+
) {
|
|
42
|
+
return new StateTransition(path, fromValue, toValue);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public constructor(
|
|
46
|
+
public path: Field,
|
|
47
|
+
public fromValue: Option<Value>,
|
|
48
|
+
public toValue: Option<Field> | Option<Value>
|
|
49
|
+
) {}
|
|
50
|
+
|
|
51
|
+
public get from() {
|
|
52
|
+
const from = this.fromValue.clone();
|
|
53
|
+
from.forceSome();
|
|
54
|
+
return from;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public get to() {
|
|
58
|
+
return this.toValue.clone();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Converts a StateTransition to a ProvableStateTransition,
|
|
63
|
+
* while enforcing the 'from' property to be 'Some' in all cases.
|
|
64
|
+
*/
|
|
65
|
+
public toProvable(): ProvableStateTransition {
|
|
66
|
+
return new ProvableStateTransition({
|
|
67
|
+
path: this.path,
|
|
68
|
+
from: this.from.toProvable(),
|
|
69
|
+
to: this.to.toProvable(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public toJSON() {
|
|
74
|
+
return {
|
|
75
|
+
path: this.path.toString(),
|
|
76
|
+
from: this.fromValue.toJSON(),
|
|
77
|
+
to: this.toValue.toJSON(),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public toConstant(): StateTransition<Value> {
|
|
82
|
+
return new StateTransition<Value>(
|
|
83
|
+
this.path.toConstant(),
|
|
84
|
+
this.fromValue.toConstant(),
|
|
85
|
+
this.toValue.toConstant()
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Bool, Provable, Struct } from "o1js";
|
|
2
|
+
import {
|
|
3
|
+
InMemoryMerkleTreeStorage,
|
|
4
|
+
range,
|
|
5
|
+
RollupMerkleTree,
|
|
6
|
+
RollupMerkleTreeWitness,
|
|
7
|
+
} from "@proto-kit/common";
|
|
8
|
+
|
|
9
|
+
import { constants } from "../Constants";
|
|
10
|
+
|
|
11
|
+
import { ProvableStateTransition } from "./StateTransition.js";
|
|
12
|
+
|
|
13
|
+
export class StateTransitionType {
|
|
14
|
+
public static readonly normal = true;
|
|
15
|
+
|
|
16
|
+
public static readonly protocol = false;
|
|
17
|
+
|
|
18
|
+
public static isNormal(type: boolean) {
|
|
19
|
+
return type === StateTransitionType.normal;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public static isProtocol(type: boolean) {
|
|
23
|
+
return type === StateTransitionType.protocol;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class ProvableStateTransitionType extends Struct({
|
|
28
|
+
type: Bool,
|
|
29
|
+
}) {
|
|
30
|
+
public static get normal(): ProvableStateTransitionType {
|
|
31
|
+
return new ProvableStateTransitionType({
|
|
32
|
+
type: Bool(StateTransitionType.normal),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public static get protocol(): ProvableStateTransitionType {
|
|
37
|
+
return new ProvableStateTransitionType({
|
|
38
|
+
type: Bool(StateTransitionType.protocol),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public isNormal(): Bool {
|
|
43
|
+
return this.type;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public isProtocol(): Bool {
|
|
47
|
+
return this.type.not();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A Batch of StateTransitions to be consumed by the StateTransitionProver
|
|
53
|
+
* to prove multiple STs at once
|
|
54
|
+
*
|
|
55
|
+
* transitionType:
|
|
56
|
+
* true == normal ST, false == protocol ST
|
|
57
|
+
*/
|
|
58
|
+
export class StateTransitionProvableBatch extends Struct({
|
|
59
|
+
batch: Provable.Array(
|
|
60
|
+
ProvableStateTransition,
|
|
61
|
+
constants.stateTransitionProverBatchSize
|
|
62
|
+
),
|
|
63
|
+
|
|
64
|
+
transitionTypes: Provable.Array(
|
|
65
|
+
ProvableStateTransitionType,
|
|
66
|
+
constants.stateTransitionProverBatchSize
|
|
67
|
+
),
|
|
68
|
+
|
|
69
|
+
merkleWitnesses: Provable.Array(
|
|
70
|
+
RollupMerkleTreeWitness,
|
|
71
|
+
constants.stateTransitionProverBatchSize
|
|
72
|
+
),
|
|
73
|
+
}) {
|
|
74
|
+
public static fromMappings(
|
|
75
|
+
transitions: {
|
|
76
|
+
transition: ProvableStateTransition;
|
|
77
|
+
type: ProvableStateTransitionType;
|
|
78
|
+
}[],
|
|
79
|
+
merkleWitnesses: RollupMerkleTreeWitness[]
|
|
80
|
+
): StateTransitionProvableBatch {
|
|
81
|
+
const batch = transitions.map((entry) => entry.transition);
|
|
82
|
+
const transitionTypes = transitions.map((entry) => entry.type);
|
|
83
|
+
const witnesses = merkleWitnesses.slice();
|
|
84
|
+
// Check that order is correct
|
|
85
|
+
let normalSTsStarted = false;
|
|
86
|
+
transitionTypes.forEach((x) => {
|
|
87
|
+
if (!normalSTsStarted && x.isNormal().toBoolean()) {
|
|
88
|
+
normalSTsStarted = true;
|
|
89
|
+
}
|
|
90
|
+
if (normalSTsStarted && x.isProtocol().toBoolean()) {
|
|
91
|
+
throw new Error("Order in initializing STBatch not correct");
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
while (batch.length < constants.stateTransitionProverBatchSize) {
|
|
96
|
+
batch.push(ProvableStateTransition.dummy());
|
|
97
|
+
transitionTypes.push(ProvableStateTransitionType.normal);
|
|
98
|
+
witnesses.push(
|
|
99
|
+
new RollupMerkleTree(new InMemoryMerkleTreeStorage()).getWitness(
|
|
100
|
+
BigInt(0)
|
|
101
|
+
)
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
return new StateTransitionProvableBatch({
|
|
105
|
+
batch,
|
|
106
|
+
transitionTypes,
|
|
107
|
+
merkleWitnesses: witnesses,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public static fromTransitions(
|
|
112
|
+
transitions: ProvableStateTransition[],
|
|
113
|
+
protocolTransitions: ProvableStateTransition[],
|
|
114
|
+
merkleWitnesses: RollupMerkleTreeWitness[]
|
|
115
|
+
): StateTransitionProvableBatch {
|
|
116
|
+
const array = transitions.slice().concat(protocolTransitions);
|
|
117
|
+
|
|
118
|
+
const transitionTypes = range(0, transitions.length)
|
|
119
|
+
.map(() => ProvableStateTransitionType.normal)
|
|
120
|
+
.concat(
|
|
121
|
+
range(0, protocolTransitions.length).map(
|
|
122
|
+
() => ProvableStateTransitionType.protocol
|
|
123
|
+
)
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
while (array.length < constants.stateTransitionProverBatchSize) {
|
|
127
|
+
array.push(ProvableStateTransition.dummy());
|
|
128
|
+
transitionTypes.push(ProvableStateTransitionType.normal);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return new StateTransitionProvableBatch({
|
|
132
|
+
batch: array,
|
|
133
|
+
transitionTypes,
|
|
134
|
+
merkleWitnesses,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
private constructor(object: {
|
|
139
|
+
batch: ProvableStateTransition[];
|
|
140
|
+
transitionTypes: ProvableStateTransitionType[];
|
|
141
|
+
merkleWitnesses: RollupMerkleTreeWitness[];
|
|
142
|
+
}) {
|
|
143
|
+
super(object);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Field,
|
|
3
|
+
FlexibleProvable,
|
|
4
|
+
Poseidon,
|
|
5
|
+
PublicKey,
|
|
6
|
+
Signature,
|
|
7
|
+
Struct,
|
|
8
|
+
UInt64,
|
|
9
|
+
} from "o1js";
|
|
10
|
+
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
12
|
+
function argsToHash(...args: FlexibleProvable<any>[]): Field {
|
|
13
|
+
const fields = args.flatMap((argument) => argument.toFields(argument));
|
|
14
|
+
return Poseidon.hash(fields);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
class Transaction extends Struct({
|
|
19
|
+
// must be checked inside @runtimeMethod
|
|
20
|
+
methodId: Field,
|
|
21
|
+
// constructed by hashing args + appending all used proof input/output hashes at the end
|
|
22
|
+
argsHash: Field,
|
|
23
|
+
// must (due to nonce) be checked during applyTransaction
|
|
24
|
+
nonce: UInt64,
|
|
25
|
+
sender: PublicKey,
|
|
26
|
+
signature: Signature,
|
|
27
|
+
}) {
|
|
28
|
+
public toHash(): Field {
|
|
29
|
+
return Poseidon.hash(Transaction.toFields(this));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Field, Poseidon, Struct, UInt64 } from "o1js";
|
|
2
|
+
import { RollupMerkleTree } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
export class CurrentBlock extends Struct({
|
|
5
|
+
height: UInt64,
|
|
6
|
+
}) {}
|
|
7
|
+
|
|
8
|
+
export class PreviousBlock extends Struct({
|
|
9
|
+
rootHash: Field,
|
|
10
|
+
}) {}
|
|
11
|
+
|
|
12
|
+
export class NetworkState extends Struct({
|
|
13
|
+
block: CurrentBlock,
|
|
14
|
+
previous: PreviousBlock,
|
|
15
|
+
}) {
|
|
16
|
+
public hash(): Field {
|
|
17
|
+
return Poseidon.hash([
|
|
18
|
+
...CurrentBlock.toFields(this.block),
|
|
19
|
+
...PreviousBlock.toFields(this.previous),
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static empty() {
|
|
24
|
+
return new NetworkState({
|
|
25
|
+
block: {
|
|
26
|
+
height: UInt64.zero,
|
|
27
|
+
},
|
|
28
|
+
previous: {
|
|
29
|
+
rootHash: Field(RollupMerkleTree.EMPTY_ROOT),
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|