Asignación de metadatos a una cuenta

Agregar datos personalizados a una cuenta.

caso de uso

Bob trabaja como notario digital que sella cuentas en la cadena de bloques pública de Bitxor. Cuando un cliente acude a Bob para certificar un documento, verifica la autenticación de los documentos del cliente y luego etiqueta la cuenta del cliente con el documento digitalizado como metadatos.

Alice es una recién graduada que quiere que su certificado educativo sea acreditado a su Bitxor cuenta para evitar la molestia de proporcionar repetidamente la verificación de su título. Entonces ella va a Bob y le proporciona una prueba de su título. Una vez que Alice paga una tarifa, Bob verifica la autenticidad y sella la cuenta de Alice con metadatos que indican su título.

En este tutorial, implementará un programa para permitir la emisión de cuentas de etiquetas Bob metadata transactions.

../../_images/metadata-certificate.png

requisitos previos

  • Completa la getting started section.

  • Crea accounts para Alice y bob.

  • Cargue la cuenta de Bob con suficiente bitxor para pagar las tarifas de transacción.

Creando la cuenta

  1. Cree una cuenta para Alice, usando el CLI tool. Recuerde utilizar un adecuado NODE_URL.

bitxor-cli account generate --save

Enter network type (MAIN_NET, TEST_NET): TEST_NET
Do you want to save it? [y/n]: y
Enter a Bitxor Node URL. (Example: http://localhost:3000): <NODE_URL>
Insert profile name: alice

Método #01: Uso del SDK

1. Bob tiene que escoger una key para almacenar el certificado de Alice. Imagina que CERT es una clave común para almacenar títulos universitarios. Defina esta clave como una nueva variable.

// replace with key
const key = KeyGenerator.generateUInt64Key('CERT');
// replace with key
const key = bitxor_sdk_1.KeyGenerator.generateUInt64Key('CERT');

2. El título de Alice trae el identificador 123456 para su certificado. Ayuda a Bob a asignar este valor a la clave definida en el paso anterior. Para lograrlo, defina una AccountMetadataTransaction que vincule la cuenta de Alice, la clave (CERT) y el valor asociado (123456).

// replace with network type
const networkType = NetworkType.TEST_NET;

// replace with public key
const alicePublicKey =
  'D04AB232742BB4AB3A1368BD4615E4E6D0224AB71A016BAF8520A332C9778737';
const alicePublicAccount = PublicAccount.createFromPublicKey(
  alicePublicKey,
  networkType,
);
// replace with value
const value = '123456';

const accountMetadataTransaction = AccountMetadataTransaction.create(
  Deadline.create(epochAdjustment),
  alicePublicAccount.address,
  key,
  value.length,
  value,
  networkType,
);
// replace with network type
const networkType = bitxor_sdk_1.NetworkType.TEST_NET;
// replace with public key
const alicePublicKey =
    'D04AB232742BB4AB3A1368BD4615E4E6D0224AB71A016BAF8520A332C9778737';
const alicePublicAccount = bitxor_sdk_1.PublicAccount.createFromPublicKey(
    alicePublicKey,
    networkType,
);
// replace with value
const value = '123456';
const accountMetadataTransaction = bitxor_sdk_1.AccountMetadataTransaction.create(
    bitxor_sdk_1.Deadline.create(epochAdjustment),
    alicePublicAccount.address,
    key,
    value.length,
    value,
    networkType,
);

3. Para evitar enviar spam a la cuenta con claves de metadatos no válidas, todos los metadatos se adjuntan solo con el consentimiento del propietario de la cuenta a través de transacciones agregadas. Por lo tanto, Alice tendrá que suscribirse si quiere que la entrada de metadatos se asigne a su cuenta. Envuelva AccountMetadataTransaction dentro de AggregateBondedTransaction y firme la transacción usando la cuenta de Bob. .. example-code:

.. viewsource:: ../../resources/examples/typescript/metadata/AssigningMetadataToAnAccount.ts
    :language: typescript
    :start-after:  /* start block 03 */
    :end-before: /* end block 03 */

.. viewsource:: ../../resources/examples/typescript/metadata/AssigningMetadataToAnAccount.js
    :language: javascript
    :start-after:  /* start block 03 */
    :end-before: /* end block 03 */

4. Antes de enviar una transacción agregada a la red, Bob debe bloquear 10 bitxor. Defina una nueva HashLockTransaction y fírmela con la cuenta de Bob.

// replace with bitxor id
const networkCurrencyTokenId = new TokenId('5E62990DCAC5BE8A');
// replace with network currency divisibility
const networkCurrencyDivisibility = 6;

const hashLockTransaction = HashLockTransaction.create(
  Deadline.create(epochAdjustment),
  new Token(
    networkCurrencyTokenId,
    UInt64.fromUint(10 * Math.pow(10, networkCurrencyDivisibility)),
  ),
  UInt64.fromUint(480),
  signedTransaction,
  networkType,
  UInt64.fromUint(2000000),
);
const signedHashLockTransaction = bobAccount.sign(
  hashLockTransaction,
  networkGenerationHash,
);
// replace with bitxor id
const networkCurrencyTokenId = new bitxor_sdk_1.TokenId('5E62990DCAC5BE8A');
// replace with network currency divisibility
const networkCurrencyDivisibility = 6;
const hashLockTransaction = bitxor_sdk_1.HashLockTransaction.create(
    bitxor_sdk_1.Deadline.create(epochAdjustment),
    new bitxor_sdk_1.Token(
        networkCurrencyTokenId,
        bitxor_sdk_1.UInt64.fromUint(
            10 * Math.pow(10, networkCurrencyDivisibility),
        ),
    ),
    bitxor_sdk_1.UInt64.fromUint(480),
    signedTransaction,
    networkType,
    bitxor_sdk_1.UInt64.fromUint(2000000),
);
const signedHashLockTransaction = bobAccount.sign(
    hashLockTransaction,
    networkGenerationHash,
);

Note

Bob will receive the locked funds back if Alice cosigns the aggregate during the next 480 blocks.

5.Anuncie la HashLockTransaction. Supervise la red hasta que se confirme la transacción y luego anuncie la AgregateTransaction que contiene la AccountMetadataTransaction. .. example-code:

.. viewsource:: ../../resources/examples/typescript/metadata/AssigningMetadataToAnAccount.ts
    :language: typescript
    :start-after:  /* start block 05 */
    :end-before: /* end block 05 */

.. viewsource:: ../../resources/examples/typescript/metadata/AssigningMetadataToAnAccount.js
    :language: javascript
    :start-after:  /* start block 05 */
    :end-before: /* end block 05 */

6. Una vez que se confirme la transacción, avale el hash obtenido en el cuarto paso utilizando el perfil de Alice. .. code-block:: bash

bitxor-cli transaction cosign –hash <transaction-hash> –profile alice

  1. Si todo va bien, ahora Alice ha asignado el valor de metadatos {bobPublicKey, CERT, 123456}, que se puede leer como ” La cuenta de Alice tiene el número de certificado 123456 y fue verificada por Bob”.