@proto-kit/module 0.1.1-develop.191 → 0.1.1-develop.239

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 (93) hide show
  1. package/dist/index.d.ts +0 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +0 -5
  4. package/dist/method/MethodParameterDecoder.d.ts.map +1 -1
  5. package/dist/method/MethodParameterDecoder.js +1 -1
  6. package/dist/method/RuntimeMethodExecutionContext.d.ts +2 -2
  7. package/dist/method/RuntimeMethodExecutionContext.d.ts.map +1 -1
  8. package/dist/method/runtimeMethod.d.ts.map +1 -1
  9. package/dist/method/runtimeMethod.js +1 -2
  10. package/dist/module/src/factories/MethodIdFactory.d.ts +9 -0
  11. package/dist/module/src/factories/MethodIdFactory.d.ts.map +1 -0
  12. package/dist/module/src/factories/MethodIdFactory.js +36 -0
  13. package/dist/module/src/index.d.ts +11 -0
  14. package/dist/module/src/index.d.ts.map +1 -0
  15. package/dist/module/src/index.js +10 -0
  16. package/dist/module/src/method/MethodParameterDecoder.d.ts +22 -0
  17. package/dist/module/src/method/MethodParameterDecoder.d.ts.map +1 -0
  18. package/dist/module/src/method/MethodParameterDecoder.js +33 -0
  19. package/dist/module/src/method/runtimeMethod.d.ts +19 -0
  20. package/dist/module/src/method/runtimeMethod.d.ts.map +1 -0
  21. package/dist/module/src/method/runtimeMethod.js +123 -0
  22. package/dist/module/src/module/decorator.d.ts +8 -0
  23. package/dist/module/src/module/decorator.d.ts.map +1 -0
  24. package/dist/module/src/module/decorator.js +15 -0
  25. package/dist/module/src/runtime/MethodIdResolver.d.ts +18 -0
  26. package/dist/module/src/runtime/MethodIdResolver.d.ts.map +1 -0
  27. package/dist/module/src/runtime/MethodIdResolver.js +50 -0
  28. package/dist/module/src/runtime/Runtime.d.ts +72 -0
  29. package/dist/module/src/runtime/Runtime.d.ts.map +1 -0
  30. package/dist/module/src/runtime/Runtime.js +184 -0
  31. package/dist/module/src/runtime/RuntimeModule.d.ts +34 -0
  32. package/dist/module/src/runtime/RuntimeModule.d.ts.map +1 -0
  33. package/dist/module/src/runtime/RuntimeModule.js +56 -0
  34. package/dist/module/src/state/InMemoryStateService.d.ts +11 -0
  35. package/dist/module/src/state/InMemoryStateService.d.ts.map +1 -0
  36. package/dist/module/src/state/InMemoryStateService.js +21 -0
  37. package/dist/module/src/state/decorator.d.ts +7 -0
  38. package/dist/module/src/state/decorator.d.ts.map +1 -0
  39. package/dist/module/src/state/decorator.js +42 -0
  40. package/dist/protocol/src/model/Option.d.ts +98 -0
  41. package/dist/protocol/src/model/Option.d.ts.map +1 -0
  42. package/dist/protocol/src/model/Option.js +98 -0
  43. package/dist/protocol/src/model/StateTransition.d.ts +96 -0
  44. package/dist/protocol/src/model/StateTransition.d.ts.map +1 -0
  45. package/dist/protocol/src/model/StateTransition.js +65 -0
  46. package/dist/protocol/src/model/network/NetworkState.d.ts +64 -0
  47. package/dist/protocol/src/model/network/NetworkState.d.ts.map +1 -0
  48. package/dist/protocol/src/model/network/NetworkState.js +12 -0
  49. package/dist/protocol/src/model/transaction/ProtocolTransaction.d.ts +70 -0
  50. package/dist/protocol/src/model/transaction/ProtocolTransaction.d.ts.map +1 -0
  51. package/dist/protocol/src/model/transaction/ProtocolTransaction.js +18 -0
  52. package/dist/protocol/src/model/transaction/RuntimeTransaction.d.ts +63 -0
  53. package/dist/protocol/src/model/transaction/RuntimeTransaction.d.ts.map +1 -0
  54. package/dist/protocol/src/model/transaction/RuntimeTransaction.js +29 -0
  55. package/dist/protocol/src/state/assert/assert.d.ts +12 -0
  56. package/dist/protocol/src/state/assert/assert.d.ts.map +1 -0
  57. package/dist/protocol/src/state/assert/assert.js +23 -0
  58. package/dist/protocol/src/state/context/RuntimeMethodExecutionContext.d.ts +60 -0
  59. package/dist/protocol/src/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  60. package/dist/protocol/src/state/context/RuntimeMethodExecutionContext.js +105 -0
  61. package/dist/runtime/Runtime.d.ts +6 -5
  62. package/dist/runtime/Runtime.d.ts.map +1 -1
  63. package/dist/runtime/Runtime.js +5 -7
  64. package/dist/runtime/RuntimeModule.d.ts +1 -3
  65. package/dist/runtime/RuntimeModule.d.ts.map +1 -1
  66. package/dist/runtime/RuntimeModule.js +1 -1
  67. package/dist/state/InMemoryStateService.d.ts +1 -4
  68. package/dist/state/InMemoryStateService.d.ts.map +1 -1
  69. package/dist/state/StateMap.d.ts +3 -3
  70. package/dist/state/StateMap.d.ts.map +1 -1
  71. package/dist/state/decorator.d.ts.map +1 -1
  72. package/dist/state/decorator.js +1 -1
  73. package/package.json +3 -4
  74. package/src/index.ts +0 -5
  75. package/src/method/MethodParameterDecoder.ts +3 -1
  76. package/src/method/runtimeMethod.ts +1 -2
  77. package/src/runtime/Runtime.ts +12 -10
  78. package/src/runtime/RuntimeModule.ts +5 -6
  79. package/src/state/InMemoryStateService.ts +1 -5
  80. package/src/state/decorator.ts +2 -4
  81. package/test/Runtime.test.ts +2 -2
  82. package/test/modules/Admin.ts +1 -1
  83. package/test/modules/Balances.test.ts +13 -8
  84. package/test/modules/Balances.ts +7 -3
  85. package/test/modules/State.test.ts +88 -0
  86. package/test/modules/methodId.test.ts +0 -1
  87. package/test/transaction.test.ts +1 -1
  88. package/src/method/RuntimeMethodExecutionContext.ts +0 -111
  89. package/src/method/assert.test.ts +0 -49
  90. package/src/method/assert.ts +0 -27
  91. package/src/state/State.ts +0 -154
  92. package/src/state/StateMap.ts +0 -69
  93. package/src/state/StateServiceProvider.ts +0 -24
@@ -1,154 +0,0 @@
1
- /* eslint-disable new-cap */
2
-
3
- import { Mixin } from "ts-mixer";
4
- import { Bool, Field, Provable, type FlexibleProvablePure } from "snarkyjs";
5
- import { container } from "tsyringe";
6
- import { Option, StateTransition, type Path } from "@proto-kit/protocol";
7
-
8
- import { PartialRuntime } from "../runtime/RuntimeModule.js";
9
- import { RuntimeMethodExecutionContext } from "../method/RuntimeMethodExecutionContext.js";
10
-
11
- export class WithPath {
12
- public path?: Field;
13
-
14
- public hasPathOrFail(): asserts this is { path: Path } {
15
- if (!this.path) {
16
- throw new Error(
17
- "Could not find 'path', did you forget to add '@state' to your state property?"
18
- );
19
- }
20
- }
21
- }
22
-
23
- export class WithRuntime {
24
- public runtime?: PartialRuntime;
25
-
26
- public hasRuntimeOrFail(): asserts this is {
27
- runtime: PartialRuntime;
28
- } {
29
- if (!this.runtime) {
30
- throw new Error(
31
- "Could not find 'runtime', did you forget to add '@state' to your state property?"
32
- );
33
- }
34
- }
35
- }
36
-
37
- /**
38
- * Utilities for runtime module state, such as get/set
39
- */
40
- export class State<Value> extends Mixin(WithPath, WithRuntime) {
41
- /**
42
- * Creates a new state wrapper for the provided value type.
43
- *
44
- * @param valueType - Type of value to be stored (e.g. UInt64, Struct, ...)
45
- * @returns New state for the given value type.
46
- */
47
- public static from<Value>(valueType: FlexibleProvablePure<Value>) {
48
- return new State<Value>(valueType);
49
- }
50
-
51
- /**
52
- * Computes a dummy value for the given value type.
53
- *
54
- * @param valueType - Value type to generate the dummy value for
55
- * @returns Dummy value for the given value type
56
- */
57
- public static dummyValue<Value>(
58
- valueType: FlexibleProvablePure<Value>
59
- ): Value {
60
- const length = valueType.sizeInFields();
61
- const fields = Array.from({ length }, () => Field(0));
62
-
63
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
64
- return valueType.fromFields(fields) as Value;
65
- }
66
-
67
- public constructor(public valueType: FlexibleProvablePure<Value>) {
68
- super();
69
- }
70
-
71
- /**
72
- * Provides an in-circuit witness for the current state representation,
73
- * and constructs an Option out of it.
74
- *
75
- * @returns Optional value of the current state
76
- */
77
- private witnessState() {
78
- // get the value from storage, or return a dummy value instead
79
- const value = Provable.witness(this.valueType, () => {
80
- this.hasRuntimeOrFail();
81
- this.hasPathOrFail();
82
-
83
- const fields = this.runtime.stateService.get(this.path);
84
- if (fields) {
85
- // eslint-disable-next-line max-len
86
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
87
- return this.valueType.fromFields(fields) as Value;
88
- }
89
-
90
- return State.dummyValue(this.valueType);
91
- });
92
-
93
- // check if the value exists in the storage or not
94
- const isSome = Provable.witness(Bool, () => {
95
- this.hasRuntimeOrFail();
96
- this.hasPathOrFail();
97
-
98
- const fields = this.runtime.stateService.get(this.path);
99
-
100
- return Bool(fields !== undefined);
101
- });
102
-
103
- return Option.from(isSome, value, this.valueType);
104
- }
105
-
106
- /**
107
- * Retrieves the current state and creates a state transition
108
- * anchoring the use of the current state value in the circuit.
109
- *
110
- * @returns Option representation of the current state.
111
- */
112
- public get(): Option<Value> {
113
- const option = this.witnessState();
114
-
115
- this.hasPathOrFail();
116
-
117
- const stateTransition = StateTransition.from(this.path, option);
118
-
119
- container
120
- .resolve(RuntimeMethodExecutionContext)
121
- .addStateTransition(stateTransition);
122
-
123
- return option;
124
- }
125
-
126
- /**
127
- * Sets a new state value by creating a state transition from
128
- * the current value to the newly set value.
129
- *
130
- * The newly set value isn't available via state.get(), since the
131
- * state transitions are not applied within the same circuit.
132
- * You can however store and access your new value in
133
- * a separate circuit variable.
134
- *
135
- * @param value - Value to be set as the current state
136
- */
137
- public set(value: Value) {
138
- // link the transition to the current state
139
- const fromOption = this.witnessState();
140
- const toOption = Option.from(Bool(true), value, this.valueType);
141
-
142
- this.hasPathOrFail();
143
-
144
- const stateTransition = StateTransition.fromTo(
145
- this.path,
146
- fromOption,
147
- toOption
148
- );
149
-
150
- container
151
- .resolve(RuntimeMethodExecutionContext)
152
- .addStateTransition(stateTransition);
153
- }
154
- }
@@ -1,69 +0,0 @@
1
- import type { Field, FlexibleProvablePure } from "snarkyjs";
2
- import { Path, type Option } from "@proto-kit/protocol";
3
- import { Mixin } from "ts-mixer";
4
-
5
- import { State, WithRuntime, WithPath } from "./State.js";
6
-
7
- /**
8
- * Map-like wrapper for state
9
- */
10
- // eslint-disable-next-line new-cap
11
- export class StateMap<KeyType, ValueType> extends Mixin(WithPath, WithRuntime) {
12
- /**
13
- * Create a new state map with the given key and value types
14
- *
15
- * @param keyType - Type to be used as a key
16
- * @param valueType - Type to be stored as a value
17
- * @returns State map with provided key and value types.
18
- */
19
- public static from<KeyType, ValueType>(
20
- keyType: FlexibleProvablePure<KeyType>,
21
- valueType: FlexibleProvablePure<ValueType>
22
- ) {
23
- return new StateMap<KeyType, ValueType>(keyType, valueType);
24
- }
25
-
26
- public constructor(
27
- public keyType: FlexibleProvablePure<KeyType>,
28
- public valueType: FlexibleProvablePure<ValueType>
29
- ) {
30
- super();
31
- }
32
-
33
- public getPath(key: KeyType): Field {
34
- this.hasPathOrFail();
35
- return Path.fromKey(this.path, this.keyType, key);
36
- }
37
-
38
- /**
39
- * Obtains a value for the provided key in the current state map.
40
- *
41
- * @param key - Key to obtain the state for
42
- * @returns Value for the provided key.
43
- */
44
- public get(key: KeyType): Option<ValueType> {
45
- const state = State.from(this.valueType);
46
- this.hasPathOrFail();
47
- this.hasRuntimeOrFail();
48
-
49
- state.path = this.getPath(key);
50
- state.runtime = this.runtime;
51
- return state.get();
52
- }
53
-
54
- /**
55
- * Sets a value for the given key in the current state map.
56
- *
57
- * @param key - Key to store the value under
58
- * @param value - Value to be stored under the given key
59
- */
60
- public set(key: KeyType, value: ValueType) {
61
- const state = State.from(this.valueType);
62
- this.hasPathOrFail();
63
- this.hasRuntimeOrFail();
64
-
65
- state.path = Path.fromKey(this.path, this.keyType, key);
66
- state.runtime = this.runtime;
67
- state.set(value);
68
- }
69
- }
@@ -1,24 +0,0 @@
1
- import { inject, injectable } from "tsyringe";
2
-
3
- import { StateService } from "./InMemoryStateService";
4
-
5
- @injectable()
6
- export class StateServiceProvider {
7
- private readonly defaultStateService: StateService = this.currentStateService;
8
-
9
- public constructor(
10
- @inject("StateService") private currentStateService: StateService
11
- ) {}
12
-
13
- public get stateService(): StateService {
14
- return this.currentStateService;
15
- }
16
-
17
- public setCurrentStateService(service: StateService) {
18
- this.currentStateService = service;
19
- }
20
-
21
- public resetToDefault() {
22
- this.currentStateService = this.defaultStateService;
23
- }
24
- }