@proto-kit/protocol 0.1.1-develop.1086
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +201 -0
- package/README.md +45 -0
- package/dist/Constants.d.ts +4 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +3 -0
- package/dist/hooks/AccountStateHook.d.ts +52 -0
- package/dist/hooks/AccountStateHook.d.ts.map +1 -0
- package/dist/hooks/AccountStateHook.js +47 -0
- package/dist/hooks/BlockHeightHook.d.ts +7 -0
- package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
- package/dist/hooks/BlockHeightHook.js +15 -0
- package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
- package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
- package/dist/hooks/LastStateRootBlockHook.js +15 -0
- package/dist/hooks/NoopBlockHook.d.ts +9 -0
- package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
- package/dist/hooks/NoopBlockHook.js +9 -0
- package/dist/hooks/NoopSettlementHook.d.ts +6 -0
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
- package/dist/hooks/NoopSettlementHook.js +17 -0
- package/dist/hooks/NoopTransactionHook.d.ts +6 -0
- package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
- package/dist/hooks/NoopTransactionHook.js +7 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/model/MethodPublicOutput.d.ts +113 -0
- package/dist/model/MethodPublicOutput.d.ts.map +1 -0
- package/dist/model/MethodPublicOutput.js +14 -0
- package/dist/model/Option.d.ts +122 -0
- package/dist/model/Option.d.ts.map +1 -0
- package/dist/model/Option.js +110 -0
- package/dist/model/Path.d.ts +31 -0
- package/dist/model/Path.d.ts.map +1 -0
- package/dist/model/Path.js +42 -0
- package/dist/model/RuntimeLike.d.ts +11 -0
- package/dist/model/RuntimeLike.d.ts.map +1 -0
- package/dist/model/RuntimeLike.js +1 -0
- package/dist/model/StateTransition.d.ts +135 -0
- package/dist/model/StateTransition.d.ts.map +1 -0
- package/dist/model/StateTransition.js +68 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +172 -0
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
- package/dist/model/StateTransitionProvableBatch.js +85 -0
- package/dist/model/network/NetworkState.d.ts +160 -0
- package/dist/model/network/NetworkState.d.ts.map +1 -0
- package/dist/model/network/NetworkState.js +31 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts +122 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.js +86 -0
- package/dist/model/transaction/SignedTransaction.d.ts +107 -0
- package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
- package/dist/model/transaction/SignedTransaction.js +33 -0
- package/dist/model/transaction/ValueOption.d.ts +173 -0
- package/dist/model/transaction/ValueOption.d.ts.map +1 -0
- package/dist/model/transaction/ValueOption.js +24 -0
- package/dist/protocol/Protocol.d.ts +43 -0
- package/dist/protocol/Protocol.d.ts.map +1 -0
- package/dist/protocol/Protocol.js +95 -0
- package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
- package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
- package/dist/protocol/ProtocolEnvironment.js +1 -0
- package/dist/protocol/ProtocolModule.d.ts +9 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -0
- package/dist/protocol/ProtocolModule.js +12 -0
- package/dist/protocol/ProvableBlockHook.d.ts +8 -0
- package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
- package/dist/protocol/ProvableBlockHook.js +4 -0
- package/dist/protocol/ProvableTransactionHook.d.ts +7 -0
- package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
- package/dist/protocol/ProvableTransactionHook.js +3 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
- package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.js +8 -0
- package/dist/prover/block/BlockProvable.d.ts +395 -0
- package/dist/prover/block/BlockProvable.d.ts.map +1 -0
- package/dist/prover/block/BlockProvable.js +45 -0
- package/dist/prover/block/BlockProver.d.ts +92 -0
- package/dist/prover/block/BlockProver.d.ts.map +1 -0
- package/dist/prover/block/BlockProver.js +472 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +64 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +16 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +20 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +22 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +174 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.js +15 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +51 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.js +188 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +16 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +16 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +7 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +19 -0
- package/dist/settlement/ContractModule.d.ts +15 -0
- package/dist/settlement/ContractModule.d.ts.map +1 -0
- package/dist/settlement/ContractModule.js +11 -0
- package/dist/settlement/SettlementContractModule.d.ts +40 -0
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
- package/dist/settlement/SettlementContractModule.js +71 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +35 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.js +241 -0
- package/dist/settlement/messages/Deposit.d.ts +64 -0
- package/dist/settlement/messages/Deposit.d.ts.map +1 -0
- package/dist/settlement/messages/Deposit.js +6 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
- package/dist/settlement/messages/Withdrawal.d.ts +65 -0
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
- package/dist/settlement/messages/Withdrawal.js +13 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.js +14 -0
- package/dist/state/State.d.ts +68 -0
- package/dist/state/State.d.ts.map +1 -0
- package/dist/state/State.js +129 -0
- package/dist/state/StateMap.d.ts +37 -0
- package/dist/state/StateMap.d.ts.map +1 -0
- package/dist/state/StateMap.js +55 -0
- package/dist/state/StateService.d.ts +6 -0
- package/dist/state/StateService.d.ts.map +1 -0
- package/dist/state/StateService.js +1 -0
- package/dist/state/StateServiceProvider.d.ts +8 -0
- package/dist/state/StateServiceProvider.d.ts.map +1 -0
- package/dist/state/StateServiceProvider.js +36 -0
- package/dist/state/assert/assert.d.ts +12 -0
- package/dist/state/assert/assert.d.ts.map +1 -0
- package/dist/state/assert/assert.js +30 -0
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts +22 -0
- package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/ProtocolMethodExecutionContext.js +28 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
- package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js +135 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
- package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.js +5 -0
- package/dist/state/protocol/ProtocolState.d.ts +7 -0
- package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
- package/dist/state/protocol/ProtocolState.js +39 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
- package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js +52 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedProvableHashList.js +12 -0
- package/dist/utils/ProvableHashList.d.ts +27 -0
- package/dist/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/utils/ProvableHashList.js +43 -0
- package/dist/utils/ProvableReductionHashList.d.ts +14 -0
- package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
- package/dist/utils/ProvableReductionHashList.js +50 -0
- package/dist/utils/StateTransitionReductionList.d.ts +11 -0
- package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
- package/dist/utils/StateTransitionReductionList.js +60 -0
- package/dist/utils/utils.d.ts +11 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +44 -0
- package/jest.config.cjs +1 -0
- package/package.json +36 -0
- package/src/Constants.ts +3 -0
- package/src/hooks/AccountStateHook.ts +48 -0
- package/src/hooks/BlockHeightHook.ts +17 -0
- package/src/hooks/LastStateRootBlockHook.ts +26 -0
- package/src/hooks/NoopBlockHook.ts +21 -0
- package/src/hooks/NoopSettlementHook.ts +20 -0
- package/src/hooks/NoopTransactionHook.ts +10 -0
- package/src/index.ts +53 -0
- package/src/model/MethodPublicOutput.ts +14 -0
- package/src/model/Option.ts +172 -0
- package/src/model/Path.ts +50 -0
- package/src/model/RuntimeLike.ts +12 -0
- package/src/model/StateTransition.ts +88 -0
- package/src/model/StateTransitionProvableBatch.ts +125 -0
- package/src/model/Transaction.ts +31 -0
- package/src/model/network/NetworkState.ts +33 -0
- package/src/model/transaction/RuntimeTransaction.ts +105 -0
- package/src/model/transaction/SignedTransaction.ts +47 -0
- package/src/model/transaction/ValueOption.ts +28 -0
- package/src/protocol/Protocol.ts +197 -0
- package/src/protocol/ProtocolEnvironment.ts +10 -0
- package/src/protocol/ProtocolModule.ts +27 -0
- package/src/protocol/ProvableBlockHook.ts +19 -0
- package/src/protocol/ProvableTransactionHook.ts +13 -0
- package/src/protocol/TransitioningProtocolModule.ts +12 -0
- package/src/prover/block/BlockProvable.ts +99 -0
- package/src/prover/block/BlockProver.ts +954 -0
- package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -0
- package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
- package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
- package/src/prover/statetransition/StateTransitionProvable.ts +44 -0
- package/src/prover/statetransition/StateTransitionProver.ts +371 -0
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +23 -0
- package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +17 -0
- package/src/settlement/ContractModule.ts +24 -0
- package/src/settlement/SettlementContractModule.ts +132 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
- package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
- package/src/settlement/contracts/SettlementSmartContract.ts +344 -0
- package/src/settlement/messages/Deposit.ts +6 -0
- package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
- package/src/settlement/messages/Withdrawal.ts +14 -0
- package/src/settlement/modularity/ProvableSettlementHook.ts +33 -0
- package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
- package/src/state/State.ts +175 -0
- package/src/state/StateMap.ts +73 -0
- package/src/state/StateService.ts +6 -0
- package/src/state/StateServiceProvider.ts +37 -0
- package/src/state/assert/assert.ts +35 -0
- package/src/state/context/RuntimeMethodExecutionContext.ts +174 -0
- package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
- package/src/state/protocol/ProtocolState.ts +61 -0
- package/src/utils/MinaPrefixedProvableHashList.ts +73 -0
- package/src/utils/PrefixedProvableHashList.ts +21 -0
- package/src/utils/ProvableHashList.ts +50 -0
- package/src/utils/ProvableReductionHashList.ts +68 -0
- package/src/utils/StateTransitionReductionList.ts +89 -0
- package/src/utils/utils.ts +75 -0
- package/test/BlockProver.test.ts +211 -0
- package/test/Protocol.test.ts +37 -0
- package/test/State.test.ts +45 -0
- package/test/StateTransition.test.ts +174 -0
- package/test/TestingProtocol.ts +47 -0
- package/test/model/Option.test.ts +72 -0
- package/test/state/assert/assert.test.ts +56 -0
- package/test/tsconfig.json +7 -0
- package/test/utils/ProvableReductionHashList.test.ts +117 -0
- package/test/utils.test.ts +27 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Field } from "o1js";
|
|
2
|
+
import { RollupMerkleTreeWitness } from "@proto-kit/common";
|
|
3
|
+
/**
|
|
4
|
+
* Interface for providing merkle witnesses to the state-transition prover
|
|
5
|
+
*/
|
|
6
|
+
export interface StateTransitionWitnessProvider {
|
|
7
|
+
/**
|
|
8
|
+
* Provides the merkle witness corresponding to the given key
|
|
9
|
+
* @param key Merkle-tree key
|
|
10
|
+
*/
|
|
11
|
+
getWitness: (key: Field) => RollupMerkleTreeWitness;
|
|
12
|
+
}
|
|
13
|
+
export declare class NoOpStateTransitionWitnessProvider implements StateTransitionWitnessProvider {
|
|
14
|
+
getWitness(): RollupMerkleTreeWitness;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=StateTransitionWitnessProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionWitnessProvider.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionWitnessProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,uBAAuB,CAAC;CACrD;AAED,qBACa,kCACX,YAAW,8BAA8B;IAElC,UAAU,IAAI,uBAAuB;CAG7C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable } from "tsyringe";
|
|
8
|
+
import { RollupMerkleTreeWitness } from "@proto-kit/common";
|
|
9
|
+
export let NoOpStateTransitionWitnessProvider = class NoOpStateTransitionWitnessProvider {
|
|
10
|
+
getWitness() {
|
|
11
|
+
return new RollupMerkleTreeWitness({ path: [], isLeft: [] });
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
NoOpStateTransitionWitnessProvider = __decorate([
|
|
15
|
+
injectable()
|
|
16
|
+
], NoOpStateTransitionWitnessProvider);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
|
|
2
|
+
export declare class StateTransitionWitnessProviderReference {
|
|
3
|
+
private witnessProvider?;
|
|
4
|
+
setWitnessProvider(provider: StateTransitionWitnessProvider): void;
|
|
5
|
+
getWitnessProvider(): StateTransitionWitnessProvider | undefined;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=StateTransitionWitnessProviderReference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionWitnessProviderReference.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionWitnessProviderReference.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,qBAEa,uCAAuC;IAClD,OAAO,CAAC,eAAe,CAAC,CAAiC;IAElD,kBAAkB,CAAC,QAAQ,EAAE,8BAA8B;IAI3D,kBAAkB,IAAI,8BAA8B,GAAG,SAAS;CAGxE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
8
|
+
export let StateTransitionWitnessProviderReference = class StateTransitionWitnessProviderReference {
|
|
9
|
+
setWitnessProvider(provider) {
|
|
10
|
+
this.witnessProvider = provider;
|
|
11
|
+
}
|
|
12
|
+
getWitnessProvider() {
|
|
13
|
+
return this.witnessProvider;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
StateTransitionWitnessProviderReference = __decorate([
|
|
17
|
+
injectable(),
|
|
18
|
+
scoped(Lifecycle.ContainerScoped)
|
|
19
|
+
], StateTransitionWitnessProviderReference);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ConfigurableModule, NoConfig, TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { SmartContract } from "o1js";
|
|
3
|
+
export type SmartContractClassFromInterface<Type> = typeof SmartContract & TypedClass<Type>;
|
|
4
|
+
/**
|
|
5
|
+
* This module type is used to define a contract module that can be used to
|
|
6
|
+
* construct and inject smart contract instances.
|
|
7
|
+
* It defines a method contractFactory, whose arguments can be configured via
|
|
8
|
+
* the Argument generic. It returns a smart contract class that is a subclass
|
|
9
|
+
* of SmartContract and implements a certain interface as specified by the
|
|
10
|
+
* ContractType generic.
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class ContractModule<ContractType, Arguments = undefined, Config = NoConfig> extends ConfigurableModule<Config> {
|
|
13
|
+
abstract contractFactory(args: Arguments): SmartContractClassFromInterface<ContractType>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ContractModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContractModule.d.ts","sourceRoot":"","sources":["../../src/settlement/ContractModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,MAAM,+BAA+B,CAAC,IAAI,IAAI,OAAO,aAAa,GACtE,UAAU,CAAC,IAAI,CAAC,CAAC;AAEnB;;;;;;;GAOG;AACH,8BAAsB,cAAc,CAClC,YAAY,EAEZ,SAAS,GAAG,SAAS,EACrB,MAAM,GAAG,QAAQ,CACjB,SAAQ,kBAAkB,CAAC,MAAM,CAAC;aAClB,eAAe,CAC7B,IAAI,EAAE,SAAS,GACd,+BAA+B,CAAC,YAAY,CAAC;CACjD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConfigurableModule } from "@proto-kit/common";
|
|
2
|
+
/**
|
|
3
|
+
* This module type is used to define a contract module that can be used to
|
|
4
|
+
* construct and inject smart contract instances.
|
|
5
|
+
* It defines a method contractFactory, whose arguments can be configured via
|
|
6
|
+
* the Argument generic. It returns a smart contract class that is a subclass
|
|
7
|
+
* of SmartContract and implements a certain interface as specified by the
|
|
8
|
+
* ContractType generic.
|
|
9
|
+
*/
|
|
10
|
+
export class ContractModule extends ConfigurableModule {
|
|
11
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AreProofsEnabled, ChildContainerProvider, ModuleContainer, ModulesRecord, TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { PublicKey, SmartContract } from "o1js";
|
|
3
|
+
import { ProtocolEnvironment } from "../protocol/ProtocolEnvironment";
|
|
4
|
+
import { ProtocolModule } from "../protocol/ProtocolModule";
|
|
5
|
+
import { ContractModule, SmartContractClassFromInterface } from "./ContractModule";
|
|
6
|
+
import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
|
|
7
|
+
import { DispatchContractType } from "./contracts/DispatchSmartContract";
|
|
8
|
+
import { SettlementContractConfig, SettlementContractProtocolModule } from "./contracts/SettlementContractProtocolModule";
|
|
9
|
+
import { SettlementContractType } from "./contracts/SettlementSmartContract";
|
|
10
|
+
export type SettlementModulesRecord = ModulesRecord<TypedClass<ContractModule<unknown, unknown, unknown>>>;
|
|
11
|
+
export type MandatorySettlementModulesRecord = {
|
|
12
|
+
SettlementContract: TypedClass<ContractModule<SettlementContractType, SmartContractClassFromInterface<DispatchContractType>, SettlementContractConfig>>;
|
|
13
|
+
DispatchContract: TypedClass<ContractModule<DispatchContractType, unknown, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
export declare class SettlementContractModule<SettlementModules extends SettlementModulesRecord & MandatorySettlementModulesRecord> extends ModuleContainer<SettlementModules> implements ProtocolModule<unknown> {
|
|
16
|
+
constructor(definition: {
|
|
17
|
+
modules: SettlementModules;
|
|
18
|
+
});
|
|
19
|
+
static from<SettlementModules extends SettlementModulesRecord & MandatorySettlementModulesRecord>(modules: SettlementModules): TypedClass<SettlementContractModule<SettlementModules>>;
|
|
20
|
+
static fromDefaults(): TypedClass<SettlementContractModule<{
|
|
21
|
+
SettlementContract: typeof SettlementContractProtocolModule;
|
|
22
|
+
DispatchContract: typeof DispatchContractProtocolModule;
|
|
23
|
+
}>>;
|
|
24
|
+
protocol?: ProtocolEnvironment;
|
|
25
|
+
get appChain(): AreProofsEnabled | undefined;
|
|
26
|
+
create(childContainerProvider: ChildContainerProvider): void;
|
|
27
|
+
start(): Promise<void>;
|
|
28
|
+
getContractClasses(): {
|
|
29
|
+
settlement: SmartContractClassFromInterface<SettlementContractType>;
|
|
30
|
+
dispatch: SmartContractClassFromInterface<DispatchContractType>;
|
|
31
|
+
};
|
|
32
|
+
createContracts(addresses: {
|
|
33
|
+
settlement: PublicKey;
|
|
34
|
+
dispatch: PublicKey;
|
|
35
|
+
}): {
|
|
36
|
+
settlement: SettlementContractType & SmartContract;
|
|
37
|
+
dispatch: DispatchContractType & SmartContract;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=SettlementContractModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettlementContractModule.d.ts","sourceRoot":"","sources":["../../src/settlement/SettlementContractModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EACjC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,MAAM,uBAAuB,GAAG,aAAa,CACjD,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,kBAAkB,EAAE,UAAU,CAC5B,cAAc,CACZ,sBAAsB,EACtB,+BAA+B,CAAC,oBAAoB,CAAC,EACrD,wBAAwB,CACzB,CACF,CAAC;IACF,gBAAgB,EAAE,UAAU,CAC1B,cAAc,CAAC,oBAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,CACvD,CAAC;CACH,CAAC;AAEF,qBACa,wBAAwB,CACjC,iBAAiB,SAAS,uBAAuB,GAC/C,gCAAgC,CAEpC,SAAQ,eAAe,CAAC,iBAAiB,CACzC,YAAW,cAAc,CAAC,OAAO,CAAC;gBAEf,UAAU,EAAE;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE;WAI/C,IAAI,CAChB,iBAAiB,SAAS,uBAAuB,GAC/C,gCAAgC,EAElC,OAAO,EAAE,iBAAiB,GACzB,UAAU,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;WAQ5C,YAAY;;;;IAQnB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAEtC,IAAW,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAElD;IAGM,MAAM,CAAC,sBAAsB,EAAE,sBAAsB;IAI/C,KAAK;IAIX,kBAAkB,IAAI;QAC3B,UAAU,EAAE,+BAA+B,CAAC,sBAAsB,CAAC,CAAC;QACpE,QAAQ,EAAE,+BAA+B,CAAC,oBAAoB,CAAC,CAAC;KACjE;IAkBM,eAAe,CAAC,SAAS,EAAE;QAChC,UAAU,EAAE,SAAS,CAAC;QACtB,QAAQ,EAAE,SAAS,CAAC;KACrB,GAAG;QACF,UAAU,EAAE,sBAAsB,GAAG,aAAa,CAAC;QACnD,QAAQ,EAAE,oBAAoB,GAAG,aAAa,CAAC;KAChD;CAaF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var SettlementContractModule_1;
|
|
11
|
+
import { ModuleContainer, noop, } from "@proto-kit/common";
|
|
12
|
+
import { injectable } from "tsyringe";
|
|
13
|
+
import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
|
|
14
|
+
import { SettlementContractProtocolModule, } from "./contracts/SettlementContractProtocolModule";
|
|
15
|
+
export let SettlementContractModule = SettlementContractModule_1 = class SettlementContractModule extends ModuleContainer {
|
|
16
|
+
constructor(definition) {
|
|
17
|
+
super(definition);
|
|
18
|
+
}
|
|
19
|
+
static from(modules) {
|
|
20
|
+
return class ScopedSettlementContractModule extends SettlementContractModule_1 {
|
|
21
|
+
constructor() {
|
|
22
|
+
super({ modules });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
static fromDefaults() {
|
|
27
|
+
return SettlementContractModule_1.from({
|
|
28
|
+
SettlementContract: SettlementContractProtocolModule,
|
|
29
|
+
DispatchContract: DispatchContractProtocolModule,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
get appChain() {
|
|
33
|
+
return this.protocol?.getAreProofsEnabled();
|
|
34
|
+
}
|
|
35
|
+
// **
|
|
36
|
+
create(childContainerProvider) {
|
|
37
|
+
super.create(childContainerProvider);
|
|
38
|
+
}
|
|
39
|
+
async start() {
|
|
40
|
+
noop();
|
|
41
|
+
}
|
|
42
|
+
getContractClasses() {
|
|
43
|
+
const settlementContractKey = "SettlementContract";
|
|
44
|
+
const dispatchContractKey = "DispatchContract";
|
|
45
|
+
this.assertIsValidModuleName(settlementContractKey);
|
|
46
|
+
this.assertIsValidModuleName(dispatchContractKey);
|
|
47
|
+
const settlementModule = this.resolve(settlementContractKey);
|
|
48
|
+
const dispatchModule = this.resolve(dispatchContractKey);
|
|
49
|
+
const dispatch = dispatchModule.contractFactory(undefined);
|
|
50
|
+
const settlement = settlementModule.contractFactory(dispatch);
|
|
51
|
+
return {
|
|
52
|
+
settlement,
|
|
53
|
+
dispatch,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
createContracts(addresses) {
|
|
57
|
+
const { dispatch, settlement } = this.getContractClasses();
|
|
58
|
+
// eslint-disable-next-line new-cap
|
|
59
|
+
const dispatchInstance = new dispatch(addresses.dispatch);
|
|
60
|
+
// eslint-disable-next-line new-cap
|
|
61
|
+
const settlementInstance = new settlement(addresses.settlement);
|
|
62
|
+
return {
|
|
63
|
+
dispatch: dispatchInstance,
|
|
64
|
+
settlement: settlementInstance,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
SettlementContractModule = SettlementContractModule_1 = __decorate([
|
|
69
|
+
injectable(),
|
|
70
|
+
__metadata("design:paramtypes", [Object])
|
|
71
|
+
], SettlementContractModule);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RuntimeLike } from "../../model/RuntimeLike";
|
|
2
|
+
import { ContractModule, SmartContractClassFromInterface } from "../ContractModule";
|
|
3
|
+
import { DispatchContractType } from "./DispatchSmartContract";
|
|
4
|
+
export type DispatchContractConfig = {
|
|
5
|
+
incomingMessagesMethods: Record<string, `${string}.${string}`>;
|
|
6
|
+
};
|
|
7
|
+
export declare class DispatchContractProtocolModule extends ContractModule<DispatchContractType, undefined, DispatchContractConfig> {
|
|
8
|
+
private readonly runtime;
|
|
9
|
+
constructor(runtime: RuntimeLike);
|
|
10
|
+
contractFactory(): SmartContractClassFromInterface<DispatchContractType>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=DispatchContractProtocolModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DispatchContractProtocolModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/DispatchContractProtocolModule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAAG;IACnC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;CAChE,CAAC;AAEF,qBACa,8BAA+B,SAAQ,cAAc,CAChE,oBAAoB,EACpB,SAAS,EACT,sBAAsB,CACvB;IACuC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAIpE,eAAe,IAAI,+BAA+B,CAAC,oBAAoB,CAAC;CAWhF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { inject, injectable } from "tsyringe";
|
|
14
|
+
import { ContractModule, } from "../ContractModule";
|
|
15
|
+
import { DispatchSmartContract, } from "./DispatchSmartContract";
|
|
16
|
+
export let DispatchContractProtocolModule = class DispatchContractProtocolModule extends ContractModule {
|
|
17
|
+
constructor(runtime) {
|
|
18
|
+
super();
|
|
19
|
+
this.runtime = runtime;
|
|
20
|
+
}
|
|
21
|
+
contractFactory() {
|
|
22
|
+
const { incomingMessagesMethods } = this.config;
|
|
23
|
+
const methodIdMappings = this.runtime.methodIdResolver.methodIdMap();
|
|
24
|
+
DispatchSmartContract.args = {
|
|
25
|
+
incomingMessagesPaths: incomingMessagesMethods,
|
|
26
|
+
methodIdMappings,
|
|
27
|
+
};
|
|
28
|
+
return DispatchSmartContract;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
DispatchContractProtocolModule = __decorate([
|
|
32
|
+
injectable(),
|
|
33
|
+
__param(0, inject("Runtime")),
|
|
34
|
+
__metadata("design:paramtypes", [Object])
|
|
35
|
+
], DispatchContractProtocolModule);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Field, PublicKey, SmartContract, State, UInt64 } from "o1js";
|
|
2
|
+
import { RuntimeMethodIdMapping } from "../../model/RuntimeLike";
|
|
3
|
+
export declare const ACTIONS_EMPTY_HASH: import("o1js/dist/node/lib/provable/field").Field;
|
|
4
|
+
export interface DispatchContractType {
|
|
5
|
+
updateMessagesHash: (executedMessagesHash: Field, newPromisedMessagesHash: Field) => Promise<void>;
|
|
6
|
+
initialize: (settlementContract: PublicKey) => Promise<void>;
|
|
7
|
+
promisedMessagesHash: State<Field>;
|
|
8
|
+
}
|
|
9
|
+
export declare class DispatchSmartContract extends SmartContract implements DispatchContractType {
|
|
10
|
+
static args: {
|
|
11
|
+
methodIdMappings: RuntimeMethodIdMapping;
|
|
12
|
+
incomingMessagesPaths: Record<string, `${string}.${string}`>;
|
|
13
|
+
};
|
|
14
|
+
promisedMessagesHash: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
15
|
+
honoredMessagesHash: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
16
|
+
settlementContract: State<PublicKey>;
|
|
17
|
+
updateMessagesHash(executedMessagesHash: Field, newPromisedMessagesHash: Field): Promise<void>;
|
|
18
|
+
initialize(settlementContract: PublicKey): Promise<void>;
|
|
19
|
+
private dispatchMessage;
|
|
20
|
+
deposit(amount: UInt64): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=DispatchSmartContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DispatchSmartContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/DispatchSmartContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EAIL,SAAS,EAET,aAAa,EACb,KAAK,EAEL,MAAM,EACP,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQjE,eAAO,MAAM,kBAAkB,mDAA6B,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAClB,oBAAoB,EAAE,KAAK,EAC3B,uBAAuB,EAAE,KAAK,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,UAAU,EAAE,CAAC,kBAAkB,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACpC;AAED,qBAAa,qBACX,SAAQ,aACR,YAAW,oBAAoB;IAE/B,OAAc,IAAI,EAAE;QAClB,gBAAgB,EAAE,sBAAsB,CAAC;QACzC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;KAC9D,CAAC;IAEmB,oBAAoB,2DAAkB;IAEtC,mBAAmB,2DAAkB;IAEjC,kBAAkB,mBAAsB;IAGpD,kBAAkB,CAC7B,oBAAoB,EAAE,KAAK,EAC3B,uBAAuB,EAAE,KAAK;IAgBnB,UAAU,CAAC,kBAAkB,EAAE,SAAS;IAYrD,OAAO,CAAC,eAAe;IA8BV,OAAO,CAAC,MAAM,EAAE,MAAM;CAyBpC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { AccountUpdate, Field, method, Poseidon, PublicKey, Reducer, SmartContract, State, state, UInt64, } from "o1js";
|
|
11
|
+
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
12
|
+
import { MinaActions, MinaEvents, } from "../../utils/MinaPrefixedProvableHashList";
|
|
13
|
+
import { Deposit } from "../messages/Deposit";
|
|
14
|
+
export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
|
|
15
|
+
export class DispatchSmartContract extends SmartContract {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.promisedMessagesHash = State();
|
|
19
|
+
this.honoredMessagesHash = State();
|
|
20
|
+
this.settlementContract = State();
|
|
21
|
+
}
|
|
22
|
+
async updateMessagesHash(executedMessagesHash, newPromisedMessagesHash) {
|
|
23
|
+
const promisedMessagesHash = this.promisedMessagesHash.getAndRequireEquals();
|
|
24
|
+
this.honoredMessagesHash.getAndRequireEquals();
|
|
25
|
+
executedMessagesHash.assertEquals(promisedMessagesHash);
|
|
26
|
+
this.honoredMessagesHash.set(executedMessagesHash);
|
|
27
|
+
// Assert and apply new promisedMessagesHash
|
|
28
|
+
this.self.account.actionState.requireEquals(newPromisedMessagesHash);
|
|
29
|
+
this.promisedMessagesHash.set(newPromisedMessagesHash);
|
|
30
|
+
}
|
|
31
|
+
async initialize(settlementContract) {
|
|
32
|
+
this.promisedMessagesHash.getAndRequireEquals().assertEquals(Field(0));
|
|
33
|
+
this.honoredMessagesHash.getAndRequireEquals().assertEquals(Field(0));
|
|
34
|
+
this.settlementContract
|
|
35
|
+
.getAndRequireEquals()
|
|
36
|
+
.assertEquals(PublicKey.empty());
|
|
37
|
+
this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
|
|
38
|
+
this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
|
|
39
|
+
this.settlementContract.set(settlementContract);
|
|
40
|
+
}
|
|
41
|
+
dispatchMessage(methodId, value, valueType) {
|
|
42
|
+
const args = valueType.toFields(value);
|
|
43
|
+
// Should be the same as RuntimeTransaction.hash
|
|
44
|
+
const argsHash = Poseidon.hash(args);
|
|
45
|
+
const runtimeTransaction = RuntimeTransaction.fromMessage({
|
|
46
|
+
methodId,
|
|
47
|
+
argsHash,
|
|
48
|
+
});
|
|
49
|
+
// Append tx to incomingMessagesHash
|
|
50
|
+
const actionData = runtimeTransaction.hashData();
|
|
51
|
+
const actionHash = MinaActions.actionHash(actionData);
|
|
52
|
+
this.self.body.actions = {
|
|
53
|
+
hash: actionHash,
|
|
54
|
+
data: [actionData],
|
|
55
|
+
};
|
|
56
|
+
const eventHash = MinaEvents.eventHash(args);
|
|
57
|
+
this.self.body.events = {
|
|
58
|
+
hash: eventHash,
|
|
59
|
+
data: [args],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async deposit(amount) {
|
|
63
|
+
// Save this, since otherwise it would be a second witness later,
|
|
64
|
+
// which could be a different values than the first
|
|
65
|
+
const sender = this.sender.getUnconstrained();
|
|
66
|
+
const settlementContract = this.settlementContract.getAndRequireEquals();
|
|
67
|
+
// Credit the amount to the settlement contract
|
|
68
|
+
const balanceAU = AccountUpdate.create(settlementContract);
|
|
69
|
+
balanceAU.balance.addInPlace(amount);
|
|
70
|
+
this.self.approve(balanceAU);
|
|
71
|
+
const action = new Deposit({
|
|
72
|
+
address: sender,
|
|
73
|
+
amount,
|
|
74
|
+
});
|
|
75
|
+
const { methodIdMappings, incomingMessagesPaths } = DispatchSmartContract.args;
|
|
76
|
+
const methodId = Field(methodIdMappings[incomingMessagesPaths.deposit].methodId).toConstant();
|
|
77
|
+
this.dispatchMessage(methodId.toConstant(), action, Deposit);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
__decorate([
|
|
81
|
+
state(Field),
|
|
82
|
+
__metadata("design:type", Object)
|
|
83
|
+
], DispatchSmartContract.prototype, "promisedMessagesHash", void 0);
|
|
84
|
+
__decorate([
|
|
85
|
+
state(Field),
|
|
86
|
+
__metadata("design:type", Object)
|
|
87
|
+
], DispatchSmartContract.prototype, "honoredMessagesHash", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
state(PublicKey),
|
|
90
|
+
__metadata("design:type", Object)
|
|
91
|
+
], DispatchSmartContract.prototype, "settlementContract", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
method,
|
|
94
|
+
__metadata("design:type", Function),
|
|
95
|
+
__metadata("design:paramtypes", [Field,
|
|
96
|
+
Field]),
|
|
97
|
+
__metadata("design:returntype", Promise)
|
|
98
|
+
], DispatchSmartContract.prototype, "updateMessagesHash", null);
|
|
99
|
+
__decorate([
|
|
100
|
+
method,
|
|
101
|
+
__metadata("design:type", Function),
|
|
102
|
+
__metadata("design:paramtypes", [PublicKey]),
|
|
103
|
+
__metadata("design:returntype", Promise)
|
|
104
|
+
], DispatchSmartContract.prototype, "initialize", null);
|
|
105
|
+
__decorate([
|
|
106
|
+
method,
|
|
107
|
+
__metadata("design:type", Function),
|
|
108
|
+
__metadata("design:paramtypes", [UInt64]),
|
|
109
|
+
__metadata("design:returntype", Promise)
|
|
110
|
+
], DispatchSmartContract.prototype, "deposit", null);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { SmartContract } from "o1js";
|
|
3
|
+
import { BlockProvable } from "../../prover/block/BlockProvable";
|
|
4
|
+
import { ContractModule, SmartContractClassFromInterface } from "../ContractModule";
|
|
5
|
+
import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
|
|
6
|
+
import { DispatchContractType } from "./DispatchSmartContract";
|
|
7
|
+
import { SettlementContractType } from "./SettlementSmartContract";
|
|
8
|
+
export type SettlementContractConfig = {
|
|
9
|
+
escapeHatchSlotsInterval?: number;
|
|
10
|
+
withdrawalStatePath: `${string}.${string}`;
|
|
11
|
+
withdrawalMethodPath: `${string}.${string}`;
|
|
12
|
+
};
|
|
13
|
+
export declare class SettlementContractProtocolModule extends ContractModule<SettlementContractType, TypedClass<DispatchContractType & SmartContract>, SettlementContractConfig> {
|
|
14
|
+
private readonly hooks;
|
|
15
|
+
private readonly blockProver;
|
|
16
|
+
constructor(hooks: ProvableSettlementHook<unknown>[], blockProver: BlockProvable);
|
|
17
|
+
contractFactory(dispatchContract: TypedClass<DispatchContractType & SmartContract>): SmartContractClassFromInterface<SettlementContractType>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=SettlementContractProtocolModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettlementContractProtocolModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContractProtocolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAEL,sBAAsB,EAEvB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IAC3C,oBAAoB,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;CAC7C,CAAC;AAKF,qBACa,gCAAiC,SAAQ,cAAc,CAClE,sBAAsB,EACtB,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,EAChD,wBAAwB,CACzB;IAGG,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFX,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAExC,WAAW,EAAE,aAAa;IAMtC,eAAe,CACpB,gBAAgB,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,GACjE,+BAA+B,CAAC,sBAAsB,CAAC;CAqB3D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { inject, injectable, injectAll } from "tsyringe";
|
|
14
|
+
import { ContractModule, } from "../ContractModule";
|
|
15
|
+
import { LazyBlockProof, SettlementSmartContract, } from "./SettlementSmartContract";
|
|
16
|
+
// 24 hours
|
|
17
|
+
const DEFAULT_ESCAPE_HATCH = (60 / 3) * 24;
|
|
18
|
+
export let SettlementContractProtocolModule = class SettlementContractProtocolModule extends ContractModule {
|
|
19
|
+
constructor(hooks, blockProver) {
|
|
20
|
+
LazyBlockProof.tag = blockProver.zkProgrammable.zkProgram[0].Proof.tag;
|
|
21
|
+
super();
|
|
22
|
+
this.hooks = hooks;
|
|
23
|
+
this.blockProver = blockProver;
|
|
24
|
+
}
|
|
25
|
+
contractFactory(dispatchContract) {
|
|
26
|
+
const { hooks, config } = this;
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
28
|
+
const withdrawalStatePathSplit = config.withdrawalStatePath.split(".");
|
|
29
|
+
const escapeHatchSlotsInterval = config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
|
|
30
|
+
SettlementSmartContract.args = {
|
|
31
|
+
DispatchContract: dispatchContract,
|
|
32
|
+
hooks,
|
|
33
|
+
withdrawalStatePath: withdrawalStatePathSplit,
|
|
34
|
+
escapeHatchSlotsInterval,
|
|
35
|
+
};
|
|
36
|
+
return SettlementSmartContract;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
SettlementContractProtocolModule = __decorate([
|
|
40
|
+
injectable(),
|
|
41
|
+
__param(0, injectAll("ProvableSettlementHook")),
|
|
42
|
+
__param(1, inject("BlockProver")),
|
|
43
|
+
__metadata("design:paramtypes", [Array, Object])
|
|
44
|
+
], SettlementContractProtocolModule);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TypedClass } from "@proto-kit/common";
|
|
2
|
+
import { AccountUpdate, Field, Proof, PublicKey, Signature, SmartContract, State, UInt32, TokenContract, AccountUpdateForest } from "o1js";
|
|
3
|
+
import { NetworkState } from "../../model/network/NetworkState";
|
|
4
|
+
import { BlockProverPublicInput, BlockProverPublicOutput } from "../../prover/block/BlockProvable";
|
|
5
|
+
import { OutgoingMessageArgumentBatch } from "../messages/OutgoingMessageArgument";
|
|
6
|
+
import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
|
|
7
|
+
import { DispatchContractType } from "./DispatchSmartContract";
|
|
8
|
+
export declare class LazyBlockProof extends Proof<BlockProverPublicInput, BlockProverPublicOutput> {
|
|
9
|
+
static publicInputType: typeof BlockProverPublicInput;
|
|
10
|
+
static publicOutputType: typeof BlockProverPublicOutput;
|
|
11
|
+
static tag: () => {
|
|
12
|
+
name: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface SettlementContractType {
|
|
16
|
+
initialize: (sequencer: PublicKey, dispatchContract: PublicKey) => Promise<void>;
|
|
17
|
+
settle: (blockProof: LazyBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field) => Promise<void>;
|
|
18
|
+
rollupOutgoingMessages: (batch: OutgoingMessageArgumentBatch) => Promise<void>;
|
|
19
|
+
redeem: (additionUpdate: AccountUpdate) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare const BATCH_SIGNATURE_PREFIX: import("o1js/dist/node/lib/provable/field").Field;
|
|
22
|
+
export declare class SettlementSmartContract extends TokenContract implements SettlementContractType {
|
|
23
|
+
static args: {
|
|
24
|
+
DispatchContract: TypedClass<DispatchContractType & SmartContract>;
|
|
25
|
+
hooks: ProvableSettlementHook<unknown>[];
|
|
26
|
+
withdrawalStatePath: [string, string];
|
|
27
|
+
escapeHatchSlotsInterval: number;
|
|
28
|
+
};
|
|
29
|
+
sequencerKey: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
30
|
+
lastSettlementL1BlockHeight: State<UInt32>;
|
|
31
|
+
stateRoot: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
32
|
+
networkStateHash: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
33
|
+
blockHashRoot: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
34
|
+
dispatchContractAddressX: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
35
|
+
outgoingMessageCursor: State<import("o1js/dist/node/lib/provable/field").Field>;
|
|
36
|
+
approveBase(forest: AccountUpdateForest): Promise<void>;
|
|
37
|
+
initialize(sequencer: PublicKey, dispatchContract: PublicKey): Promise<void>;
|
|
38
|
+
settle(blockProof: LazyBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): Promise<void>;
|
|
39
|
+
rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch): Promise<void>;
|
|
40
|
+
redeem(additionUpdate: AccountUpdate): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=SettlementSmartContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettlementSmartContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementSmartContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EAEb,KAAK,EAIL,KAAK,EAEL,SAAS,EACT,SAAS,EACT,aAAa,EACb,KAAK,EAGL,MAAM,EAEN,aAAa,EACb,mBAAmB,EACpB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,4BAA4B,EAC7B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,sBAAsB,EAGvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAI/D,qBAAa,cAAe,SAAQ,KAAK,CACvC,sBAAsB,EACtB,uBAAuB,CACxB;IACC,OAAc,eAAe,gCAA0B;IAEvD,OAAc,gBAAgB,iCAA2B;IAEzD,OAAc,GAAG,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAEvC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,CACV,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,SAAS,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,CACN,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,SAAS,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,YAAY,EAC/B,kBAAkB,EAAE,YAAY,EAChC,uBAAuB,EAAE,KAAK,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sBAAsB,EAAE,CACtB,KAAK,EAAE,4BAA4B,KAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAGD,eAAO,MAAM,sBAAsB,mDAAqC,CAAC;AAEzE,qBAAa,uBACX,SAAQ,aACR,YAAW,sBAAsB;IAIjC,OAAc,IAAI,EAAE;QAClB,gBAAgB,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,CAAC;QACnE,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,wBAAwB,EAAE,MAAM,CAAC;KAClC,CAAC;IAEmB,YAAY,2DAAkB;IAC7B,2BAA2B,gBAAmB;IAE/C,SAAS,2DAAkB;IAC3B,gBAAgB,2DAAkB;IAClC,aAAa,2DAAkB;IAE/B,wBAAwB,2DAAkB;IAE1C,qBAAqB,2DAAkB;IAE9C,WAAW,CAAC,MAAM,EAAE,mBAAmB;IAKxC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS;IAmB5D,MAAM,CACjB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,SAAS,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,YAAY,EAC/B,kBAAkB,EAAE,YAAY,EAChC,uBAAuB,EAAE,KAAK;IAiInB,sBAAsB,CAAC,KAAK,EAAE,4BAA4B;IAoD1D,MAAM,CAAC,cAAc,EAAE,aAAa;CAoBlD"}
|