@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
|
@@ -11,12 +11,10 @@ const errors = {
|
|
|
11
11
|
*/
|
|
12
12
|
export function protocolState() {
|
|
13
13
|
return (target, propertyKey) => {
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
15
14
|
let value;
|
|
16
15
|
Object.defineProperty(target, propertyKey, {
|
|
17
16
|
enumerable: true,
|
|
18
17
|
get: function get() {
|
|
19
|
-
// eslint-disable-next-line max-len
|
|
20
18
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
21
19
|
const self = this;
|
|
22
20
|
if (self.name === undefined) {
|
|
@@ -25,7 +23,6 @@ export function protocolState() {
|
|
|
25
23
|
if (!self.protocol) {
|
|
26
24
|
throw errors.missingProtocol(self.constructor.name);
|
|
27
25
|
}
|
|
28
|
-
// eslint-disable-next-line no-warning-comments
|
|
29
26
|
// TODO Add Prefix?
|
|
30
27
|
const path = Path.fromProperty(self.name, propertyKey);
|
|
31
28
|
if (value) {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Bool, Field } from "o1js";
|
|
2
|
+
import { AppliedStateTransitionBatch } from "../model/StateTransitionProvableBatch";
|
|
3
|
+
import { DefaultProvableHashList } from "./ProvableHashList";
|
|
4
|
+
/**
|
|
5
|
+
* A HashList for AppliedSTBatches, that in addition to the default
|
|
6
|
+
* functionality, checks that the pushed batches are not empty.
|
|
7
|
+
* If they are, the pushing is skipped.
|
|
8
|
+
* Note that if the batch has applied: false, the batch still has to be appended
|
|
9
|
+
* if it has STs inside
|
|
10
|
+
*/
|
|
11
|
+
export declare class AppliedBatchHashList extends DefaultProvableHashList<AppliedStateTransitionBatch> {
|
|
12
|
+
constructor(commitment: Field);
|
|
13
|
+
private isNotEmpty;
|
|
14
|
+
push(value: AppliedStateTransitionBatch): this;
|
|
15
|
+
pushIf(value: AppliedStateTransitionBatch, condition: Bool): this;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=AppliedBatchHashList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppliedBatchHashList.d.ts","sourceRoot":"","sources":["../../src/utils/AppliedBatchHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,uBAAuB,CAAC,2BAA2B,CAAC;gBACzE,UAAU,EAAE,KAAK;IAIpC,OAAO,CAAC,UAAU;IAIX,IAAI,CAAC,KAAK,EAAE,2BAA2B;IAIvC,MAAM,CAAC,KAAK,EAAE,2BAA2B,EAAE,SAAS,EAAE,IAAI;CAGlE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Field } from "o1js";
|
|
2
|
+
import { AppliedStateTransitionBatch } from "../model/StateTransitionProvableBatch";
|
|
3
|
+
import { DefaultProvableHashList } from "./ProvableHashList";
|
|
4
|
+
/**
|
|
5
|
+
* A HashList for AppliedSTBatches, that in addition to the default
|
|
6
|
+
* functionality, checks that the pushed batches are not empty.
|
|
7
|
+
* If they are, the pushing is skipped.
|
|
8
|
+
* Note that if the batch has applied: false, the batch still has to be appended
|
|
9
|
+
* if it has STs inside
|
|
10
|
+
*/
|
|
11
|
+
export class AppliedBatchHashList extends DefaultProvableHashList {
|
|
12
|
+
constructor(commitment) {
|
|
13
|
+
super(AppliedStateTransitionBatch, commitment);
|
|
14
|
+
}
|
|
15
|
+
isNotEmpty(value) {
|
|
16
|
+
return value.batchHash.equals(Field(0)).not();
|
|
17
|
+
}
|
|
18
|
+
push(value) {
|
|
19
|
+
return super.pushIf(value, this.isNotEmpty(value));
|
|
20
|
+
}
|
|
21
|
+
pushIf(value, condition) {
|
|
22
|
+
return super.pushIf(value, condition.and(this.isNotEmpty(value)));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, ProvablePure } from "o1js";
|
|
2
2
|
import { ProvableHashList } from "./ProvableHashList";
|
|
3
3
|
export declare const MINA_EVENT_PREFIXES: {
|
|
4
4
|
readonly event: "MinaZkappEvent******";
|
|
@@ -15,7 +15,7 @@ export declare class MinaEvents {
|
|
|
15
15
|
}
|
|
16
16
|
export declare class MinaPrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
17
17
|
readonly prefix: string;
|
|
18
|
-
constructor(valueType:
|
|
18
|
+
constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
|
|
19
19
|
protected hash(elements: Field[]): Field;
|
|
20
20
|
}
|
|
21
21
|
export declare class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinaPrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/MinaPrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,
|
|
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"}
|
|
@@ -2,6 +2,7 @@ import { Field, Poseidon } from "o1js";
|
|
|
2
2
|
import { hashWithPrefix, prefixToField } from "@proto-kit/common";
|
|
3
3
|
import { ProvableHashList } from "./ProvableHashList";
|
|
4
4
|
function salt(prefix) {
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
5
6
|
return Poseidon.update([Field(0), Field(0), Field(0)], [prefixToField(prefix)]);
|
|
6
7
|
}
|
|
7
8
|
export const MINA_EVENT_PREFIXES = {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, ProvablePure } from "o1js";
|
|
2
2
|
import { ProvableHashList } from "./ProvableHashList.js";
|
|
3
3
|
export declare class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
|
|
4
4
|
private readonly prefix;
|
|
5
|
-
constructor(valueType:
|
|
5
|
+
constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
|
|
6
6
|
protected hash(elements: Field[]): Field;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=PrefixedProvableHashList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,
|
|
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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Field,
|
|
1
|
+
import { Field, Bool, ProvablePure } from "o1js";
|
|
2
2
|
/**
|
|
3
3
|
* Utilities for creating a hash list from a given value type.
|
|
4
4
|
*/
|
|
5
5
|
export declare abstract class ProvableHashList<Value> {
|
|
6
|
-
|
|
6
|
+
protected readonly valueType: ProvablePure<Value>;
|
|
7
7
|
commitment: Field;
|
|
8
|
-
constructor(valueType:
|
|
8
|
+
constructor(valueType: ProvablePure<Value>, commitment?: Field);
|
|
9
9
|
protected abstract hash(elements: Field[]): Field;
|
|
10
10
|
/**
|
|
11
11
|
* Converts the provided value to Field[] and appends it to
|
|
@@ -19,7 +19,7 @@ export declare abstract class ProvableHashList<Value> {
|
|
|
19
19
|
/**
|
|
20
20
|
* @returns Traling hash of the current hashlist.
|
|
21
21
|
*/
|
|
22
|
-
toField(): import("o1js/dist/node/lib/field").Field;
|
|
22
|
+
toField(): import("o1js/dist/node/lib/provable/field").Field;
|
|
23
23
|
}
|
|
24
24
|
export declare class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
|
|
25
25
|
hash(elements: Field[]): Field;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,
|
|
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,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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Bool, Poseidon, Provable } from "o1js";
|
|
2
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
3
|
+
export class ProvableReductionHashList extends ProvableHashList {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.unconstrainedList = [];
|
|
7
|
+
this.constrainedLastValue = undefined;
|
|
8
|
+
this.preimage = this.commitment;
|
|
9
|
+
}
|
|
10
|
+
pushAndReduce(value, reduce) {
|
|
11
|
+
let valueToPush = value;
|
|
12
|
+
let popLast = Bool(false);
|
|
13
|
+
// Theoretically, we can feed the preimage + last value as a witness
|
|
14
|
+
// for non-zero commitment starts (like used in the BlockProver), because
|
|
15
|
+
// currently it won't reduce across chunks. But this is okay for now I think
|
|
16
|
+
if (this.constrainedLastValue !== undefined) {
|
|
17
|
+
[valueToPush, popLast] = reduce(this.constrainedLastValue);
|
|
18
|
+
}
|
|
19
|
+
Provable.asProver(() => {
|
|
20
|
+
if (popLast.toBoolean()) {
|
|
21
|
+
this.unconstrainedList.pop();
|
|
22
|
+
}
|
|
23
|
+
const valueAsConstant = this.valueType.fromFields(this.valueType.toFields(valueToPush).map((field) => field.toConstant()));
|
|
24
|
+
this.unconstrainedList.push(valueAsConstant);
|
|
25
|
+
});
|
|
26
|
+
const currentCommitment = this.commitment;
|
|
27
|
+
const noPopCommitment = this.hash([
|
|
28
|
+
currentCommitment,
|
|
29
|
+
...this.valueType.toFields(valueToPush),
|
|
30
|
+
]);
|
|
31
|
+
const popCommitment = this.hash([
|
|
32
|
+
this.preimage,
|
|
33
|
+
...this.valueType.toFields(valueToPush),
|
|
34
|
+
]);
|
|
35
|
+
this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
|
|
36
|
+
this.constrainedLastValue = valueToPush;
|
|
37
|
+
this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
|
|
38
|
+
return {
|
|
39
|
+
popLast,
|
|
40
|
+
value: valueToPush,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
pushIf(value, condition) {
|
|
44
|
+
throw new Error("pushIf is not implemented for ReducedHashList");
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
hash(elements) {
|
|
48
|
+
return Poseidon.hash(elements);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProvableStateTransition, StateTransition } from "../model/StateTransition";
|
|
2
|
+
import { ProvableReductionHashList } from "./ProvableReductionHashList";
|
|
3
|
+
export declare class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
|
|
4
|
+
push(value: ProvableStateTransition): this;
|
|
5
|
+
pushWithMetadata(value: ProvableStateTransition): {
|
|
6
|
+
popLast: import("o1js/dist/node/lib/provable/bool").Bool;
|
|
7
|
+
value: ProvableStateTransition;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare function reduceStateTransitions(transitions: StateTransition<unknown>[]): StateTransition<unknown>[];
|
|
11
|
+
//# sourceMappingURL=StateTransitionReductionList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionReductionList.d.ts","sourceRoot":"","sources":["../../src/utils/StateTransitionReductionList.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,uBAAuB,EACvB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,qBAAa,4BAA6B,SAAQ,yBAAyB,CAAC,uBAAuB,CAAC;IAC3F,IAAI,CAAC,KAAK,EAAE,uBAAuB;IAMnC,gBAAgB,CAAC,KAAK,EAAE,uBAAuB;;;;CAyCvD;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GACtC,eAAe,CAAC,OAAO,CAAC,EAAE,CA0B5B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Provable } from "o1js";
|
|
2
|
+
import { ProvableOption } from "../model/Option";
|
|
3
|
+
import { ProvableStateTransition, StateTransition, } from "../model/StateTransition";
|
|
4
|
+
import { ProvableReductionHashList } from "./ProvableReductionHashList";
|
|
5
|
+
export class StateTransitionReductionList extends ProvableReductionHashList {
|
|
6
|
+
push(value) {
|
|
7
|
+
this.pushWithMetadata(value);
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
pushWithMetadata(value) {
|
|
11
|
+
return this.pushAndReduce(value, (previous) => {
|
|
12
|
+
const pathsMatch = previous.path.equals(value.path);
|
|
13
|
+
// Take the previous.from if the paths match, otherwise leave ST as is
|
|
14
|
+
const from = Provable.if(pathsMatch, ProvableOption, previous.from, value.from);
|
|
15
|
+
// In case we have a layout like
|
|
16
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
17
|
+
// we just take the first and discard the second
|
|
18
|
+
const to = Provable.if(value.to.isSome.or(pathsMatch.not()), ProvableOption, value.to, previous.to);
|
|
19
|
+
const transition = new ProvableStateTransition({
|
|
20
|
+
path: value.path,
|
|
21
|
+
from: new ProvableOption(from),
|
|
22
|
+
to: new ProvableOption(to),
|
|
23
|
+
});
|
|
24
|
+
// Assert that connection is correct
|
|
25
|
+
previous.to.value
|
|
26
|
+
.equals(value.from.value)
|
|
27
|
+
.or(previous.to.isSome
|
|
28
|
+
.not()
|
|
29
|
+
.and(previous.from.value.equals(value.from.value)))
|
|
30
|
+
.or(pathsMatch.not())
|
|
31
|
+
.assertTrue();
|
|
32
|
+
return [transition, pathsMatch];
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function reduceStateTransitions(transitions) {
|
|
37
|
+
const reduced = [];
|
|
38
|
+
transitions.forEach((st) => {
|
|
39
|
+
if (reduced.length === 0) {
|
|
40
|
+
reduced.push(st);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const last = reduced.at(-1);
|
|
44
|
+
if (last.path.equals(st.path).toBoolean()) {
|
|
45
|
+
if (st.toValue.isSome.toBoolean()) {
|
|
46
|
+
reduced.pop();
|
|
47
|
+
reduced.push(new StateTransition(st.path, last.fromValue, st.toValue));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// Do nothing, because we discard that ST
|
|
51
|
+
// { from: 5, to: 10 }, { from: 10, to: none }
|
|
52
|
+
// cancel the 2nd
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
reduced.push(st);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return reduced;
|
|
60
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MerkleTreeStore } from "./MerkleTreeStore";
|
|
2
|
+
export declare class InMemoryMerkleTreeStorage implements MerkleTreeStore {
|
|
3
|
+
protected nodes: {
|
|
4
|
+
[key: number]: {
|
|
5
|
+
[key: string]: bigint;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
getNode(key: bigint, level: number): bigint | undefined;
|
|
9
|
+
setNode(key: bigint, level: number, value: bigint): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=InMemoryMerkleTreeStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryMerkleTreeStorage.d.ts","sourceRoot":"","sources":["../../../src/utils/merkletree/InMemoryMerkleTreeStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,SAAS,CAAC,KAAK,EAAE;QACf,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACvB,CAAC;KACH,CAAM;IAEA,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGhE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class InMemoryMerkleTreeStorage {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.nodes = {};
|
|
4
|
+
}
|
|
5
|
+
getNode(key, level) {
|
|
6
|
+
return this.nodes[level]?.[key.toString()];
|
|
7
|
+
}
|
|
8
|
+
setNode(key, level, value) {
|
|
9
|
+
var _a;
|
|
10
|
+
((_a = this.nodes)[level] ?? (_a[level] = {}))[key.toString()] = value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MerkleTreeStore.d.ts","sourceRoot":"","sources":["../../../src/utils/merkletree/MerkleTreeStore.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7D,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Bool, Field } from "o1js";
|
|
2
|
+
import { MerkleTreeStore } from "./MerkleTreeStore";
|
|
3
|
+
export { RollupMerkleTree, RollupMerkleWitness };
|
|
4
|
+
export { maybeSwap };
|
|
5
|
+
declare const RollupMerkleWitness_base: (new (value: {
|
|
6
|
+
path: import("o1js/dist/node/lib/field").Field[];
|
|
7
|
+
isLeft: import("o1js/dist/node/lib/bool").Bool[];
|
|
8
|
+
}) => {
|
|
9
|
+
path: import("o1js/dist/node/lib/field").Field[];
|
|
10
|
+
isLeft: import("o1js/dist/node/lib/bool").Bool[];
|
|
11
|
+
}) & {
|
|
12
|
+
_isStruct: true;
|
|
13
|
+
} & import("o1js/dist/node/snarky").ProvablePure<{
|
|
14
|
+
path: import("o1js/dist/node/lib/field").Field[];
|
|
15
|
+
isLeft: import("o1js/dist/node/lib/bool").Bool[];
|
|
16
|
+
}> & {
|
|
17
|
+
toInput: (x: {
|
|
18
|
+
path: import("o1js/dist/node/lib/field").Field[];
|
|
19
|
+
isLeft: import("o1js/dist/node/lib/bool").Bool[];
|
|
20
|
+
}) => {
|
|
21
|
+
fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
|
|
22
|
+
packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
|
|
23
|
+
};
|
|
24
|
+
toJSON: (x: {
|
|
25
|
+
path: import("o1js/dist/node/lib/field").Field[];
|
|
26
|
+
isLeft: import("o1js/dist/node/lib/bool").Bool[];
|
|
27
|
+
}) => {
|
|
28
|
+
path: string[];
|
|
29
|
+
isLeft: boolean[];
|
|
30
|
+
};
|
|
31
|
+
fromJSON: (x: {
|
|
32
|
+
path: string[];
|
|
33
|
+
isLeft: boolean[];
|
|
34
|
+
}) => {
|
|
35
|
+
path: import("o1js/dist/node/lib/field").Field[];
|
|
36
|
+
isLeft: import("o1js/dist/node/lib/bool").Bool[];
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* The {@link BaseMerkleWitness} class defines a circuit-compatible base class
|
|
41
|
+
* for [Merkle Witness'](https://computersciencewiki.org/index.php/Merkle_proof).
|
|
42
|
+
*/
|
|
43
|
+
declare class RollupMerkleWitness extends RollupMerkleWitness_base {
|
|
44
|
+
static height: number;
|
|
45
|
+
height(): number;
|
|
46
|
+
/**
|
|
47
|
+
* Calculates a root depending on the leaf value.
|
|
48
|
+
* @param leaf Value of the leaf node that belongs to this Witness.
|
|
49
|
+
* @returns The calculated root.
|
|
50
|
+
*/
|
|
51
|
+
calculateRoot(hash: Field): Field;
|
|
52
|
+
/**
|
|
53
|
+
* Calculates the index of the leaf node that belongs to this Witness.
|
|
54
|
+
* @returns Index of the leaf.
|
|
55
|
+
*/
|
|
56
|
+
calculateIndex(): Field;
|
|
57
|
+
toShortenedEntries(): string[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree) is a binary tree in
|
|
61
|
+
* which every leaf is the cryptography hash of a piece of data,
|
|
62
|
+
* and every node is the hash of the concatenation of its two child nodes.
|
|
63
|
+
*
|
|
64
|
+
* A Merkle Tree allows developers to easily and securely verify
|
|
65
|
+
* the integrity of large amounts of data.
|
|
66
|
+
*
|
|
67
|
+
* Take a look at our [documentation](https://docs.minaprotocol.com/en/zkapps)
|
|
68
|
+
* on how to use Merkle Trees in combination with zkApps and
|
|
69
|
+
* zero knowledge programming!
|
|
70
|
+
*
|
|
71
|
+
* Levels are indexed from leaves (level 0) to root (level N - 1).
|
|
72
|
+
*/
|
|
73
|
+
declare class RollupMerkleTree {
|
|
74
|
+
static height: number;
|
|
75
|
+
static EMPTY_ROOT: bigint;
|
|
76
|
+
static get leafCount(): bigint;
|
|
77
|
+
private readonly zeroes;
|
|
78
|
+
readonly store: MerkleTreeStore;
|
|
79
|
+
constructor(store: MerkleTreeStore);
|
|
80
|
+
/**
|
|
81
|
+
* Returns a node which lives at a given index and level.
|
|
82
|
+
* @param level Level of the node.
|
|
83
|
+
* @param index Index of the node.
|
|
84
|
+
* @returns The data of the node.
|
|
85
|
+
*/
|
|
86
|
+
getNode(level: number, index: bigint): Field;
|
|
87
|
+
/**
|
|
88
|
+
* Returns the root of the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
|
|
89
|
+
* @returns The root of the Merkle Tree.
|
|
90
|
+
*/
|
|
91
|
+
getRoot(): Field;
|
|
92
|
+
private setNode;
|
|
93
|
+
/**
|
|
94
|
+
* TODO: if this is passed an index bigger than the max, it will set a couple
|
|
95
|
+
* of out-of-bounds nodes but not affect the real Merkle root. OK?
|
|
96
|
+
*/
|
|
97
|
+
/**
|
|
98
|
+
* Sets the value of a leaf node at a given index to a given value.
|
|
99
|
+
* @param index Position of the leaf node.
|
|
100
|
+
* @param leaf New value.
|
|
101
|
+
*/
|
|
102
|
+
setLeaf(index: bigint, leaf: Field): void;
|
|
103
|
+
/**
|
|
104
|
+
* Returns the witness (also known as
|
|
105
|
+
* [Merkle Proof or Merkle Witness](https://computersciencewiki.org/index.php/Merkle_proof))
|
|
106
|
+
* for the leaf at the given index.
|
|
107
|
+
* @param index Position of the leaf node.
|
|
108
|
+
* @returns The witness that belongs to the leaf.
|
|
109
|
+
*/
|
|
110
|
+
getWitness(index: bigint): RollupMerkleWitness;
|
|
111
|
+
/**
|
|
112
|
+
* Fills all leaves of the tree.
|
|
113
|
+
* @param leaves Values to fill the leaves with.
|
|
114
|
+
*/
|
|
115
|
+
fill(leaves: Field[]): void;
|
|
116
|
+
/**
|
|
117
|
+
* Returns the amount of leaf nodes.
|
|
118
|
+
* @returns Amount of leaf nodes.
|
|
119
|
+
*/
|
|
120
|
+
get leafCount(): bigint;
|
|
121
|
+
}
|
|
122
|
+
export declare namespace MerkleTreeUtils {
|
|
123
|
+
function normalizeKey(key: Field): Field;
|
|
124
|
+
function checkMembership(witness: RollupMerkleWitness, root: Field, key: Field, value: Field): Bool;
|
|
125
|
+
function checkMembershipGetRoots(witness: RollupMerkleWitness, root: Field, key: Field, value: Field): [Bool, Field, Field];
|
|
126
|
+
function computeRoot(witness: RollupMerkleWitness, value: Field): Field;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* More efficient version of `maybeSwapBad` which
|
|
130
|
+
* reuses an intermediate variable
|
|
131
|
+
*/
|
|
132
|
+
declare function maybeSwap(b: Bool, x: Field, y: Field): [Field, Field];
|
|
133
|
+
//# sourceMappingURL=RollupMerkleTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RollupMerkleTree.d.ts","sourceRoot":"","sources":["../../../src/utils/merkletree/RollupMerkleTree.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,KAAK,EAA8B,MAAM,MAAM,CAAC;AAK/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;AAIjD,OAAO,EAAE,SAAS,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB;;;GAGG;AACH,cAAM,mBAAoB,SAAQ,wBAGhC;IACA,OAAc,MAAM,SAAO;IAEpB,MAAM,IAAI,MAAM;IAIvB;;;;OAIG;IACI,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK;IAaxC;;;OAGG;IACI,cAAc,IAAI,KAAK;IAkBvB,kBAAkB;CAO1B;AAED;;;;;;;;;;;;;GAaG;AACH,cAAM,gBAAgB;IACpB,OAAc,MAAM,SAAO;IAE3B,OAAc,UAAU,SAIV;IAEd,WAAkB,SAAS,IAAI,MAAM,CAEpC;IAED,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAElC,SAAgB,KAAK,EAAE,eAAe,CAAC;gBAEpB,KAAK,EAAE,eAAe;IAYzC;;;;;OAKG;IAEI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK;IAInD;;;OAGG;IAEI,OAAO,IAAI,KAAK;IAMvB,OAAO,CAAC,OAAO;IAIf;;;OAGG;IAEH;;;;OAIG;IAEI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;IAgBzC;;;;;;OAMG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB;IAqBrD;;;OAGG;IAEI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;IAM3B;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;CACF;AAGD,yBAAiB,eAAe,CAAC;IAC/B,SAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,CAS9C;IAED,SAAgB,eAAe,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,KAAK,GACX,IAAI,CAKN;IAED,SAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,KAAK,GACX,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAKtB;IAED,SAAgB,WAAW,CACzB,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,KAAK,GACX,KAAK,CAEP;CACF;AAED;;;GAGG;AACH,iBAAS,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAK9D"}
|