@proto-kit/protocol 0.1.1-develop.600 → 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/NoopSettlementHook.d.ts.map +1 -1
- package/dist/blockmodules/NoopSettlementHook.js +1 -1
- package/dist/hooks/AccountStateHook.d.ts.map +1 -1
- package/dist/hooks/AccountStateHook.js +10 -3
- 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 +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -6
- 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/protocol/Protocol.d.ts +11 -18
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +4 -27
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +1 -1
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +8 -6
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
- 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/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 +3 -3
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
- package/dist/settlement/modules/NetworkStateSettlementModule.js +1 -1
- 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 +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
- package/dist/state/context/RuntimeMethodExecutionContext.js +2 -1
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
- 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/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +3 -1
- package/src/{blockmodules → hooks}/NoopSettlementHook.ts +1 -2
- package/src/index.ts +18 -6
- package/src/model/Option.ts +16 -0
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +10 -2
- package/src/protocol/Protocol.ts +19 -44
- package/src/protocol/ProtocolModule.ts +3 -2
- package/src/prover/block/BlockProver.ts +20 -8
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +1 -1
- 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/{SettlementContract.ts → contracts/SettlementSmartContract.ts} +87 -202
- 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/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +7 -10
- package/src/settlement/modules/NetworkStateSettlementModule.ts +3 -3
- package/src/state/State.ts +2 -1
- package/src/state/assert/assert.ts +8 -6
- package/src/state/context/RuntimeMethodExecutionContext.ts +8 -5
- package/src/utils/MinaPrefixedProvableHashList.ts +2 -2
- 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 +2 -2
- 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 → hooks}/BlockHeightHook.ts +0 -0
- /package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +0 -0
- /package/src/{blockmodules → hooks}/NoopBlockHook.ts +0 -0
- /package/src/{blockmodules → hooks}/NoopTransactionHook.ts +0 -0
- /package/src/{blockmodules → hooks}/SequenceStateTransactionModule.ts +0 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AreProofsEnabled,
|
|
3
|
+
ChildContainerProvider,
|
|
4
|
+
ModuleContainer,
|
|
5
|
+
ModulesRecord, ResolvableModules, StringKeyOf,
|
|
6
|
+
TypedClass
|
|
7
|
+
} from "@proto-kit/common";
|
|
8
|
+
import { PublicKey, SmartContract } from "o1js";
|
|
9
|
+
import { injectable } from "tsyringe";
|
|
10
|
+
|
|
11
|
+
import { ProtocolEnvironment } from "../protocol/ProtocolEnvironment";
|
|
12
|
+
import { ProtocolModule } from "../protocol/ProtocolModule";
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
ContractModule,
|
|
16
|
+
SmartContractClassFromInterface,
|
|
17
|
+
} from "./ContractModule";
|
|
18
|
+
import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
|
|
19
|
+
import { DispatchContractType } from "./contracts/DispatchSmartContract";
|
|
20
|
+
import {
|
|
21
|
+
SettlementContractConfig,
|
|
22
|
+
SettlementContractProtocolModule,
|
|
23
|
+
} from "./contracts/SettlementContractProtocolModule";
|
|
24
|
+
import { SettlementContractType } from "./contracts/SettlementSmartContract";
|
|
25
|
+
|
|
26
|
+
export type SettlementModulesRecord = ModulesRecord<
|
|
27
|
+
TypedClass<ContractModule<unknown, unknown, unknown>>
|
|
28
|
+
>;
|
|
29
|
+
|
|
30
|
+
export type MandatorySettlementModulesRecord = {
|
|
31
|
+
SettlementContract: TypedClass<
|
|
32
|
+
ContractModule<
|
|
33
|
+
SettlementContractType,
|
|
34
|
+
SmartContractClassFromInterface<DispatchContractType>,
|
|
35
|
+
SettlementContractConfig
|
|
36
|
+
>
|
|
37
|
+
>;
|
|
38
|
+
DispatchContract: TypedClass<
|
|
39
|
+
ContractModule<DispatchContractType, unknown, unknown>
|
|
40
|
+
>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
@injectable()
|
|
44
|
+
export class SettlementContractModule<
|
|
45
|
+
SettlementModules extends SettlementModulesRecord &
|
|
46
|
+
MandatorySettlementModulesRecord
|
|
47
|
+
>
|
|
48
|
+
extends ModuleContainer<SettlementModules>
|
|
49
|
+
implements ProtocolModule<unknown>
|
|
50
|
+
{
|
|
51
|
+
public constructor(definition: { modules: SettlementModules }) {
|
|
52
|
+
super(definition);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public static from<
|
|
56
|
+
SettlementModules extends SettlementModulesRecord &
|
|
57
|
+
MandatorySettlementModulesRecord
|
|
58
|
+
>(
|
|
59
|
+
modules: SettlementModules
|
|
60
|
+
): TypedClass<SettlementContractModule<SettlementModules>> {
|
|
61
|
+
return class ScopedSettlementContractModule extends SettlementContractModule<SettlementModules> {
|
|
62
|
+
public constructor() {
|
|
63
|
+
super({ modules });
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public static fromDefaults() {
|
|
69
|
+
return SettlementContractModule.from({
|
|
70
|
+
SettlementContract: SettlementContractProtocolModule,
|
|
71
|
+
DispatchContract: DispatchContractProtocolModule,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ** For protocol module
|
|
76
|
+
public protocol?: ProtocolEnvironment;
|
|
77
|
+
|
|
78
|
+
public get appChain(): AreProofsEnabled | undefined {
|
|
79
|
+
return this.protocol?.getAreProofsEnabled();
|
|
80
|
+
}
|
|
81
|
+
// **
|
|
82
|
+
|
|
83
|
+
public create(childContainerProvider: ChildContainerProvider) {
|
|
84
|
+
super.create(childContainerProvider);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// private assertIsKeyofModules
|
|
88
|
+
|
|
89
|
+
public getContractClasses(): {
|
|
90
|
+
settlement: SmartContractClassFromInterface<SettlementContractType>;
|
|
91
|
+
dispatch: SmartContractClassFromInterface<DispatchContractType>;
|
|
92
|
+
} {
|
|
93
|
+
const settlementContractKey = "SettlementContract"
|
|
94
|
+
const dispatchContractKey = "DispatchContract"
|
|
95
|
+
this.assertIsValidModuleName(settlementContractKey)
|
|
96
|
+
this.assertIsValidModuleName(dispatchContractKey)
|
|
97
|
+
|
|
98
|
+
const settlementModule = this.resolve(settlementContractKey);
|
|
99
|
+
const dispatchModule = this.resolve(dispatchContractKey);
|
|
100
|
+
|
|
101
|
+
const dispatch = dispatchModule.contractFactory(undefined);
|
|
102
|
+
const settlement = settlementModule.contractFactory(dispatch);
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
settlement,
|
|
106
|
+
dispatch,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public createContracts(addresses: {
|
|
111
|
+
settlement: PublicKey;
|
|
112
|
+
dispatch: PublicKey;
|
|
113
|
+
}): {
|
|
114
|
+
settlement: SettlementContractType & SmartContract;
|
|
115
|
+
dispatch: DispatchContractType & SmartContract;
|
|
116
|
+
} {
|
|
117
|
+
const { dispatch, settlement } = this.getContractClasses();
|
|
118
|
+
|
|
119
|
+
const dispatchInstance = new dispatch(addresses.dispatch);
|
|
120
|
+
const settlementInstance = new settlement(addresses.settlement);
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
dispatch: dispatchInstance,
|
|
124
|
+
settlement: settlementInstance,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { inject, injectable } from "tsyringe";
|
|
2
|
+
|
|
3
|
+
import { RuntimeLike } from "../../model/RuntimeLike";
|
|
4
|
+
import {
|
|
5
|
+
ContractModule,
|
|
6
|
+
SmartContractClassFromInterface,
|
|
7
|
+
} from "../ContractModule";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
DispatchSmartContract,
|
|
11
|
+
DispatchContractType,
|
|
12
|
+
} from "./DispatchSmartContract";
|
|
13
|
+
|
|
14
|
+
export type DispatchContractConfig = {
|
|
15
|
+
incomingMessagesMethods: Record<string, `${string}.${string}`>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
@injectable()
|
|
19
|
+
export class DispatchContractProtocolModule extends ContractModule<
|
|
20
|
+
DispatchContractType,
|
|
21
|
+
undefined,
|
|
22
|
+
DispatchContractConfig
|
|
23
|
+
> {
|
|
24
|
+
public constructor(@inject("Runtime") private readonly runtime: RuntimeLike) {
|
|
25
|
+
super();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public contractFactory(): SmartContractClassFromInterface<DispatchContractType> {
|
|
29
|
+
const { incomingMessagesMethods } = this.config;
|
|
30
|
+
const methodIdMappings = this.runtime.methodIdResolver.methodIdMap();
|
|
31
|
+
|
|
32
|
+
DispatchSmartContract.args = {
|
|
33
|
+
incomingMessagesPaths: incomingMessagesMethods,
|
|
34
|
+
methodIdMappings,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return DispatchSmartContract;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AccountUpdate,
|
|
3
|
+
Field,
|
|
4
|
+
method,
|
|
5
|
+
Poseidon,
|
|
6
|
+
ProvableExtended,
|
|
7
|
+
PublicKey,
|
|
8
|
+
Reducer,
|
|
9
|
+
SmartContract,
|
|
10
|
+
State,
|
|
11
|
+
state,
|
|
12
|
+
UInt64,
|
|
13
|
+
} from "o1js";
|
|
14
|
+
|
|
15
|
+
import { RuntimeMethodIdMapping } from "../../model/RuntimeLike";
|
|
16
|
+
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
17
|
+
import {
|
|
18
|
+
MinaActions,
|
|
19
|
+
MinaEvents,
|
|
20
|
+
} from "../../utils/MinaPrefixedProvableHashList";
|
|
21
|
+
import { Deposit } from "../messages/Deposit";
|
|
22
|
+
|
|
23
|
+
export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
|
|
24
|
+
|
|
25
|
+
export interface DispatchContractType {
|
|
26
|
+
updateMessagesHash: (
|
|
27
|
+
executedMessagesHash: Field,
|
|
28
|
+
newPromisedMessagesHash: Field
|
|
29
|
+
) => void;
|
|
30
|
+
initialize: (settlementContract: PublicKey) => void;
|
|
31
|
+
|
|
32
|
+
promisedMessagesHash: State<Field>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class DispatchSmartContract
|
|
36
|
+
extends SmartContract
|
|
37
|
+
implements DispatchContractType
|
|
38
|
+
{
|
|
39
|
+
public static args: {
|
|
40
|
+
methodIdMappings: RuntimeMethodIdMapping;
|
|
41
|
+
incomingMessagesPaths: Record<string, `${string}.${string}`>;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
@state(Field) public promisedMessagesHash = State<Field>();
|
|
45
|
+
|
|
46
|
+
@state(Field) public honoredMessagesHash = State<Field>();
|
|
47
|
+
|
|
48
|
+
@state(PublicKey) public settlementContract = State<PublicKey>();
|
|
49
|
+
|
|
50
|
+
@method
|
|
51
|
+
public updateMessagesHash(
|
|
52
|
+
executedMessagesHash: Field,
|
|
53
|
+
newPromisedMessagesHash: Field
|
|
54
|
+
) {
|
|
55
|
+
const promisedMessagesHash = this.promisedMessagesHash.getAndAssertEquals();
|
|
56
|
+
this.honoredMessagesHash.getAndAssertEquals();
|
|
57
|
+
|
|
58
|
+
executedMessagesHash.assertEquals(promisedMessagesHash);
|
|
59
|
+
|
|
60
|
+
this.honoredMessagesHash.set(executedMessagesHash);
|
|
61
|
+
|
|
62
|
+
// Assert and apply new promisedMessagesHash
|
|
63
|
+
this.self.account.actionState.assertEquals(newPromisedMessagesHash);
|
|
64
|
+
this.promisedMessagesHash.set(newPromisedMessagesHash);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@method
|
|
68
|
+
public initialize(settlementContract: PublicKey) {
|
|
69
|
+
this.promisedMessagesHash.getAndAssertEquals().assertEquals(Field(0));
|
|
70
|
+
this.honoredMessagesHash.getAndAssertEquals().assertEquals(Field(0));
|
|
71
|
+
this.settlementContract
|
|
72
|
+
.getAndAssertEquals()
|
|
73
|
+
.assertEquals(PublicKey.empty());
|
|
74
|
+
|
|
75
|
+
this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
|
|
76
|
+
this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
|
|
77
|
+
this.settlementContract.set(settlementContract);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private dispatchMessage<Type>(
|
|
81
|
+
methodId: Field,
|
|
82
|
+
value: Type,
|
|
83
|
+
valueType: ProvableExtended<Type>
|
|
84
|
+
) {
|
|
85
|
+
const args = valueType.toFields(value);
|
|
86
|
+
// Should be the same as RuntimeTransaction.hash
|
|
87
|
+
const argsHash = Poseidon.hash(args);
|
|
88
|
+
const runtimeTransaction = RuntimeTransaction.fromMessage({
|
|
89
|
+
methodId,
|
|
90
|
+
argsHash,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Append tx to incomingMessagesHash
|
|
94
|
+
const actionData = runtimeTransaction.hashData();
|
|
95
|
+
const actionHash = MinaActions.actionHash(actionData);
|
|
96
|
+
|
|
97
|
+
this.self.body.actions = {
|
|
98
|
+
hash: actionHash,
|
|
99
|
+
data: [actionData],
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const eventHash = MinaEvents.eventHash(args);
|
|
103
|
+
this.self.body.events = {
|
|
104
|
+
hash: eventHash,
|
|
105
|
+
data: [args],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@method
|
|
110
|
+
public deposit(amount: UInt64) {
|
|
111
|
+
// Save this, since otherwise it would be a second witness later,
|
|
112
|
+
// which could be a different values than the first
|
|
113
|
+
const { sender } = this;
|
|
114
|
+
|
|
115
|
+
const settlementContract = this.settlementContract.getAndAssertEquals();
|
|
116
|
+
|
|
117
|
+
// Credit the amount to the settlement contract
|
|
118
|
+
const balanceAU = AccountUpdate.create(settlementContract);
|
|
119
|
+
balanceAU.balance.addInPlace(amount);
|
|
120
|
+
this.self.approve(balanceAU);
|
|
121
|
+
|
|
122
|
+
const action = new Deposit({
|
|
123
|
+
address: sender,
|
|
124
|
+
amount,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const { methodIdMappings, incomingMessagesPaths } =
|
|
128
|
+
DispatchSmartContract.args;
|
|
129
|
+
|
|
130
|
+
const methodId = Field(
|
|
131
|
+
methodIdMappings[incomingMessagesPaths.deposit].methodId
|
|
132
|
+
).toConstant();
|
|
133
|
+
this.dispatchMessage(methodId.toConstant(), action, Deposit);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { SmartContract } from "o1js";
|
|
3
|
+
import { inject, injectable, injectAll } from "tsyringe";
|
|
4
|
+
|
|
5
|
+
import { BlockProvable } from "../../prover/block/BlockProvable";
|
|
6
|
+
import {
|
|
7
|
+
ContractModule,
|
|
8
|
+
SmartContractClassFromInterface,
|
|
9
|
+
} from "../ContractModule";
|
|
10
|
+
import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
|
|
11
|
+
|
|
12
|
+
import { DispatchContractType } from "./DispatchSmartContract";
|
|
13
|
+
import {
|
|
14
|
+
LazyBlockProof,
|
|
15
|
+
SettlementContractType,
|
|
16
|
+
SettlementSmartContract,
|
|
17
|
+
} from "./SettlementSmartContract";
|
|
18
|
+
|
|
19
|
+
export type SettlementContractConfig = {
|
|
20
|
+
escapeHatchSlotsInterval?: number;
|
|
21
|
+
withdrawalStatePath: `${string}.${string}`;
|
|
22
|
+
withdrawalMethodPath: `${string}.${string}`;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// 24 hours
|
|
26
|
+
const DEFAULT_ESCAPE_HATCH = (60 / 3) * 24;
|
|
27
|
+
|
|
28
|
+
@injectable()
|
|
29
|
+
export class SettlementContractProtocolModule extends ContractModule<
|
|
30
|
+
SettlementContractType,
|
|
31
|
+
TypedClass<DispatchContractType & SmartContract>,
|
|
32
|
+
SettlementContractConfig
|
|
33
|
+
> {
|
|
34
|
+
public constructor(
|
|
35
|
+
@injectAll("ProvableSettlementHook")
|
|
36
|
+
private readonly hooks: ProvableSettlementHook<unknown>[],
|
|
37
|
+
@inject("BlockProver")
|
|
38
|
+
private readonly blockProver: BlockProvable
|
|
39
|
+
) {
|
|
40
|
+
LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram.Proof.tag;
|
|
41
|
+
super();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public contractFactory(
|
|
45
|
+
dispatchContract: TypedClass<DispatchContractType & SmartContract>
|
|
46
|
+
): SmartContractClassFromInterface<SettlementContractType> {
|
|
47
|
+
const { hooks, config } = this;
|
|
48
|
+
|
|
49
|
+
const withdrawalStatePathSplit = this.config.withdrawalStatePath.split(
|
|
50
|
+
"."
|
|
51
|
+
) as [string, string];
|
|
52
|
+
|
|
53
|
+
const escapeHatchSlotsInterval =
|
|
54
|
+
this.config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
|
|
55
|
+
|
|
56
|
+
SettlementSmartContract.args = {
|
|
57
|
+
DispatchContract: dispatchContract,
|
|
58
|
+
hooks,
|
|
59
|
+
withdrawalStatePath: withdrawalStatePathSplit,
|
|
60
|
+
escapeHatchSlotsInterval,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
return SettlementSmartContract;
|
|
64
|
+
}
|
|
65
|
+
}
|