@proto-kit/protocol 0.1.1-develop.457 → 0.1.1-develop.651
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/dist/blockmodules/AccountStateModule.d.ts.map +1 -1
- package/dist/blockmodules/AccountStateModule.js +10 -3
- package/dist/blockmodules/BlockHeightHook.d.ts +3 -3
- package/dist/blockmodules/BlockHeightHook.d.ts.map +1 -1
- package/dist/blockmodules/BlockHeightHook.js +5 -4
- package/dist/blockmodules/LastStateRootBlockHook.d.ts +8 -0
- package/dist/blockmodules/LastStateRootBlockHook.d.ts.map +1 -0
- package/dist/blockmodules/LastStateRootBlockHook.js +15 -0
- package/dist/blockmodules/NoopBlockHook.d.ts +6 -4
- package/dist/blockmodules/NoopBlockHook.d.ts.map +1 -1
- package/dist/blockmodules/NoopBlockHook.js +4 -4
- package/dist/blockmodules/NoopSettlementHook.d.ts +6 -0
- package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -0
- package/dist/blockmodules/NoopSettlementHook.js +18 -0
- package/dist/hooks/AccountStateHook.d.ts.map +1 -1
- package/dist/hooks/AccountStateHook.js +17 -5
- 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 +18 -0
- package/dist/index.d.ts +24 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -6
- package/dist/model/MethodPublicOutput.d.ts +8 -0
- package/dist/model/MethodPublicOutput.d.ts.map +1 -1
- package/dist/model/MethodPublicOutput.js +1 -0
- package/dist/model/Option.d.ts +3 -2
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +5 -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 +6 -5
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransition.js +3 -0
- 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 +40 -0
- package/dist/model/network/NetworkState.d.ts.map +1 -1
- package/dist/model/network/NetworkState.js +14 -2
- package/dist/model/transaction/RuntimeTransaction.d.ts +45 -20
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
- package/dist/model/transaction/RuntimeTransaction.js +68 -11
- package/dist/model/transaction/SignedTransaction.d.ts +71 -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 +119 -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 +13 -16
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +26 -39
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +1 -1
- package/dist/protocol/ProvableBlockHook.d.ts +2 -10
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
- package/dist/protocol/ProvableBlockHook.js +1 -1
- package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
- package/dist/protocol/TransitioningProtocolModule.d.ts +3 -2
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
- package/dist/protocol/TransitioningProtocolModule.js +3 -2
- package/dist/prover/block/BlockProvable.d.ts +106 -28
- package/dist/prover/block/BlockProvable.d.ts.map +1 -1
- package/dist/prover/block/BlockProvable.js +23 -5
- package/dist/prover/block/BlockProver.d.ts +29 -8
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +244 -78
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +45 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +16 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +3 -2
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +1 -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/ProvableSettlementHook.d.ts +26 -0
- package/dist/settlement/ProvableSettlementHook.d.ts.map +1 -0
- package/dist/settlement/ProvableSettlementHook.js +3 -0
- package/dist/settlement/SettlementContract.d.ts +230 -0
- package/dist/settlement/SettlementContract.d.ts.map +1 -0
- package/dist/settlement/SettlementContract.js +346 -0
- package/dist/settlement/SettlementContractModule.d.ts +39 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +68 -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 +36 -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 +41 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.js +235 -0
- package/dist/settlement/messages/Deposit.d.ts +39 -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 +109 -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 +40 -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 +12 -0
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +2 -1
- package/dist/state/assert/assert.d.ts.map +1 -1
- package/dist/state/assert/assert.js +8 -5
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +75 -1
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +21 -2
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js +51 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
- package/dist/utils/ProvableHashList.d.ts +3 -3
- 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/package.json +2 -2
- package/src/hooks/AccountStateHook.ts +46 -0
- package/src/hooks/BlockHeightHook.ts +18 -0
- package/src/hooks/LastStateRootBlockHook.ts +26 -0
- package/src/hooks/NoopBlockHook.ts +20 -0
- package/src/hooks/NoopSettlementHook.ts +20 -0
- package/src/hooks/SequenceStateTransactionModule.ts +25 -0
- package/src/index.ts +24 -6
- package/src/model/MethodPublicOutput.ts +3 -2
- package/src/model/Option.ts +16 -0
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +10 -2
- package/src/model/network/NetworkState.ts +15 -3
- package/src/model/transaction/RuntimeTransaction.ts +90 -16
- package/src/model/transaction/SignedTransaction.ts +54 -0
- package/src/model/transaction/ValueOption.ts +28 -0
- package/src/protocol/Protocol.ts +60 -67
- package/src/protocol/ProtocolModule.ts +3 -2
- package/src/protocol/ProvableBlockHook.ts +10 -13
- package/src/protocol/ProvableTransactionHook.ts +2 -1
- package/src/protocol/TransitioningProtocolModule.ts +3 -2
- package/src/prover/block/BlockProvable.ts +39 -6
- package/src/prover/block/BlockProver.ts +484 -142
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -0
- package/src/prover/statetransition/StateTransitionProver.ts +4 -2
- package/src/settlement/ContractModule.ts +24 -0
- package/src/settlement/SettlementContractModule.ts +127 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +135 -0
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +65 -0
- package/src/settlement/contracts/SettlementSmartContract.ts +329 -0
- package/src/settlement/messages/Deposit.ts +6 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +41 -0
- package/src/settlement/messages/Withdrawal.ts +14 -0
- package/src/settlement/modularity/ProvableSettlementHook.ts +34 -0
- package/src/settlement/modules/NetworkStateSettlementModule.ts +39 -0
- package/src/state/State.ts +2 -1
- package/src/state/assert/assert.ts +8 -6
- package/src/state/context/RuntimeMethodExecutionContext.ts +22 -2
- package/src/utils/MinaPrefixedProvableHashList.ts +72 -0
- package/src/utils/PrefixedProvableHashList.ts +2 -2
- package/src/utils/ProvableHashList.ts +3 -3
- package/src/utils/ProvableReductionHashList.ts +68 -0
- package/src/utils/StateTransitionReductionList.ts +88 -0
- package/test/BlockProver.test.ts +4 -5
- package/test/Protocol.test.ts +15 -10
- package/test/settlement/SettlementContract.test.ts +45 -0
- package/test/utils/ProvableReductionHashList.test.ts +114 -0
- package/src/blockmodules/AccountStateModule.ts +0 -33
- package/src/blockmodules/BlockHeightHook.ts +0 -21
- package/src/blockmodules/NoopBlockHook.ts +0 -16
- package/src/model/transaction/ProtocolTransaction.ts +0 -25
- package/src/prover/block/BlockTransactionPosition.ts +0 -34
- /package/src/{blockmodules → hooks}/NoopTransactionHook.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bool } from "o1js";
|
|
1
|
+
import { Bool, Provable } from "o1js";
|
|
2
2
|
import { ProvableMethodExecutionContext, ProvableMethodExecutionResult } from "@proto-kit/common";
|
|
3
3
|
import { StateTransition } from "../../model/StateTransition";
|
|
4
4
|
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
@@ -12,6 +12,78 @@ export interface RuntimeMethodExecutionData {
|
|
|
12
12
|
transaction: RuntimeTransaction;
|
|
13
13
|
networkState: NetworkState;
|
|
14
14
|
}
|
|
15
|
+
declare const RuntimeMethodExecutionDataStruct_base: (new (value: {
|
|
16
|
+
transaction: RuntimeTransaction;
|
|
17
|
+
networkState: NetworkState;
|
|
18
|
+
}) => {
|
|
19
|
+
transaction: RuntimeTransaction;
|
|
20
|
+
networkState: NetworkState;
|
|
21
|
+
}) & {
|
|
22
|
+
_isStruct: true;
|
|
23
|
+
} & Provable<{
|
|
24
|
+
transaction: RuntimeTransaction;
|
|
25
|
+
networkState: NetworkState;
|
|
26
|
+
}> & {
|
|
27
|
+
toInput: (x: {
|
|
28
|
+
transaction: RuntimeTransaction;
|
|
29
|
+
networkState: NetworkState;
|
|
30
|
+
}) => {
|
|
31
|
+
fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
|
|
32
|
+
packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
|
|
33
|
+
};
|
|
34
|
+
toJSON: (x: {
|
|
35
|
+
transaction: RuntimeTransaction;
|
|
36
|
+
networkState: NetworkState;
|
|
37
|
+
}) => {
|
|
38
|
+
transaction: {
|
|
39
|
+
methodId: string;
|
|
40
|
+
argsHash: string;
|
|
41
|
+
nonce: {
|
|
42
|
+
isSome: boolean;
|
|
43
|
+
value: any;
|
|
44
|
+
};
|
|
45
|
+
sender: {
|
|
46
|
+
isSome: boolean;
|
|
47
|
+
value: any;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
networkState: {
|
|
51
|
+
block: {
|
|
52
|
+
height: string;
|
|
53
|
+
};
|
|
54
|
+
previous: {
|
|
55
|
+
rootHash: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
fromJSON: (x: {
|
|
60
|
+
transaction: {
|
|
61
|
+
methodId: string;
|
|
62
|
+
argsHash: string;
|
|
63
|
+
nonce: {
|
|
64
|
+
isSome: boolean;
|
|
65
|
+
value: any;
|
|
66
|
+
};
|
|
67
|
+
sender: {
|
|
68
|
+
isSome: boolean;
|
|
69
|
+
value: any;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
networkState: {
|
|
73
|
+
block: {
|
|
74
|
+
height: string;
|
|
75
|
+
};
|
|
76
|
+
previous: {
|
|
77
|
+
rootHash: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
}) => {
|
|
81
|
+
transaction: RuntimeTransaction;
|
|
82
|
+
networkState: NetworkState;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export declare class RuntimeMethodExecutionDataStruct extends RuntimeMethodExecutionDataStruct_base implements RuntimeMethodExecutionData {
|
|
86
|
+
}
|
|
15
87
|
/**
|
|
16
88
|
* Execution context used to wrap runtime module methods,
|
|
17
89
|
* allowing them to post relevant information (such as execution status)
|
|
@@ -41,6 +113,7 @@ export declare class RuntimeMethodExecutionContext extends ProvableMethodExecuti
|
|
|
41
113
|
* @param input Input witness data required for a runtime execution
|
|
42
114
|
*/
|
|
43
115
|
setup(input: RuntimeMethodExecutionData): void;
|
|
116
|
+
witnessInput(): RuntimeMethodExecutionDataStruct;
|
|
44
117
|
setSimulated(simulated: boolean): void;
|
|
45
118
|
/**
|
|
46
119
|
* Manually clears/resets the execution context
|
|
@@ -58,4 +131,5 @@ export declare class RuntimeMethodExecutionContext extends ProvableMethodExecuti
|
|
|
58
131
|
isSimulated: boolean;
|
|
59
132
|
};
|
|
60
133
|
}
|
|
134
|
+
export {};
|
|
61
135
|
//# sourceMappingURL=RuntimeMethodExecutionContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/RuntimeMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"RuntimeMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/RuntimeMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAE9C,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,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;IAE9E,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;IAE9C,MAAM,EAAE,IAAI,CAAc;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC/B;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;IAKxE;;OAEG;IACI,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM;IAQxC;;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"}
|
|
@@ -4,9 +4,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
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
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Bool } from "o1js";
|
|
7
|
+
import { Bool, Provable, Struct } from "o1js";
|
|
8
8
|
import { singleton } from "tsyringe";
|
|
9
9
|
import { ProvableMethodExecutionContext, ProvableMethodExecutionResult, } from "@proto-kit/common";
|
|
10
|
+
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
11
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
10
12
|
const errors = {
|
|
11
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"),
|
|
12
14
|
};
|
|
@@ -18,6 +20,11 @@ export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutio
|
|
|
18
20
|
this.status = Bool(true);
|
|
19
21
|
}
|
|
20
22
|
}
|
|
23
|
+
export class RuntimeMethodExecutionDataStruct extends Struct({
|
|
24
|
+
transaction: RuntimeTransaction,
|
|
25
|
+
networkState: NetworkState,
|
|
26
|
+
}) {
|
|
27
|
+
}
|
|
21
28
|
/**
|
|
22
29
|
* Execution context used to wrap runtime module methods,
|
|
23
30
|
* allowing them to post relevant information (such as execution status)
|
|
@@ -70,6 +77,17 @@ let RuntimeMethodExecutionContext = class RuntimeMethodExecutionContext extends
|
|
|
70
77
|
setup(input) {
|
|
71
78
|
this.input = input;
|
|
72
79
|
}
|
|
80
|
+
witnessInput() {
|
|
81
|
+
this.assertSetupCalled();
|
|
82
|
+
return Provable.witness(RuntimeMethodExecutionDataStruct, () => {
|
|
83
|
+
// TODO Is that right? Or this.current().input
|
|
84
|
+
const { transaction, networkState } = this.input;
|
|
85
|
+
return new RuntimeMethodExecutionDataStruct({
|
|
86
|
+
networkState,
|
|
87
|
+
transaction,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
73
91
|
setSimulated(simulated) {
|
|
74
92
|
this.isSimulated = simulated;
|
|
75
93
|
}
|
|
@@ -83,7 +101,8 @@ let RuntimeMethodExecutionContext = class RuntimeMethodExecutionContext extends
|
|
|
83
101
|
super.afterMethod();
|
|
84
102
|
if (this.isFinished) {
|
|
85
103
|
this.lastInput = this.input;
|
|
86
|
-
|
|
104
|
+
// TODO: find out why input isnt set in TransactionFeeHook during assert
|
|
105
|
+
// this.input = undefined;
|
|
87
106
|
this.isSimulated = false;
|
|
88
107
|
}
|
|
89
108
|
}
|
|
@@ -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;AAStD,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,51 @@
|
|
|
1
|
+
import { Field, Poseidon } from "o1js";
|
|
2
|
+
import { hashWithPrefix, prefixToField } from "@proto-kit/common";
|
|
3
|
+
import { ProvableHashList } from "./ProvableHashList";
|
|
4
|
+
function salt(prefix) {
|
|
5
|
+
return Poseidon.update([Field(0), Field(0), Field(0)], [prefixToField(prefix)]);
|
|
6
|
+
}
|
|
7
|
+
export const MINA_EVENT_PREFIXES = {
|
|
8
|
+
event: "MinaZkappEvent******",
|
|
9
|
+
events: "MinaZkappEvents*****",
|
|
10
|
+
sequenceEvents: "MinaZkappSeqEvents**",
|
|
11
|
+
};
|
|
12
|
+
export function emptyActions() {
|
|
13
|
+
return salt("MinaZkappActionsEmpty")[0];
|
|
14
|
+
}
|
|
15
|
+
export function emptyEvents() {
|
|
16
|
+
return salt("MinaZkappEventsEmpty")[0];
|
|
17
|
+
}
|
|
18
|
+
export class MinaActions {
|
|
19
|
+
static actionHash(action, previousHash = emptyActions()) {
|
|
20
|
+
const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, action);
|
|
21
|
+
return hashWithPrefix(MINA_EVENT_PREFIXES.sequenceEvents, [
|
|
22
|
+
previousHash,
|
|
23
|
+
actionDataHash,
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class MinaEvents {
|
|
28
|
+
static eventHash(event, previousHash = emptyEvents()) {
|
|
29
|
+
const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, event);
|
|
30
|
+
return hashWithPrefix(MINA_EVENT_PREFIXES.events, [
|
|
31
|
+
previousHash,
|
|
32
|
+
actionDataHash,
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export class MinaPrefixedProvableHashList extends ProvableHashList {
|
|
37
|
+
constructor(valueType, prefix, internalCommitment = Field(0)) {
|
|
38
|
+
super(valueType, internalCommitment);
|
|
39
|
+
this.prefix = prefix;
|
|
40
|
+
}
|
|
41
|
+
hash(elements) {
|
|
42
|
+
const init = salt(this.prefix);
|
|
43
|
+
const digest = Poseidon.update(init, elements);
|
|
44
|
+
return digest[0];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class MinaActionsHashList extends MinaPrefixedProvableHashList {
|
|
48
|
+
constructor(internalCommitment = Field(0)) {
|
|
49
|
+
super(Field, MINA_EVENT_PREFIXES.sequenceEvents, internalCommitment);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -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
|
|
@@ -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/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":"AAEA,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
|
+
for (const st of transitions) {
|
|
39
|
+
if (reduced.length === 0) {
|
|
40
|
+
reduced.push(st);
|
|
41
|
+
continue;
|
|
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
|
+
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "0.1.1-develop.
|
|
6
|
+
"version": "0.1.1-develop.651+7591cb6",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc -p tsconfig.json",
|
|
9
9
|
"dev": "tsc -p tsconfig.json --watch",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"@jest/globals": "^29.5.0",
|
|
33
33
|
"@types/lodash": "^4.14.194"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "7591cb6bdf58a6cd525a10902c25bc292efcfc6b"
|
|
36
36
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Provable, PublicKey, Struct, UInt64 } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { BlockProverExecutionData } from "../prover/block/BlockProvable";
|
|
4
|
+
import { StateMap } from "../state/StateMap";
|
|
5
|
+
import { protocolState } from "../state/protocol/ProtocolState";
|
|
6
|
+
import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
|
|
7
|
+
import { assert } from "../state/assert/assert";
|
|
8
|
+
import { injectable } from "tsyringe";
|
|
9
|
+
|
|
10
|
+
export class AccountState extends Struct({
|
|
11
|
+
nonce: UInt64,
|
|
12
|
+
}) {}
|
|
13
|
+
|
|
14
|
+
@injectable()
|
|
15
|
+
export class AccountStateHook extends ProvableTransactionHook {
|
|
16
|
+
@protocolState() public accountState = StateMap.from<PublicKey, AccountState>(
|
|
17
|
+
PublicKey,
|
|
18
|
+
AccountState
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
public onTransaction({ transaction }: BlockProverExecutionData): void {
|
|
22
|
+
const sender = transaction.sender.value;
|
|
23
|
+
|
|
24
|
+
const accountState = this.accountState
|
|
25
|
+
.get(sender)
|
|
26
|
+
.orElse(new AccountState({ nonce: UInt64.zero }));
|
|
27
|
+
|
|
28
|
+
const currentNonce = accountState.nonce;
|
|
29
|
+
|
|
30
|
+
// Either the nonce matches or the tx is a message, in which case we don't care
|
|
31
|
+
assert(
|
|
32
|
+
currentNonce
|
|
33
|
+
.equals(transaction.nonce.value)
|
|
34
|
+
.or(transaction.sender.isSome.not()),
|
|
35
|
+
"Nonce not matching"
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Optimized version of transaction.sender.isSome ? currentNonce.add(1) : Field(0)
|
|
39
|
+
// Bcs Bool(true).toField() == 1
|
|
40
|
+
const newNonce = UInt64.from(
|
|
41
|
+
currentNonce.value.add(1).mul(transaction.sender.isSome.toField())
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
this.accountState.set(sender, new AccountState({ nonce: newNonce }));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Provable } from "o1js";
|
|
2
|
+
import { NetworkState } from "../model/network/NetworkState";
|
|
3
|
+
import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
|
|
4
|
+
|
|
5
|
+
export class BlockHeightHook extends ProvableBlockHook<Record<string, never>> {
|
|
6
|
+
public afterBlock(networkState: NetworkState): NetworkState {
|
|
7
|
+
return new NetworkState({
|
|
8
|
+
block: {
|
|
9
|
+
height: networkState.block.height.add(1),
|
|
10
|
+
},
|
|
11
|
+
previous: networkState.previous
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public beforeBlock(networkState: NetworkState): NetworkState {
|
|
16
|
+
return networkState;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
|
|
2
|
+
import { NetworkState } from "../model/network/NetworkState";
|
|
3
|
+
import { BlockProverState } from "../prover/block/BlockProver";
|
|
4
|
+
|
|
5
|
+
export class LastStateRootBlockHook extends ProvableBlockHook<
|
|
6
|
+
Record<string, never>
|
|
7
|
+
> {
|
|
8
|
+
public afterBlock(
|
|
9
|
+
networkState: NetworkState,
|
|
10
|
+
state: BlockProverState
|
|
11
|
+
): NetworkState {
|
|
12
|
+
return new NetworkState({
|
|
13
|
+
block: networkState.block,
|
|
14
|
+
previous: {
|
|
15
|
+
rootHash: state.stateRoot,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public beforeBlock(
|
|
21
|
+
networkState: NetworkState,
|
|
22
|
+
state: BlockProverState
|
|
23
|
+
): NetworkState {
|
|
24
|
+
return networkState;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
|
|
2
|
+
import { NetworkState } from "../model/network/NetworkState";
|
|
3
|
+
import { BlockProverState } from "../prover/block/BlockProver";
|
|
4
|
+
import { NoConfig } from "@proto-kit/common";
|
|
5
|
+
|
|
6
|
+
export class NoopBlockHook extends ProvableBlockHook<NoConfig> {
|
|
7
|
+
public afterBlock(
|
|
8
|
+
networkState: NetworkState,
|
|
9
|
+
state: BlockProverState
|
|
10
|
+
): NetworkState {
|
|
11
|
+
return networkState;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public beforeBlock(
|
|
15
|
+
networkState: NetworkState,
|
|
16
|
+
state: BlockProverState
|
|
17
|
+
): NetworkState {
|
|
18
|
+
return networkState;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { injectable } from "tsyringe";
|
|
2
|
+
import { noop } from "@proto-kit/common";
|
|
3
|
+
import { SmartContract } from "o1js";
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
ProvableSettlementHook,
|
|
7
|
+
SettlementHookInputs,
|
|
8
|
+
} from "../settlement/modularity/ProvableSettlementHook";
|
|
9
|
+
|
|
10
|
+
@injectable()
|
|
11
|
+
export class NoopSettlementHook extends ProvableSettlementHook<
|
|
12
|
+
Record<string, never>
|
|
13
|
+
> {
|
|
14
|
+
public beforeSettlement(
|
|
15
|
+
contract: SmartContract,
|
|
16
|
+
state: SettlementHookInputs
|
|
17
|
+
): void {
|
|
18
|
+
noop();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Field } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
|
|
4
|
+
import { BlockProverExecutionData } from "../prover/block/BlockProvable";
|
|
5
|
+
import { protocolState } from "../state/protocol/ProtocolState";
|
|
6
|
+
import { State } from "../state/State";
|
|
7
|
+
import { DefaultProvableHashList } from "../utils/ProvableHashList";
|
|
8
|
+
import { SignedTransaction } from "../model/transaction/SignedTransaction";
|
|
9
|
+
|
|
10
|
+
// Future idea to add this functionality as a module
|
|
11
|
+
// This is currently hardcoded in tracing however
|
|
12
|
+
class SequenceStateTransactionModule extends ProvableTransactionHook {
|
|
13
|
+
@protocolState() sequenceStateTransactionsList = State.from(Field);
|
|
14
|
+
|
|
15
|
+
public onTransaction(executionData: BlockProverExecutionData): void {
|
|
16
|
+
const hashList = new DefaultProvableHashList(
|
|
17
|
+
SignedTransaction,
|
|
18
|
+
this.sequenceStateTransactionsList.get().orElse(Field(0))
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
hashList.push(executionData.transaction);
|
|
22
|
+
|
|
23
|
+
this.sequenceStateTransactionsList.set(hashList.commitment);
|
|
24
|
+
}
|
|
25
|
+
}
|