@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,26 @@
|
|
|
1
|
+
import { StateTransition } from "../../model/StateTransition";
|
|
2
|
+
|
|
3
|
+
export class TransitionMethodExecutionResult {
|
|
4
|
+
public stateTransitions: StateTransition<any>[] = [];
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface TransitionMethodExecutionContext {
|
|
8
|
+
/**
|
|
9
|
+
* Adds an in-method generated state transition to the current context
|
|
10
|
+
* @param stateTransition - State transition to add to the context
|
|
11
|
+
*/
|
|
12
|
+
addStateTransition: <Value>(stateTransition: StateTransition<Value>) => void;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Manually clears/resets the execution context
|
|
16
|
+
*/
|
|
17
|
+
clear: () => void;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Had to override current() otherwise it would not infer
|
|
21
|
+
* the type of result correctly (parent type would be reused)
|
|
22
|
+
*/
|
|
23
|
+
current: () => {
|
|
24
|
+
result: TransitionMethodExecutionResult;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { State } from "../State";
|
|
2
|
+
import { Path } from "../../model/Path";
|
|
3
|
+
import { TransitioningProtocolModule } from "../../protocol/TransitioningProtocolModule";
|
|
4
|
+
|
|
5
|
+
const errors = {
|
|
6
|
+
missingName: (className: string) =>
|
|
7
|
+
new Error(
|
|
8
|
+
`Unable to provide a unique identifier for state, ${className} is missing a name.
|
|
9
|
+
Did you forget to extend your block module with 'extends ...Hook'?`
|
|
10
|
+
),
|
|
11
|
+
|
|
12
|
+
missingProtocol: (className: string) =>
|
|
13
|
+
new Error(
|
|
14
|
+
`Unable to provide 'procotol' for state, ${className} is missing a name.
|
|
15
|
+
Did you forget to extend your block module with 'extends ...Hook'?`
|
|
16
|
+
),
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Decorates a runtime module property as state, passing down some
|
|
21
|
+
* underlying values to improve developer experience.
|
|
22
|
+
*/
|
|
23
|
+
export function protocolState() {
|
|
24
|
+
return <
|
|
25
|
+
TargetTransitioningModule extends TransitioningProtocolModule<unknown>,
|
|
26
|
+
>(
|
|
27
|
+
target: TargetTransitioningModule,
|
|
28
|
+
propertyKey: string
|
|
29
|
+
) => {
|
|
30
|
+
let value: State<unknown> | undefined;
|
|
31
|
+
|
|
32
|
+
Object.defineProperty(target, propertyKey, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
|
|
35
|
+
get: function get() {
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
37
|
+
const self = this as TargetTransitioningModule;
|
|
38
|
+
|
|
39
|
+
if (self.name === undefined) {
|
|
40
|
+
throw errors.missingName(self.constructor.name);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!self.protocol) {
|
|
44
|
+
throw errors.missingProtocol(self.constructor.name);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// TODO Add Prefix?
|
|
48
|
+
const path = Path.fromProperty(self.name, propertyKey);
|
|
49
|
+
if (value) {
|
|
50
|
+
value.path = path;
|
|
51
|
+
value.stateServiceProvider = self.protocol.stateServiceProvider;
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
set: (newValue: State<unknown>) => {
|
|
57
|
+
value = newValue;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Field, Poseidon, ProvablePure } from "o1js";
|
|
2
|
+
import { hashWithPrefix, prefixToField } from "@proto-kit/common";
|
|
3
|
+
|
|
4
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
5
|
+
|
|
6
|
+
function salt(prefix: string) {
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
8
|
+
return Poseidon.update(
|
|
9
|
+
[Field(0), Field(0), Field(0)],
|
|
10
|
+
[prefixToField(prefix)]
|
|
11
|
+
) as [Field, Field, Field];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const MINA_EVENT_PREFIXES = {
|
|
15
|
+
event: "MinaZkappEvent******",
|
|
16
|
+
events: "MinaZkappEvents*****",
|
|
17
|
+
sequenceEvents: "MinaZkappSeqEvents**",
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
export function emptyActions(): Field {
|
|
21
|
+
return salt("MinaZkappActionsEmpty")[0];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function emptyEvents(): Field {
|
|
25
|
+
return salt("MinaZkappEventsEmpty")[0];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class MinaActions {
|
|
29
|
+
static actionHash(
|
|
30
|
+
action: Field[],
|
|
31
|
+
previousHash: Field = emptyActions()
|
|
32
|
+
): Field {
|
|
33
|
+
const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, action);
|
|
34
|
+
return hashWithPrefix(MINA_EVENT_PREFIXES.sequenceEvents, [
|
|
35
|
+
previousHash,
|
|
36
|
+
actionDataHash,
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class MinaEvents {
|
|
42
|
+
static eventHash(event: Field[], previousHash: Field = emptyEvents()): Field {
|
|
43
|
+
const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, event);
|
|
44
|
+
return hashWithPrefix(MINA_EVENT_PREFIXES.events, [
|
|
45
|
+
previousHash,
|
|
46
|
+
actionDataHash,
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class MinaPrefixedProvableHashList<
|
|
52
|
+
Value,
|
|
53
|
+
> extends ProvableHashList<Value> {
|
|
54
|
+
public constructor(
|
|
55
|
+
valueType: ProvablePure<Value>,
|
|
56
|
+
public readonly prefix: string,
|
|
57
|
+
internalCommitment: Field = Field(0)
|
|
58
|
+
) {
|
|
59
|
+
super(valueType, internalCommitment);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected hash(elements: Field[]): Field {
|
|
63
|
+
const init = salt(this.prefix);
|
|
64
|
+
const digest = Poseidon.update(init, elements);
|
|
65
|
+
return digest[0];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
|
|
70
|
+
public constructor(internalCommitment: Field = Field(0)) {
|
|
71
|
+
super(Field, MINA_EVENT_PREFIXES.sequenceEvents, internalCommitment);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Field, ProvablePure, Poseidon } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ProvableHashList } from "./ProvableHashList.js";
|
|
4
|
+
import { stringToField } from "./utils";
|
|
5
|
+
|
|
6
|
+
export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
7
|
+
private readonly prefix: Field;
|
|
8
|
+
|
|
9
|
+
public constructor(
|
|
10
|
+
valueType: ProvablePure<Value>,
|
|
11
|
+
prefix: string,
|
|
12
|
+
internalCommitment: Field = Field(0)
|
|
13
|
+
) {
|
|
14
|
+
super(valueType, internalCommitment);
|
|
15
|
+
this.prefix = stringToField(prefix);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
protected hash(elements: Field[]): Field {
|
|
19
|
+
return Poseidon.hash([this.prefix, ...elements]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Field, Poseidon, Bool, Provable, ProvablePure } from "o1js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Utilities for creating a hash list from a given value type.
|
|
5
|
+
*/
|
|
6
|
+
export abstract class ProvableHashList<Value> {
|
|
7
|
+
public constructor(
|
|
8
|
+
protected readonly valueType: ProvablePure<Value>,
|
|
9
|
+
public commitment: Field = Field(0)
|
|
10
|
+
) {}
|
|
11
|
+
|
|
12
|
+
protected abstract hash(elements: Field[]): Field;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Converts the provided value to Field[] and appends it to
|
|
16
|
+
* the current hashlist.
|
|
17
|
+
*
|
|
18
|
+
* @param value - Value to be appended to the hash list
|
|
19
|
+
* @returns Current hash list.
|
|
20
|
+
*/
|
|
21
|
+
public push(value: Value) {
|
|
22
|
+
this.commitment = this.hash([
|
|
23
|
+
this.commitment,
|
|
24
|
+
...this.valueType.toFields(value),
|
|
25
|
+
]);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public pushIf(value: Value, condition: Bool) {
|
|
30
|
+
const newCommitment = this.hash([
|
|
31
|
+
this.commitment,
|
|
32
|
+
...this.valueType.toFields(value),
|
|
33
|
+
]);
|
|
34
|
+
this.commitment = Provable.if(condition, newCommitment, this.commitment);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @returns Traling hash of the current hashlist.
|
|
40
|
+
*/
|
|
41
|
+
public toField() {
|
|
42
|
+
return this.commitment;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
|
|
47
|
+
public hash(elements: Field[]): Field {
|
|
48
|
+
return Poseidon.hash(elements);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Bool, Field, Poseidon, Provable } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
4
|
+
|
|
5
|
+
export class ProvableReductionHashList<Value> extends ProvableHashList<Value> {
|
|
6
|
+
public unconstrainedList: Value[] = [];
|
|
7
|
+
|
|
8
|
+
private constrainedLastValue: Value | undefined = undefined;
|
|
9
|
+
|
|
10
|
+
private preimage: Field = this.commitment;
|
|
11
|
+
|
|
12
|
+
public pushAndReduce(
|
|
13
|
+
value: Value,
|
|
14
|
+
reduce: (previous: Value) => [Value, Bool]
|
|
15
|
+
): { popLast: Bool; value: Value } {
|
|
16
|
+
let valueToPush = value;
|
|
17
|
+
let popLast = Bool(false);
|
|
18
|
+
|
|
19
|
+
// Theoretically, we can feed the preimage + last value as a witness
|
|
20
|
+
// for non-zero commitment starts (like used in the BlockProver), because
|
|
21
|
+
// currently it won't reduce across chunks. But this is okay for now I think
|
|
22
|
+
if (this.constrainedLastValue !== undefined) {
|
|
23
|
+
[valueToPush, popLast] = reduce(this.constrainedLastValue);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Provable.asProver(() => {
|
|
27
|
+
if (popLast.toBoolean()) {
|
|
28
|
+
this.unconstrainedList.pop();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const valueAsConstant = this.valueType.fromFields(
|
|
32
|
+
this.valueType.toFields(valueToPush).map((field) => field.toConstant())
|
|
33
|
+
);
|
|
34
|
+
this.unconstrainedList.push(valueAsConstant);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const currentCommitment = this.commitment;
|
|
38
|
+
const noPopCommitment = this.hash([
|
|
39
|
+
currentCommitment,
|
|
40
|
+
...this.valueType.toFields(valueToPush),
|
|
41
|
+
]);
|
|
42
|
+
|
|
43
|
+
const popCommitment = this.hash([
|
|
44
|
+
this.preimage,
|
|
45
|
+
...this.valueType.toFields(valueToPush),
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
|
|
49
|
+
|
|
50
|
+
this.constrainedLastValue = valueToPush;
|
|
51
|
+
this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
popLast,
|
|
55
|
+
value: valueToPush,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public pushIf(value: Value, condition: Bool) {
|
|
60
|
+
throw new Error("pushIf is not implemented for ReducedHashList");
|
|
61
|
+
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public hash(elements: Field[]): Field {
|
|
66
|
+
return Poseidon.hash(elements);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Provable } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ProvableOption } from "../model/Option";
|
|
4
|
+
import {
|
|
5
|
+
ProvableStateTransition,
|
|
6
|
+
StateTransition,
|
|
7
|
+
} from "../model/StateTransition";
|
|
8
|
+
|
|
9
|
+
import { ProvableReductionHashList } from "./ProvableReductionHashList";
|
|
10
|
+
|
|
11
|
+
export class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
|
|
12
|
+
public push(value: ProvableStateTransition) {
|
|
13
|
+
this.pushWithMetadata(value);
|
|
14
|
+
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public pushWithMetadata(value: ProvableStateTransition) {
|
|
19
|
+
return this.pushAndReduce(value, (previous: ProvableStateTransition) => {
|
|
20
|
+
const pathsMatch = previous.path.equals(value.path);
|
|
21
|
+
|
|
22
|
+
// Take the previous.from if the paths match, otherwise leave ST as is
|
|
23
|
+
const from = Provable.if(
|
|
24
|
+
pathsMatch,
|
|
25
|
+
ProvableOption,
|
|
26
|
+
previous.from,
|
|
27
|
+
value.from
|
|
28
|
+
);
|
|
29
|
+
// In case we have a layout like
|
|
30
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
31
|
+
// we just take the first and discard the second
|
|
32
|
+
const to = Provable.if(
|
|
33
|
+
value.to.isSome.or(pathsMatch.not()),
|
|
34
|
+
ProvableOption,
|
|
35
|
+
value.to,
|
|
36
|
+
previous.to
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const transition = new ProvableStateTransition({
|
|
40
|
+
path: value.path,
|
|
41
|
+
from: new ProvableOption(from),
|
|
42
|
+
to: new ProvableOption(to),
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Assert that connection is correct
|
|
46
|
+
previous.to.value
|
|
47
|
+
.equals(value.from.value)
|
|
48
|
+
.or(
|
|
49
|
+
previous.to.isSome
|
|
50
|
+
.not()
|
|
51
|
+
.and(previous.from.value.equals(value.from.value))
|
|
52
|
+
)
|
|
53
|
+
.or(pathsMatch.not())
|
|
54
|
+
.assertTrue();
|
|
55
|
+
|
|
56
|
+
return [transition, pathsMatch];
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function reduceStateTransitions(
|
|
62
|
+
transitions: StateTransition<unknown>[]
|
|
63
|
+
): StateTransition<unknown>[] {
|
|
64
|
+
const reduced: StateTransition<unknown>[] = [];
|
|
65
|
+
|
|
66
|
+
transitions.forEach((st) => {
|
|
67
|
+
if (reduced.length === 0) {
|
|
68
|
+
reduced.push(st);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const last = reduced.at(-1)!;
|
|
73
|
+
if (last.path.equals(st.path).toBoolean()) {
|
|
74
|
+
if (st.toValue.isSome.toBoolean()) {
|
|
75
|
+
reduced.pop();
|
|
76
|
+
reduced.push(
|
|
77
|
+
new StateTransition<unknown>(st.path, last.fromValue, st.toValue)
|
|
78
|
+
);
|
|
79
|
+
} else {
|
|
80
|
+
// Do nothing, because we discard that ST
|
|
81
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
82
|
+
// cancel the 2nd
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
reduced.push(st);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return reduced;
|
|
89
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Field, Poseidon, Provable } from "o1js";
|
|
2
|
+
import floor from "lodash/floor";
|
|
3
|
+
|
|
4
|
+
export type ReturnType<FunctionType extends Function> = FunctionType extends (
|
|
5
|
+
...args: any[]
|
|
6
|
+
) => infer Return
|
|
7
|
+
? Return
|
|
8
|
+
: any;
|
|
9
|
+
|
|
10
|
+
export type Subclass<Class extends new (...args: any) => any> = (new (
|
|
11
|
+
...args: any
|
|
12
|
+
) => InstanceType<Class>) & {
|
|
13
|
+
[Key in keyof Class]: Class[Key];
|
|
14
|
+
} & { prototype: InstanceType<Class> };
|
|
15
|
+
|
|
16
|
+
export function notInCircuit(): MethodDecorator {
|
|
17
|
+
return function ReplacedFunction(
|
|
18
|
+
target: any,
|
|
19
|
+
propertyKey: string | symbol,
|
|
20
|
+
descriptor: PropertyDescriptor
|
|
21
|
+
) {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
23
|
+
const childFunction = descriptor.value;
|
|
24
|
+
descriptor.value = function value(this: any, ...args: any[]) {
|
|
25
|
+
if (Provable.inCheckedComputation() || Provable.inProver()) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Method ${propertyKey.toString()} is supposed to be only called outside of the circuit`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
return childFunction.apply(this, args);
|
|
31
|
+
};
|
|
32
|
+
return descriptor;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function stringToField(value: string) {
|
|
37
|
+
const fieldSize = Field.sizeInBytes - 1;
|
|
38
|
+
|
|
39
|
+
// Encode string as byte[]
|
|
40
|
+
const encoder = new TextEncoder();
|
|
41
|
+
const stringBytes = Array.from(encoder.encode(value));
|
|
42
|
+
|
|
43
|
+
// Add padding in case the string is not a multiple of Field.sizeInBytes
|
|
44
|
+
const padding = Array.from<number>({
|
|
45
|
+
length: fieldSize - (stringBytes.length % fieldSize),
|
|
46
|
+
}).fill(0);
|
|
47
|
+
const data = stringBytes.concat(padding).reverse();
|
|
48
|
+
|
|
49
|
+
// Hash the result Field[] to reduce it to
|
|
50
|
+
const chunks = data.reduce<number[][]>(
|
|
51
|
+
(a, b, index) => {
|
|
52
|
+
const arrayIndex = floor(index / fieldSize);
|
|
53
|
+
a[arrayIndex].push(b);
|
|
54
|
+
return a;
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
Array.from<number[]>({ length: floor(data.length / fieldSize) }).map(
|
|
58
|
+
() => []
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
const fields = chunks.map((x) =>
|
|
62
|
+
// We have to add a zero at the highest byte here, because a Field is
|
|
63
|
+
// a bit smaller than 2^256
|
|
64
|
+
Field.fromBytes(x.concat([0]))
|
|
65
|
+
);
|
|
66
|
+
return Poseidon.hash(fields);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function singleFieldToString(value: Field | bigint): string {
|
|
70
|
+
let fieldValue = value;
|
|
71
|
+
if (typeof value === "bigint") {
|
|
72
|
+
fieldValue = Field(value);
|
|
73
|
+
}
|
|
74
|
+
return fieldValue.toString();
|
|
75
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import {
|
|
3
|
+
AreProofsEnabled,
|
|
4
|
+
PlainZkProgram,
|
|
5
|
+
ZkProgrammable,
|
|
6
|
+
} from "@proto-kit/common";
|
|
7
|
+
import { Bool, Field, Proof, UInt64, ZkProgram } from "o1js";
|
|
8
|
+
import "reflect-metadata";
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
MethodPublicOutput,
|
|
12
|
+
NetworkState,
|
|
13
|
+
SignedTransaction,
|
|
14
|
+
StateTransitionProverPublicInput,
|
|
15
|
+
StateTransitionProverPublicOutput,
|
|
16
|
+
} from "../src";
|
|
17
|
+
|
|
18
|
+
import { createAndInitTestingProtocol } from "./TestingProtocol";
|
|
19
|
+
|
|
20
|
+
type BlockProverProofPair = [
|
|
21
|
+
Proof<void, MethodPublicOutput>,
|
|
22
|
+
Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>,
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
class MockAppChain implements AreProofsEnabled {
|
|
26
|
+
public areProofsEnabled: boolean = false;
|
|
27
|
+
|
|
28
|
+
setProofsEnabled(areProofsEnabled: boolean): void {
|
|
29
|
+
this.areProofsEnabled = areProofsEnabled;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class RuntimeZkProgrammable extends ZkProgrammable<
|
|
34
|
+
undefined,
|
|
35
|
+
MethodPublicOutput
|
|
36
|
+
> {
|
|
37
|
+
get areProofsEnabled(): AreProofsEnabled | undefined {
|
|
38
|
+
return new MockAppChain();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
zkProgramFactory(): PlainZkProgram<undefined, MethodPublicOutput>[] {
|
|
42
|
+
const program = ZkProgram({
|
|
43
|
+
name: "BlockProverTestProgram",
|
|
44
|
+
publicOutput: MethodPublicOutput,
|
|
45
|
+
methods: {},
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return [
|
|
49
|
+
{
|
|
50
|
+
name: program.name,
|
|
51
|
+
compile: program.compile.bind(program),
|
|
52
|
+
verify: program.verify.bind(program),
|
|
53
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
54
|
+
methods: {},
|
|
55
|
+
Proof: ZkProgram.Proof(program),
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
describe("blockProver", () => {
|
|
62
|
+
const networkState = new NetworkState({
|
|
63
|
+
block: {
|
|
64
|
+
height: UInt64.zero,
|
|
65
|
+
},
|
|
66
|
+
previous: {
|
|
67
|
+
rootHash: Field(0),
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const protocol = createAndInitTestingProtocol();
|
|
72
|
+
|
|
73
|
+
function generateTestProofs(
|
|
74
|
+
fromStateRoot: Field,
|
|
75
|
+
toStateRoot: Field,
|
|
76
|
+
toProtocolRoot: Field,
|
|
77
|
+
protocolHash: Field,
|
|
78
|
+
tx: SignedTransaction,
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
80
|
+
networkState: NetworkState
|
|
81
|
+
): BlockProverProofPair {
|
|
82
|
+
const transactionHash = tx.transaction.hash();
|
|
83
|
+
const sthash = Field(123);
|
|
84
|
+
|
|
85
|
+
const appProof = new Proof<undefined, MethodPublicOutput>({
|
|
86
|
+
publicInput: undefined,
|
|
87
|
+
publicOutput: new MethodPublicOutput({
|
|
88
|
+
transactionHash,
|
|
89
|
+
stateTransitionsHash: sthash,
|
|
90
|
+
status: Bool(true),
|
|
91
|
+
networkStateHash: networkState.hash(),
|
|
92
|
+
isMessage: Bool(false),
|
|
93
|
+
eventsHash: Field(0),
|
|
94
|
+
}),
|
|
95
|
+
|
|
96
|
+
proof: "",
|
|
97
|
+
maxProofsVerified: 2,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const stProof = new Proof<
|
|
101
|
+
StateTransitionProverPublicInput,
|
|
102
|
+
StateTransitionProverPublicOutput
|
|
103
|
+
>({
|
|
104
|
+
publicInput: new StateTransitionProverPublicInput({
|
|
105
|
+
stateTransitionsHash: Field(0),
|
|
106
|
+
protocolTransitionsHash: Field(0),
|
|
107
|
+
stateRoot: fromStateRoot,
|
|
108
|
+
protocolStateRoot: fromStateRoot,
|
|
109
|
+
}),
|
|
110
|
+
publicOutput: new StateTransitionProverPublicOutput({
|
|
111
|
+
stateTransitionsHash: sthash,
|
|
112
|
+
protocolTransitionsHash: protocolHash,
|
|
113
|
+
stateRoot: toStateRoot,
|
|
114
|
+
protocolStateRoot: toProtocolRoot,
|
|
115
|
+
}),
|
|
116
|
+
|
|
117
|
+
proof: "",
|
|
118
|
+
maxProofsVerified: 2,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
return [appProof, stProof];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
it("dummy", () => {
|
|
125
|
+
expect(1).toBe(1);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// TODO
|
|
129
|
+
// it("previously applied transaction should also pass with derived publicInputs", () => {
|
|
130
|
+
// expect.assertions(2);
|
|
131
|
+
//
|
|
132
|
+
// const priv = PrivateKey.random();
|
|
133
|
+
//
|
|
134
|
+
// const tx = new UnsignedTransaction({
|
|
135
|
+
// methodId: Field(0),
|
|
136
|
+
// args: [Field(0)],
|
|
137
|
+
// nonce: UInt64.zero,
|
|
138
|
+
// sender: priv.toPublicKey(),
|
|
139
|
+
// })
|
|
140
|
+
// .sign(priv)
|
|
141
|
+
// .toProtocolTransaction();
|
|
142
|
+
//
|
|
143
|
+
// const executionData = {
|
|
144
|
+
// networkState,
|
|
145
|
+
// transaction: tx,
|
|
146
|
+
// };
|
|
147
|
+
//
|
|
148
|
+
// // const asmodule = protocol.resolve()
|
|
149
|
+
//
|
|
150
|
+
// protocol.dependencyContainer
|
|
151
|
+
// .resolveAll<ProvableBlockHook<unknown>>("ProvableBlockHook")
|
|
152
|
+
// .forEach((module) => {
|
|
153
|
+
// module.beforeBlock(executionData);
|
|
154
|
+
// });
|
|
155
|
+
//
|
|
156
|
+
// const hashList = new DefaultProvableHashList(ProvableStateTransition);
|
|
157
|
+
//
|
|
158
|
+
// container
|
|
159
|
+
// .resolve(ProtocolMethodExecutionContext)
|
|
160
|
+
// .current()
|
|
161
|
+
// .result.stateTransitions.map((x) => x.toProvable())
|
|
162
|
+
// .forEach((st) => {
|
|
163
|
+
// hashList.push(st);
|
|
164
|
+
// });
|
|
165
|
+
//
|
|
166
|
+
// const blockProver = protocol.resolve("BlockProver");
|
|
167
|
+
//
|
|
168
|
+
// const fromState = Field(1);
|
|
169
|
+
// const toState = Field(2);
|
|
170
|
+
//
|
|
171
|
+
// const [appProof, stProof] = generateTestProofs(
|
|
172
|
+
// fromState,
|
|
173
|
+
// toState,
|
|
174
|
+
// hashList.commitment,
|
|
175
|
+
// tx,
|
|
176
|
+
// networkState
|
|
177
|
+
// );
|
|
178
|
+
//
|
|
179
|
+
// const fromProverState: BlockProverState = {
|
|
180
|
+
// stateRoot: fromState,
|
|
181
|
+
// transactionsHash: Field(0),
|
|
182
|
+
// networkStateHash: networkState.hash(),
|
|
183
|
+
// };
|
|
184
|
+
//
|
|
185
|
+
// const toProverState = blockProver.applyTransaction(
|
|
186
|
+
// fromProverState,
|
|
187
|
+
// stProof,
|
|
188
|
+
// appProof,
|
|
189
|
+
// executionData
|
|
190
|
+
// );
|
|
191
|
+
//
|
|
192
|
+
// const publicInput = new BlockProverPublicInput({
|
|
193
|
+
// stateRoot: fromProverState.stateRoot,
|
|
194
|
+
// transactionsHash: fromProverState.transactionsHash,
|
|
195
|
+
// networkStateHash: networkState.hash(),
|
|
196
|
+
// });
|
|
197
|
+
//
|
|
198
|
+
// const publicOutput = blockProver.proveTransaction(
|
|
199
|
+
// publicInput,
|
|
200
|
+
// stProof,
|
|
201
|
+
// appProof,
|
|
202
|
+
// { networkState, transaction: tx }
|
|
203
|
+
// );
|
|
204
|
+
//
|
|
205
|
+
// expect(publicOutput.stateRoot).toStrictEqual(toProverState.stateRoot);
|
|
206
|
+
// expect(publicOutput.transactionsHash).toStrictEqual(
|
|
207
|
+
// toProverState.transactionsHash
|
|
208
|
+
// );
|
|
209
|
+
// });
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
/* eslint-enable */
|