2つのアカウント間でモザイクとメッセージを送信

定義して、署名したら転送トランザクションをアナウンスします。

ここでは、あなたのアカウントから Bob のアドレス B6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ へ 10 symbol.xym を送る方法をガイドします。

前提条件

  • 入門セクション を完了している
  • 新しい アカウント を作成します。
  • アカウントに手数料を支払うために十分な symbol.xym を入金してください。

方法 #01: デスクトップウォレットを使用する

  1. デスクトップウォレットのホームから 転送 タブをクリックします。
../../_images/desktop-transfer-1.gif

2. Fill out the necessary information for the transfer transaction. For this example, you need to specify that you are sending 10 XYM to Bob (TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ). You can add a message, but it is not necessary in this case.

../../_images/desktop-transfer-2.gif

3. Once you have filled out all the information, click 「Send」. A popup will show. Read and verify the information, then enter your wallet password and click 「Confirm」.

4. You can verify that the transaction was successful by going back to the 「Dashboard」 tab. At first, it might show up under 「Unconfirmed」 transactions as the transaction becomes included in a block, but you should soon be able to see it under the 「Confirmed」 transactions.

方法 #02: SDK を使用する

  1. 新しいターミナルで、送信者のアカウントに関するトランザクションを監視して、ネットワークによって承認または拒否されたかを確認します。
symbol-cli monitor all --address <YOUR-ADDRESS>

2. Open a new file and define the TransferTransaction. Include Bob’s address as the recipient, and attach 10 symbol.xym.

Symbol では、モザイクの単位を 絶対量 で定義します。絶対量を取得するには、送りたいアセット量に 10divisibility を乗じてください。例えば、モザイクが 可分性 2 である場合、10 単位 (相対量) を送信するには 1000 (絶対量) と定義します。

  // replace with recipient address
  const rawAddress = 'TB6Q5E-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 = 'TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ';
  const recipientAddress = symbol_sdk_1.Address.createFromRawAddress(
    rawAddress,
  );
  const transferTransaction = symbol_sdk_1.TransferTransaction.create(
    symbol_sdk_1.Deadline.create(epochAdjustment),
    recipientAddress,
    [currency.createRelative(10)],
    symbol_sdk_1.PlainMessage.create('This is a test message'),
    networkType,
    symbol_sdk_1.UInt64.fromUint(2000000),
  );
        // replace with node endpoint
        try (final RepositoryFactory repositoryFactory = new RepositoryFactoryVertxImpl(
                "http://api-01.us-east-1.testnet.symboldev.network:3000")) {
            // replace with recipient address
            final String rawAddress = "TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ";
            final UnresolvedAddress recipientAddress = Address.createFromRawAddress(rawAddress);
            final NetworkType networkType = repositoryFactory.getNetworkType().toFuture().get();
            // replace with symbol.xym id
            final MosaicId networkCurrencyMosaicId = new MosaicId("5E62990DCAC5BE8A");
            // replace with network currency divisibility
            final Integer networkCurrencyDivisibility = 6;
            // replace with relative amount of symbol.xym to send
            final BigInteger amount = BigInteger.valueOf(10);

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

すでにお気付きの通り、転送トランザクションではモザイクの配列をパラメタとして要求します。これは一度で複数のモザイクを添付した転送トランザクションを送ることを可能にします。

複数のモザイクを所有している場合は、同じトランザクションでそれらを一緒に送信できます:

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

3. Sign the transaction with your account. Then, include the network generation hash seed to make the transaction only valid for your network. To retrieve the network generration hash seed, open nodeUrl + '/node/info' in a new browser tab and copy meta.networkGenerationHashSeed value.

  // 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 = symbol_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. 署名したら トランザクションをネットワークへアナウンス できます。
  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. Open the terminal where you are monitoring the transaction’s status. The transaction should appear as confirmed after 30 seconds at most and the amount defined gets transferred from the sender’s account to the recipient’s account. If the terminal raises an error, you can check the error code description here.

方法 #03: CLI を使用する

ターミナルを開き、あなたのデフォルトアカウントか 10 XYM を送るために、次のコマンドを実行します。

TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ@symbol.xym::10000000 を送信したい受信者アドレスと意図したモザイク絶対総数に置き換えることを忘れないでください。

--message オプションでメッセージを添付することもできます。

 symbol-cli transaction transfer --recipient-address TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ --mosaics "@symbol.xym::10000000" --message "This is a test message" --sync