Skip to content

Write operations

All write functions are exported from @midnames/sdk and return Promise<Result<{ transactionId: string }>>.

Every write function accepts an optional OperationOptions object as its last argument:

interface OperationOptions {
contractAddress?: string; // Override the default contract address
secretKey?: string; // Domain secret key for authorization (if required)
}

Used when creating or updating a domain’s payment configuration:

type PaymentConfig = {
cost_short: bigint; // Cost to register a short name (≤ 3 chars)
cost_med: bigint; // Cost to register a medium name (4–6 chars)
cost_long: bigint; // Cost to register a long name (≥ 7 chars)
coin_color: Uint8Array; // Token colour identifier
buy_enabled: boolean; // Whether subdomain registration is open
};

Registers a new subdomain under a parent domain.

function createDomain(
domainName: string,
parentId: bigint,
ownerAddress: { bytes: Uint8Array },
target: DomainTarget,
paymentConfig: PaymentConfig,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions & {
fields?: Array<[string, string]>;
defaultField?: string;
}
): Promise<Result<{ transactionId: string }>>

Parameters

NameTypeDescription
domainNamestringThe label to register, e.g. "facu" for facu.night
parentIdbigintID of the parent domain (TLD or subdomain)
ownerAddress{ bytes: Uint8Array }Owner’s address as raw bytes
targetDomainTargetInitial resolution target
paymentConfigPaymentConfigSubdomain registration pricing and settings
providersContractProviders<NS.Contract>Midnight wallet providers
options.fieldsArray<[string, string]>Up to 10 initial key-value fields
options.defaultFieldstringField key to use as the default resolution value
options.contractAddressstringOverride the contract address
options.secretKeystringDomain secret key

Example

import { createDomain } from "@midnames/sdk";
const result = await createDomain(
"facu",
parentId,
ownerAddress,
{ type: "unshielded", address: "mn1qq..." },
{ cost_short: 0n, cost_med: 0n, cost_long: 0n, coin_color: new Uint8Array(32), buy_enabled: false },
providers,
{ fields: [["twitter", "@facundo"]] }
);
if (result.success) {
console.log("Transaction ID:", result.transactionId);
}

Transfers ownership of a domain to a new address.

function transferDomain(
domainName: string,
parentId: bigint,
newOwner: Uint8Array,
newOwnerAddress: { bytes: Uint8Array },
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Parameters

NameTypeDescription
domainNamestringThe domain label, e.g. "facu"
parentIdbigintID of the parent domain
newOwnerUint8ArrayNew owner’s public key bytes
newOwnerAddress{ bytes: Uint8Array }New owner’s address as raw bytes
providersContractProviders<NS.Contract>Midnight wallet providers

Adds or updates a single key-value field on a domain.

function addDomainField(
domainId: bigint,
key: string,
value: string,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Example

import { addDomainField } from "@midnames/sdk";
const result = await addDomainField(domainId, "twitter", "@facundo", providers);

Adds up to 10 key-value fields in a single transaction.

function addMultipleFields(
domainId: bigint,
fields: Array<[string, string]>,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Example

import { addMultipleFields } from "@midnames/sdk";
const result = await addMultipleFields(
domainId,
[
["twitter", "@facundo"],
["github", "facundo"],
["website", "https://example.com"],
],
providers
);

Removes a single field from a domain.

function removeDomainField(
domainId: bigint,
key: string,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Removes all fields from a domain in a single transaction.

function clearDomainFields(
domainId: bigint,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Sets or clears the domain’s default resolution field. When a default field is set, resolveDefault returns its value instead of the target address.

function updateDefaultField(
domainId: bigint,
field: string | null,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Pass null to clear the default field.


Updates the resolution target of a domain. Fails if the target is locked.

function updateDomainTarget(
domainId: bigint,
target: DomainTarget,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Example

import { updateDomainTarget } from "@midnames/sdk";
const result = await updateDomainTarget(
domainId,
{ type: "unshielded", address: "mn1qq..." },
providers
);

Updates the payment configuration of a domain. Fails if the payment config is locked.

function updatePaymentConfig(
domainId: bigint,
config: PaymentConfig,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Permanently locks a domain’s target. This cannot be undone.

function lockTarget(
domainId: bigint,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Permanently locks a domain’s payment configuration. This cannot be undone.

function lockPaymentConfig(
domainId: bigint,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

These functions can only be called by the root zone (TLD) owner.

Enables or disables subdomain registration at the root level.

function changeRootEnableSubdomains(
enabled: boolean,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>

Sets a maximum number of fields that can be stored on any domain. Pass null to remove the limit.

function changeFieldLimit(
limit: bigint | null,
providers: ContractProviders<NS.Contract>,
options?: OperationOptions
): Promise<Result<{ transactionId: string }>>