@midnames/sdk 0.1.7 → 0.1.8

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.
@@ -1,80 +0,0 @@
1
- import { getNetworkId, getZswapNetworkId, NetworkId } from '@midnight-ntwrk/midnight-js-network-id';
2
- import { ShieldedCoinPublicKey } from '@midnight-ntwrk/wallet-sdk-address-format';
3
- import { ledger } from '../../managed/index.js';
4
- import { formatContractAddress } from '../utils/address.js';
5
- import { normalizeDomain } from '../utils/domain.js';
6
- import { success, failure, NetworkError, ContractNotFoundError, DomainNotFoundError, InvalidDomainError, ProviderError } from '../types.js';
7
- import { getProviderOrThrow } from '../provider.js';
8
- const TLD = 'night';
9
- export const TESTNET_TLD_ADDRESS = '0200c46ddd9a7fe134e7126132bf48d573e3e70a06fc2b82edb2c9f31584536efa01';
10
- export function getDefaultTldAddress() {
11
- const currentNetwork = getNetworkId();
12
- switch (currentNetwork) {
13
- case NetworkId.TestNet:
14
- return TESTNET_TLD_ADDRESS;
15
- default:
16
- throw new Error('Provide an address to use the resolver on a Standalone Network.');
17
- }
18
- }
19
- function getTargetFromLedger(contractLedger) {
20
- const target = contractLedger.DOMAIN_TARGET;
21
- if (target.is_left) {
22
- const coinPublicKey = new ShieldedCoinPublicKey(Buffer.from(target.left.bytes));
23
- return ShieldedCoinPublicKey.codec.encode(getZswapNetworkId(), coinPublicKey).asString();
24
- }
25
- else {
26
- return formatContractAddress(target.right.bytes);
27
- }
28
- }
29
- async function queryContractStateSafely(publicDataProvider, contractAddress) {
30
- try {
31
- const contractState = await publicDataProvider.queryContractState(contractAddress);
32
- if (contractState == null) {
33
- return failure(new ContractNotFoundError(contractAddress));
34
- }
35
- return success(contractState);
36
- }
37
- catch (error) {
38
- return failure(new ProviderError(`Failed to query contract state: ${error instanceof Error ? error.message : String(error)}`, error));
39
- }
40
- }
41
- export async function resolveDomain(domain, options = {}) {
42
- const publicDataProvider = getProviderOrThrow(options.provider);
43
- const tldContractAddress = options.tldAddress || getDefaultTldAddress();
44
- const fullDomain = normalizeDomain(domain);
45
- try {
46
- const domainParts = fullDomain.split('.');
47
- if (domainParts[domainParts.length - 1] !== TLD) {
48
- return failure(new InvalidDomainError(fullDomain, `Domain must end with .${TLD}`));
49
- }
50
- const parsedDomain = domainParts.slice(0, -1).reverse();
51
- let currentResolver = tldContractAddress;
52
- if (parsedDomain.length === 0) {
53
- const contractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
54
- if (!contractStateResult.success)
55
- return failure(contractStateResult.error);
56
- const contractLedger = ledger(contractStateResult.data.data);
57
- return success(getTargetFromLedger(contractLedger));
58
- }
59
- for (const part of parsedDomain) {
60
- const contractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
61
- if (!contractStateResult.success)
62
- return failure(contractStateResult.error);
63
- const contractLedger = ledger(contractStateResult.data.data);
64
- if (!contractLedger.domains.member(part)) {
65
- return failure(new DomainNotFoundError(`${part} in ${fullDomain}`));
66
- }
67
- const domainData = contractLedger.domains.lookup(part);
68
- const resolverBytes = domainData.resolver.bytes;
69
- currentResolver = formatContractAddress(resolverBytes);
70
- }
71
- const finalContractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
72
- if (!finalContractStateResult.success)
73
- return failure(finalContractStateResult.error);
74
- const finalLedger = ledger(finalContractStateResult.data.data);
75
- return success(getTargetFromLedger(finalLedger));
76
- }
77
- catch (error) {
78
- return failure(new NetworkError(`Failed to resolve domain: ${error instanceof Error ? error.message : String(error)}`, error));
79
- }
80
- }
@@ -1,3 +0,0 @@
1
- export * from './core.js';
2
- export * from './info.js';
3
- export * from '../provider.js';
@@ -1,6 +0,0 @@
1
- // Core resolution functions
2
- export * from './core.js';
3
- // Domain info functions
4
- export * from './info.js';
5
- // Re-export provider utilities
6
- export * from '../provider.js';
@@ -1,20 +0,0 @@
1
- import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
2
- import type { DomainInfo, DomainSettings, DomainProfileData, Result } from '../types.js';
3
- export declare function getDomainInfo(contractAddress: string, domainName: string, options?: {
4
- provider?: PublicDataProvider;
5
- }): Promise<Result<DomainInfo>>;
6
- export declare function getDomainInfoByResolving(fullDomain: string, options?: {
7
- provider?: PublicDataProvider;
8
- }): Promise<Result<DomainInfo>>;
9
- export declare function getDomainFields(contractAddress: string, options?: {
10
- provider?: PublicDataProvider;
11
- }): Promise<Result<Array<[string, string]>>>;
12
- export declare function getNamespacedDomainFields(_parentContractAddress: string, fullDomainName: string, options?: {
13
- provider?: PublicDataProvider;
14
- }): Promise<Result<Array<[string, string]>>>;
15
- export declare function getDomainSettings(contractAddress: string, options?: {
16
- provider?: PublicDataProvider;
17
- }): Promise<Result<DomainSettings>>;
18
- export declare function getDomainProfile(fullDomain: string, options?: {
19
- provider?: PublicDataProvider;
20
- }): Promise<Result<DomainProfileData>>;
@@ -1,152 +0,0 @@
1
- import { getZswapNetworkId } from '@midnight-ntwrk/midnight-js-network-id';
2
- import { ShieldedCoinPublicKey } from '@midnight-ntwrk/wallet-sdk-address-format';
3
- import { ledger } from '../../managed/index.js';
4
- import { formatContractAddress } from '../utils/address.js';
5
- import { normalizeDomain, parseFullDomain } from '../utils/domain.js';
6
- import { success, failure, NetworkError, ContractNotFoundError, DomainNotFoundError, InvalidDomainError, ProviderError } from '../types.js';
7
- import { getProviderOrThrow } from '../provider.js';
8
- import { resolveDomain, getDefaultTldAddress } from './core.js';
9
- async function queryContractStateSafely(publicDataProvider, contractAddress) {
10
- try {
11
- const contractState = await publicDataProvider.queryContractState(contractAddress);
12
- if (contractState == null) {
13
- return failure(new ContractNotFoundError(contractAddress));
14
- }
15
- return success(contractState);
16
- }
17
- catch (error) {
18
- return failure(new ProviderError(`Failed to query contract state: ${error instanceof Error ? error.message : String(error)}`, error));
19
- }
20
- }
21
- async function getResolverAddress(publicDataProvider, fullDomain) {
22
- try {
23
- const tldAddress = getDefaultTldAddress();
24
- const domainParts = fullDomain.split('.');
25
- const traversalParts = domainParts.slice(0, -1).reverse();
26
- if (traversalParts.length === 0)
27
- return success(tldAddress);
28
- let currentResolver = tldAddress;
29
- for (const part of traversalParts) {
30
- const contractStateResult = await queryContractStateSafely(publicDataProvider, currentResolver);
31
- if (!contractStateResult.success) {
32
- return failure(contractStateResult.error);
33
- }
34
- const contractLedger = ledger(contractStateResult.data.data);
35
- if (!contractLedger.domains.member(part)) {
36
- return failure(new DomainNotFoundError(`${part} in ${currentResolver}`));
37
- }
38
- const domainData = contractLedger.domains.lookup(part);
39
- const resolverBytes = domainData.resolver.bytes;
40
- currentResolver = formatContractAddress(resolverBytes);
41
- }
42
- return success(currentResolver);
43
- }
44
- catch (error) {
45
- return failure(new NetworkError(`Failed to get resolver address: ${error instanceof Error ? error.message : String(error)}`, error));
46
- }
47
- }
48
- export async function getDomainInfo(contractAddress, domainName, options = {}) {
49
- const publicDataProvider = getProviderOrThrow(options.provider);
50
- try {
51
- const contractStateResult = await queryContractStateSafely(publicDataProvider, contractAddress);
52
- if (!contractStateResult.success)
53
- return failure(contractStateResult.error);
54
- const contractLedger = ledger(contractStateResult.data.data);
55
- if (!contractLedger.domains.member(domainName)) {
56
- return failure(new DomainNotFoundError(domainName));
57
- }
58
- const domainData = contractLedger.domains.lookup(domainName);
59
- const ownerCoinPublicKey = new ShieldedCoinPublicKey(Buffer.from(domainData.owner.bytes));
60
- const ownerAddress = ShieldedCoinPublicKey.codec.encode(getZswapNetworkId(), ownerCoinPublicKey).asString();
61
- return success({ owner: ownerAddress, resolver: formatContractAddress(domainData.resolver.bytes) });
62
- }
63
- catch (error) {
64
- return failure(new NetworkError(`Failed to get domain info: ${error instanceof Error ? error.message : String(error)}`, error));
65
- }
66
- }
67
- export async function getDomainInfoByResolving(fullDomain, options = {}) {
68
- const publicDataProvider = getProviderOrThrow(options.provider);
69
- try {
70
- const normalizedDomain = normalizeDomain(fullDomain);
71
- const parsed = parseFullDomain(normalizedDomain);
72
- if (!parsed.isValid) {
73
- return failure(new InvalidDomainError(fullDomain, 'Invalid domain format'));
74
- }
75
- const parentContractAddressResult = await getResolverAddress(publicDataProvider, parsed.parentDomainPath);
76
- if (!parentContractAddressResult.success)
77
- return failure(parentContractAddressResult.error);
78
- const infoResult = await getDomainInfo(parentContractAddressResult.data, parsed.domainName, { provider: publicDataProvider });
79
- if (!infoResult.success)
80
- return failure(infoResult.error);
81
- return success({ ...infoResult.data, contractAddress: parentContractAddressResult.data });
82
- }
83
- catch (error) {
84
- return failure(new NetworkError(`Failed to get domain info by resolving: ${error instanceof Error ? error.message : String(error)}`, error));
85
- }
86
- }
87
- export async function getDomainFields(contractAddress, options = {}) {
88
- const publicDataProvider = getProviderOrThrow(options.provider);
89
- try {
90
- const contractStateResult = await queryContractStateSafely(publicDataProvider, contractAddress);
91
- if (!contractStateResult.success)
92
- return failure(contractStateResult.error);
93
- const contractLedger = ledger(contractStateResult.data.data);
94
- const fields = [];
95
- for (const [key, value] of contractLedger.fields)
96
- fields.push([key, value]);
97
- return success(fields);
98
- }
99
- catch (error) {
100
- return failure(new NetworkError(`Failed to get domain fields: ${error instanceof Error ? error.message : String(error)}`, error));
101
- }
102
- }
103
- export async function getNamespacedDomainFields(_parentContractAddress, fullDomainName, options = {}) {
104
- const publicDataProvider = getProviderOrThrow(options.provider);
105
- try {
106
- const domainContractAddressResult = await getResolverAddress(publicDataProvider, fullDomainName);
107
- if (!domainContractAddressResult.success)
108
- return failure(domainContractAddressResult.error);
109
- return await getDomainFields(domainContractAddressResult.data, { provider: publicDataProvider });
110
- }
111
- catch (error) {
112
- return failure(new NetworkError(`Failed to get namespaced domain fields: ${error instanceof Error ? error.message : String(error)}`, error));
113
- }
114
- }
115
- export async function getDomainSettings(contractAddress, options = {}) {
116
- const publicDataProvider = getProviderOrThrow(options.provider);
117
- try {
118
- const contractStateResult = await queryContractStateSafely(publicDataProvider, contractAddress);
119
- if (!contractStateResult.success)
120
- return failure(contractStateResult.error);
121
- const contractLedger = ledger(contractStateResult.data.data);
122
- return success({ coinColor: contractLedger.COIN_COLOR, domainCost: contractLedger.DOMAIN_COST });
123
- }
124
- catch (error) {
125
- return failure(new NetworkError(`Failed to get domain settings: ${error instanceof Error ? error.message : String(error)}`, error));
126
- }
127
- }
128
- export async function getDomainProfile(fullDomain, options = {}) {
129
- const publicDataProvider = getProviderOrThrow(options.provider);
130
- try {
131
- const normalized = normalizeDomain(fullDomain);
132
- const [resolvedTargetResult, infoResult] = await Promise.all([
133
- resolveDomain(normalized, { provider: publicDataProvider }),
134
- getDomainInfoByResolving(normalized, { provider: publicDataProvider })
135
- ]);
136
- const resolvedTarget = resolvedTargetResult.success ? resolvedTargetResult.data : null;
137
- const info = infoResult.success ? infoResult.data : null;
138
- if (info && info.contractAddress) {
139
- const [fieldsResult, settingsResult] = await Promise.all([
140
- getNamespacedDomainFields(info.contractAddress, normalized, { provider: publicDataProvider }),
141
- getDomainSettings(info.resolver, { provider: publicDataProvider })
142
- ]);
143
- const fields = fieldsResult.success ? fieldsResult.data : [];
144
- const settings = settingsResult.success ? settingsResult.data : null;
145
- return success({ fullDomain: normalized, resolvedTarget, info, fields, settings });
146
- }
147
- return success({ fullDomain: normalized, resolvedTarget, info, fields: [], settings: null });
148
- }
149
- catch (error) {
150
- return failure(new NetworkError(`Failed to get domain profile: ${error instanceof Error ? error.message : String(error)}`, error));
151
- }
152
- }
package/dist/utils.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './utils/domain.js';
2
- export * from './utils/address.js';
package/dist/utils.js DELETED
@@ -1,3 +0,0 @@
1
- // Utils module - domain and address utilities
2
- export * from './utils/domain.js';
3
- export * from './utils/address.js';
package/managed/index.js DELETED
@@ -1,6 +0,0 @@
1
- export * as Leaf from "./managed/leaf/contract/index.cjs";
2
- import ContractModule from './managed/leaf/contract/index.cjs';
3
- export const ledger = ContractModule.ledger;
4
- export const pureCircuits = ContractModule.pureCircuits;
5
- export const { Contract } = ContractModule;
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,IAAI,MAAM,mCAAmC,CAAC;AAE1D,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAG/D,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;AACxD,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC"}
@@ -1,258 +0,0 @@
1
- pragma language_version 0.17;
2
- /// # Unshielded Nameservice
3
- ///
4
- /// Example:
5
- /// The `domain.mid` register would be deployed with
6
- /// - parent_domain: "mid"
7
- /// - parent_resolver: "mid" resolver
8
- /// - target: arbitrary
9
- /// - domain: "domain"
10
- /// - fields for the `domain.mid` domain.
11
- /// The `sub.domain.mid` register would be deployed with
12
- /// - parent_domain: "domain"
13
- /// - parent_resolver: "domain" resolver
14
- /// - target: arbitrary
15
- /// - domain: "sub"
16
- /// - fields for the `sub.domain.mid` domain.
17
- /// The `hyper.sub.domain.mid` register would be deployed with
18
- /// - parent_domain: "sub"
19
- /// - parent_resolver: "sub" resolver
20
- /// - target: arbitrary
21
- /// - domain: "hyper"
22
- /// - fields for the `hyper.sub.domain.mid` domain.
23
- ///
24
- ///
25
- import CompactStandardLibrary;
26
-
27
- // This is sealed. If the domain is sold in the parent contract
28
- // The new owner should deploy a new resolver.
29
- export sealed ledger PARENT_DOMAIN: Maybe<Opaque<'string'>>;
30
- export sealed ledger PARENT_RESOLVER: ContractAddress;
31
- export sealed ledger DOMAIN: Maybe<Opaque<'string'>>;
32
-
33
- export ledger DOMAIN_OWNER: ZswapCoinPublicKey;
34
- // This domain could target either a wallet or a contract
35
- export ledger DOMAIN_TARGET: Either<ZswapCoinPublicKey, ContractAddress>;
36
-
37
- // Map<domain, (owner, resolver)>.
38
- export ledger domains: Map<Opaque<'string'>, DomainData>;
39
-
40
- // Set of domains saved here owned by address.
41
- export ledger domains_owned: Map<ZswapCoinPublicKey, Set<Opaque<'string'>>>;
42
-
43
- export ledger fields: Map<Opaque<'string'>, Opaque<'string'>>;
44
-
45
-
46
- export { DomainData, Either, Maybe, CoinInfo }
47
- struct DomainData {
48
- owner: ZswapCoinPublicKey,
49
- resolver: ContractAddress
50
- }
51
-
52
-
53
- constructor(
54
- parent_domain: Maybe<Opaque<'string'>>,
55
- parent_resolver: ContractAddress,
56
- target: Either<ZswapCoinPublicKey, ContractAddress>,
57
- domain: Maybe<Opaque<'string'>>,
58
- coin_color: Bytes<32>,
59
- domain_cost: Uint<64>,
60
- kvs: Vector<10, Maybe<[Opaque<'string'>, Opaque<'string'>]>>
61
- ) {
62
- DOMAIN_OWNER = ownPublicKey();
63
- PARENT_DOMAIN = disclose(parent_domain);
64
- PARENT_RESOLVER = disclose(parent_resolver);
65
- DOMAIN_TARGET = disclose(target);
66
- DOMAIN = disclose(domain);
67
- COIN_COLOR = disclose(coin_color);
68
- DOMAIN_COST = disclose(domain_cost);
69
- for (const kv of kvs) {
70
- if (disclose(kv) == none<[Opaque<'string'>, Opaque<'string'>]>()) {
71
- return;
72
- }
73
- fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
74
- }
75
- }
76
-
77
- // ===========================================
78
- // Circuits
79
- // ===========================================
80
-
81
- export ledger COIN_COLOR: Bytes<32>;
82
- export ledger DOMAIN_COST: Uint<64>;
83
-
84
- export circuit update_color(c: Bytes<32>) : [] {
85
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the owner");
86
- COIN_COLOR = disclose(c);
87
- }
88
-
89
- export circuit update_cost(c: Uint<64>) : [] {
90
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the owner");
91
- DOMAIN_COST = disclose(c);
92
- }
93
-
94
- export circuit update_target_and_fields(
95
- new_target: Either<ZswapCoinPublicKey, ContractAddress>,
96
- kvs: Vector<10, Maybe<[Opaque<'string'>, Opaque<'string'>]>>
97
- ) : [] {
98
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
99
- for (const kv of kvs) {
100
- if (disclose(kv) == none<[Opaque<'string'>, Opaque<'string'>]>()) {
101
- return;
102
- }
103
- fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
104
- }
105
- DOMAIN_TARGET = disclose(new_target);
106
-
107
- }
108
-
109
- export circuit buy_domain_for(owner: ZswapCoinPublicKey, domain: Opaque<'string'>, resolver: ContractAddress, payment: CoinInfo): [] {
110
- assert(!domains.member(disclose(domain)), "Domain already exists");
111
-
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);
119
-
120
- const domain_data = DomainData {
121
- d_owner,
122
- disclose(resolver)
123
- };
124
-
125
- domains.insert(disclose(domain), disclose(domain_data));
126
-
127
- // Track domains owned by address
128
- if (!domains_owned.member(d_owner)) {
129
- domains_owned.insert(d_owner, default<Set<Opaque<'string'>>>);
130
- }
131
- domains_owned.lookup(d_owner).insert(disclose(domain));
132
- }
133
-
134
- export circuit add_multiple_fields(kvs: Vector<10, Maybe<[Opaque<'string'>, Opaque<'string'>]>>) : [] {
135
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
136
- for (const kv of kvs) {
137
- if (disclose(kv) == none<[Opaque<'string'>, Opaque<'string'>]>()) {
138
- return;
139
- }
140
- fields.insert(disclose(kv.value[0]),disclose(kv.value[1]));
141
- }
142
- }
143
-
144
- export circuit insert_field(k: Opaque<'string'>, v: Opaque<'string'>) : [] {
145
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
146
- fields.insert(disclose(k),disclose(v));
147
- }
148
-
149
- export circuit clear_field(k: Opaque<'string'>): [] {
150
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
151
- fields.remove(disclose(k));
152
- }
153
-
154
- export circuit clear_all_fields(domain: Opaque<'string'>): [] {
155
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
156
- fields.resetToDefault();
157
- }
158
-
159
- export circuit register_domain_for(owner: ZswapCoinPublicKey, domain: Opaque<'string'>, resolver: ContractAddress): [] {
160
- assert(!domains.member(disclose(domain)), "Domain already exists");
161
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the domain owner");
162
-
163
- const d_owner = disclose(owner);
164
- const domain_data = DomainData {
165
- d_owner,
166
- disclose(resolver)
167
- };
168
-
169
- domains.insert(disclose(domain), disclose(domain_data));
170
-
171
- // Track domains owned by address
172
- if (!domains_owned.member(d_owner)) {
173
- domains_owned.insert(d_owner, default<Set<Opaque<'string'>>>);
174
- }
175
- domains_owned.lookup(d_owner).insert(disclose(domain));
176
- }
177
-
178
- export circuit set_resolver(domain: Opaque<'string'>, resolver: ContractAddress): [] {
179
- assert(domains.member(disclose(domain)), "Domain does not exist");
180
-
181
- const current_data = domains.lookup(disclose(domain));
182
- assert(current_data.owner == ownPublicKey(), "Not the domain owner");
183
-
184
- const new_data = DomainData {
185
- current_data.owner,
186
- disclose(resolver)
187
- };
188
-
189
- domains.insert(disclose(domain), disclose(new_data));
190
- }
191
-
192
- export circuit update_domain_target(new_target: Either<ZswapCoinPublicKey, ContractAddress>): [] {
193
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the contract owner");
194
-
195
- DOMAIN_TARGET = disclose(new_target);
196
- }
197
-
198
- export circuit transfer_domain(domain: Opaque<'string'>, new_owner: ZswapCoinPublicKey): [] {
199
- assert(domains.member(disclose(domain)), "Domain does not exist");
200
-
201
- const current_data = domains.lookup(disclose(domain));
202
- assert(current_data.owner == ownPublicKey(), "Not the domain owner");
203
-
204
- const new_data = DomainData {
205
- disclose(new_owner),
206
- current_data.resolver
207
- };
208
-
209
- domains.insert(disclose(domain), disclose(new_data));
210
-
211
- // Update ownership tracking
212
- domains_owned.lookup(ownPublicKey()).remove(disclose(domain));
213
- if (!domains_owned.member(disclose(new_owner))) {
214
- domains_owned.insert(disclose(new_owner), default<Set<Opaque<'string'>>>);
215
- }
216
- domains_owned.lookup(disclose(new_owner)).insert(disclose(domain));
217
- }
218
-
219
-
220
- export circuit change_owner(new_owner: ZswapCoinPublicKey) : [] {
221
- assert(DOMAIN_OWNER == ownPublicKey(), "Not the contract owner");
222
- DOMAIN_OWNER = disclose(new_owner);
223
- }
224
-
225
-
226
- /*
227
- Read only, but not pure, so let's not use those
228
- export circuit resolve(domain: Opaque<'string'>): DomainData {
229
- assert(domains.member(disclose(domain)), "Domain does not exist");
230
- return domains.lookup(disclose(domain));
231
- }
232
-
233
- export circuit get_parent_domain(): Maybe<Opaque<'string'>> {
234
- return PARENT_DOMAIN;
235
- }
236
-
237
- export circuit get_contract_owner(): ZswapCoinPublicKey {
238
- return DOMAIN_OWNER;
239
- }
240
-
241
- export circuit get_domain(): Maybe<Opaque<'string'>> {
242
- return DOMAIN;
243
- }
244
-
245
- export circuit get_domain_target(): Either<ZswapCoinPublicKey, ContractAddress> {
246
- return DOMAIN_TARGET;
247
- }
248
-
249
- export circuit get_parent_resolver(): ContractAddress {
250
- return PARENT_RESOLVER;
251
- }
252
-
253
- export circuit addr_owns_domain(addr: ZswapCoinPublicKey, domain: Opaque<'string'>): Boolean {
254
- assert(domains_owned.member(disclose(addr)), "Address does not own domains in this register");
255
- return domains_owned.lookup(disclose(addr)).member(disclose(domain));
256
- }
257
-
258
- */