@proto-kit/protocol 0.1.1-develop.600 → 0.1.1-develop.833
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 -201
- package/dist/blockmodules/AccountStateModule.d.ts +37 -37
- package/dist/blockmodules/AccountStateModule.js +43 -43
- package/dist/blockmodules/BlockHeightHook.d.ts +6 -6
- package/dist/blockmodules/BlockHeightHook.js +15 -15
- package/dist/blockmodules/LastStateRootBlockHook.d.ts +7 -7
- package/dist/blockmodules/LastStateRootBlockHook.js +15 -15
- package/dist/blockmodules/NoopBlockHook.d.ts +8 -8
- package/dist/blockmodules/NoopBlockHook.js +9 -9
- package/dist/blockmodules/NoopSettlementHook.d.ts +5 -5
- package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
- package/dist/blockmodules/NoopSettlementHook.js +18 -18
- package/dist/blockmodules/NoopTransactionHook.d.ts +5 -5
- package/dist/blockmodules/NoopTransactionHook.js +4 -4
- package/dist/hooks/AccountStateHook.d.ts +19 -5
- package/dist/hooks/AccountStateHook.d.ts.map +1 -1
- package/dist/hooks/AccountStateHook.js +15 -9
- package/dist/hooks/BlockHeightHook.d.ts +3 -3
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
- package/dist/hooks/BlockHeightHook.js +5 -4
- package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
- package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
- package/dist/hooks/LastStateRootBlockHook.js +15 -0
- package/dist/hooks/NoopBlockHook.d.ts +6 -4
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
- package/dist/hooks/NoopBlockHook.js +4 -4
- package/dist/hooks/NoopSettlementHook.d.ts +6 -0
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
- package/dist/hooks/NoopSettlementHook.js +17 -0
- package/dist/hooks/NoopTransactionHook.d.ts +1 -1
- package/dist/hooks/NoopTransactionHook.d.ts.map +1 -1
- package/dist/hooks/NoopTransactionHook.js +4 -1
- package/dist/index.d.ts +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -8
- package/dist/model/MethodPublicOutput.d.ts +68 -34
- package/dist/model/MethodPublicOutput.d.ts.map +1 -1
- package/dist/model/Option.d.ts +39 -19
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +6 -0
- package/dist/model/Path.d.ts +1 -1
- package/dist/model/Path.d.ts.map +1 -1
- package/dist/model/Path.js +0 -2
- package/dist/model/RuntimeLike.d.ts +11 -0
- package/dist/model/RuntimeLike.d.ts.map +1 -0
- package/dist/model/RuntimeLike.js +1 -0
- package/dist/model/StateTransition.d.ts +51 -14
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransition.js +3 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- package/dist/model/StateTransitionReduction.d.ts +3 -0
- package/dist/model/StateTransitionReduction.d.ts.map +1 -0
- package/dist/model/StateTransitionReduction.js +26 -0
- package/dist/model/network/NetworkState.d.ts +73 -18
- package/dist/model/network/NetworkState.d.ts.map +1 -1
- package/dist/model/network/NetworkState.js +2 -2
- package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
- package/dist/model/transaction/ProtocolTransaction.js +18 -18
- package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
- package/dist/model/transaction/RuntimeTransaction.js +4 -4
- package/dist/model/transaction/SignedTransaction.d.ts +39 -3
- package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
- package/dist/model/transaction/SignedTransaction.js +1 -1
- package/dist/model/transaction/ValueOption.d.ts +86 -32
- package/dist/model/transaction/ValueOption.d.ts.map +1 -1
- package/dist/model/transaction/ValueOption.js +1 -1
- package/dist/protocol/Protocol.d.ts +14 -20
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +13 -27
- package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
- package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.d.ts +1 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +4 -2
- package/dist/protocol/ProvableBlockHook.d.ts +2 -2
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
- package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
- package/dist/prover/block/BlockProvable.d.ts +240 -98
- package/dist/prover/block/BlockProvable.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.d.ts +8 -8
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +55 -45
- package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
- package/dist/prover/block/BlockTransactionPosition.js +25 -25
- package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
- package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
- package/dist/prover/block/BundleTransactionPosition.js +25 -0
- package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
- package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
- package/dist/prover/block/SplitPrefilledStateService.js +1 -0
- package/dist/prover/block/SplitStateService.d.ts +11 -0
- package/dist/prover/block/SplitStateService.d.ts.map +1 -0
- package/dist/prover/block/SplitStateService.js +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
- package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
- package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
- package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.d.ts +10 -9
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +18 -22
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
- package/dist/settlement/ContractModule.d.ts +15 -0
- package/dist/settlement/ContractModule.d.ts.map +1 -0
- package/dist/settlement/ContractModule.js +11 -0
- package/dist/settlement/DispatchContract.d.ts +20 -0
- package/dist/settlement/DispatchContract.d.ts.map +1 -0
- package/dist/settlement/DispatchContract.js +112 -0
- package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
- package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/OutgoingMessageArgument.js +32 -0
- package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
- package/dist/settlement/ProvableSettlementHook.js +3 -3
- package/dist/settlement/SettlementContract.d.ts +229 -229
- package/dist/settlement/SettlementContract.js +346 -346
- package/dist/settlement/SettlementContractModule.d.ts +40 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +71 -0
- package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
- package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContract.js +111 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/{hooks/TransactionFeeHook.js → settlement/contracts/DispatchContractProtocolModule.js} +17 -21
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
- package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
- package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementContract.js +43 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.js +246 -0
- package/dist/settlement/messages/Deposit.d.ts +64 -0
- package/dist/settlement/messages/Deposit.d.ts.map +1 -0
- package/dist/settlement/messages/Deposit.js +6 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
- package/dist/settlement/messages/Withdrawal.d.ts +65 -0
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
- package/dist/settlement/messages/Withdrawal.js +13 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +3 -3
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.js +4 -2
- package/dist/state/State.d.ts +4 -3
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +18 -12
- package/dist/state/StateMap.d.ts +3 -3
- package/dist/state/StateMap.d.ts.map +1 -1
- package/dist/state/StateMap.js +4 -5
- package/dist/state/StateService.d.ts +3 -3
- package/dist/state/StateService.d.ts.map +1 -1
- package/dist/state/StateServiceProvider.d.ts +3 -3
- package/dist/state/StateServiceProvider.d.ts.map +1 -1
- package/dist/state/StateServiceProvider.js +1 -3
- package/dist/state/assert/assert.d.ts +1 -1
- package/dist/state/assert/assert.d.ts.map +1 -1
- package/dist/state/assert/assert.js +11 -5
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +55 -4
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +6 -6
- package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
- package/dist/state/context/contextExecution.d.ts +14 -0
- package/dist/state/context/contextExecution.d.ts.map +1 -0
- package/dist/state/context/contextExecution.js +30 -0
- package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
- package/dist/state/protocol/ProtocolState.js +0 -3
- package/dist/utils/AppliedBatchHashList.d.ts +17 -0
- package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
- package/dist/utils/AppliedBatchHashList.js +24 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableHashList.d.ts +4 -4
- package/dist/utils/ProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableReductionHashList.d.ts +14 -0
- package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
- package/dist/utils/ProvableReductionHashList.js +50 -0
- package/dist/utils/StateTransitionReductionList.d.ts +11 -0
- package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
- package/dist/utils/StateTransitionReductionList.js +60 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
- package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
- package/dist/utils/utils.d.ts +1 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +5 -10
- package/package.json +5 -5
- package/src/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +13 -9
- package/src/{blockmodules → hooks}/BlockHeightHook.ts +3 -4
- package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +4 -4
- package/src/{blockmodules → hooks}/NoopBlockHook.ts +6 -5
- package/src/{blockmodules → hooks}/NoopSettlementHook.ts +3 -4
- package/src/{blockmodules → hooks}/NoopTransactionHook.ts +5 -1
- package/src/index.ts +18 -8
- package/src/model/MethodPublicOutput.ts +2 -2
- package/src/model/Option.ts +21 -1
- package/src/model/Path.ts +1 -3
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +9 -1
- package/src/model/Transaction.ts +2 -0
- package/src/model/network/NetworkState.ts +2 -2
- package/src/model/transaction/RuntimeTransaction.ts +5 -12
- package/src/model/transaction/SignedTransaction.ts +1 -8
- package/src/model/transaction/ValueOption.ts +1 -1
- package/src/protocol/Protocol.ts +34 -48
- package/src/protocol/ProtocolEnvironment.ts +7 -6
- package/src/protocol/ProtocolModule.ts +8 -4
- package/src/protocol/ProvableBlockHook.ts +3 -3
- package/src/protocol/ProvableTransactionHook.ts +4 -2
- package/src/protocol/TransitioningProtocolModule.ts +1 -1
- package/src/prover/block/BlockProvable.ts +3 -3
- package/src/prover/block/BlockProver.ts +98 -63
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +2 -2
- package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
- package/src/prover/statetransition/StateTransitionProver.ts +26 -28
- package/src/settlement/ContractModule.ts +24 -0
- package/src/settlement/SettlementContractModule.ts +132 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
- package/src/settlement/contracts/SettlementSmartContract.ts +350 -0
- package/src/settlement/messages/Deposit.ts +6 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
- package/src/settlement/messages/Withdrawal.ts +14 -0
- package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +9 -13
- package/src/settlement/modules/NetworkStateSettlementModule.ts +8 -5
- package/src/state/State.ts +21 -13
- package/src/state/StateMap.ts +4 -5
- package/src/state/StateService.ts +3 -3
- package/src/state/StateServiceProvider.ts +6 -7
- package/src/state/assert/assert.ts +13 -7
- package/src/state/context/RuntimeMethodExecutionContext.ts +13 -7
- package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
- package/src/state/protocol/ProtocolState.ts +1 -4
- package/src/utils/MinaPrefixedProvableHashList.ts +4 -3
- package/src/utils/PrefixedProvableHashList.ts +2 -2
- package/src/utils/ProvableHashList.ts +2 -2
- package/src/utils/ProvableReductionHashList.ts +68 -0
- package/src/utils/StateTransitionReductionList.ts +89 -0
- package/src/utils/utils.ts +4 -9
- package/test/BlockProver.test.ts +110 -128
- package/test/Protocol.test.ts +14 -21
- package/test/State.test.ts +8 -8
- package/test/StateTransition.test.ts +56 -66
- package/test/TestingProtocol.ts +48 -0
- package/test/model/Option.test.ts +72 -0
- package/{src → test}/state/assert/assert.test.ts +4 -4
- package/test/tsconfig.json +7 -0
- package/test/utils/ProvableReductionHashList.test.ts +117 -0
- package/test/utils.test.ts +0 -3
- package/dist/hooks/TransactionFeeHook.d.ts +0 -16
- package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
- package/src/blockmodules/SequenceStateTransactionModule.ts +0 -25
- package/src/model/Option.test.ts +0 -21
- package/src/settlement/SettlementContract.ts +0 -444
- package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
- package/test/Option.test.ts +0 -64
- package/tsconfig.test.json +0 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bool } from "o1js";
|
|
1
|
+
import { Bool, Provable } from "o1js";
|
|
2
2
|
import { container } from "tsyringe";
|
|
3
3
|
import { log } from "@proto-kit/common";
|
|
4
4
|
|
|
@@ -13,17 +13,23 @@ import { RuntimeMethodExecutionContext } from "../context/RuntimeMethodExecution
|
|
|
13
13
|
* @param condition - Result of the assertion made about the execution status
|
|
14
14
|
* @param message - Optional message describing the prior status
|
|
15
15
|
*/
|
|
16
|
-
export function assert(condition: Bool, message?: string) {
|
|
16
|
+
export function assert(condition: Bool, message?: string | (() => string)) {
|
|
17
17
|
const executionContext = container.resolve(RuntimeMethodExecutionContext);
|
|
18
18
|
const previousStatus = executionContext.current().result.status;
|
|
19
19
|
const status = condition.and(previousStatus);
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
if (!
|
|
23
|
-
|
|
21
|
+
Provable.asProver(() => {
|
|
22
|
+
if (!condition.toBoolean()) {
|
|
23
|
+
if (!executionContext.current().isSimulated) {
|
|
24
|
+
log.debug("Assertion failed: ", message);
|
|
25
|
+
}
|
|
26
|
+
const messageString =
|
|
27
|
+
message !== undefined && typeof message === "function"
|
|
28
|
+
? message()
|
|
29
|
+
: message;
|
|
30
|
+
executionContext.setStatusMessage(messageString, new Error().stack);
|
|
24
31
|
}
|
|
25
|
-
|
|
26
|
-
}
|
|
32
|
+
});
|
|
27
33
|
|
|
28
34
|
executionContext.setStatus(status);
|
|
29
35
|
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
ProvableMethodExecutionContext,
|
|
5
5
|
ProvableMethodExecutionResult,
|
|
6
6
|
} from "@proto-kit/common";
|
|
7
|
+
|
|
7
8
|
import { StateTransition } from "../../model/StateTransition";
|
|
8
9
|
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
9
10
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
@@ -16,12 +17,13 @@ const errors = {
|
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
20
|
public stateTransitions: StateTransition<any>[] = [];
|
|
21
21
|
|
|
22
22
|
public status: Bool = Bool(true);
|
|
23
23
|
|
|
24
24
|
public statusMessage?: string;
|
|
25
|
+
|
|
26
|
+
public stackTrace?: string;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
export interface RuntimeMethodExecutionData {
|
|
@@ -29,10 +31,12 @@ export interface RuntimeMethodExecutionData {
|
|
|
29
31
|
networkState: NetworkState;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
export class RuntimeMethodExecutionDataStruct
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
export class RuntimeMethodExecutionDataStruct
|
|
35
|
+
extends Struct({
|
|
36
|
+
transaction: RuntimeTransaction,
|
|
37
|
+
networkState: NetworkState,
|
|
38
|
+
})
|
|
39
|
+
implements RuntimeMethodExecutionData {}
|
|
36
40
|
|
|
37
41
|
/**
|
|
38
42
|
* Execution context used to wrap runtime module methods,
|
|
@@ -72,12 +76,13 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
72
76
|
/**
|
|
73
77
|
* @param message - Status message to acompany the current status
|
|
74
78
|
*/
|
|
75
|
-
public setStatusMessage(message?: string) {
|
|
79
|
+
public setStatusMessage(message?: string, stackTrace?: string) {
|
|
76
80
|
this.assertSetupCalled();
|
|
77
81
|
if (this.isSimulated) {
|
|
78
82
|
return;
|
|
79
83
|
}
|
|
80
84
|
this.result.statusMessage ??= message;
|
|
85
|
+
this.result.stackTrace ??= stackTrace;
|
|
81
86
|
}
|
|
82
87
|
|
|
83
88
|
/**
|
|
@@ -125,7 +130,8 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
|
|
|
125
130
|
super.afterMethod();
|
|
126
131
|
if (this.isFinished) {
|
|
127
132
|
this.lastInput = this.input;
|
|
128
|
-
|
|
133
|
+
// TODO: find out why input isnt set in TransactionFeeHook during assert
|
|
134
|
+
// this.input = undefined;
|
|
129
135
|
this.isSimulated = false;
|
|
130
136
|
}
|
|
131
137
|
}
|
|
@@ -22,19 +22,17 @@ const errors = {
|
|
|
22
22
|
*/
|
|
23
23
|
export function protocolState() {
|
|
24
24
|
return <
|
|
25
|
-
TargetTransitioningModule extends TransitioningProtocolModule<unknown
|
|
25
|
+
TargetTransitioningModule extends TransitioningProtocolModule<unknown>,
|
|
26
26
|
>(
|
|
27
27
|
target: TargetTransitioningModule,
|
|
28
28
|
propertyKey: string
|
|
29
29
|
) => {
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
31
30
|
let value: State<unknown> | undefined;
|
|
32
31
|
|
|
33
32
|
Object.defineProperty(target, propertyKey, {
|
|
34
33
|
enumerable: true,
|
|
35
34
|
|
|
36
35
|
get: function get() {
|
|
37
|
-
// eslint-disable-next-line max-len
|
|
38
36
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
39
37
|
const self = this as TargetTransitioningModule;
|
|
40
38
|
|
|
@@ -46,7 +44,6 @@ export function protocolState() {
|
|
|
46
44
|
throw errors.missingProtocol(self.constructor.name);
|
|
47
45
|
}
|
|
48
46
|
|
|
49
|
-
// eslint-disable-next-line no-warning-comments
|
|
50
47
|
// TODO Add Prefix?
|
|
51
48
|
const path = Path.fromProperty(self.name, propertyKey);
|
|
52
49
|
if (value) {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, Poseidon, ProvablePure } from "o1js";
|
|
2
2
|
import { hashWithPrefix, prefixToField } from "@proto-kit/common";
|
|
3
3
|
|
|
4
4
|
import { ProvableHashList } from "./ProvableHashList";
|
|
5
5
|
|
|
6
6
|
function salt(prefix: string) {
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
7
8
|
return Poseidon.update(
|
|
8
9
|
[Field(0), Field(0), Field(0)],
|
|
9
10
|
[prefixToField(prefix)]
|
|
@@ -48,10 +49,10 @@ export class MinaEvents {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
export class MinaPrefixedProvableHashList<
|
|
51
|
-
Value
|
|
52
|
+
Value,
|
|
52
53
|
> extends ProvableHashList<Value> {
|
|
53
54
|
public constructor(
|
|
54
|
-
valueType:
|
|
55
|
+
valueType: ProvablePure<Value>,
|
|
55
56
|
public readonly prefix: string,
|
|
56
57
|
internalCommitment: Field = Field(0)
|
|
57
58
|
) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, ProvablePure, Poseidon } from "o1js";
|
|
2
2
|
|
|
3
3
|
import { ProvableHashList } from "./ProvableHashList.js";
|
|
4
4
|
import { stringToField } from "./utils";
|
|
@@ -7,7 +7,7 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
|
7
7
|
private readonly prefix: Field;
|
|
8
8
|
|
|
9
9
|
public constructor(
|
|
10
|
-
valueType:
|
|
10
|
+
valueType: ProvablePure<Value>,
|
|
11
11
|
prefix: string,
|
|
12
12
|
internalCommitment: Field = Field(0)
|
|
13
13
|
) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Field, Poseidon,
|
|
1
|
+
import { Field, Poseidon, Bool, Provable, ProvablePure } from "o1js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Utilities for creating a hash list from a given value type.
|
|
5
5
|
*/
|
|
6
6
|
export abstract class ProvableHashList<Value> {
|
|
7
7
|
public constructor(
|
|
8
|
-
|
|
8
|
+
protected readonly valueType: ProvablePure<Value>,
|
|
9
9
|
public commitment: Field = Field(0)
|
|
10
10
|
) {}
|
|
11
11
|
|
|
@@ -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
|
+
}
|
package/src/utils/utils.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
// eslint-disable-next-line max-len
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return */
|
|
3
|
-
|
|
4
1
|
import { Field, Poseidon, Provable } from "o1js";
|
|
5
2
|
import floor from "lodash/floor";
|
|
6
3
|
|
|
@@ -30,8 +27,6 @@ export function notInCircuit(): MethodDecorator {
|
|
|
30
27
|
`Method ${propertyKey.toString()} is supposed to be only called outside of the circuit`
|
|
31
28
|
);
|
|
32
29
|
}
|
|
33
|
-
// eslint-disable-next-line max-len
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
35
30
|
return childFunction.apply(this, args);
|
|
36
31
|
};
|
|
37
32
|
return descriptor;
|
|
@@ -39,7 +34,7 @@ export function notInCircuit(): MethodDecorator {
|
|
|
39
34
|
}
|
|
40
35
|
|
|
41
36
|
export function stringToField(value: string) {
|
|
42
|
-
const fieldSize = Field.sizeInBytes
|
|
37
|
+
const fieldSize = Field.sizeInBytes - 1;
|
|
43
38
|
|
|
44
39
|
// Encode string as byte[]
|
|
45
40
|
const encoder = new TextEncoder();
|
|
@@ -59,7 +54,6 @@ export function stringToField(value: string) {
|
|
|
59
54
|
return a;
|
|
60
55
|
},
|
|
61
56
|
|
|
62
|
-
// eslint-disable-next-line array-func/from-map
|
|
63
57
|
Array.from<number[]>({ length: floor(data.length / fieldSize) }).map(
|
|
64
58
|
() => []
|
|
65
59
|
)
|
|
@@ -73,8 +67,9 @@ export function stringToField(value: string) {
|
|
|
73
67
|
}
|
|
74
68
|
|
|
75
69
|
export function singleFieldToString(value: Field | bigint): string {
|
|
70
|
+
let fieldValue = value;
|
|
76
71
|
if (typeof value === "bigint") {
|
|
77
|
-
|
|
72
|
+
fieldValue = Field(value);
|
|
78
73
|
}
|
|
79
|
-
return
|
|
74
|
+
return fieldValue.toString();
|
|
80
75
|
}
|