Envío de tokens y mensajes entre dos cuentas

Defina, firme y anuncie una transacción de transferencia.

Esta guía le mostrará cómo enviar 10 bitxor de su cuenta a la de Bob, cuya dirección es BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ.

requisitos previos

  • Complete la sección de inicio.

  • Cree una nueva cuenta.

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

Método #01: Uso de la billetera de escritorio

  1. Desde la página de inicio de su Desktop Wallet, haga clic en la pestaña “Transferir”.

resources/images/screenshots/desktop-transfer-1.gif

2. Complete la información necesaria para la transacción de transferencia. Para este ejemplo, debe especificar que está enviando 10 BXR a Bob (BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ). Puede agregar un mensaje, pero no es necesario en este caso.

resources/images/screenshots/desktop-transfer-2.gif

3. Una vez que haya completado toda la información, haga clic en “Enviar”. Aparecerá una ventana emergente. Lea y verifique la información, luego ingrese la contraseña de su billetera y haga clic en “Confirmar”.

4. Puede verificar que la transacción se realizó correctamente volviendo a la pestaña “Panel de control”. Al principio, podría aparecer en las transacciones “No confirmadas” a medida que la transacción se incluye en un bloque, pero pronto debería poder verlo en las transacciones “Confirmadas”.

Método #02: Usando el SDK

  1. En una nueva terminal, monitorea las transacciones que involucran la cuenta del remitente para saber si son confirmadas o rechazadas por la red.

bitxor-cli monitor all --address <YOUR-ADDRESS>

2. Abra un nuevo archivo y defina TransferTransaction. Incluya la dirección de Bob como destinatario y adjunte 10 bitxor.

Unidades de token en |nombre en clave| se definen como cantidades absolutas. Para obtener una cantidad absoluta, multiplique la cantidad de activos que desea enviar por 10divisibility. Por ejemplo, si el token tuviera divisibility 2, para enviar 10 unidades (relativa) debería definir 1000 (absoluto) en su lugar.

  // replace with recipient address
  const rawAddress = 'BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ';
  const recipientAddress = Address.createFromRawAddress(rawAddress);

  const transferTransaction = TransferTransaction.create(
    Deadline.create(epochAdjustment),
    recipientAddress,
    [currency.createRelative(10)],
    PlainMessage.create('This is a test message'),
    networkType,
    UInt64.fromUint(2000000),
  );
    // replace with recipient address
    const rawAddress = 'BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ';
    const recipientAddress = bitxor_sdk_1.Address.createFromRawAddress(
        rawAddress,
    );
    const transferTransaction = bitxor_sdk_1.TransferTransaction.create(
        bitxor_sdk_1.Deadline.create(epochAdjustment),
        recipientAddress, [currency.createRelative(10)],
        bitxor_sdk_1.PlainMessage.create('This is a test message'),
        networkType,
        bitxor_sdk_1.UInt64.fromUint(2000000),
    );
        // replace with node endpoint
        try (final RepositoryFactory repositoryFactory = new RepositoryFactoryVertxImpl(
                "NODE_URL")) {
            // replace with recipient address
            final String rawAddress = "BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ";
            final UnresolvedAddress recipientAddress = Address.createFromRawAddress(rawAddress);
            final NetworkType networkType = repositoryFactory.getNetworkType().toFuture().get();
            // replace with bitxor id
            final TokenId networkCurrencyTokenId = new TokenId("5E62990DCAC5BE8A");
            // replace with network currency divisibility
            final Integer networkCurrencyDivisibility = 6;
            // replace with relative amount of bitxor to send
            final BigInteger amount = BigInteger.valueOf(10);

            final Token token = new Token(networkCurrencyTokenId,
                    amount.multiply(BigInteger.valueOf(10).pow(networkCurrencyDivisibility)));
            final TransferTransaction transferTransaction = TransferTransactionFactory
                    .create(
                            networkType,
                            recipientAddress,
                            Collections.singletonList(token),
                            PlainMessage.create("This is a test message"))
                    .maxFee(BigInteger.valueOf(2000000)).build();

Como habrás notado, las transacciones de transferencia requieren una matriz de tokens como parámetro. Esto permite enviar transacciones de transferencia con múltiples tokens al mismo tiempo.

Si posee más de un token, puede enviarlos juntos en la misma transacción:

  [
    new Token(new TokenId('7CDF3B117A3C40CC'), UInt64.fromUint(1000)),
    new Token(
      new TokenId('5E62990DCAC5BE8A'),
      UInt64.fromUint(10 * Math.pow(10, 6)),
    ),
  ],
    [
        new bitxor_sdk_1.Token(
            new bitxor_sdk_1.TokenId('7CDF3B117A3C40CC'),
            bitxor_sdk_1.UInt64.fromUint(1000),
        ),
        new bitxor_sdk_1.Token(
            new bitxor_sdk_1.TokenId('5E62990DCAC5BE8A'),
            bitxor_sdk_1.UInt64.fromUint(10 * Math.pow(10, 6)),
        ),
    ],
                            Arrays.asList(new Token(new TokenId("7CDF3B117A3C40CC"),
                                            BigInteger.valueOf(1000)),
                                    new Token(new TokenId("5E62990DCAC5BE8A"),
                                            BigInteger.valueOf(10000000))),

3. Firme la transacción con su cuenta. Luego, incluya la semilla de hash de generación de red para que la transacción solo sea válida para su red. Para recuperar la semilla hash de generación de red, abra NODE_URL /node/info en una nueva pestaña del navegador y copie el valor meta.networkGenerationHashSeed.

  // replace with sender private key
  const privateKey =
    '1111111111111111111111111111111111111111111111111111111111111111';
  const account = Account.createFromPrivateKey(privateKey, networkType);
  const signedTransaction = account.sign(
    transferTransaction,
    networkGenerationHash,
  );
  console.log('Payload:', signedTransaction.payload);
  console.log('Transaction Hash:', signedTransaction.hash);
    // replace with sender private key
    const privateKey =
        '1111111111111111111111111111111111111111111111111111111111111111';
    const account = bitxor_sdk_1.Account.createFromPrivateKey(
        privateKey,
        networkType,
    );
    const signedTransaction = account.sign(
        transferTransaction,
        networkGenerationHash,
    );
    console.log('Payload:', signedTransaction.payload);
    console.log('Transaction Hash:', signedTransaction.hash);
            // replace with private key
            final String privateKey = "1111111111111111111111111111111111111111111111111111111111111111";
            // replace with network generation hash
            final String generationHash = repositoryFactory.getGenerationHash().toFuture().get();

            final Account account = Account
                    .createFromPrivateKey(privateKey, networkType);
            final SignedTransaction signedTransaction = account
                    .sign(transferTransaction, generationHash);
  1. Una vez firmado, anuncie la transacción a la red.

  const transactionRepository = repositoryFactory.createTransactionRepository();
  const response = await transactionRepository
    .announce(signedTransaction)
    .toPromise();
  console.log(response);
    const transactionRepository = repositoryFactory.createTransactionRepository();
    const response = await transactionRepository
        .announce(signedTransaction)
        .toPromise();
    console.log(response);
            final TransactionRepository transactionRepository = repositoryFactory
                    .createTransactionRepository();
            transactionRepository.announce(signedTransaction).toFuture().get();
        }

5. Abra la terminal donde está monitoreando el estado de la transacción. La transacción debe aparecer como confirmada después de 30 segundos como máximo y la cantidad definida se transfiere de la cuenta del remitente a la cuenta del destinatario. Si el terminal genera un error, puede verificar la descripción del código de error aquí.

Método #03: Uso de la CLI

Abra una ventana de terminal y ejecute el siguiente comando para transferir 10 BXR desde su cuenta predeterminada.

Recuerde reemplazar BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ con la dirección del destinatario al que también desea enviar tokens y @bitxor::10000000 con la cantidad absoluta deseada.

Opcionalmente, puede configurar un mensaje personalizado con la opción --message.

 bitxor-cli transaction transfer --recipient-address BXRQ5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ --tokens "@bitxor::10000000" --message "This is a test message" --sync