Asignaci贸n de metadatos a un espacio de nombres

Agregar datos personalizados a un espacio de nombres.

caso de uso

Metadata se puede adjuntar a namespaces para ayudar a los usuarios a verificar la propiedad del nombre registrado. Los datos adjuntos podr铆an incluir informaci贸n como informaci贸n de contacto del registrante, administrativo o t茅cnico.

Imagine que la empresa ComfyClothingCompany quiere agregar su informaci贸n a su espacio de nombres cc para que cualquier usuario de la red pueda identificar r谩pidamente los detalles de la empresa. En esta gu铆a, implementar谩 un programa para agregar entradas de metadatos a un espacio de nombres.

../../_images/metadata-namespace.png

requisitos previos

  • Completar la getting started section.

  • Crear un nuevo account.

  • Cargue la cuenta con suficiente bitxor para pagar las tarifas de transacci贸n, crear tokens y registrar espacios de nombres.

Crear el espacio de nombres

  1. Cree un nuevo espacio de nombres cc con el ComfyClothingCompany鈥檚 account.

bitxor-cli transaction namespace --sync

Enter namespace name: cc
Do you want to create a root namespace? [y/n]: y
Enter the namespace rental duration: 1000
Enter max_fee (absolute amount): 0
Transaction confirmed.

M茅todo #01: Uso del SDK

  1. Defina lo siguiente NamespaceMetadataTransaction.

Key

Value

NAME

ComfyClothingCompany

EMAIL

info@comfyclothingcompany

ADDRESS

ComfyClothingCompany HQ

PHONE

000-0000

// replace with network type
const networkType = NetworkType.TEST_NET;
// replace with company private key
const companyPrivateKey =
  'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
const companyAccount = Account.createFromPrivateKey(
  companyPrivateKey,
  networkType,
);
// replace with namespace name
const namespaceId = new NamespaceId('cc');
const name = 'ComfyClothingCompany';
const email = 'info@comfyclothingcompany';
const address = 'ComfyClothingCompany HQ';
const phone = '000-0000';

const nameMetadataTransaction = NamespaceMetadataTransaction.create(
  Deadline.create(epochAdjustment),
  companyAccount.address,
  KeyGenerator.generateUInt64Key('NAME'),
  namespaceId,
  name.length,
  name,
  networkType,
);

const emailMetadataTransaction = NamespaceMetadataTransaction.create(
  Deadline.create(epochAdjustment),
  companyAccount.address,
  KeyGenerator.generateUInt64Key('EMAIL'),
  namespaceId,
  email.length,
  email,
  networkType,
);

const addressMetadataTransaction = NamespaceMetadataTransaction.create(
  Deadline.create(epochAdjustment),
  companyAccount.address,
  KeyGenerator.generateUInt64Key('ADDRESS'),
  namespaceId,
  address.length,
  address,
  networkType,
);

const phoneMetadataTransaction = NamespaceMetadataTransaction.create(
  Deadline.create(epochAdjustment),
  companyAccount.address,
  KeyGenerator.generateUInt64Key('PHONE'),
  namespaceId,
  phone.length,
  phone,
  networkType,
);
// replace with network type
const networkType = bitxor_sdk_1.NetworkType.TEST_NET;
// replace with company private key
const companyPrivateKey =
  'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
const companyAccount = bitxor_sdk_1.Account.createFromPrivateKey(
  companyPrivateKey,
  networkType,
);
// replace with namespace name
const namespaceId = new bitxor_sdk_1.NamespaceId('cc');
const name = 'ComfyClothingCompany';
const email = 'info@comfyclothingcompany';
const address = 'ComfyClothingCompany HQ';
const phone = '000-0000';
const nameMetadataTransaction = bitxor_sdk_1.NamespaceMetadataTransaction.create(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  companyAccount.address,
  bitxor_sdk_1.KeyGenerator.generateUInt64Key('NAME'),
  namespaceId,
  name.length,
  name,
  networkType,
);
const emailMetadataTransaction = bitxor_sdk_1.NamespaceMetadataTransaction.create(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  companyAccount.address,
  bitxor_sdk_1.KeyGenerator.generateUInt64Key('EMAIL'),
  namespaceId,
  email.length,
  email,
  networkType,
);
const addressMetadataTransaction = bitxor_sdk_1.NamespaceMetadataTransaction.create(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  companyAccount.address,
  bitxor_sdk_1.KeyGenerator.generateUInt64Key('ADDRESS'),
  namespaceId,
  address.length,
  address,
  networkType,
);
const phoneMetadataTransaction = bitxor_sdk_1.NamespaceMetadataTransaction.create(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  companyAccount.address,
  bitxor_sdk_1.KeyGenerator.generateUInt64Key('PHONE'),
  namespaceId,
  phone.length,
  phone,
  networkType,
);

2. Todos los metadatos se adjuntan solo con el consentimiento del creador del espacio de nombres a trav茅s de transacciones agregadas. Envuelva las transacciones de metadatos dentro de un AggregateCompleteTransaction y firme el agregado con la cuenta de la empresa.

const aggregateTransaction = AggregateTransaction.createComplete(
  Deadline.create(epochAdjustment),
  [
    nameMetadataTransaction.toAggregate(companyAccount.publicAccount),
    emailMetadataTransaction.toAggregate(companyAccount.publicAccount),
    addressMetadataTransaction.toAggregate(companyAccount.publicAccount),
    phoneMetadataTransaction.toAggregate(companyAccount.publicAccount),
  ],
  networkType,
  [],
  UInt64.fromUint(2000000),
);
const aggregateTransaction = bitxor_sdk_1.AggregateTransaction.createComplete(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  [
    nameMetadataTransaction.toAggregate(companyAccount.publicAccount),
    emailMetadataTransaction.toAggregate(companyAccount.publicAccount),
    addressMetadataTransaction.toAggregate(companyAccount.publicAccount),
    phoneMetadataTransaction.toAggregate(companyAccount.publicAccount),
  ],
  networkType,
  [],
  bitxor_sdk_1.UInt64.fromUint(2000000),
);

Note

Si un espacio de nombres fuera propiedad de una cuenta diferente, tendr铆a que configurar el agregado como vinculado. Luego, el creador del espacio de nombres debe aceptar la solicitud de metadatos cofirmando la transacci贸n.

  1. Firme y anuncie la Transacci贸n agregada a la red.

// replace with meta.networkGenerationHash (nodeUrl + '/node/info')
const networkGenerationHash =
  '1DFB2FAA9E7F054168B0C5FCB84F4DEB62CC2B4D317D861F3168D161F54EA78B';
const signedTransaction = companyAccount.sign(
  aggregateTransaction,
  networkGenerationHash,
);
console.log(signedTransaction.hash);

const nodeUrl = 'NODE_URL';
const repositoryFactory = new RepositoryFactoryHttp(nodeUrl);
const transactionHttp = repositoryFactory.createTransactionRepository();

transactionHttp.announce(signedTransaction).subscribe(
  (x) => console.log(x),
  (err) => console.error(err),
);
// replace with meta.networkGenerationHash (nodeUrl + '/node/info')
const networkGenerationHash =
  '1DFB2FAA9E7F054168B0C5FCB84F4DEB62CC2B4D317D861F3168D161F54EA78B';
const signedTransaction = companyAccount.sign(
  aggregateTransaction,
  networkGenerationHash,
);
console.log(signedTransaction.hash);
const nodeUrl = 'NODE_URL';
const repositoryFactory = new bitxor_sdk_1.RepositoryFactoryHttp(nodeUrl);
const transactionHttp = repositoryFactory.createTransactionRepository();
transactionHttp.announce(signedTransaction).subscribe(
  (x) => console.log(x),
  (err) => console.error(err),
);
  1. Cuando se confirme la transacci贸n, intente obtener las entradas de metadatos del espacio de nombres.

M茅todo #02: Uso de la CLI

Abra una ventana de terminal y ejecute el siguiente comando.

Reemplace BXR6YD-BC3BW2-ZYXOXC-HHIRDV-MEZUIP-BRISYI-TPQ con la direcci贸n del propietario del espacio de nombres, 85BBEA6CC462B244 con la identificaci贸n del espacio de nombres de destino. Luego, configure los pares clave-valor que desea adjuntar como metadatos.

Note

Puede usar el comando bitxor-cli converter stringtokey para transformar una cadena (por ejemplo, NOMBRE) en una clave UInt64 v谩lida (8B5DD479E6AB718A).

bitxor-cli transaction namespacemetadata --target-address BXR6YD-BC3BW2-ZYXOXC-HHIRDV-MEZUIP-BRISYI-TPQ --namespace-id 85BBEA6CC462B244 --key 8B5DD479E6AB718A --value ComfyClothingCompany
bitxor-cli transaction namespacemetadata --target-address BXR6YD-BC3BW2-ZYXOXC-HHIRDV-MEZUIP-BRISYI-TPQ --namespace-id 85BBEA6CC462B244 --key 802FE471ADA04D9D --value info@comfyclothingcompany
bitxor-cli transaction namespacemetadata --target-address BXR6YD-BC3BW2-ZYXOXC-HHIRDV-MEZUIP-BRISYI-TPQ --namespace-id 85BBEA6CC462B244 --key D14E8FE298386BF5 --value ComfyClothingCompanyHQ
bitxor-cli transaction namespacemetadata --target-address BXR6YD-BC3BW2-ZYXOXC-HHIRDV-MEZUIP-BRISYI-TPQ --namespace-id 85BBEA6CC462B244 --key FAAE8FBA0227A914 --value 000-0000