NEM Libraryを使ってみる(2) トランスファートランザクション

次にxemや各種モザイクの送信方法についてです。

xemの送信

xemを送信するには、TransactionHttpクラスのannounceTransactionメソッドを利用します。

送信する署名済トランザクションを作成するには、TransferTransactionクラスのcreateメソッドでトランザクションを作成し、AccountクラスのsignTransactionメソッドで署名します。

let account = Account.createWithPrivateKey("privatexxxxxxxxxxxxx");

let tx = TransferTransaction.create(
    TimeWindow.createWithDeadline(),
    new Address("NCS5BI-MFLIOP-5TMLKM-INCN5C-4PQ5VK-YXK7BB-VGYX"),
    new XEM(0.1),
    EmptyMessage
  );
let signedTransaction: SignedTransaction = account.signTransaction(tx);

let transactionHttp = new TransactionHttp();
transactionHttp.announceTransaction(signedTransaction)
  .subscribe( x => console.log(x));

SUCCESSが返ってきました。

{
  "type":1,
  "code":1,
  "message":"SUCCESS",
  "transactionHash":{
    "data":"28b15df7e2a28e215385ce50ba2e7efb9efe0943db8f585576e071638bd8aa28"
  },
  "innerTransactionHash":{}
}

モザイクの送信

モザイクを送信するには、MosaicHttpクラスのgetMosaicTransferableWithAmountMosaicTransferableオブジェクトを作成し、配列にまとめてからTransferTransactionクラスのcreateWithMosaicsメソッドでトランザクションを作成します。 getMosaicTransferableWithAmountにxemを喰わせるとエラーになったので、個別に配列に追加しました。

ちなみにquantityを1にした場合、divisibilityがいくつであってもしっかりと1送られます。何気にハマるポイントなので気にしなくていいのはありがたいです。

Observable.from([
  {mosaic: new MosaicId("nextem", "nex"), quantity: 1},
  {mosaic: new MosaicId("nextem.ex", "photon"), quantity: 1},
  {mosaic: new MosaicId("nextem.ex", "higgs"), quantity: 1}
]).flatMap(mosaicWithAmount => mosaicHttp.getMosaicTransferableWithAmount(
    mosaicWithAmount.mosaic,
    mosaicWithAmount.quantity
  ))
  .toArray()
  .map(mosaics => {
    mosaics.unshift(new XEM(1));
    return mosaics;
  })
  .map(mosaics => TransferTransaction.createWithMosaics(
      TimeWindow.createWithDeadline(),
      new Address("NCS5BI-MFLIOP-5TMLKM-INCN5C-4PQ5VK-YXK7BB-VGYX"),
      mosaics,
      EmptyMessage
    )
  )
  .map(transaction => account.signTransaction(transaction))
  .flatMap(signedTransaction => transactionHttp.announceTransaction(signedTransaction))
  .subscribe(nemAnnounceResult => {
      console.log(nemAnnounceResult);
  });

残高の確認と送受信。これでもうほとんどのことは出来てしまいます。しかも容易に。

feeも安くなってネームスペースを初めて取ったなんて人も少しずつ出てきているようですし、さらに一歩進めて何か作ってみるというのはいかがでしょうか。


※筆者のモチベーション向上のため、以下NEMアドレスへxemなりシットトークンなりの寄付を受け付けています。

NDY4RH-UZ3CZO-Z53O5H-NEXTEM-7UF5X3-MMDGH4-IMAD