@proto-kit/protocol 0.1.1-develop.1086
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 +3 -0
- package/dist/hooks/AccountStateHook.d.ts +52 -0
- package/dist/hooks/AccountStateHook.d.ts.map +1 -0
- package/dist/hooks/AccountStateHook.js +47 -0
- package/dist/hooks/BlockHeightHook.d.ts +7 -0
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
- package/dist/hooks/BlockHeightHook.js +15 -0
- 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 +9 -0
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
- package/dist/hooks/NoopBlockHook.js +9 -0
- 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 +6 -0
- package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
- package/dist/hooks/NoopTransactionHook.js +7 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/model/MethodPublicOutput.d.ts +113 -0
- package/dist/model/MethodPublicOutput.d.ts.map +1 -0
- package/dist/model/MethodPublicOutput.js +14 -0
- package/dist/model/Option.d.ts +122 -0
- package/dist/model/Option.d.ts.map +1 -0
- package/dist/model/Option.js +110 -0
- package/dist/model/Path.d.ts +31 -0
- package/dist/model/Path.d.ts.map +1 -0
- package/dist/model/Path.js +42 -0
- 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 +135 -0
- package/dist/model/StateTransition.d.ts.map +1 -0
- package/dist/model/StateTransition.js +68 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +172 -0
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
- package/dist/model/StateTransitionProvableBatch.js +85 -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 +31 -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 +86 -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 +33 -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 +24 -0
- package/dist/protocol/Protocol.d.ts +43 -0
- package/dist/protocol/Protocol.d.ts.map +1 -0
- package/dist/protocol/Protocol.js +95 -0
- package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
- package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
- package/dist/protocol/ProtocolEnvironment.js +1 -0
- package/dist/protocol/ProtocolModule.d.ts +9 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -0
- package/dist/protocol/ProtocolModule.js +12 -0
- package/dist/protocol/ProvableBlockHook.d.ts +8 -0
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
- package/dist/protocol/ProvableBlockHook.js +4 -0
- package/dist/protocol/ProvableTransactionHook.d.ts +7 -0
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
- package/dist/protocol/ProvableTransactionHook.js +3 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.js +8 -0
- package/dist/prover/block/BlockProvable.d.ts +395 -0
- package/dist/prover/block/BlockProvable.d.ts.map +1 -0
- package/dist/prover/block/BlockProvable.js +45 -0
- package/dist/prover/block/BlockProver.d.ts +92 -0
- package/dist/prover/block/BlockProver.d.ts.map +1 -0
- package/dist/prover/block/BlockProver.js +472 -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 +16 -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 +20 -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 +22 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +174 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.js +15 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +51 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.js +188 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +16 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +16 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +7 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +19 -0
- 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/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/DispatchContractProtocolModule.d.ts +12 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +35 -0
- 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/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 +241 -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 +11 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.js +14 -0
- package/dist/state/State.d.ts +68 -0
- package/dist/state/State.d.ts.map +1 -0
- package/dist/state/State.js +129 -0
- package/dist/state/StateMap.d.ts +37 -0
- package/dist/state/StateMap.d.ts.map +1 -0
- package/dist/state/StateMap.js +55 -0
- package/dist/state/StateService.d.ts +6 -0
- package/dist/state/StateService.d.ts.map +1 -0
- package/dist/state/StateService.js +1 -0
- package/dist/state/StateServiceProvider.d.ts +8 -0
- package/dist/state/StateServiceProvider.d.ts.map +1 -0
- package/dist/state/StateServiceProvider.js +36 -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 +30 -0
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts +22 -0
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/ProtocolMethodExecutionContext.js +28 -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 +135 -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 +5 -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 +39 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js +52 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedProvableHashList.js +12 -0
- package/dist/utils/ProvableHashList.d.ts +27 -0
- package/dist/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/utils/ProvableHashList.js +43 -0
- 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/utils.d.ts +11 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +44 -0
- package/jest.config.cjs +1 -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 +53 -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 +125 -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 +197 -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 +954 -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 +44 -0
- package/src/prover/statetransition/StateTransitionProver.ts +371 -0
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +23 -0
- package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +17 -0
- 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 +344 -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/modularity/ProvableSettlementHook.ts +33 -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 +211 -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 +47 -0
- package/test/model/Option.test.ts +72 -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,193 @@
|
|
|
1
|
+
import { Bool, FlexibleProvablePure, Provable } from "o1js";
|
|
2
|
+
import { ProvableMethodExecutionContext, ProvableMethodExecutionResult } from "@proto-kit/common";
|
|
3
|
+
import { StateTransition } from "../../model/StateTransition";
|
|
4
|
+
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
5
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
6
|
+
export declare class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
|
|
7
|
+
stateTransitions: StateTransition<any>[];
|
|
8
|
+
status: Bool;
|
|
9
|
+
statusMessage?: string;
|
|
10
|
+
stackTrace?: string;
|
|
11
|
+
events: {
|
|
12
|
+
eventType: FlexibleProvablePure<any>;
|
|
13
|
+
event: any;
|
|
14
|
+
eventName: string;
|
|
15
|
+
condition: Bool;
|
|
16
|
+
}[];
|
|
17
|
+
}
|
|
18
|
+
export interface RuntimeMethodExecutionData {
|
|
19
|
+
transaction: RuntimeTransaction;
|
|
20
|
+
networkState: NetworkState;
|
|
21
|
+
}
|
|
22
|
+
declare const RuntimeMethodExecutionDataStruct_base: (new (value: {
|
|
23
|
+
transaction: RuntimeTransaction;
|
|
24
|
+
networkState: NetworkState;
|
|
25
|
+
}) => {
|
|
26
|
+
transaction: RuntimeTransaction;
|
|
27
|
+
networkState: NetworkState;
|
|
28
|
+
}) & {
|
|
29
|
+
_isStruct: true;
|
|
30
|
+
} & Provable<{
|
|
31
|
+
transaction: RuntimeTransaction;
|
|
32
|
+
networkState: NetworkState;
|
|
33
|
+
}, {
|
|
34
|
+
transaction: {
|
|
35
|
+
methodId: bigint;
|
|
36
|
+
argsHash: bigint;
|
|
37
|
+
nonce: {
|
|
38
|
+
isSome: boolean;
|
|
39
|
+
value: any;
|
|
40
|
+
};
|
|
41
|
+
sender: {
|
|
42
|
+
isSome: boolean;
|
|
43
|
+
value: any;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
networkState: {
|
|
47
|
+
block: {
|
|
48
|
+
height: bigint;
|
|
49
|
+
};
|
|
50
|
+
previous: {
|
|
51
|
+
rootHash: bigint;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
}> & {
|
|
55
|
+
fromValue: (value: {
|
|
56
|
+
transaction: RuntimeTransaction | {
|
|
57
|
+
methodId: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
|
|
58
|
+
argsHash: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
|
|
59
|
+
nonce: import("../..").UInt64Option | {
|
|
60
|
+
isSome: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
|
|
61
|
+
value: any;
|
|
62
|
+
};
|
|
63
|
+
sender: import("../..").PublicKeyOption | {
|
|
64
|
+
isSome: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
|
|
65
|
+
value: any;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
networkState: NetworkState | {
|
|
69
|
+
block: import("../../model/network/NetworkState").CurrentBlock | {
|
|
70
|
+
height: bigint | import("o1js/dist/node/lib/provable/int").UInt64;
|
|
71
|
+
};
|
|
72
|
+
previous: import("../../model/network/NetworkState").PreviousBlock | {
|
|
73
|
+
rootHash: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
}) => {
|
|
77
|
+
transaction: RuntimeTransaction;
|
|
78
|
+
networkState: NetworkState;
|
|
79
|
+
};
|
|
80
|
+
toInput: (x: {
|
|
81
|
+
transaction: RuntimeTransaction;
|
|
82
|
+
networkState: NetworkState;
|
|
83
|
+
}) => {
|
|
84
|
+
fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
|
|
85
|
+
packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
|
|
86
|
+
};
|
|
87
|
+
toJSON: (x: {
|
|
88
|
+
transaction: RuntimeTransaction;
|
|
89
|
+
networkState: NetworkState;
|
|
90
|
+
}) => {
|
|
91
|
+
transaction: {
|
|
92
|
+
methodId: string;
|
|
93
|
+
argsHash: string;
|
|
94
|
+
nonce: {
|
|
95
|
+
isSome: boolean;
|
|
96
|
+
value: any;
|
|
97
|
+
};
|
|
98
|
+
sender: {
|
|
99
|
+
isSome: boolean;
|
|
100
|
+
value: any;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
networkState: {
|
|
104
|
+
block: {
|
|
105
|
+
height: string;
|
|
106
|
+
};
|
|
107
|
+
previous: {
|
|
108
|
+
rootHash: string;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
fromJSON: (x: {
|
|
113
|
+
transaction: {
|
|
114
|
+
methodId: string;
|
|
115
|
+
argsHash: string;
|
|
116
|
+
nonce: {
|
|
117
|
+
isSome: boolean;
|
|
118
|
+
value: any;
|
|
119
|
+
};
|
|
120
|
+
sender: {
|
|
121
|
+
isSome: boolean;
|
|
122
|
+
value: any;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
networkState: {
|
|
126
|
+
block: {
|
|
127
|
+
height: string;
|
|
128
|
+
};
|
|
129
|
+
previous: {
|
|
130
|
+
rootHash: string;
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
}) => {
|
|
134
|
+
transaction: RuntimeTransaction;
|
|
135
|
+
networkState: NetworkState;
|
|
136
|
+
};
|
|
137
|
+
empty: () => {
|
|
138
|
+
transaction: RuntimeTransaction;
|
|
139
|
+
networkState: NetworkState;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
export declare class RuntimeMethodExecutionDataStruct extends RuntimeMethodExecutionDataStruct_base implements RuntimeMethodExecutionData {
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Execution context used to wrap runtime module methods,
|
|
146
|
+
* allowing them to post relevant information (such as execution status)
|
|
147
|
+
* into the context without any unnecessary 'prop drilling'.
|
|
148
|
+
*/
|
|
149
|
+
export declare class RuntimeMethodExecutionContext extends ProvableMethodExecutionContext {
|
|
150
|
+
methods: string[];
|
|
151
|
+
input: RuntimeMethodExecutionData | undefined;
|
|
152
|
+
private lastInput;
|
|
153
|
+
result: RuntimeProvableMethodExecutionResult;
|
|
154
|
+
private isSimulated;
|
|
155
|
+
private assertSetupCalled;
|
|
156
|
+
/**
|
|
157
|
+
* Adds an in-method generated state transition to the current context
|
|
158
|
+
* @param stateTransition - State transition to add to the context
|
|
159
|
+
*/
|
|
160
|
+
addStateTransition<Value>(stateTransition: StateTransition<Value>): void;
|
|
161
|
+
addEvent(eventType: FlexibleProvablePure<any>, event: any, eventName: string, condition?: Bool): void;
|
|
162
|
+
/**
|
|
163
|
+
* @param message - Status message to acompany the current status
|
|
164
|
+
*/
|
|
165
|
+
setStatusMessage(message?: string, stackTrace?: string): void;
|
|
166
|
+
/**
|
|
167
|
+
* @param status - Execution status of the current method
|
|
168
|
+
*/
|
|
169
|
+
setStatus(status: Bool): void;
|
|
170
|
+
/**
|
|
171
|
+
* @param input Input witness data required for a runtime execution
|
|
172
|
+
*/
|
|
173
|
+
setup(input: RuntimeMethodExecutionData): void;
|
|
174
|
+
witnessInput(): RuntimeMethodExecutionDataStruct;
|
|
175
|
+
setSimulated(simulated: boolean): void;
|
|
176
|
+
/**
|
|
177
|
+
* Manually clears/resets the execution context
|
|
178
|
+
*/
|
|
179
|
+
clear(): void;
|
|
180
|
+
afterMethod(): void;
|
|
181
|
+
/**
|
|
182
|
+
* Had to override current() otherwise it would not infer
|
|
183
|
+
* the type of result correctly (parent type would be reused)
|
|
184
|
+
*/
|
|
185
|
+
current(): {
|
|
186
|
+
isFinished: boolean;
|
|
187
|
+
result: RuntimeProvableMethodExecutionResult;
|
|
188
|
+
input: RuntimeMethodExecutionData | undefined;
|
|
189
|
+
isSimulated: boolean;
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export {};
|
|
193
|
+
//# sourceMappingURL=RuntimeMethodExecutionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/RuntimeMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAEpE,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAShE,qBAAa,oCAAqC,SAAQ,6BAA6B;IAC9E,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;IAE9C,MAAM,EAAE,IAAI,CAAc;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE;QACb,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,IAAI,CAAC;KACjB,EAAE,CAAM;CACV;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,gCACX,SAAQ,qCAIR,YAAW,0BAA0B;CAAG;AAE1C;;;;GAIG;AACH,qBACa,6BAA8B,SAAQ,8BAA8B;IACxE,OAAO,EAAE,MAAM,EAAE,CAAM;IAEvB,KAAK,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAGrD,OAAO,CAAC,SAAS,CAAyC;IAE1C,MAAM,uCAA8C;IAEpE,OAAO,CAAC,WAAW,CAAkB;IAErC,OAAO,CAAC,iBAAiB;IAQzB;;;OAGG;IACI,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IAKjE,QAAQ,CACb,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,EACpC,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,IAAiB;IAY9B;;OAEG;IACI,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAS7D;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,IAAI;IAQ7B;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,0BAA0B;IAIvC,YAAY,IAAI,gCAAgC;IAYhD,YAAY,CAAC,SAAS,EAAE,OAAO;IAItC;;OAEG;IACI,KAAK;IAIL,WAAW;IAUlB;;;OAGG;IACI,OAAO;;;;;;CAQf"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Bool, Provable, Struct } from "o1js";
|
|
8
|
+
import { singleton } from "tsyringe";
|
|
9
|
+
import { ProvableMethodExecutionContext, ProvableMethodExecutionResult, } from "@proto-kit/common";
|
|
10
|
+
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
11
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
12
|
+
const errors = {
|
|
13
|
+
setupNotCalled: () => new Error("Setup has not been called prior to executing a runtime method. Be sure to do that so that the Runtime is setup property for execution"),
|
|
14
|
+
};
|
|
15
|
+
export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.stateTransitions = [];
|
|
19
|
+
this.status = Bool(true);
|
|
20
|
+
this.events = [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class RuntimeMethodExecutionDataStruct extends Struct({
|
|
24
|
+
transaction: RuntimeTransaction,
|
|
25
|
+
networkState: NetworkState,
|
|
26
|
+
}) {
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Execution context used to wrap runtime module methods,
|
|
30
|
+
* allowing them to post relevant information (such as execution status)
|
|
31
|
+
* into the context without any unnecessary 'prop drilling'.
|
|
32
|
+
*/
|
|
33
|
+
export let RuntimeMethodExecutionContext = class RuntimeMethodExecutionContext extends ProvableMethodExecutionContext {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(...arguments);
|
|
36
|
+
this.methods = [];
|
|
37
|
+
this.result = new RuntimeProvableMethodExecutionResult();
|
|
38
|
+
this.isSimulated = false;
|
|
39
|
+
}
|
|
40
|
+
assertSetupCalled() {
|
|
41
|
+
if (this.input === undefined) {
|
|
42
|
+
throw errors.setupNotCalled();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Adds an in-method generated state transition to the current context
|
|
47
|
+
* @param stateTransition - State transition to add to the context
|
|
48
|
+
*/
|
|
49
|
+
addStateTransition(stateTransition) {
|
|
50
|
+
this.assertSetupCalled();
|
|
51
|
+
this.result.stateTransitions.push(stateTransition);
|
|
52
|
+
}
|
|
53
|
+
addEvent(eventType, event, eventName, condition = Bool(true)) {
|
|
54
|
+
this.assertSetupCalled();
|
|
55
|
+
this.result.events.push({
|
|
56
|
+
eventType,
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
58
|
+
event,
|
|
59
|
+
eventName,
|
|
60
|
+
condition,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @param message - Status message to acompany the current status
|
|
65
|
+
*/
|
|
66
|
+
setStatusMessage(message, stackTrace) {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
this.assertSetupCalled();
|
|
69
|
+
if (this.isSimulated) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
(_a = this.result).statusMessage ?? (_a.statusMessage = message);
|
|
73
|
+
(_b = this.result).stackTrace ?? (_b.stackTrace = stackTrace);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @param status - Execution status of the current method
|
|
77
|
+
*/
|
|
78
|
+
setStatus(status) {
|
|
79
|
+
this.assertSetupCalled();
|
|
80
|
+
if (this.isSimulated) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.result.status = status;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @param input Input witness data required for a runtime execution
|
|
87
|
+
*/
|
|
88
|
+
setup(input) {
|
|
89
|
+
this.input = input;
|
|
90
|
+
}
|
|
91
|
+
witnessInput() {
|
|
92
|
+
this.assertSetupCalled();
|
|
93
|
+
return Provable.witness(RuntimeMethodExecutionDataStruct, () => {
|
|
94
|
+
// TODO Is that right? Or this.current().input
|
|
95
|
+
const { transaction, networkState } = this.input;
|
|
96
|
+
return new RuntimeMethodExecutionDataStruct({
|
|
97
|
+
networkState,
|
|
98
|
+
transaction,
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
setSimulated(simulated) {
|
|
103
|
+
this.isSimulated = simulated;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Manually clears/resets the execution context
|
|
107
|
+
*/
|
|
108
|
+
clear() {
|
|
109
|
+
this.result = new RuntimeProvableMethodExecutionResult();
|
|
110
|
+
}
|
|
111
|
+
afterMethod() {
|
|
112
|
+
super.afterMethod();
|
|
113
|
+
if (this.isFinished) {
|
|
114
|
+
this.lastInput = this.input;
|
|
115
|
+
// TODO: find out why input isnt set in TransactionFeeHook during assert
|
|
116
|
+
// this.input = undefined;
|
|
117
|
+
this.isSimulated = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Had to override current() otherwise it would not infer
|
|
122
|
+
* the type of result correctly (parent type would be reused)
|
|
123
|
+
*/
|
|
124
|
+
current() {
|
|
125
|
+
return {
|
|
126
|
+
isFinished: this.isFinished,
|
|
127
|
+
result: this.result,
|
|
128
|
+
input: this.lastInput,
|
|
129
|
+
isSimulated: this.isSimulated,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
RuntimeMethodExecutionContext = __decorate([
|
|
134
|
+
singleton()
|
|
135
|
+
], RuntimeMethodExecutionContext);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { StateTransition } from "../../model/StateTransition";
|
|
2
|
+
export declare class TransitionMethodExecutionResult {
|
|
3
|
+
stateTransitions: StateTransition<any>[];
|
|
4
|
+
}
|
|
5
|
+
export interface TransitionMethodExecutionContext {
|
|
6
|
+
/**
|
|
7
|
+
* Adds an in-method generated state transition to the current context
|
|
8
|
+
* @param stateTransition - State transition to add to the context
|
|
9
|
+
*/
|
|
10
|
+
addStateTransition: <Value>(stateTransition: StateTransition<Value>) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Manually clears/resets the execution context
|
|
13
|
+
*/
|
|
14
|
+
clear: () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Had to override current() otherwise it would not infer
|
|
17
|
+
* the type of result correctly (parent type would be reused)
|
|
18
|
+
*/
|
|
19
|
+
current: () => {
|
|
20
|
+
result: TransitionMethodExecutionResult;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=TransitionMethodExecutionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransitionMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/TransitionMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qBAAa,+BAA+B;IACnC,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;CACtD;AAED,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAE7E;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB;;;OAGG;IACH,OAAO,EAAE,MAAM;QACb,MAAM,EAAE,+BAA+B,CAAC;KACzC,CAAC;CACH"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TransitioningProtocolModule } from "../../protocol/TransitioningProtocolModule";
|
|
2
|
+
/**
|
|
3
|
+
* Decorates a runtime module property as state, passing down some
|
|
4
|
+
* underlying values to improve developer experience.
|
|
5
|
+
*/
|
|
6
|
+
export declare function protocolState(): <TargetTransitioningModule extends TransitioningProtocolModule<unknown>>(target: TargetTransitioningModule, propertyKey: string) => void;
|
|
7
|
+
//# sourceMappingURL=ProtocolState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolState.d.ts","sourceRoot":"","sources":["../../../src/state/protocol/ProtocolState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAgBzF;;;GAGG;AACH,wBAAgB,aAAa,6HAKZ,MAAM,UAiCtB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Path } from "../../model/Path";
|
|
2
|
+
const errors = {
|
|
3
|
+
missingName: (className) => new Error(`Unable to provide a unique identifier for state, ${className} is missing a name.
|
|
4
|
+
Did you forget to extend your block module with 'extends ...Hook'?`),
|
|
5
|
+
missingProtocol: (className) => new Error(`Unable to provide 'procotol' for state, ${className} is missing a name.
|
|
6
|
+
Did you forget to extend your block module with 'extends ...Hook'?`),
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Decorates a runtime module property as state, passing down some
|
|
10
|
+
* underlying values to improve developer experience.
|
|
11
|
+
*/
|
|
12
|
+
export function protocolState() {
|
|
13
|
+
return (target, propertyKey) => {
|
|
14
|
+
let value;
|
|
15
|
+
Object.defineProperty(target, propertyKey, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function get() {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
19
|
+
const self = this;
|
|
20
|
+
if (self.name === undefined) {
|
|
21
|
+
throw errors.missingName(self.constructor.name);
|
|
22
|
+
}
|
|
23
|
+
if (!self.protocol) {
|
|
24
|
+
throw errors.missingProtocol(self.constructor.name);
|
|
25
|
+
}
|
|
26
|
+
// TODO Add Prefix?
|
|
27
|
+
const path = Path.fromProperty(self.name, propertyKey);
|
|
28
|
+
if (value) {
|
|
29
|
+
value.path = path;
|
|
30
|
+
value.stateServiceProvider = self.protocol.stateServiceProvider;
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
},
|
|
34
|
+
set: (newValue) => {
|
|
35
|
+
value = newValue;
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Field, ProvablePure } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
3
|
+
export declare const MINA_EVENT_PREFIXES: {
|
|
4
|
+
readonly event: "MinaZkappEvent******";
|
|
5
|
+
readonly events: "MinaZkappEvents*****";
|
|
6
|
+
readonly sequenceEvents: "MinaZkappSeqEvents**";
|
|
7
|
+
};
|
|
8
|
+
export declare function emptyActions(): Field;
|
|
9
|
+
export declare function emptyEvents(): Field;
|
|
10
|
+
export declare class MinaActions {
|
|
11
|
+
static actionHash(action: Field[], previousHash?: Field): Field;
|
|
12
|
+
}
|
|
13
|
+
export declare class MinaEvents {
|
|
14
|
+
static eventHash(event: Field[], previousHash?: Field): Field;
|
|
15
|
+
}
|
|
16
|
+
export declare class MinaPrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
17
|
+
readonly prefix: string;
|
|
18
|
+
constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
|
|
19
|
+
protected hash(elements: Field[]): Field;
|
|
20
|
+
}
|
|
21
|
+
export declare class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
|
|
22
|
+
constructor(internalCommitment?: Field);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=MinaPrefixedProvableHashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinaPrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/MinaPrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAUtD,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,wBAAgB,YAAY,IAAI,KAAK,CAEpC;AAED,wBAAgB,WAAW,IAAI,KAAK,CAEnC;AAED,qBAAa,WAAW;IACtB,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,GAAE,KAAsB,GACnC,KAAK;CAOT;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,GAAE,KAAqB,GAAG,KAAK;CAO7E;AAED,qBAAa,4BAA4B,CACvC,KAAK,CACL,SAAQ,gBAAgB,CAAC,KAAK,CAAC;aAGb,MAAM,EAAE,MAAM;gBAD9B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EACd,MAAM,EAAE,MAAM,EAC9B,kBAAkB,GAAE,KAAgB;IAKtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAKzC;AAED,qBAAa,mBAAoB,SAAQ,4BAA4B,CAAC,KAAK,CAAC;gBACvD,kBAAkB,GAAE,KAAgB;CAGxD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Field, Poseidon } from "o1js";
|
|
2
|
+
import { hashWithPrefix, prefixToField } from "@proto-kit/common";
|
|
3
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
4
|
+
function salt(prefix) {
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
6
|
+
return Poseidon.update([Field(0), Field(0), Field(0)], [prefixToField(prefix)]);
|
|
7
|
+
}
|
|
8
|
+
export const MINA_EVENT_PREFIXES = {
|
|
9
|
+
event: "MinaZkappEvent******",
|
|
10
|
+
events: "MinaZkappEvents*****",
|
|
11
|
+
sequenceEvents: "MinaZkappSeqEvents**",
|
|
12
|
+
};
|
|
13
|
+
export function emptyActions() {
|
|
14
|
+
return salt("MinaZkappActionsEmpty")[0];
|
|
15
|
+
}
|
|
16
|
+
export function emptyEvents() {
|
|
17
|
+
return salt("MinaZkappEventsEmpty")[0];
|
|
18
|
+
}
|
|
19
|
+
export class MinaActions {
|
|
20
|
+
static actionHash(action, previousHash = emptyActions()) {
|
|
21
|
+
const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, action);
|
|
22
|
+
return hashWithPrefix(MINA_EVENT_PREFIXES.sequenceEvents, [
|
|
23
|
+
previousHash,
|
|
24
|
+
actionDataHash,
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class MinaEvents {
|
|
29
|
+
static eventHash(event, previousHash = emptyEvents()) {
|
|
30
|
+
const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, event);
|
|
31
|
+
return hashWithPrefix(MINA_EVENT_PREFIXES.events, [
|
|
32
|
+
previousHash,
|
|
33
|
+
actionDataHash,
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class MinaPrefixedProvableHashList extends ProvableHashList {
|
|
38
|
+
constructor(valueType, prefix, internalCommitment = Field(0)) {
|
|
39
|
+
super(valueType, internalCommitment);
|
|
40
|
+
this.prefix = prefix;
|
|
41
|
+
}
|
|
42
|
+
hash(elements) {
|
|
43
|
+
const init = salt(this.prefix);
|
|
44
|
+
const digest = Poseidon.update(init, elements);
|
|
45
|
+
return digest[0];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class MinaActionsHashList extends MinaPrefixedProvableHashList {
|
|
49
|
+
constructor(internalCommitment = Field(0)) {
|
|
50
|
+
super(Field, MINA_EVENT_PREFIXES.sequenceEvents, internalCommitment);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Field, ProvablePure } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList.js";
|
|
3
|
+
export declare class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
4
|
+
private readonly prefix;
|
|
5
|
+
constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
|
|
6
|
+
protected hash(elements: Field[]): Field;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=PrefixedProvableHashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAY,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,qBAAa,wBAAwB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAG7B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,KAAgB;IAMtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGzC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Field, Poseidon } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList.js";
|
|
3
|
+
import { stringToField } from "./utils";
|
|
4
|
+
export class PrefixedProvableHashList extends ProvableHashList {
|
|
5
|
+
constructor(valueType, prefix, internalCommitment = Field(0)) {
|
|
6
|
+
super(valueType, internalCommitment);
|
|
7
|
+
this.prefix = stringToField(prefix);
|
|
8
|
+
}
|
|
9
|
+
hash(elements) {
|
|
10
|
+
return Poseidon.hash([this.prefix, ...elements]);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Field, Bool, ProvablePure } from "o1js";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for creating a hash list from a given value type.
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class ProvableHashList<Value> {
|
|
6
|
+
protected readonly valueType: ProvablePure<Value>;
|
|
7
|
+
commitment: Field;
|
|
8
|
+
constructor(valueType: ProvablePure<Value>, commitment?: Field);
|
|
9
|
+
protected abstract hash(elements: Field[]): Field;
|
|
10
|
+
/**
|
|
11
|
+
* Converts the provided value to Field[] and appends it to
|
|
12
|
+
* the current hashlist.
|
|
13
|
+
*
|
|
14
|
+
* @param value - Value to be appended to the hash list
|
|
15
|
+
* @returns Current hash list.
|
|
16
|
+
*/
|
|
17
|
+
push(value: Value): this;
|
|
18
|
+
pushIf(value: Value, condition: Bool): this;
|
|
19
|
+
/**
|
|
20
|
+
* @returns Traling hash of the current hashlist.
|
|
21
|
+
*/
|
|
22
|
+
toField(): import("o1js/dist/node/lib/provable/field").Field;
|
|
23
|
+
}
|
|
24
|
+
export declare class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
|
|
25
|
+
hash(elements: Field[]): Field;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ProvableHashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,IAAI,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAErE;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,KAAK;IAExC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;IAC1C,UAAU,EAAE,KAAK;gBADL,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC1C,UAAU,GAAE,KAAgB;IAGrC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;IAEjD;;;;;;OAMG;IACI,IAAI,CAAC,KAAK,EAAE,KAAK;IAQjB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAS3C;;OAEG;IACI,OAAO;CAGf;AAED,qBAAa,uBAAuB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Field, Poseidon, Provable } from "o1js";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for creating a hash list from a given value type.
|
|
4
|
+
*/
|
|
5
|
+
export class ProvableHashList {
|
|
6
|
+
constructor(valueType, commitment = Field(0)) {
|
|
7
|
+
this.valueType = valueType;
|
|
8
|
+
this.commitment = commitment;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Converts the provided value to Field[] and appends it to
|
|
12
|
+
* the current hashlist.
|
|
13
|
+
*
|
|
14
|
+
* @param value - Value to be appended to the hash list
|
|
15
|
+
* @returns Current hash list.
|
|
16
|
+
*/
|
|
17
|
+
push(value) {
|
|
18
|
+
this.commitment = this.hash([
|
|
19
|
+
this.commitment,
|
|
20
|
+
...this.valueType.toFields(value),
|
|
21
|
+
]);
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
pushIf(value, condition) {
|
|
25
|
+
const newCommitment = this.hash([
|
|
26
|
+
this.commitment,
|
|
27
|
+
...this.valueType.toFields(value),
|
|
28
|
+
]);
|
|
29
|
+
this.commitment = Provable.if(condition, newCommitment, this.commitment);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @returns Traling hash of the current hashlist.
|
|
34
|
+
*/
|
|
35
|
+
toField() {
|
|
36
|
+
return this.commitment;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class DefaultProvableHashList extends ProvableHashList {
|
|
40
|
+
hash(elements) {
|
|
41
|
+
return Poseidon.hash(elements);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Bool, Field } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
3
|
+
export declare class ProvableReductionHashList<Value> extends ProvableHashList<Value> {
|
|
4
|
+
unconstrainedList: Value[];
|
|
5
|
+
private constrainedLastValue;
|
|
6
|
+
private preimage;
|
|
7
|
+
pushAndReduce(value: Value, reduce: (previous: Value) => [Value, Bool]): {
|
|
8
|
+
popLast: Bool;
|
|
9
|
+
value: Value;
|
|
10
|
+
};
|
|
11
|
+
pushIf(value: Value, condition: Bool): this;
|
|
12
|
+
hash(elements: Field[]): Field;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ProvableReductionHashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProvableReductionHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableReductionHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAsB,MAAM,MAAM,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,yBAAyB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IACpE,iBAAiB,EAAE,KAAK,EAAE,CAAM;IAEvC,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,OAAO,CAAC,QAAQ,CAA0B;IAEnC,aAAa,CAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GACzC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE;IA4C3B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAMpC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
|