@proto-kit/module 0.1.1-develop.211 → 0.1.1-develop.2137

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.
Files changed (155) hide show
  1. package/dist/factories/MethodIdFactory.d.ts +6 -6
  2. package/dist/factories/MethodIdFactory.d.ts.map +1 -1
  3. package/dist/factories/MethodIdFactory.js +10 -34
  4. package/dist/factories/MethodIdFactory.js.map +1 -0
  5. package/dist/index.d.ts +4 -7
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -7
  8. package/dist/index.js.map +1 -0
  9. package/dist/messages/OutgoingMessage.d.ts +96 -0
  10. package/dist/messages/OutgoingMessage.d.ts.map +1 -0
  11. package/dist/messages/OutgoingMessage.js +68 -0
  12. package/dist/messages/OutgoingMessage.js.map +1 -0
  13. package/dist/messages/OutgoingMessages.d.ts +231 -0
  14. package/dist/messages/OutgoingMessages.d.ts.map +1 -0
  15. package/dist/messages/OutgoingMessages.js +67 -0
  16. package/dist/messages/OutgoingMessages.js.map +1 -0
  17. package/dist/method/MethodParameterEncoder.d.ts +26 -0
  18. package/dist/method/MethodParameterEncoder.d.ts.map +1 -0
  19. package/dist/method/MethodParameterEncoder.js +169 -0
  20. package/dist/method/MethodParameterEncoder.js.map +1 -0
  21. package/dist/method/runtimeMethod.d.ts +21 -5
  22. package/dist/method/runtimeMethod.d.ts.map +1 -1
  23. package/dist/method/runtimeMethod.js +69 -25
  24. package/dist/method/runtimeMethod.js.map +1 -0
  25. package/dist/module/decorator.js +1 -0
  26. package/dist/module/decorator.js.map +1 -0
  27. package/dist/runtime/MethodIdResolver.d.ts +10 -8
  28. package/dist/runtime/MethodIdResolver.d.ts.map +1 -1
  29. package/dist/runtime/MethodIdResolver.js +75 -33
  30. package/dist/runtime/MethodIdResolver.js.map +1 -0
  31. package/dist/runtime/Runtime.d.ts +20 -26
  32. package/dist/runtime/Runtime.d.ts.map +1 -1
  33. package/dist/runtime/Runtime.js +117 -62
  34. package/dist/runtime/Runtime.js.map +1 -0
  35. package/dist/runtime/RuntimeEnvironment.d.ts +10 -0
  36. package/dist/runtime/RuntimeEnvironment.d.ts.map +1 -0
  37. package/dist/runtime/RuntimeEnvironment.js +2 -0
  38. package/dist/runtime/RuntimeEnvironment.js.map +1 -0
  39. package/dist/runtime/RuntimeModule.d.ts +18 -15
  40. package/dist/runtime/RuntimeModule.d.ts.map +1 -1
  41. package/dist/runtime/RuntimeModule.js +33 -8
  42. package/dist/runtime/RuntimeModule.js.map +1 -0
  43. package/dist/state/InMemoryStateService.d.ts +11 -10
  44. package/dist/state/InMemoryStateService.d.ts.map +1 -1
  45. package/dist/state/InMemoryStateService.js +11 -8
  46. package/dist/state/InMemoryStateService.js.map +1 -0
  47. package/dist/state/decorator.d.ts.map +1 -1
  48. package/dist/state/decorator.js +2 -4
  49. package/dist/state/decorator.js.map +1 -0
  50. package/dist/testing/TestingRuntime.d.ts +8 -0
  51. package/dist/testing/TestingRuntime.d.ts.map +1 -0
  52. package/dist/testing/TestingRuntime.js +31 -0
  53. package/dist/testing/TestingRuntime.js.map +1 -0
  54. package/jest.config.cjs +12 -1
  55. package/package.json +9 -9
  56. package/src/factories/MethodIdFactory.ts +10 -17
  57. package/src/index.ts +4 -4
  58. package/src/messages/OutgoingMessages.ts +124 -0
  59. package/src/method/MethodParameterEncoder.ts +262 -0
  60. package/src/method/runtimeMethod.ts +131 -33
  61. package/src/runtime/MethodIdResolver.ts +85 -46
  62. package/src/runtime/Runtime.ts +187 -96
  63. package/src/runtime/RuntimeEnvironment.ts +16 -0
  64. package/src/runtime/RuntimeModule.ts +58 -27
  65. package/src/state/InMemoryStateService.ts +14 -14
  66. package/test/Runtime.test.ts +68 -42
  67. package/test/TestingRuntime.ts +43 -0
  68. package/test/messages/message.test.ts +42 -0
  69. package/test/method/MethodParameterEncoder.test.ts +124 -0
  70. package/test/method/runtimeMethod-fail.test.ts +53 -0
  71. package/{src/method/decorator.test.ts → test/method/runtimeMethod.test.ts} +3 -3
  72. package/test/modules/Admin.ts +4 -4
  73. package/test/modules/Balances.test.ts +88 -79
  74. package/test/modules/Balances.ts +15 -21
  75. package/test/modules/{methodId.test.ts → MethodIdResolver.test.ts} +24 -35
  76. package/test/modules/State.test.ts +46 -53
  77. package/test/runtimeMethod.test.ts +192 -20
  78. package/test/tsconfig.json +7 -0
  79. package/tsconfig.json +2 -2
  80. package/LICENSE.md +0 -201
  81. package/dist/method/MethodParameterDecoder.d.ts +0 -22
  82. package/dist/method/MethodParameterDecoder.d.ts.map +0 -1
  83. package/dist/method/MethodParameterDecoder.js +0 -33
  84. package/dist/method/RuntimeMethodExecutionContext.d.ts +0 -57
  85. package/dist/method/RuntimeMethodExecutionContext.d.ts.map +0 -1
  86. package/dist/method/RuntimeMethodExecutionContext.js +0 -92
  87. package/dist/method/assert.d.ts +0 -12
  88. package/dist/method/assert.d.ts.map +0 -1
  89. package/dist/method/assert.js +0 -23
  90. package/dist/module/src/factories/MethodIdFactory.d.ts +0 -9
  91. package/dist/module/src/factories/MethodIdFactory.d.ts.map +0 -1
  92. package/dist/module/src/factories/MethodIdFactory.js +0 -36
  93. package/dist/module/src/index.d.ts +0 -11
  94. package/dist/module/src/index.d.ts.map +0 -1
  95. package/dist/module/src/index.js +0 -10
  96. package/dist/module/src/method/MethodParameterDecoder.d.ts +0 -22
  97. package/dist/module/src/method/MethodParameterDecoder.d.ts.map +0 -1
  98. package/dist/module/src/method/MethodParameterDecoder.js +0 -33
  99. package/dist/module/src/method/runtimeMethod.d.ts +0 -19
  100. package/dist/module/src/method/runtimeMethod.d.ts.map +0 -1
  101. package/dist/module/src/method/runtimeMethod.js +0 -123
  102. package/dist/module/src/module/decorator.d.ts +0 -8
  103. package/dist/module/src/module/decorator.d.ts.map +0 -1
  104. package/dist/module/src/module/decorator.js +0 -15
  105. package/dist/module/src/runtime/MethodIdResolver.d.ts +0 -18
  106. package/dist/module/src/runtime/MethodIdResolver.d.ts.map +0 -1
  107. package/dist/module/src/runtime/MethodIdResolver.js +0 -50
  108. package/dist/module/src/runtime/Runtime.d.ts +0 -72
  109. package/dist/module/src/runtime/Runtime.d.ts.map +0 -1
  110. package/dist/module/src/runtime/Runtime.js +0 -184
  111. package/dist/module/src/runtime/RuntimeModule.d.ts +0 -35
  112. package/dist/module/src/runtime/RuntimeModule.d.ts.map +0 -1
  113. package/dist/module/src/runtime/RuntimeModule.js +0 -56
  114. package/dist/module/src/state/InMemoryStateService.d.ts +0 -11
  115. package/dist/module/src/state/InMemoryStateService.d.ts.map +0 -1
  116. package/dist/module/src/state/InMemoryStateService.js +0 -21
  117. package/dist/module/src/state/decorator.d.ts +0 -7
  118. package/dist/module/src/state/decorator.d.ts.map +0 -1
  119. package/dist/module/src/state/decorator.js +0 -42
  120. package/dist/protocol/src/model/Option.d.ts +0 -98
  121. package/dist/protocol/src/model/Option.d.ts.map +0 -1
  122. package/dist/protocol/src/model/Option.js +0 -98
  123. package/dist/protocol/src/model/StateTransition.d.ts +0 -96
  124. package/dist/protocol/src/model/StateTransition.d.ts.map +0 -1
  125. package/dist/protocol/src/model/StateTransition.js +0 -65
  126. package/dist/protocol/src/model/network/NetworkState.d.ts +0 -64
  127. package/dist/protocol/src/model/network/NetworkState.d.ts.map +0 -1
  128. package/dist/protocol/src/model/network/NetworkState.js +0 -12
  129. package/dist/protocol/src/model/transaction/ProtocolTransaction.d.ts +0 -70
  130. package/dist/protocol/src/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  131. package/dist/protocol/src/model/transaction/ProtocolTransaction.js +0 -18
  132. package/dist/protocol/src/model/transaction/RuntimeTransaction.d.ts +0 -63
  133. package/dist/protocol/src/model/transaction/RuntimeTransaction.d.ts.map +0 -1
  134. package/dist/protocol/src/model/transaction/RuntimeTransaction.js +0 -29
  135. package/dist/protocol/src/state/assert/assert.d.ts +0 -12
  136. package/dist/protocol/src/state/assert/assert.d.ts.map +0 -1
  137. package/dist/protocol/src/state/assert/assert.js +0 -23
  138. package/dist/protocol/src/state/context/RuntimeMethodExecutionContext.d.ts +0 -60
  139. package/dist/protocol/src/state/context/RuntimeMethodExecutionContext.d.ts.map +0 -1
  140. package/dist/protocol/src/state/context/RuntimeMethodExecutionContext.js +0 -105
  141. package/dist/state/State.d.ts +0 -65
  142. package/dist/state/State.d.ts.map +0 -1
  143. package/dist/state/State.js +0 -114
  144. package/dist/state/StateMap.d.ts +0 -37
  145. package/dist/state/StateMap.d.ts.map +0 -1
  146. package/dist/state/StateMap.js +0 -56
  147. package/dist/state/StateServiceProvider.d.ts +0 -10
  148. package/dist/state/StateServiceProvider.d.ts.map +0 -1
  149. package/dist/state/StateServiceProvider.js +0 -34
  150. package/src/method/MethodParameterDecoder.ts +0 -70
  151. package/src/state/decorator.ts +0 -63
  152. package/test/state/MerkleTree.test.ts +0 -95
  153. package/test/state/MockAsyncMerkleStore.ts +0 -28
  154. package/test/transaction.test.ts +0 -82
  155. package/tsconfig.test.json +0 -9
@@ -0,0 +1,169 @@
1
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
2
+ import { Proof, Provable, DynamicProof, } from "o1js";
3
+ import { filterNonUndefined, } from "@proto-kit/common";
4
+ const errors = {
5
+ fieldLengthNotMatching: (expected, actual) => new Error(`Expected ${expected} field elements, got ${actual}`),
6
+ typeNotCompatible: (name, error) => new Error(`Cannot decode type ${name}, it has to be either a Struct, CircuitValue or built-in snarkyjs type.${error !== undefined ? `Caused by: ${error}` : ""}`),
7
+ };
8
+ function isProofType(type) {
9
+ return type.prototype instanceof Proof;
10
+ }
11
+ function isDynamicProofType(type) {
12
+ return (type.prototype instanceof DynamicProof);
13
+ }
14
+ function isProofBaseType(type) {
15
+ return isProofType(type) || isDynamicProofType(type);
16
+ }
17
+ function getAllPropertyNamesOfPrototypeChain(type) {
18
+ if (type === undefined || type === null) {
19
+ return [];
20
+ }
21
+ return Object.getOwnPropertyNames(type).concat(...getAllPropertyNamesOfPrototypeChain(Object.getPrototypeOf(type)));
22
+ }
23
+ export function isFlexibleProvablePure(type) {
24
+ // The required properties are defined on the prototype for Structs and CircuitValues
25
+ // but on the constructor function itself for Field and Bool
26
+ // For aliases like Balance in library, it can even be 2 steps upwards the prototype chain
27
+ const props = getAllPropertyNamesOfPrototypeChain(type);
28
+ const mandatory = ["toFields", "fromFields", "sizeInFields"];
29
+ return mandatory.every((prop) => props.includes(prop));
30
+ }
31
+ export function checkArgsProvable(target, methodName) {
32
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
33
+ const paramtypes = Reflect.getMetadata("design:paramtypes", target, methodName);
34
+ if (paramtypes === undefined) {
35
+ throw new Error(`Method with name ${methodName} doesn't exist on this module`);
36
+ }
37
+ const indizes = paramtypes
38
+ .map((type, index) => {
39
+ if (isProofBaseType(type) || isFlexibleProvablePure(type)) {
40
+ return undefined;
41
+ }
42
+ return `${index}`;
43
+ })
44
+ .filter(filterNonUndefined);
45
+ if (indizes.length > 0) {
46
+ const indexString = indizes.reduce((a, b) => `${a}, ${b}`);
47
+ throw new Error(`Not all arguments of method '${target.name}.${methodName}' are provable types or proofs (indizes: [${indexString}])`);
48
+ }
49
+ return paramtypes;
50
+ }
51
+ export class MethodParameterEncoder {
52
+ static fromMethod(target, methodName) {
53
+ const paramtypes = checkArgsProvable(target, methodName);
54
+ return new MethodParameterEncoder(paramtypes);
55
+ }
56
+ static fieldSize(type) {
57
+ if (isProofBaseType(type)) {
58
+ return ((MethodParameterEncoder.fieldSize(type.publicInputType) ?? 0) +
59
+ (MethodParameterEncoder.fieldSize(type.publicOutputType) ?? 0));
60
+ }
61
+ // as any, since we shouldn't be using this workaround in the first place
62
+ return type.sizeInFields();
63
+ }
64
+ constructor(types) {
65
+ this.types = types;
66
+ }
67
+ decode(fields, auxiliary) {
68
+ if (fields.length < this.fieldSize()) {
69
+ throw errors.fieldLengthNotMatching(this.fieldSize(), fields.length);
70
+ }
71
+ let stack = fields.slice();
72
+ const auxiliaryStack = auxiliary.slice();
73
+ return Promise.all(this.types.map((type) => {
74
+ const numberFieldsNeeded = MethodParameterEncoder.fieldSize(type) ?? -1;
75
+ if (numberFieldsNeeded === -1) {
76
+ throw errors.typeNotCompatible(type.constructor.name);
77
+ }
78
+ const structFields = stack.slice(0, numberFieldsNeeded);
79
+ stack = stack.slice(numberFieldsNeeded);
80
+ // Decode proof
81
+ if (isProofBaseType(type)) {
82
+ const auxiliaryData = auxiliaryStack.shift();
83
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
84
+ const proofData = JSON.parse(auxiliaryData);
85
+ const inputFieldSize = MethodParameterEncoder.fieldSize(type.publicInputType);
86
+ const input = structFields
87
+ .slice(0, inputFieldSize)
88
+ .map((x) => x.toString());
89
+ const output = structFields
90
+ .slice(inputFieldSize)
91
+ .map((x) => x.toString());
92
+ // fromJSON has incompatible signature for Proof and DynamicProof
93
+ if (isProofType(type)) {
94
+ return type.fromJSON({
95
+ ...proofData,
96
+ publicInput: input,
97
+ publicOutput: output,
98
+ });
99
+ }
100
+ if (isDynamicProofType(type)) {
101
+ return type.fromJSON({
102
+ ...proofData,
103
+ publicInput: input,
104
+ publicOutput: output,
105
+ });
106
+ }
107
+ }
108
+ return type.fromFields(structFields, []);
109
+ }));
110
+ }
111
+ /**
112
+ * Variant of encode() for provable code that skips the unprovable
113
+ * json encoding
114
+ */
115
+ encode(args) {
116
+ /**
117
+ * Use the type info obtained previously to convert
118
+ * the args passed to fields
119
+ */
120
+ return args
121
+ .map((argument, index) => {
122
+ if (argument instanceof Proof || argument instanceof DynamicProof) {
123
+ const argumentType = this.types[index];
124
+ const { publicOutputType, publicInputType } = argumentType;
125
+ const inputFields =
126
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
127
+ publicInputType?.toFields(argument.publicInput) ?? [];
128
+ const outputFields =
129
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
130
+ publicOutputType?.toFields(argument.publicOutput) ?? [];
131
+ let auxiliary = "";
132
+ // Has to be asProver, because this function will be called by runtimeMethod
133
+ // to transform the args into a Field[] to compute the argsHash
134
+ // In this case, the auxiliary might be empty, but it isn't used by that method anyways
135
+ Provable.asProver(() => {
136
+ const jsonProof = argument.toJSON();
137
+ auxiliary = JSON.stringify({
138
+ proof: jsonProof.proof,
139
+ maxProofsVerified: jsonProof.maxProofsVerified,
140
+ });
141
+ });
142
+ return {
143
+ fields: [...inputFields, ...outputFields],
144
+ auxiliary,
145
+ };
146
+ }
147
+ const argumentType = this.types[index];
148
+ return {
149
+ fields: argumentType.toFields(argument),
150
+ auxiliary: undefined,
151
+ };
152
+ })
153
+ .reduce((a, b) => {
154
+ return {
155
+ fields: [...a.fields, ...b.fields],
156
+ auxiliary: b.auxiliary !== undefined
157
+ ? [...a.auxiliary, b.auxiliary]
158
+ : a.auxiliary,
159
+ };
160
+ }, { fields: [], auxiliary: [] });
161
+ }
162
+ fieldSize() {
163
+ return this.types
164
+ .map((type) => MethodParameterEncoder.fieldSize(type) ?? 0)
165
+ .reduce((a, b) => a + b, 0);
166
+ }
167
+ }
168
+ /* eslint-enable @typescript-eslint/consistent-type-assertions */
169
+ //# sourceMappingURL=MethodParameterEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodParameterEncoder.js","sourceRoot":"","sources":["../../src/method/MethodParameterEncoder.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,25 @@
1
- import { StateTransition, MethodPublicOutput } from "@proto-kit/protocol";
1
+ import { Bool, FlexibleProvablePure } from "o1js";
2
+ import { ProvableStateTransition, MethodPublicOutput } from "@proto-kit/protocol";
3
+ import { ArgumentTypes } from "@proto-kit/common";
2
4
  import type { RuntimeModule } from "../runtime/RuntimeModule.js";
3
- export declare function toStateTransitionsHash(stateTransitions: StateTransition<any>[]): import("snarkyjs/dist/node/lib/field.js").Field;
4
- export type WrappedMethod = (...args: unknown[]) => MethodPublicOutput;
5
- export declare function toWrappedMethod(this: RuntimeModule<unknown>, methodName: string, moduleMethod: (...args: unknown[]) => unknown): WrappedMethod;
5
+ export declare function toStateTransitionsHash(stateTransitions: {
6
+ toProvable: () => ProvableStateTransition;
7
+ }[]): import("o1js/dist/node/lib/provable/field.js").Field;
8
+ export declare function toEventsHash(events: {
9
+ eventType: FlexibleProvablePure<any>;
10
+ event: any;
11
+ eventName: string;
12
+ condition: Bool;
13
+ }[]): import("o1js/dist/node/lib/provable/field.js").Field;
14
+ export type WrappedMethod = (...args: ArgumentTypes) => MethodPublicOutput;
15
+ export type AsyncWrappedMethod = (...args: ArgumentTypes) => Promise<MethodPublicOutput>;
16
+ export declare function toWrappedMethod(this: RuntimeModule<unknown>, methodName: string, moduleMethod: (...args: ArgumentTypes) => Promise<any>, options: {
17
+ invocationType: RuntimeMethodInvocationType;
18
+ }): AsyncWrappedMethod;
6
19
  export declare function combineMethodName(runtimeModuleName: string, methodName: string): string;
7
20
  export declare const runtimeMethodMetadataKey = "yab-method";
8
21
  export declare const runtimeMethodNamesMetadataKey = "proto-kit-runtime-methods";
22
+ export declare const runtimeMethodTypeMetadataKey = "proto-kit-runtime-method-type";
9
23
  /**
10
24
  * Checks the metadata of the provided runtime module and its method,
11
25
  * to see if it has been decorated with @runtimeMethod()
@@ -15,5 +29,7 @@ export declare const runtimeMethodNamesMetadataKey = "proto-kit-runtime-methods"
15
29
  * @returns - If the provided method name is a runtime method or not
16
30
  */
17
31
  export declare function isRuntimeMethod(target: RuntimeModule<unknown>, propertyKey: string): boolean;
18
- export declare function runtimeMethod(): (target: RuntimeModule<unknown>, methodName: string, descriptor: PropertyDescriptor) => void;
32
+ export type RuntimeMethodInvocationType = "SIGNATURE" | "INCOMING_MESSAGE";
33
+ export declare function runtimeMessage(): (target: RuntimeModule<unknown>, methodName: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>) => void;
34
+ export declare function runtimeMethod(): (target: RuntimeModule<unknown>, methodName: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>) => void;
19
35
  //# sourceMappingURL=runtimeMethod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeMethod.d.ts","sourceRoot":"","sources":["../../src/method/runtimeMethod.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EAGf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAcjE,wBAAgB,sBAAsB,CAEpC,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,mDAczC;AAGD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,kBAAkB,CAAC;AAEvE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,iBAoC9C;AAED,wBAAgB,iBAAiB,CAC/B,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,UAGnB;AAED,eAAO,MAAM,wBAAwB,eAAe,CAAC;AACrD,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAEzE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,WAAW,EAAE,MAAM,WAKpB;AAED,wBAAgB,aAAa,aAEjB,cAAc,OAAO,CAAC,cAClB,MAAM,cACN,kBAAkB,UAuFjC"}
1
+ {"version":3,"file":"runtimeMethod.d.ts","sourceRoot":"","sources":["../../src/method/runtimeMethod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,oBAAoB,EAAY,MAAM,MAAM,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAmBjE,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE;IAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;CAAE,EAAE,wDAclE;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IACN,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB,EAAE,wDAOJ;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,aAAa,KAAK,kBAAkB,CAAC;AAC3E,MAAM,MAAM,kBAAkB,GAAG,CAC/B,GAAG,IAAI,EAAE,aAAa,KACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjC,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,EACtD,OAAO,EAAE;IACP,cAAc,EAAE,2BAA2B,CAAC;CAC7C,GACA,kBAAkB,CA8EpB;AAED,wBAAgB,iBAAiB,CAC/B,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,UAGnB;AAED,eAAO,MAAM,wBAAwB,eAAe,CAAC;AACrD,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,4BAA4B,kCAAkC,CAAC;AAE5E;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,WAAW,EAAE,MAAM,WAKpB;AAED,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,kBAAkB,CAAC;AAwG3E,wBAAgB,cAAc,wIAI7B;AAED,wBAAgB,aAAa,wIAI5B"}
@@ -1,36 +1,68 @@
1
+ import { Bool, Field, Poseidon } from "o1js";
1
2
  import { container } from "tsyringe";
2
- import { DefaultProvableHashList, ProvableStateTransition, MethodPublicOutput, } from "@proto-kit/protocol";
3
- import { toProver } from "@proto-kit/common";
4
- import { RuntimeMethodExecutionContext } from "./RuntimeMethodExecutionContext.js";
3
+ import { ProvableStateTransition, MethodPublicOutput, RuntimeMethodExecutionContext, StateTransitionReductionList, DefaultProvableHashList, } from "@proto-kit/protocol";
4
+ import { toProver, } from "@proto-kit/common";
5
+ import { MethodParameterEncoder, checkArgsProvable, } from "./MethodParameterEncoder";
5
6
  const errors = {
6
7
  runtimeNotProvided: (name) => new Error(`Runtime was not provided for module: ${name}`),
7
- methodInputsNotProvided: () => new Error("Method execution inputs not provided, provide them via context.inputs"),
8
+ runtimeNameNotSet: () => new Error("Runtime name was not set"),
9
+ fieldNotConstant: (name) => new Error(`In-circuit field ${name} not a constant, this is likely a framework bug`),
8
10
  };
9
- export function toStateTransitionsHash(
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- stateTransitions) {
12
- const stateTransitionsHashList = new DefaultProvableHashList(ProvableStateTransition);
11
+ export function toStateTransitionsHash(stateTransitions) {
12
+ const stateTransitionsHashList = new StateTransitionReductionList(ProvableStateTransition);
13
13
  return stateTransitions
14
14
  .map((stateTransition) => stateTransition.toProvable())
15
15
  .reduce((allStateTransitionsHashList, stateTransition) => allStateTransitionsHashList.push(stateTransition), stateTransitionsHashList)
16
16
  .toField();
17
17
  }
18
- export function toWrappedMethod(methodName, moduleMethod) {
18
+ export function toEventsHash(events) {
19
+ return events.reduce((acc, event) => {
20
+ const hashList = new DefaultProvableHashList(event.eventType, acc);
21
+ hashList.pushIf(event.event, event.condition);
22
+ return hashList.commitment;
23
+ }, Field(0));
24
+ }
25
+ export function toWrappedMethod(methodName, moduleMethod, options) {
19
26
  const executionContext = container.resolve(RuntimeMethodExecutionContext);
20
- const wrappedMethod = (...args) => {
21
- Reflect.apply(moduleMethod, this, args);
22
- const { result: { stateTransitions, status }, input, } = executionContext.current();
27
+ const wrappedMethod = async (...args) => {
28
+ await Reflect.apply(moduleMethod, this, args);
29
+ const { result: { stateTransitions, status, events }, } = executionContext.current();
23
30
  const stateTransitionsHash = toStateTransitionsHash(stateTransitions);
24
- if (input === undefined) {
25
- throw errors.methodInputsNotProvided();
31
+ const eventsHash = toEventsHash(events);
32
+ const { name, parent: runtime } = this;
33
+ if (name === undefined) {
34
+ throw errors.runtimeNameNotSet();
35
+ }
36
+ if (runtime === undefined) {
37
+ throw errors.runtimeNotProvided(name);
38
+ }
39
+ const { transaction, networkState } = executionContext.witnessInput();
40
+ const { methodIdResolver } = runtime;
41
+ // Assert that the given transaction has the correct methodId
42
+ const thisMethodId = Field(methodIdResolver.getMethodId(name, methodName));
43
+ if (!thisMethodId.isConstant()) {
44
+ throw errors.fieldNotConstant("methodId");
26
45
  }
27
- const transactionHash = input.transaction.hash();
28
- const networkStateHash = input.networkState.hash();
46
+ transaction.methodId.assertEquals(thisMethodId, "Runtimemethod called with wrong methodId on the transaction object");
47
+ /**
48
+ * Use the type info obtained previously to convert
49
+ * the args passed to fields
50
+ */
51
+ const { fields } = MethodParameterEncoder.fromMethod(this, methodName).encode(args);
52
+ // Assert that the argsHash that has been signed matches the given arguments
53
+ const argsHash = Poseidon.hash(fields);
54
+ transaction.argsHash.assertEquals(argsHash, "argsHash and therefore arguments of transaction and runtime call does not match");
55
+ const isMessage = Bool(options.invocationType === "INCOMING_MESSAGE");
56
+ transaction.assertTransactionType(Bool(isMessage));
57
+ const transactionHash = transaction.hash();
58
+ const networkStateHash = networkState.hash();
29
59
  return new MethodPublicOutput({
30
60
  stateTransitionsHash,
31
61
  status,
32
62
  transactionHash,
33
63
  networkStateHash,
64
+ isMessage,
65
+ eventsHash,
34
66
  });
35
67
  };
36
68
  Object.defineProperty(wrappedMethod, "name", {
@@ -44,6 +76,7 @@ export function combineMethodName(runtimeModuleName, methodName) {
44
76
  }
45
77
  export const runtimeMethodMetadataKey = "yab-method";
46
78
  export const runtimeMethodNamesMetadataKey = "proto-kit-runtime-methods";
79
+ export const runtimeMethodTypeMetadataKey = "proto-kit-runtime-method-type";
47
80
  /**
48
81
  * Checks the metadata of the provided runtime module and its method,
49
82
  * to see if it has been decorated with @runtimeMethod()
@@ -55,8 +88,9 @@ export const runtimeMethodNamesMetadataKey = "proto-kit-runtime-methods";
55
88
  export function isRuntimeMethod(target, propertyKey) {
56
89
  return Boolean(Reflect.getMetadata(runtimeMethodMetadataKey, target, propertyKey));
57
90
  }
58
- export function runtimeMethod() {
91
+ function runtimeMethodInternal(options) {
59
92
  return (target, methodName, descriptor) => {
93
+ checkArgsProvable(target, methodName);
60
94
  const executionContext = container.resolve(RuntimeMethodExecutionContext);
61
95
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
62
96
  let data = Reflect.getMetadata(runtimeMethodNamesMetadataKey, target);
@@ -68,10 +102,11 @@ export function runtimeMethod() {
68
102
  }
69
103
  Reflect.defineMetadata(runtimeMethodNamesMetadataKey, data, target);
70
104
  Reflect.defineMetadata(runtimeMethodMetadataKey, true, target, methodName);
105
+ Reflect.defineMetadata(runtimeMethodTypeMetadataKey, options.invocationType, target, methodName);
71
106
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
72
107
  const simulatedMethod = descriptor.value;
73
- descriptor.value = function value(...args) {
74
- const constructorName = this.constructor.name;
108
+ descriptor.value = async function value(...args) {
109
+ const constructorName = this.name;
75
110
  /**
76
111
  * If its a top level method call, wrap it into a wrapped method,
77
112
  * since it'll be turned into a real/mock prover in provableMethod().
@@ -82,17 +117,16 @@ export function runtimeMethod() {
82
117
  const simulatedWrappedMethod = Reflect.apply(toWrappedMethod, this, [
83
118
  methodName,
84
119
  simulatedMethod,
120
+ options,
85
121
  ]);
86
122
  /**
87
123
  * Before the prover runs, make sure it is operating on the correct
88
124
  * RuntimeMethodExecutionContext state, meaning it enters and exits
89
125
  * the context properly.
90
126
  */
91
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
127
  async function prover() {
93
128
  executionContext.beforeMethod(constructorName, methodName, args);
94
129
  const innerProver = toProver(combineMethodName(constructorName, methodName), simulatedWrappedMethod, false, ...args).bind(this);
95
- // eslint-disable-next-line @typescript-eslint/init-declarations
96
130
  let result;
97
131
  try {
98
132
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
@@ -105,15 +139,14 @@ export function runtimeMethod() {
105
139
  }
106
140
  executionContext.beforeMethod(constructorName, methodName, args);
107
141
  if (executionContext.isTopLevel) {
108
- if (!this.runtime) {
142
+ if (!this.parent) {
109
143
  throw errors.runtimeNotProvided(constructorName);
110
144
  }
111
- executionContext.setProver(prover.bind(this.runtime.zkProgrammable));
145
+ executionContext.setProver(prover.bind(this.parent.zkProgrammable));
112
146
  }
113
- // eslint-disable-next-line @typescript-eslint/init-declarations
114
147
  let result;
115
148
  try {
116
- result = Reflect.apply(simulatedMethod, this, args);
149
+ result = await Reflect.apply(simulatedMethod, this, args);
117
150
  }
118
151
  finally {
119
152
  executionContext.afterMethod();
@@ -122,3 +155,14 @@ export function runtimeMethod() {
122
155
  };
123
156
  };
124
157
  }
158
+ export function runtimeMessage() {
159
+ return runtimeMethodInternal({
160
+ invocationType: "INCOMING_MESSAGE",
161
+ });
162
+ }
163
+ export function runtimeMethod() {
164
+ return runtimeMethodInternal({
165
+ invocationType: "SIGNATURE",
166
+ });
167
+ }
168
+ //# sourceMappingURL=runtimeMethod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeMethod.js","sourceRoot":"","sources":["../../src/method/runtimeMethod.ts"],"names":[],"mappings":"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"}
@@ -13,3 +13,4 @@ export function runtimeModule() {
13
13
  injectable()(target);
14
14
  };
15
15
  }
16
+ //# sourceMappingURL=decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../../src/module/decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAKtC;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;IACL;;;OAGG;IACH,MACoC,EACpC,EAAE;QACF,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
@@ -1,17 +1,19 @@
1
+ import { RuntimeMethodIdMapping } from "@proto-kit/protocol";
1
2
  import type { Runtime, RuntimeModulesRecord } from "./Runtime";
2
3
  /**
3
- * How do we encode MethodIds
4
- * A MethodId is defined as the following in little-endian
5
- * [0
6
- * ...hash(stringToField(moduleName))[0..128],
7
- * ...hash(stringToField(methodName))[0..128]
8
- * ]
4
+ * Please see `getMethodId` to learn more about
5
+ * methodId encoding
9
6
  */
10
7
  export declare class MethodIdResolver {
11
8
  private readonly runtime;
12
- private readonly modules;
13
9
  private readonly dictionary;
14
- constructor(runtime: Runtime<RuntimeModulesRecord>, modules: RuntimeModulesRecord);
10
+ constructor(runtime: Runtime<RuntimeModulesRecord>);
11
+ /**
12
+ * The purpose of this method is to provide a dictionary where
13
+ * we can look up properties like methodId and invocationType
14
+ * for each runtimeMethod using their module name and method name
15
+ */
16
+ methodIdMap(): RuntimeMethodIdMapping;
15
17
  getMethodNameFromId(methodId: bigint): [string, string] | undefined;
16
18
  getMethodId(moduleName: string, methodName: string): bigint;
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MethodIdResolver.d.ts","sourceRoot":"","sources":["../../src/runtime/MethodIdResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAM/D;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;gBAGzC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACtC,OAAO,EAAE,oBAAoB;IAmBzC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAsBnE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAQnE"}
1
+ {"version":3,"file":"MethodIdResolver.d.ts","sourceRoot":"","sources":["../../src/runtime/MethodIdResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAS5E,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE/D;;;GAGG;AACH,qBACa,gBAAgB;IAMN,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEpB;gBAG+B,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAoB5E;;;;OAIG;IACI,WAAW,IAAI,sBAAsB;IAuCrC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAcnE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAQnE"}
@@ -1,50 +1,92 @@
1
- import { singleFieldToString, stringToField } from "@proto-kit/protocol";
2
- const offset = 128n;
3
- // eslint-disable-next-line @typescript-eslint/no-magic-numbers
4
- const modulus = 2n ** (offset - 1n);
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 { filterNonUndefined } from "@proto-kit/common";
14
+ import { stringToField } from "@proto-kit/protocol";
15
+ import { Poseidon } from "o1js";
16
+ import { inject, injectable } from "tsyringe";
17
+ import { runtimeMethodTypeMetadataKey, } from "../method/runtimeMethod";
5
18
  /**
6
- * How do we encode MethodIds
7
- * A MethodId is defined as the following in little-endian
8
- * [0
9
- * ...hash(stringToField(moduleName))[0..128],
10
- * ...hash(stringToField(methodName))[0..128]
11
- * ]
19
+ * Please see `getMethodId` to learn more about
20
+ * methodId encoding
12
21
  */
13
- export class MethodIdResolver {
14
- constructor(runtime, modules) {
22
+ export let MethodIdResolver = class MethodIdResolver {
23
+ constructor(runtime) {
15
24
  this.runtime = runtime;
16
- this.modules = modules;
17
25
  this.dictionary = {};
18
26
  this.dictionary = runtime.runtimeModuleNames.reduce((dict, moduleName) => {
19
- this.runtime.assertIsValidModuleName(modules, moduleName);
20
- dict[(stringToField(moduleName).toBigInt() % modulus).toString()] =
21
- moduleName;
27
+ this.runtime.assertIsValidModuleName(moduleName);
22
28
  runtime.resolve(moduleName).runtimeMethodNames.forEach((methodName) => {
23
- dict[(stringToField(methodName).toBigInt() % modulus).toString()] =
24
- methodName;
29
+ const methodId = this.getMethodId(moduleName, methodName).toString();
30
+ dict[methodId] = {
31
+ moduleName,
32
+ methodName,
33
+ };
25
34
  });
26
35
  return dict;
27
36
  }, {});
28
37
  }
38
+ /**
39
+ * The purpose of this method is to provide a dictionary where
40
+ * we can look up properties like methodId and invocationType
41
+ * for each runtimeMethod using their module name and method name
42
+ */
43
+ methodIdMap() {
44
+ const methodIdResolver = this.runtime.dependencyContainer.resolve("MethodIdResolver");
45
+ const rawMappings = this.runtime.moduleNames.flatMap((moduleName) => {
46
+ const module = this.runtime.resolve(moduleName);
47
+ return module.runtimeMethodNames.map((method) => {
48
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
49
+ const type = Reflect.getMetadata(runtimeMethodTypeMetadataKey, module, method);
50
+ if (type !== undefined) {
51
+ return {
52
+ name: `${moduleName}.${method}`,
53
+ methodId: methodIdResolver.getMethodId(moduleName, method),
54
+ type,
55
+ };
56
+ }
57
+ return undefined;
58
+ });
59
+ });
60
+ return rawMappings
61
+ .filter(filterNonUndefined)
62
+ .reduce((acc, entry) => {
63
+ acc[entry.name] = {
64
+ methodId: entry.methodId,
65
+ type: entry.type,
66
+ };
67
+ return acc;
68
+ }, {});
69
+ }
29
70
  getMethodNameFromId(methodId) {
30
- const moduleNameHash = singleFieldToString(methodId >> offset);
31
- const methodNameHash = singleFieldToString(methodId % modulus);
32
- const moduleName = this.dictionary[moduleNameHash];
33
- // eslint-disable-next-line no-warning-comments
34
- // TODO Replace by throwing exception?
35
- if (moduleName === undefined) {
36
- return undefined;
37
- }
38
- this.runtime.assertIsValidModuleName(this.modules, moduleName);
39
- const methodName = this.dictionary[methodNameHash];
40
- if (methodName === undefined) {
71
+ const methodPath = this.dictionary[methodId.toString()];
72
+ if (methodPath === undefined) {
41
73
  return undefined;
42
74
  }
75
+ const { moduleName, methodName } = methodPath;
76
+ this.runtime.assertIsValidModuleName(moduleName);
43
77
  return [moduleName, methodName];
44
78
  }
45
79
  getMethodId(moduleName, methodName) {
46
- this.runtime.assertIsValidModuleName(this.modules, moduleName);
47
- return ((stringToField(moduleName).toBigInt() % modulus << offset) +
48
- (stringToField(methodName).toBigInt() % modulus));
80
+ this.runtime.assertIsValidModuleName(moduleName);
81
+ return Poseidon.hash([
82
+ stringToField(moduleName),
83
+ stringToField(methodName),
84
+ ]).toBigInt();
49
85
  }
50
- }
86
+ };
87
+ MethodIdResolver = __decorate([
88
+ injectable(),
89
+ __param(0, inject("Runtime")),
90
+ __metadata("design:paramtypes", [Function])
91
+ ], MethodIdResolver);
92
+ //# sourceMappingURL=MethodIdResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodIdResolver.js","sourceRoot":"","sources":["../../src/runtime/MethodIdResolver.ts"],"names":[],"mappings":"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"}