@proto-kit/protocol 0.1.1-develop.651 → 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 +9 -10
- package/dist/hooks/BlockHeightHook.d.ts +2 -2
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
- package/dist/hooks/BlockHeightHook.js +3 -3
- package/dist/hooks/LastStateRootBlockHook.d.ts +2 -2
- package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -1
- package/dist/hooks/LastStateRootBlockHook.js +2 -2
- package/dist/hooks/NoopBlockHook.d.ts +3 -3
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
- package/dist/hooks/NoopBlockHook.js +2 -2
- package/dist/hooks/NoopSettlementHook.d.ts +1 -1
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
- package/dist/hooks/NoopSettlementHook.js +2 -3
- 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 +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/model/MethodPublicOutput.d.ts +68 -34
- package/dist/model/MethodPublicOutput.d.ts.map +1 -1
- package/dist/model/Option.d.ts +39 -20
- package/dist/model/Option.d.ts.map +1 -1
- package/dist/model/Option.js +1 -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/StateTransition.d.ts +48 -12
- package/dist/model/StateTransition.d.ts.map +1 -1
- package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- package/dist/model/StateTransitionReduction.d.ts +2 -2
- package/dist/model/StateTransitionReduction.js +26 -26
- 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 +6 -5
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +12 -3
- 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 +3 -1
- 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 +48 -40
- 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/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 +8 -8
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +17 -22
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
- 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 +1 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
- package/dist/settlement/SettlementContractModule.js +7 -4
- 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.js +1 -2
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +8 -8
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
- package/dist/settlement/contracts/DispatchSmartContract.js +14 -14
- 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.map +1 -1
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +4 -4
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +18 -17
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
- package/dist/settlement/contracts/SettlementSmartContract.js +46 -35
- package/dist/settlement/messages/Deposit.d.ts +29 -4
- package/dist/settlement/messages/Deposit.d.ts.map +1 -1
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +94 -14
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
- package/dist/settlement/messages/Withdrawal.d.ts +29 -4
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +2 -2
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.js +3 -1
- package/dist/state/State.d.ts +4 -3
- package/dist/state/State.d.ts.map +1 -1
- package/dist/state/State.js +16 -11
- 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 +4 -1
- 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 +54 -3
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +4 -5
- 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.map +1 -1
- package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
- package/dist/utils/ProvableHashList.d.ts +1 -1
- package/dist/utils/StateTransitionReductionList.d.ts +1 -1
- package/dist/utils/StateTransitionReductionList.d.ts.map +1 -1
- package/dist/utils/StateTransitionReductionList.js +3 -3
- 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/hooks/AccountStateHook.ts +11 -9
- package/src/hooks/BlockHeightHook.ts +3 -4
- package/src/hooks/LastStateRootBlockHook.ts +4 -4
- package/src/hooks/NoopBlockHook.ts +6 -5
- package/src/hooks/NoopSettlementHook.ts +2 -2
- package/src/hooks/NoopTransactionHook.ts +5 -1
- package/src/index.ts +0 -2
- package/src/model/MethodPublicOutput.ts +2 -2
- package/src/model/Option.ts +5 -1
- package/src/model/Path.ts +1 -3
- package/src/model/StateTransition.ts +1 -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 +24 -13
- package/src/protocol/ProtocolEnvironment.ts +7 -6
- package/src/protocol/ProtocolModule.ts +5 -2
- 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 +78 -55
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +1 -1
- package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
- package/src/prover/statetransition/StateTransitionProver.ts +23 -27
- package/src/settlement/ContractModule.ts +1 -1
- package/src/settlement/SettlementContractModule.ts +14 -9
- package/src/settlement/contracts/DispatchSmartContract.ts +15 -14
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +6 -4
- package/src/settlement/contracts/SettlementSmartContract.ts +55 -34
- package/src/settlement/messages/OutgoingMessageArgument.ts +1 -0
- package/src/settlement/modularity/ProvableSettlementHook.ts +3 -4
- package/src/settlement/modules/NetworkStateSettlementModule.ts +5 -2
- package/src/state/State.ts +19 -12
- 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 +6 -2
- package/src/state/context/RuntimeMethodExecutionContext.ts +5 -2
- package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
- package/src/state/protocol/ProtocolState.ts +1 -4
- package/src/utils/MinaPrefixedProvableHashList.ts +2 -1
- package/src/utils/ProvableHashList.ts +1 -1
- package/src/utils/StateTransitionReductionList.ts +4 -3
- package/src/utils/utils.ts +4 -9
- package/test/BlockProver.test.ts +110 -128
- package/test/Protocol.test.ts +8 -20
- 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 +5 -2
- 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/dist/hooks/TransactionFeeHook.js +0 -39
- package/src/hooks/SequenceStateTransactionModule.ts +0 -25
- package/src/model/Option.test.ts +0 -21
- package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
- package/test/Option.test.ts +0 -64
- package/test/settlement/SettlementContract.test.ts +0 -45
- package/tsconfig.test.json +0 -9
|
@@ -7,14 +7,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import { prefixToField, RollupMerkleTree } from "@proto-kit/common";
|
|
11
|
-
import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Signature,
|
|
10
|
+
import { prefixToField, RollupMerkleTree, mapSequential, } from "@proto-kit/common";
|
|
11
|
+
import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Signature, State, state, TokenId, UInt32, UInt64, TokenContract, AccountUpdateForest, } from "o1js";
|
|
12
12
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
13
13
|
import { Path } from "../../model/Path";
|
|
14
14
|
import { BlockHashMerkleTree } from "../../prover/block/accummulators/BlockHashMerkleTree";
|
|
15
15
|
import { BlockProverPublicInput, BlockProverPublicOutput, } from "../../prover/block/BlockProvable";
|
|
16
16
|
import { OUTGOING_MESSAGE_BATCH_SIZE, OutgoingMessageArgumentBatch, } from "../messages/OutgoingMessageArgument";
|
|
17
17
|
import { Withdrawal } from "../messages/Withdrawal";
|
|
18
|
+
/* eslint-disable @typescript-eslint/lines-between-class-members */
|
|
18
19
|
export class LazyBlockProof extends Proof {
|
|
19
20
|
}
|
|
20
21
|
LazyBlockProof.publicInputType = BlockProverPublicInput;
|
|
@@ -24,7 +25,7 @@ LazyBlockProof.tag = () => {
|
|
|
24
25
|
};
|
|
25
26
|
// Some random prefix for the sequencer signature
|
|
26
27
|
export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
|
|
27
|
-
export class SettlementSmartContract extends
|
|
28
|
+
export class SettlementSmartContract extends TokenContract {
|
|
28
29
|
constructor() {
|
|
29
30
|
super(...arguments);
|
|
30
31
|
this.sequencerKey = State();
|
|
@@ -35,30 +36,33 @@ export class SettlementSmartContract extends SmartContract {
|
|
|
35
36
|
this.dispatchContractAddressX = State();
|
|
36
37
|
this.outgoingMessageCursor = State();
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
39
|
+
async approveBase(forest) {
|
|
40
|
+
this.checkZeroBalanceChange(forest);
|
|
41
|
+
}
|
|
42
|
+
async initialize(sequencer, dispatchContract) {
|
|
43
|
+
this.sequencerKey.getAndRequireEquals().assertEquals(Field(0));
|
|
44
|
+
this.stateRoot.getAndRequireEquals().assertEquals(Field(0));
|
|
45
|
+
this.blockHashRoot.getAndRequireEquals().assertEquals(Field(0));
|
|
46
|
+
this.networkStateHash.getAndRequireEquals().assertEquals(Field(0));
|
|
47
|
+
this.dispatchContractAddressX.getAndRequireEquals().assertEquals(Field(0));
|
|
44
48
|
this.sequencerKey.set(sequencer.x);
|
|
45
49
|
this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
|
|
46
50
|
this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
|
|
47
51
|
this.networkStateHash.set(NetworkState.empty().hash());
|
|
48
52
|
this.dispatchContractAddressX.set(dispatchContract.x);
|
|
49
|
-
const DispatchContract = SettlementSmartContract.args
|
|
50
|
-
new DispatchContract(dispatchContract).initialize(this.address);
|
|
53
|
+
const { DispatchContract } = SettlementSmartContract.args;
|
|
54
|
+
await new DispatchContract(dispatchContract).initialize(this.address);
|
|
51
55
|
}
|
|
52
|
-
settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
|
|
56
|
+
async settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
|
|
53
57
|
// Verify the blockproof
|
|
54
58
|
blockProof.verify();
|
|
55
59
|
// Get and assert on-chain values
|
|
56
|
-
const stateRoot = this.stateRoot.
|
|
57
|
-
const networkStateHash = this.networkStateHash.
|
|
58
|
-
const blockHashRoot = this.blockHashRoot.
|
|
59
|
-
const sequencerKey = this.sequencerKey.
|
|
60
|
-
const lastSettlementL1Block = this.lastSettlementL1Block.
|
|
61
|
-
const onChainDispatchContractAddressX = this.dispatchContractAddressX.
|
|
60
|
+
const stateRoot = this.stateRoot.getAndRequireEquals();
|
|
61
|
+
const networkStateHash = this.networkStateHash.getAndRequireEquals();
|
|
62
|
+
const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
|
|
63
|
+
const sequencerKey = this.sequencerKey.getAndRequireEquals();
|
|
64
|
+
const lastSettlementL1Block = this.lastSettlementL1Block.getAndRequireEquals();
|
|
65
|
+
const onChainDispatchContractAddressX = this.dispatchContractAddressX.getAndRequireEquals();
|
|
62
66
|
onChainDispatchContractAddressX.assertEquals(dispatchContractAddress.x, "DispatchContract address not provided correctly");
|
|
63
67
|
const { DispatchContract, escapeHatchSlotsInterval, hooks } = SettlementSmartContract.args;
|
|
64
68
|
// Get dispatch contract values
|
|
@@ -68,7 +72,7 @@ export class SettlementSmartContract extends SmartContract {
|
|
|
68
72
|
const promisedMessagesHash = dispatchContract.promisedMessagesHash.get();
|
|
69
73
|
// Get block height and use the lower bound for all ops
|
|
70
74
|
const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
|
|
71
|
-
this.network.globalSlotSinceGenesis.
|
|
75
|
+
this.network.globalSlotSinceGenesis.requireBetween(minBlockIncluded,
|
|
72
76
|
// 5 because that is the length the newPromisedMessagesHash will be valid
|
|
73
77
|
minBlockIncluded.add(4));
|
|
74
78
|
// Check signature/escape catch
|
|
@@ -110,8 +114,8 @@ export class SettlementSmartContract extends SmartContract {
|
|
|
110
114
|
toNetworkState: outputNetworkState,
|
|
111
115
|
currentL1Block: minBlockIncluded,
|
|
112
116
|
};
|
|
113
|
-
hooks
|
|
114
|
-
hook.beforeSettlement(this, inputs);
|
|
117
|
+
await mapSequential(hooks, async (hook) => {
|
|
118
|
+
await hook.beforeSettlement(this, inputs);
|
|
115
119
|
});
|
|
116
120
|
// Apply blockProof
|
|
117
121
|
stateRoot.assertEquals(blockProof.publicInput.stateRoot, "Input state root not matching");
|
|
@@ -130,12 +134,12 @@ export class SettlementSmartContract extends SmartContract {
|
|
|
130
134
|
// to be the blockProofs publicoutput, is actually the current on-chain
|
|
131
135
|
// promisedMessageHash. It also checks the newPromisedMessagesHash to be
|
|
132
136
|
// a current sequencestate value
|
|
133
|
-
dispatchContract.updateMessagesHash(promisedMessagesHash, newPromisedMessagesHash);
|
|
137
|
+
await dispatchContract.updateMessagesHash(promisedMessagesHash, newPromisedMessagesHash);
|
|
134
138
|
this.lastSettlementL1Block.set(minBlockIncluded);
|
|
135
139
|
}
|
|
136
|
-
rollupOutgoingMessages(batch) {
|
|
137
|
-
let counter = this.outgoingMessageCursor.
|
|
138
|
-
const stateRoot = this.stateRoot.
|
|
140
|
+
async rollupOutgoingMessages(batch) {
|
|
141
|
+
let counter = this.outgoingMessageCursor.getAndRequireEquals();
|
|
142
|
+
const stateRoot = this.stateRoot.getAndRequireEquals();
|
|
139
143
|
const [withdrawalModule, withdrawalStateName] = SettlementSmartContract.args.withdrawalStatePath;
|
|
140
144
|
const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
|
|
141
145
|
let accountCreationFeePaid = Field(0);
|
|
@@ -149,24 +153,24 @@ export class SettlementSmartContract extends SmartContract {
|
|
|
149
153
|
// Process message
|
|
150
154
|
const { address, amount } = args.value;
|
|
151
155
|
const isDummy = address.equals(this.address);
|
|
152
|
-
const tokenAu = this.
|
|
153
|
-
const isNewAccount = tokenAu.account.isNew.
|
|
156
|
+
const tokenAu = this.internal.mint({ address, amount });
|
|
157
|
+
const isNewAccount = tokenAu.account.isNew.getAndRequireEquals();
|
|
154
158
|
tokenAu.body.balanceChange.magnitude =
|
|
155
|
-
tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.
|
|
159
|
+
tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.getNetworkConstants().accountCreationFee.toConstant(), UInt64.zero));
|
|
156
160
|
accountCreationFeePaid = accountCreationFeePaid.add(Provable.if(isNewAccount, Field(1e9), Field(0)));
|
|
157
161
|
counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
|
|
158
162
|
}
|
|
159
|
-
this.balance.subInPlace(UInt64.
|
|
163
|
+
this.balance.subInPlace(UInt64.Unsafe.fromField(accountCreationFeePaid));
|
|
160
164
|
this.outgoingMessageCursor.set(counter);
|
|
161
165
|
}
|
|
162
|
-
redeem(additionUpdate) {
|
|
166
|
+
async redeem(additionUpdate) {
|
|
163
167
|
additionUpdate.body.tokenId.assertEquals(TokenId.default, "Tokenid not default token");
|
|
164
168
|
additionUpdate.body.balanceChange.sgn
|
|
165
169
|
.isPositive()
|
|
166
170
|
.assertTrue("Sign not correct");
|
|
167
171
|
const amount = additionUpdate.body.balanceChange.magnitude;
|
|
168
172
|
// Burn tokens
|
|
169
|
-
this.
|
|
173
|
+
this.internal.burn({
|
|
170
174
|
address: additionUpdate.publicKey,
|
|
171
175
|
amount,
|
|
172
176
|
});
|
|
@@ -203,11 +207,17 @@ __decorate([
|
|
|
203
207
|
state(Field),
|
|
204
208
|
__metadata("design:type", Object)
|
|
205
209
|
], SettlementSmartContract.prototype, "outgoingMessageCursor", void 0);
|
|
210
|
+
__decorate([
|
|
211
|
+
method,
|
|
212
|
+
__metadata("design:type", Function),
|
|
213
|
+
__metadata("design:paramtypes", [AccountUpdateForest]),
|
|
214
|
+
__metadata("design:returntype", Promise)
|
|
215
|
+
], SettlementSmartContract.prototype, "approveBase", null);
|
|
206
216
|
__decorate([
|
|
207
217
|
method,
|
|
208
218
|
__metadata("design:type", Function),
|
|
209
219
|
__metadata("design:paramtypes", [PublicKey, PublicKey]),
|
|
210
|
-
__metadata("design:returntype",
|
|
220
|
+
__metadata("design:returntype", Promise)
|
|
211
221
|
], SettlementSmartContract.prototype, "initialize", null);
|
|
212
222
|
__decorate([
|
|
213
223
|
method,
|
|
@@ -219,17 +229,18 @@ __decorate([
|
|
|
219
229
|
NetworkState,
|
|
220
230
|
NetworkState,
|
|
221
231
|
Field]),
|
|
222
|
-
__metadata("design:returntype",
|
|
232
|
+
__metadata("design:returntype", Promise)
|
|
223
233
|
], SettlementSmartContract.prototype, "settle", null);
|
|
224
234
|
__decorate([
|
|
225
235
|
method,
|
|
226
236
|
__metadata("design:type", Function),
|
|
227
237
|
__metadata("design:paramtypes", [OutgoingMessageArgumentBatch]),
|
|
228
|
-
__metadata("design:returntype",
|
|
238
|
+
__metadata("design:returntype", Promise)
|
|
229
239
|
], SettlementSmartContract.prototype, "rollupOutgoingMessages", null);
|
|
230
240
|
__decorate([
|
|
231
241
|
method,
|
|
232
242
|
__metadata("design:type", Function),
|
|
233
243
|
__metadata("design:paramtypes", [AccountUpdate]),
|
|
234
|
-
__metadata("design:returntype",
|
|
244
|
+
__metadata("design:returntype", Promise)
|
|
235
245
|
], SettlementSmartContract.prototype, "redeem", null);
|
|
246
|
+
/* eslint-enable @typescript-eslint/lines-between-class-members */
|
|
@@ -7,16 +7,37 @@ declare const Deposit_base: (new (value: {
|
|
|
7
7
|
amount: UInt64;
|
|
8
8
|
}) & {
|
|
9
9
|
_isStruct: true;
|
|
10
|
-
} & import("o1js/dist/node/
|
|
10
|
+
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
|
|
11
11
|
address: PublicKey;
|
|
12
12
|
amount: UInt64;
|
|
13
|
-
}
|
|
13
|
+
}, {
|
|
14
|
+
address: {
|
|
15
|
+
x: bigint;
|
|
16
|
+
isOdd: boolean;
|
|
17
|
+
};
|
|
18
|
+
amount: bigint;
|
|
19
|
+
}>, "fromFields"> & {
|
|
20
|
+
fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
|
|
21
|
+
address: PublicKey;
|
|
22
|
+
amount: UInt64;
|
|
23
|
+
};
|
|
24
|
+
} & {
|
|
25
|
+
fromValue: (value: {
|
|
26
|
+
address: PublicKey | {
|
|
27
|
+
x: bigint | import("o1js/dist/node/lib/provable/field").Field;
|
|
28
|
+
isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
|
|
29
|
+
};
|
|
30
|
+
amount: bigint | UInt64;
|
|
31
|
+
}) => {
|
|
32
|
+
address: PublicKey;
|
|
33
|
+
amount: UInt64;
|
|
34
|
+
};
|
|
14
35
|
toInput: (x: {
|
|
15
36
|
address: PublicKey;
|
|
16
37
|
amount: UInt64;
|
|
17
38
|
}) => {
|
|
18
|
-
fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
|
|
19
|
-
packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
|
|
39
|
+
fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
|
|
40
|
+
packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
|
|
20
41
|
};
|
|
21
42
|
toJSON: (x: {
|
|
22
43
|
address: PublicKey;
|
|
@@ -32,6 +53,10 @@ declare const Deposit_base: (new (value: {
|
|
|
32
53
|
address: PublicKey;
|
|
33
54
|
amount: UInt64;
|
|
34
55
|
};
|
|
56
|
+
empty: () => {
|
|
57
|
+
address: PublicKey;
|
|
58
|
+
amount: UInt64;
|
|
59
|
+
};
|
|
35
60
|
};
|
|
36
61
|
export declare class Deposit extends Deposit_base {
|
|
37
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Deposit.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Deposit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"Deposit.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Deposit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjD,qBAAa,OAAQ,SAAQ,YAG3B;CAAG"}
|
|
@@ -9,16 +9,49 @@ declare const OutgoingMessageArgument_base: (new (value: {
|
|
|
9
9
|
value: Withdrawal;
|
|
10
10
|
}) & {
|
|
11
11
|
_isStruct: true;
|
|
12
|
-
} & import("o1js/dist/node/
|
|
12
|
+
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
|
|
13
13
|
witness: RollupMerkleTreeWitness;
|
|
14
14
|
value: Withdrawal;
|
|
15
|
-
}
|
|
15
|
+
}, {
|
|
16
|
+
witness: {
|
|
17
|
+
path: bigint[];
|
|
18
|
+
isLeft: boolean[];
|
|
19
|
+
};
|
|
20
|
+
value: {
|
|
21
|
+
address: {
|
|
22
|
+
x: bigint;
|
|
23
|
+
isOdd: boolean;
|
|
24
|
+
};
|
|
25
|
+
amount: bigint;
|
|
26
|
+
};
|
|
27
|
+
}>, "fromFields"> & {
|
|
28
|
+
fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
|
|
29
|
+
witness: RollupMerkleTreeWitness;
|
|
30
|
+
value: Withdrawal;
|
|
31
|
+
};
|
|
32
|
+
} & {
|
|
33
|
+
fromValue: (value: {
|
|
34
|
+
witness: RollupMerkleTreeWitness | {
|
|
35
|
+
path: import("o1js/dist/node/lib/provable/field").Field[] | bigint[];
|
|
36
|
+
isLeft: import("o1js/dist/node/lib/provable/bool").Bool[] | boolean[];
|
|
37
|
+
};
|
|
38
|
+
value: Withdrawal | {
|
|
39
|
+
address: import("o1js/dist/node/lib/provable/crypto/signature").PublicKey | {
|
|
40
|
+
x: bigint | import("o1js/dist/node/lib/provable/field").Field;
|
|
41
|
+
isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
|
|
42
|
+
};
|
|
43
|
+
amount: bigint | import("o1js/dist/node/lib/provable/int").UInt64;
|
|
44
|
+
};
|
|
45
|
+
}) => {
|
|
46
|
+
witness: RollupMerkleTreeWitness;
|
|
47
|
+
value: Withdrawal;
|
|
48
|
+
};
|
|
16
49
|
toInput: (x: {
|
|
17
50
|
witness: RollupMerkleTreeWitness;
|
|
18
51
|
value: Withdrawal;
|
|
19
52
|
}) => {
|
|
20
|
-
fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
|
|
21
|
-
packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
|
|
53
|
+
fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
|
|
54
|
+
packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
|
|
22
55
|
};
|
|
23
56
|
toJSON: (x: {
|
|
24
57
|
witness: RollupMerkleTreeWitness;
|
|
@@ -46,32 +79,75 @@ declare const OutgoingMessageArgument_base: (new (value: {
|
|
|
46
79
|
witness: RollupMerkleTreeWitness;
|
|
47
80
|
value: Withdrawal;
|
|
48
81
|
};
|
|
82
|
+
empty: () => {
|
|
83
|
+
witness: RollupMerkleTreeWitness;
|
|
84
|
+
value: Withdrawal;
|
|
85
|
+
};
|
|
49
86
|
};
|
|
50
87
|
export declare class OutgoingMessageArgument extends OutgoingMessageArgument_base {
|
|
51
88
|
static dummy(): OutgoingMessageArgument;
|
|
52
89
|
}
|
|
53
90
|
declare const OutgoingMessageArgumentBatch_base: (new (value: {
|
|
54
91
|
arguments: OutgoingMessageArgument[];
|
|
55
|
-
isDummys: import("o1js/dist/node/lib/bool").Bool[];
|
|
92
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
56
93
|
}) => {
|
|
57
94
|
arguments: OutgoingMessageArgument[];
|
|
58
|
-
isDummys: import("o1js/dist/node/lib/bool").Bool[];
|
|
95
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
59
96
|
}) & {
|
|
60
97
|
_isStruct: true;
|
|
61
|
-
} & import("o1js/dist/node/
|
|
98
|
+
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
|
|
62
99
|
arguments: OutgoingMessageArgument[];
|
|
63
|
-
isDummys: import("o1js/dist/node/lib/bool").Bool[];
|
|
64
|
-
}
|
|
100
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
101
|
+
}, {
|
|
102
|
+
arguments: {
|
|
103
|
+
witness: {
|
|
104
|
+
path: bigint[];
|
|
105
|
+
isLeft: boolean[];
|
|
106
|
+
};
|
|
107
|
+
value: {
|
|
108
|
+
address: {
|
|
109
|
+
x: bigint;
|
|
110
|
+
isOdd: boolean;
|
|
111
|
+
};
|
|
112
|
+
amount: bigint;
|
|
113
|
+
};
|
|
114
|
+
}[];
|
|
115
|
+
isDummys: boolean[];
|
|
116
|
+
}>, "fromFields"> & {
|
|
117
|
+
fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
|
|
118
|
+
arguments: OutgoingMessageArgument[];
|
|
119
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
120
|
+
};
|
|
121
|
+
} & {
|
|
122
|
+
fromValue: (value: {
|
|
123
|
+
arguments: OutgoingMessageArgument[] | {
|
|
124
|
+
witness: {
|
|
125
|
+
path: bigint[];
|
|
126
|
+
isLeft: boolean[];
|
|
127
|
+
};
|
|
128
|
+
value: {
|
|
129
|
+
address: {
|
|
130
|
+
x: bigint;
|
|
131
|
+
isOdd: boolean;
|
|
132
|
+
};
|
|
133
|
+
amount: bigint;
|
|
134
|
+
};
|
|
135
|
+
}[];
|
|
136
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[] | boolean[];
|
|
137
|
+
}) => {
|
|
138
|
+
arguments: OutgoingMessageArgument[];
|
|
139
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
140
|
+
};
|
|
65
141
|
toInput: (x: {
|
|
66
142
|
arguments: OutgoingMessageArgument[];
|
|
67
|
-
isDummys: import("o1js/dist/node/lib/bool").Bool[];
|
|
143
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
68
144
|
}) => {
|
|
69
|
-
fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
|
|
70
|
-
packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
|
|
145
|
+
fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
|
|
146
|
+
packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
|
|
71
147
|
};
|
|
72
148
|
toJSON: (x: {
|
|
73
149
|
arguments: OutgoingMessageArgument[];
|
|
74
|
-
isDummys: import("o1js/dist/node/lib/bool").Bool[];
|
|
150
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
75
151
|
}) => {
|
|
76
152
|
arguments: {
|
|
77
153
|
witness: {
|
|
@@ -99,7 +175,11 @@ declare const OutgoingMessageArgumentBatch_base: (new (value: {
|
|
|
99
175
|
isDummys: boolean[];
|
|
100
176
|
}) => {
|
|
101
177
|
arguments: OutgoingMessageArgument[];
|
|
102
|
-
isDummys: import("o1js/dist/node/lib/bool").Bool[];
|
|
178
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
179
|
+
};
|
|
180
|
+
empty: () => {
|
|
181
|
+
arguments: OutgoingMessageArgument[];
|
|
182
|
+
isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
|
|
103
183
|
};
|
|
104
184
|
};
|
|
105
185
|
export declare class OutgoingMessageArgumentBatch extends OutgoingMessageArgumentBatch_base {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutgoingMessageArgument.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/OutgoingMessageArgument.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"OutgoingMessageArgument.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/OutgoingMessageArgument.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,2BAA2B,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,uBAAwB,SAAQ,4BAG3C;WACc,KAAK,IAAI,uBAAuB;CAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,4BAA6B,SAAQ,iCAOhD;WACc,YAAY,CAAC,iBAAiB,EAAE,uBAAuB,EAAE;CAcxE"}
|
|
@@ -7,16 +7,37 @@ declare const Withdrawal_base: (new (value: {
|
|
|
7
7
|
amount: UInt64;
|
|
8
8
|
}) & {
|
|
9
9
|
_isStruct: true;
|
|
10
|
-
} & import("o1js/dist/node/
|
|
10
|
+
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
|
|
11
11
|
address: PublicKey;
|
|
12
12
|
amount: UInt64;
|
|
13
|
-
}
|
|
13
|
+
}, {
|
|
14
|
+
address: {
|
|
15
|
+
x: bigint;
|
|
16
|
+
isOdd: boolean;
|
|
17
|
+
};
|
|
18
|
+
amount: bigint;
|
|
19
|
+
}>, "fromFields"> & {
|
|
20
|
+
fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
|
|
21
|
+
address: PublicKey;
|
|
22
|
+
amount: UInt64;
|
|
23
|
+
};
|
|
24
|
+
} & {
|
|
25
|
+
fromValue: (value: {
|
|
26
|
+
address: PublicKey | {
|
|
27
|
+
x: bigint | import("o1js/dist/node/lib/provable/field").Field;
|
|
28
|
+
isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
|
|
29
|
+
};
|
|
30
|
+
amount: bigint | UInt64;
|
|
31
|
+
}) => {
|
|
32
|
+
address: PublicKey;
|
|
33
|
+
amount: UInt64;
|
|
34
|
+
};
|
|
14
35
|
toInput: (x: {
|
|
15
36
|
address: PublicKey;
|
|
16
37
|
amount: UInt64;
|
|
17
38
|
}) => {
|
|
18
|
-
fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
|
|
19
|
-
packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
|
|
39
|
+
fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
|
|
40
|
+
packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
|
|
20
41
|
};
|
|
21
42
|
toJSON: (x: {
|
|
22
43
|
address: PublicKey;
|
|
@@ -32,6 +53,10 @@ declare const Withdrawal_base: (new (value: {
|
|
|
32
53
|
address: PublicKey;
|
|
33
54
|
amount: UInt64;
|
|
34
55
|
};
|
|
56
|
+
empty: () => {
|
|
57
|
+
address: PublicKey;
|
|
58
|
+
amount: UInt64;
|
|
59
|
+
};
|
|
35
60
|
};
|
|
36
61
|
export declare class Withdrawal extends Withdrawal_base {
|
|
37
62
|
static dummy(): Withdrawal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Withdrawal.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Withdrawal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"Withdrawal.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Withdrawal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGjD,qBAAa,UAAW,SAAQ,eAG9B;WACc,KAAK;CAMpB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Field, PublicKey, UInt32 } from "o1js";
|
|
2
|
-
import type { BlockProof } from "../../prover/block/BlockProver";
|
|
3
2
|
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
4
3
|
import { NetworkState } from "../../model/network/NetworkState";
|
|
4
|
+
import type { BlockProof } from "../../prover/block/BlockProver";
|
|
5
5
|
import type { SettlementSmartContract } from "../contracts/SettlementSmartContract";
|
|
6
6
|
export type SettlementStateRecord = {
|
|
7
7
|
sequencerKey: PublicKey;
|
|
@@ -19,6 +19,6 @@ export type SettlementHookInputs = {
|
|
|
19
19
|
currentL1Block: UInt32;
|
|
20
20
|
};
|
|
21
21
|
export declare abstract class ProvableSettlementHook<Config> extends ProtocolModule<Config> {
|
|
22
|
-
abstract beforeSettlement(smartContract: SettlementSmartContract, inputs: SettlementHookInputs): void
|
|
22
|
+
abstract beforeSettlement(smartContract: SettlementSmartContract, inputs: SettlementHookInputs): Promise<void>;
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=ProvableSettlementHook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProvableSettlementHook.d.ts","sourceRoot":"","sources":["../../../src/settlement/modularity/ProvableSettlementHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,
|
|
1
|
+
{"version":3,"file":"ProvableSettlementHook.d.ts","sourceRoot":"","sources":["../../../src/settlement/modularity/ProvableSettlementHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,SAAS,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,SAAS,EAAE,KAAK,CAAC;IACjB,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,cAAc,EAAE,YAAY,CAAC;IAC7B,uBAAuB,EAAE,KAAK,CAAC;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,8BAAsB,sBAAsB,CAC1C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;aACd,gBAAgB,CAC9B,aAAa,EAAE,uBAAuB,EACtC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;CACjB"}
|
|
@@ -5,7 +5,7 @@ type NetworkStateSettlementModuleConfig = {
|
|
|
5
5
|
blocksPerL1Block: UInt64;
|
|
6
6
|
};
|
|
7
7
|
export declare class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
|
|
8
|
-
beforeSettlement(smartContract: SettlementSmartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }: SettlementHookInputs): void
|
|
8
|
+
beforeSettlement(smartContract: SettlementSmartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }: SettlementHookInputs): Promise<void>;
|
|
9
9
|
}
|
|
10
10
|
export {};
|
|
11
11
|
//# sourceMappingURL=NetworkStateSettlementModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkStateSettlementModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/modules/NetworkStateSettlementModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,KAAK,kCAAkC,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;
|
|
1
|
+
{"version":3,"file":"NetworkStateSettlementModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/modules/NetworkStateSettlementModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,KAAK,kCAAkC,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAGF,qBAAa,4BAA6B,SAAQ,sBAAsB,CAAC,kCAAkC,CAAC;IAC7F,gBAAgB,CAC3B,aAAa,EAAE,uBAAuB,EACtC,EACE,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,GACf,EAAE,oBAAoB;CAiB1B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ProvableSettlementHook, } from "../modularity/ProvableSettlementHook";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
3
|
export class NetworkStateSettlementModule extends ProvableSettlementHook {
|
|
3
|
-
beforeSettlement(smartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }) {
|
|
4
|
+
async beforeSettlement(smartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }) {
|
|
4
5
|
const { lastSettlementL1Block } = contractState;
|
|
5
6
|
const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
|
|
6
7
|
const numL1Blocks = currentL1Block.sub(lastSettlementL1Block);
|
|
@@ -10,3 +11,4 @@ export class NetworkStateSettlementModule extends ProvableSettlementHook {
|
|
|
10
11
|
// TODO Check within bounds efficiently
|
|
11
12
|
}
|
|
12
13
|
}
|
|
14
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
package/dist/state/State.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare class WithStateServiceProvider {
|
|
|
14
14
|
stateServiceProvider: StateServiceProvider;
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
declare const State_base: import("ts-mixer/dist/types/types").Class<any[], WithPath & WithStateServiceProvider, typeof WithPath & typeof WithStateServiceProvider
|
|
17
|
+
declare const State_base: import("ts-mixer/dist/types/types").Class<any[], WithPath & WithStateServiceProvider, typeof WithPath & typeof WithStateServiceProvider>;
|
|
18
18
|
/**
|
|
19
19
|
* Utilities for runtime module state, such as get/set
|
|
20
20
|
*/
|
|
@@ -28,6 +28,7 @@ export declare class State<Value> extends State_base {
|
|
|
28
28
|
*/
|
|
29
29
|
static from<Value>(valueType: FlexibleProvablePure<Value>): State<Value>;
|
|
30
30
|
constructor(valueType: FlexibleProvablePure<Value>);
|
|
31
|
+
private stateType;
|
|
31
32
|
/**
|
|
32
33
|
* Returns the state that is currently the current state tree
|
|
33
34
|
* value: The value-fields, or if not state was found, dummy values
|
|
@@ -49,7 +50,7 @@ export declare class State<Value> extends State_base {
|
|
|
49
50
|
*
|
|
50
51
|
* @returns Option representation of the current state.
|
|
51
52
|
*/
|
|
52
|
-
get(): Option<Value
|
|
53
|
+
get(): Promise<Option<Value>>;
|
|
53
54
|
/**
|
|
54
55
|
* Sets a new state value by creating a state transition from
|
|
55
56
|
* the current value to the newly set value.
|
|
@@ -61,7 +62,7 @@ export declare class State<Value> extends State_base {
|
|
|
61
62
|
*
|
|
62
63
|
* @param value - Value to be set as the current state
|
|
63
64
|
*/
|
|
64
|
-
set(value: Value): void
|
|
65
|
+
set(value: Value): Promise<void>;
|
|
65
66
|
}
|
|
66
67
|
export {};
|
|
67
68
|
//# sourceMappingURL=State.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/state/State.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,EAAY,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/state/State.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,EAAY,KAAK,oBAAoB,EAAU,MAAM,MAAM,CAAC;AAIhF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,QAAQ;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,aAAa,IAAI,OAAO,CAAC,IAAI,IAAI;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE;CAOvD;AAED,qBAAa,wBAAwB;IAC5B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,qBAAqB,IAAI,OAAO,CAAC,IAAI,IAAI;QAC9C,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C;CAOF;;AAED;;GAEG;AACH,qBAAa,KAAK,CAAC,KAAK,CAAE,SAAQ,UAAyC;IAW/C,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAVhE;;;;;OAKG;WACW,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;gBAItC,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAIhE,OAAO,CAAC,SAAS,CAGX;IAEN;;;;;;OAMG;YACW,QAAQ;IAyCtB;;;;;OAKG;YACW,gBAAgB;IAW9B;;;;;OAKG;IACU,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAc1C;;;;;;;;;;OAUG;IACU,GAAG,CAAC,KAAK,EAAE,KAAK;CAiB9B"}
|
package/dist/state/State.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mixin } from "ts-mixer";
|
|
2
|
-
import { Bool, Provable } from "o1js";
|
|
2
|
+
import { Bool, Provable, Struct } from "o1js";
|
|
3
3
|
import { container } from "tsyringe";
|
|
4
4
|
import { dummyValue } from "@proto-kit/common";
|
|
5
5
|
import { Option } from "../model/Option";
|
|
@@ -35,6 +35,11 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
35
35
|
constructor(valueType) {
|
|
36
36
|
super();
|
|
37
37
|
this.valueType = valueType;
|
|
38
|
+
this.stateType = class StateType extends Struct({
|
|
39
|
+
value: this.valueType,
|
|
40
|
+
isSome: Bool,
|
|
41
|
+
}) {
|
|
42
|
+
};
|
|
38
43
|
}
|
|
39
44
|
/**
|
|
40
45
|
* Returns the state that is currently the current state tree
|
|
@@ -43,13 +48,14 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
43
48
|
* (Basically, whether the value-fields are dummy values or actual values
|
|
44
49
|
* @private
|
|
45
50
|
*/
|
|
46
|
-
getState() {
|
|
51
|
+
async getState() {
|
|
47
52
|
this.hasStateServiceOrFail();
|
|
48
53
|
this.hasPathOrFail();
|
|
49
54
|
const { path, stateServiceProvider, valueType } = this;
|
|
50
55
|
const { stateTransitions } = container
|
|
51
56
|
.resolve(RuntimeMethodExecutionContext)
|
|
52
57
|
.current().result;
|
|
58
|
+
// TODO Use Stateservice for this
|
|
53
59
|
// First try to find a match inside already created stateTransitions
|
|
54
60
|
let previousMutatingTransitions = [];
|
|
55
61
|
previousMutatingTransitions = stateTransitions.filter((transition) => transition.path.equals(path).and(transition.to.isSome).toBoolean());
|
|
@@ -62,7 +68,7 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
62
68
|
return { value, isSome: Bool(true) };
|
|
63
69
|
}
|
|
64
70
|
// If the value is still undefined, look it up in the stateService
|
|
65
|
-
const fields = stateServiceProvider.stateService.get(path);
|
|
71
|
+
const fields = await stateServiceProvider.stateService.get(path);
|
|
66
72
|
if (fields) {
|
|
67
73
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
68
74
|
value = valueType.fromFields(fields);
|
|
@@ -78,11 +84,10 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
78
84
|
*
|
|
79
85
|
* @returns Optional value of the current state
|
|
80
86
|
*/
|
|
81
|
-
witnessFromState() {
|
|
87
|
+
async witnessFromState() {
|
|
82
88
|
// get the value from storage, or return a dummy value instead
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const isSome = Provable.witness(Bool, () => this.getState().isSome);
|
|
89
|
+
// also check if the value exists in the storage or not
|
|
90
|
+
const { value, isSome } = await Provable.witnessAsync(this.stateType, async () => await this.getState());
|
|
86
91
|
return Option.from(isSome, value, this.valueType);
|
|
87
92
|
}
|
|
88
93
|
/**
|
|
@@ -91,8 +96,8 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
91
96
|
*
|
|
92
97
|
* @returns Option representation of the current state.
|
|
93
98
|
*/
|
|
94
|
-
get() {
|
|
95
|
-
const option = this.witnessFromState();
|
|
99
|
+
async get() {
|
|
100
|
+
const option = await this.witnessFromState();
|
|
96
101
|
this.hasPathOrFail();
|
|
97
102
|
const stateTransition = StateTransition.from(this.path, option);
|
|
98
103
|
container
|
|
@@ -111,9 +116,9 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
|
|
|
111
116
|
*
|
|
112
117
|
* @param value - Value to be set as the current state
|
|
113
118
|
*/
|
|
114
|
-
set(value) {
|
|
119
|
+
async set(value) {
|
|
115
120
|
// link the transition to the current state
|
|
116
|
-
const fromOption = this.witnessFromState();
|
|
121
|
+
const fromOption = await this.witnessFromState();
|
|
117
122
|
const toOption = Option.fromValue(value, this.valueType);
|
|
118
123
|
this.hasPathOrFail();
|
|
119
124
|
const stateTransition = StateTransition.fromTo(this.path, fromOption, toOption);
|