@midnames/sdk 0.2.1 → 1.0.1

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 (55) hide show
  1. package/dist/controller-types.d.ts +104 -0
  2. package/dist/controller-types.js +16 -0
  3. package/dist/core.d.ts +13 -9
  4. package/dist/core.js +158 -67
  5. package/dist/errors.d.ts +20 -0
  6. package/dist/errors.js +39 -0
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.js +5 -0
  9. package/dist/managed/index.d.ts +3 -9
  10. package/dist/managed/index.js +3 -5
  11. package/dist/managed/index.js.map +1 -1
  12. package/dist/managed/leaf.compact +97 -65
  13. package/dist/managed/managed/leaf/contract/index.d.ts +197 -0
  14. package/dist/managed/managed/leaf/contract/index.js +3094 -0
  15. package/dist/managed/managed/leaf/contract/index.js.map +8 -0
  16. package/dist/managed/utils.d.ts +5 -0
  17. package/dist/managed/utils.js +19 -0
  18. package/dist/managed/utils.js.map +1 -0
  19. package/dist/operations.d.ts +49 -0
  20. package/dist/operations.js +137 -0
  21. package/dist/provider.d.ts +10 -4
  22. package/dist/provider.js +32 -8
  23. package/dist/react/DomainProfileWidget.d.ts +2 -2
  24. package/dist/react/DomainProfileWidget.js +11 -8
  25. package/dist/react/HolographicCard.d.ts +2 -2
  26. package/dist/react/HolographicCard.js +10 -7
  27. package/dist/react/index.d.ts +2 -2
  28. package/dist/react/index.js +1 -2
  29. package/dist/results.d.ts +38 -0
  30. package/dist/results.js +88 -0
  31. package/dist/types.d.ts +7 -41
  32. package/dist/types.js +1 -61
  33. package/dist/utils/address.js +6 -5
  34. package/dist/utils/domain.d.ts +6 -0
  35. package/dist/utils/domain.js +19 -1
  36. package/dist/utils/imageResolver.d.ts +8 -0
  37. package/dist/utils/imageResolver.js +89 -0
  38. package/dist/utils/sanitize.d.ts +6 -0
  39. package/dist/utils/sanitize.js +28 -0
  40. package/exported.md +1 -1
  41. package/managed/index.js +3 -5
  42. package/managed/index.js.map +1 -1
  43. package/managed/leaf.compact +97 -65
  44. package/managed/managed/leaf/contract/index.js +3094 -0
  45. package/managed/managed/leaf/contract/index.js.map +8 -0
  46. package/managed/utils.js +19 -0
  47. package/managed/utils.js.map +1 -0
  48. package/package.json +22 -11
  49. package/dist/managed/managed/leaf/contract/index.cjs +0 -2789
  50. package/dist/managed/managed/leaf/contract/index.cjs.map +0 -8
  51. package/dist/managed/managed/leaf/contract/index.d.cts +0 -146
  52. package/managed/managed/leaf/contract/index.cjs +0 -2789
  53. package/managed/managed/leaf/contract/index.cjs.map +0 -8
  54. package/managed/managed/leaf/contract/index.d.cts +0 -146
  55. package/tsconfig.tsbuildinfo +0 -1
@@ -1,6 +1,6 @@
1
- pragma language_version 0.17;
1
+ pragma language_version >= 0.20;
2
2
  /// # Unshielded Nameservice
3
- ///
3
+ ///
4
4
  /// Example:
5
5
  /// The `domain.mid` register would be deployed with
6
6
  /// - parent_domain: "mid"
@@ -20,30 +20,30 @@ pragma language_version 0.17;
20
20
  /// - target: arbitrary
21
21
  /// - domain: "hyper"
22
22
  /// - fields for the `hyper.sub.domain.mid` domain.
23
- ///
24
- ///
23
+ ///
24
+ ///
25
25
  import CompactStandardLibrary;
26
26
 
27
27
  // This is sealed. If the domain is sold in the parent contract
28
28
  // The new owner should deploy a new resolver.
29
- export sealed ledger PARENT_DOMAIN: Maybe<Opaque<'string'>>;
29
+ export sealed ledger PARENT_DOMAIN: Maybe<Bytes<32>>;
30
30
  export sealed ledger PARENT_RESOLVER: ContractAddress;
31
- export sealed ledger DOMAIN: Maybe<Opaque<'string'>>;
31
+ export sealed ledger DOMAIN: Maybe<Bytes<32>>;
32
32
 
33
- export ledger DOMAIN_OWNER: ZswapCoinPublicKey;
34
- // This domain could target either a wallet or a contract
33
+ export ledger DOMAIN_OWNER: ZswapCoinPublicKey;
34
+ // This domain could target either a wallet or a contract
35
35
  export ledger DOMAIN_TARGET: Either<ZswapCoinPublicKey, ContractAddress>;
36
36
 
37
37
  // Map<domain, (owner, resolver)>.
38
- export ledger domains: Map<Opaque<'string'>, DomainData>;
38
+ export ledger domains: Map<Bytes<32>, DomainData>;
39
39
 
40
40
  // Set of domains saved here owned by address.
41
- export ledger domains_owned: Map<ZswapCoinPublicKey, Set<Opaque<'string'>>>;
41
+ export ledger domains_owned: Map<ZswapCoinPublicKey, Set<Bytes<32>>>;
42
42
 
43
43
  export ledger fields: Map<Opaque<'string'>, Opaque<'string'>>;
44
44
 
45
45
 
46
- export { DomainData, Either, Maybe, CoinInfo }
46
+ export { DomainData, Either, Maybe }
47
47
  struct DomainData {
48
48
  owner: ZswapCoinPublicKey,
49
49
  resolver: ContractAddress
@@ -51,12 +51,14 @@ struct DomainData {
51
51
 
52
52
 
53
53
  constructor(
54
- parent_domain: Maybe<Opaque<'string'>>,
54
+ parent_domain: Maybe<Bytes<32>>,
55
55
  parent_resolver: ContractAddress,
56
56
  target: Either<ZswapCoinPublicKey, ContractAddress>,
57
- domain: Maybe<Opaque<'string'>>,
57
+ domain: Maybe<Bytes<32>>,
58
58
  coin_color: Bytes<32>,
59
- domain_cost: Uint<64>,
59
+ cost_short: Uint<128>,
60
+ cost_med: Uint<128>,
61
+ cost_long: Uint<128>,
60
62
  kvs: Vector<10, Maybe<[Opaque<'string'>, Opaque<'string'>]>>
61
63
  ) {
62
64
  DOMAIN_OWNER = ownPublicKey();
@@ -65,68 +67,88 @@ constructor(
65
67
  DOMAIN_TARGET = disclose(target);
66
68
  DOMAIN = disclose(domain);
67
69
  COIN_COLOR = disclose(coin_color);
68
- DOMAIN_COST = disclose(domain_cost);
70
+ COST_SHORT = disclose(cost_short);
71
+ COST_MED = disclose(cost_med);
72
+ COST_LONG = disclose(cost_long);
69
73
  for (const kv of kvs) {
70
- if (disclose(kv) == none<[Opaque<'string'>, Opaque<'string'>]>()) {
71
- return;
74
+ if (disclose(kv) != none<[Opaque<'string'>, Opaque<'string'>]>()) {
75
+ fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
72
76
  }
73
- fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
74
77
  }
75
78
  }
76
79
 
77
- // ===========================================
78
- // Circuits
79
- // ===========================================
80
+ // ===========================================
81
+ // Circuits
82
+ // ===========================================
80
83
 
81
84
  export ledger COIN_COLOR: Bytes<32>;
82
- export ledger DOMAIN_COST: Uint<64>;
85
+ export ledger COST_SHORT: Uint<128>; // ≤3 chars
86
+ export ledger COST_MED: Uint<128>; // 4 chars
87
+ export ledger COST_LONG: Uint<128>; // 5+ chars
83
88
 
84
- export circuit update_color(c: Bytes<32>) : [] {
89
+ export circuit update_color(c: Bytes<32>): [] {
85
90
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the owner");
86
91
  COIN_COLOR = disclose(c);
87
92
  }
88
93
 
89
- export circuit update_cost(c: Uint<64>) : [] {
94
+ export circuit update_costs(cost_short: Uint<128>, cost_med: Uint<128>, cost_long: Uint<128>): [] {
90
95
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the owner");
91
- DOMAIN_COST = disclose(c);
96
+ COST_SHORT = disclose(cost_short);
97
+ COST_MED = disclose(cost_med);
98
+ COST_LONG = disclose(cost_long);
92
99
  }
93
100
 
94
101
  export circuit update_target_and_fields(
95
- new_target: Either<ZswapCoinPublicKey, ContractAddress>,
102
+ new_target: Either<ZswapCoinPublicKey, ContractAddress>,
96
103
  kvs: Vector<10, Maybe<[Opaque<'string'>, Opaque<'string'>]>>
97
104
  ) : [] {
98
105
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
99
106
  for (const kv of kvs) {
100
- if (disclose(kv) == none<[Opaque<'string'>, Opaque<'string'>]>()) {
101
- return;
107
+ if (disclose(kv) != none<[Opaque<'string'>, Opaque<'string'>]>()) {
108
+ fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
102
109
  }
103
- fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
104
110
  }
105
111
  DOMAIN_TARGET = disclose(new_target);
106
112
 
107
113
  }
108
114
 
109
- export circuit buy_domain_for(owner: ZswapCoinPublicKey, domain: Opaque<'string'>, resolver: ContractAddress, payment: CoinInfo): [] {
115
+ export circuit buy_domain_for(owner: ZswapCoinPublicKey, domain: Bytes<32>, len: Uint<32>, resolver: ContractAddress): [] {
116
+ assert(len <= 32, "len must be <= 32");
117
+ assert(len >= 1, "domain name cannot be empty");
118
+
119
+ const valid = fold(
120
+ (acc: Boolean, byte: Uint<8>, i: Uint<8>): Boolean =>
121
+ acc && (((i as Uint<32>) < len) || (byte == 255)),
122
+ true, domain,
123
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
124
+ );
125
+ assert(valid, "Invalid domain key padding");
126
+
110
127
  assert(!domains.member(disclose(domain)), "Domain already exists");
111
128
 
112
- const d_payment = disclose(payment);
113
- assert(d_payment.value == DOMAIN_COST, "Wrong amount");
114
- assert(d_payment.color == COIN_COLOR, "Wrong coin");
115
- receive(d_payment);
116
- sendImmediate(d_payment, left<ZswapCoinPublicKey, ContractAddress>(DOMAIN_OWNER), DOMAIN_COST);
117
-
118
- const d_owner = disclose(owner);
129
+ // pricing: shared color, per-tier cost
130
+ const d_len = disclose(len);
131
+ if (d_len <= 3) {
132
+ receiveUnshielded(COIN_COLOR, COST_SHORT);
133
+ sendUnshielded(COIN_COLOR, COST_SHORT, right<ContractAddress, UserAddress>(UserAddress { bytes: DOMAIN_OWNER.bytes }));
134
+ } else if (d_len == 4) {
135
+ receiveUnshielded(COIN_COLOR, COST_MED);
136
+ sendUnshielded(COIN_COLOR, COST_MED, right<ContractAddress, UserAddress>(UserAddress { bytes: DOMAIN_OWNER.bytes }));
137
+ } else {
138
+ receiveUnshielded(COIN_COLOR, COST_LONG);
139
+ sendUnshielded(COIN_COLOR, COST_LONG, right<ContractAddress, UserAddress>(UserAddress { bytes: DOMAIN_OWNER.bytes }));
140
+ }
119
141
 
120
- const domain_data = DomainData {
142
+ const d_owner = disclose(owner);
143
+ const domain_data = DomainData {
121
144
  d_owner,
122
145
  disclose(resolver)
123
146
  };
124
-
125
147
  domains.insert(disclose(domain), disclose(domain_data));
126
148
 
127
149
  // Track domains owned by address
128
150
  if (!domains_owned.member(d_owner)) {
129
- domains_owned.insert(d_owner, default<Set<Opaque<'string'>>>);
151
+ domains_owned.insert(d_owner, default<Set<Bytes<32>>>);
130
152
  }
131
153
  domains_owned.lookup(d_owner).insert(disclose(domain));
132
154
  }
@@ -134,10 +156,9 @@ export circuit buy_domain_for(owner: ZswapCoinPublicKey, domain: Opaque<'string'
134
156
  export circuit add_multiple_fields(kvs: Vector<10, Maybe<[Opaque<'string'>, Opaque<'string'>]>>) : [] {
135
157
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
136
158
  for (const kv of kvs) {
137
- if (disclose(kv) == none<[Opaque<'string'>, Opaque<'string'>]>()) {
138
- return;
159
+ if (disclose(kv) != none<[Opaque<'string'>, Opaque<'string'>]>()) {
160
+ fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
139
161
  }
140
- fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
141
162
  }
142
163
  }
143
164
 
@@ -151,67 +172,78 @@ export circuit clear_field(k: Opaque<'string'>): [] {
151
172
  fields.remove(disclose(k));
152
173
  }
153
174
 
154
- export circuit clear_all_fields(domain: Opaque<'string'>): [] {
175
+ export circuit clear_all_fields(): [] {
155
176
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
156
177
  fields.resetToDefault();
157
178
  }
158
179
 
159
- export circuit register_domain_for(owner: ZswapCoinPublicKey, domain: Opaque<'string'>, resolver: ContractAddress): [] {
180
+ export circuit register_domain_for(owner: ZswapCoinPublicKey, domain: Bytes<32>, len: Uint<32>, resolver: ContractAddress): [] {
181
+ assert(len <= 32, "len must be <= 32");
182
+ assert(len >= 1, "domain name cannot be empty");
183
+
184
+ const valid = fold(
185
+ (acc: Boolean, byte: Uint<8>, i: Uint<8>): Boolean =>
186
+ acc && (((i as Uint<32>) < len) || (byte == 255)),
187
+ true, domain,
188
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
189
+ );
190
+ assert(valid, "Invalid domain key padding");
191
+
160
192
  assert(!domains.member(disclose(domain)), "Domain already exists");
161
193
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
162
194
 
163
- const d_owner = disclose(owner);
195
+ const d_owner = disclose(owner);
164
196
  const domain_data = DomainData {
165
197
  d_owner,
166
198
  disclose(resolver)
167
199
  };
168
-
200
+
169
201
  domains.insert(disclose(domain), disclose(domain_data));
170
-
202
+
171
203
  // Track domains owned by address
172
204
  if (!domains_owned.member(d_owner)) {
173
- domains_owned.insert(d_owner, default<Set<Opaque<'string'>>>);
205
+ domains_owned.insert(d_owner, default<Set<Bytes<32>>>);
174
206
  }
175
207
  domains_owned.lookup(d_owner).insert(disclose(domain));
176
208
  }
177
209
 
178
- export circuit set_resolver(domain: Opaque<'string'>, resolver: ContractAddress): [] {
210
+ export circuit set_resolver(domain: Bytes<32>, resolver: ContractAddress): [] {
179
211
  assert(domains.member(disclose(domain)), "Domain does not exist");
180
-
212
+
181
213
  const current_data = domains.lookup(disclose(domain));
182
214
  assert(current_data.owner == ownPublicKey(), "Not the domain owner");
183
-
215
+
184
216
  const new_data = DomainData {
185
217
  current_data.owner,
186
218
  disclose(resolver)
187
219
  };
188
-
220
+
189
221
  domains.insert(disclose(domain), disclose(new_data));
190
222
  }
191
223
 
192
224
  export circuit update_domain_target(new_target: Either<ZswapCoinPublicKey, ContractAddress>): [] {
193
225
  assert(DOMAIN_OWNER == ownPublicKey(), "Not the contract owner");
194
-
226
+
195
227
  DOMAIN_TARGET = disclose(new_target);
196
228
  }
197
229
 
198
- export circuit transfer_domain(domain: Opaque<'string'>, new_owner: ZswapCoinPublicKey): [] {
230
+ export circuit transfer_domain(domain: Bytes<32>, new_owner: ZswapCoinPublicKey): [] {
199
231
  assert(domains.member(disclose(domain)), "Domain does not exist");
200
-
232
+
201
233
  const current_data = domains.lookup(disclose(domain));
202
234
  assert(current_data.owner == ownPublicKey(), "Not the domain owner");
203
-
235
+
204
236
  const new_data = DomainData {
205
237
  disclose(new_owner),
206
238
  current_data.resolver
207
239
  };
208
-
240
+
209
241
  domains.insert(disclose(domain), disclose(new_data));
210
-
242
+
211
243
  // Update ownership tracking
212
244
  domains_owned.lookup(ownPublicKey()).remove(disclose(domain));
213
245
  if (!domains_owned.member(disclose(new_owner))) {
214
- domains_owned.insert(disclose(new_owner), default<Set<Opaque<'string'>>>);
246
+ domains_owned.insert(disclose(new_owner), default<Set<Bytes<32>>>);
215
247
  }
216
248
  domains_owned.lookup(disclose(new_owner)).insert(disclose(domain));
217
249
  }
@@ -225,12 +257,12 @@ export circuit change_owner(new_owner: ZswapCoinPublicKey) : [] {
225
257
 
226
258
  /*
227
259
  Read only, but not pure, so let's not use those
228
- export circuit resolve(domain: Opaque<'string'>): DomainData {
260
+ export circuit resolve(domain: Bytes<32>): DomainData {
229
261
  assert(domains.member(disclose(domain)), "Domain does not exist");
230
262
  return domains.lookup(disclose(domain));
231
263
  }
232
264
 
233
- export circuit get_parent_domain(): Maybe<Opaque<'string'>> {
265
+ export circuit get_parent_domain(): Maybe<Bytes<32>> {
234
266
  return PARENT_DOMAIN;
235
267
  }
236
268
 
@@ -238,7 +270,7 @@ export circuit get_contract_owner(): ZswapCoinPublicKey {
238
270
  return DOMAIN_OWNER;
239
271
  }
240
272
 
241
- export circuit get_domain(): Maybe<Opaque<'string'>> {
273
+ export circuit get_domain(): Maybe<Bytes<32>> {
242
274
  return DOMAIN;
243
275
  }
244
276
 
@@ -250,9 +282,9 @@ export circuit get_parent_resolver(): ContractAddress {
250
282
  return PARENT_RESOLVER;
251
283
  }
252
284
 
253
- export circuit addr_owns_domain(addr: ZswapCoinPublicKey, domain: Opaque<'string'>): Boolean {
285
+ export circuit addr_owns_domain(addr: ZswapCoinPublicKey, domain: Bytes<32>): Boolean {
254
286
  assert(domains_owned.member(disclose(addr)), "Address does not own domains in this register");
255
287
  return domains_owned.lookup(disclose(addr)).member(disclose(domain));
256
288
  }
257
289
 
258
- */
290
+ */