LoginSignup
2
0

More than 5 years have passed since last update.

nem catapult aggregate tx その1 1-to-nアドレス宛送信

Last updated at Posted at 2018-05-29

公式ドキュメント

Running Catapult in local

Writing your first application

Sending payouts with aggregate complete transaction

前提

概要

公式ドキュメントに沿って、DANからALICEとBOBに10XEMを送ることを想定します。

DANからALICEとBOBに10XEM送る

まずは、2つのtransfer transactionを作ります。

  • TX1 (DAN -> ALICE)
  • TX2 (DAN -> BOB)

この時点で、署名はしません。

次に、aggregate transactionを作ります。この中に、先ほどのTX1TX2を入れます。

aggregate transaction

そして、DANはこのaggregate txに署名をして、ネットワークに送信して完了です。

このタイプのトランザクションを、aggregate complete transactionと呼んでいる気がします。これは、DAN自身で作成から送信まで完了するためだと思います。

コード

これをそのまま動かします
Sending payouts with aggregate complete transaction

ぜんぶ
aggsendtwo.js
const nem2Sdk = require("nem2-sdk");

const Address = nem2Sdk.Address,
    Deadline = nem2Sdk.Deadline,
    Account = nem2Sdk.Account,
    UInt64 = nem2Sdk.UInt64,
    NetworkType = nem2Sdk.NetworkType,
    PlainMessage = nem2Sdk.PlainMessage,
    TransferTransaction = nem2Sdk.TransferTransaction,
    Mosaic = nem2Sdk.Mosaic,
    MosaicId = nem2Sdk.MosaicId,
    TransactionHttp = nem2Sdk.TransactionHttp,
    XEM = nem2Sdk.XEM,
    AggregateTransaction = nem2Sdk.AggregateTransaction;



// Replace with private key
const danPrivateKey = '7808B5B53ECF24E40BE17B8EC3D0EB5F7C3F3D938E0D95A415F855AD4C27B2A4';

// Replace with addresses
const aliceAddress = 'SB2Y5N-D4FDLB-IO5KHX-TKRWOD-DG2QHI-N73DTY-T2PC';
const bobAddress =  'SBKUNR-OFEK7Z-L3EO7B-PW67FC-KGJWSY-PYYYMT-6VRN';

const account = Account.createFromPrivateKey(danPrivateKey, NetworkType.MIJIN_TEST);

const brotherAccount = Address.createFromRawAddress(aliceAddress);
const sisterAccount = Address.createFromRawAddress(bobAddress);

const amount = XEM.createRelative(10); // 10 xem represent 10 000 000 micro xem

const brotherTransferTransaction = TransferTransaction.create(Deadline.create(), brotherAccount, [amount], PlainMessage.create('payout'), NetworkType.MIJIN_TEST);
const sisterTransferTransaction = TransferTransaction.create(Deadline.create(), sisterAccount, [amount], PlainMessage.create('payout'), NetworkType.MIJIN_TEST);

const aggregateTransaction = AggregateTransaction.createComplete(
    Deadline.create(),
    [
        brotherTransferTransaction.toAggregate(account.publicAccount),
        sisterTransferTransaction.toAggregate(account.publicAccount)],
    NetworkType.MIJIN_TEST,
    []
);

const transactionHttp = new TransactionHttp('http://localhost:3000');

const signedTransaction = account.sign(aggregateTransaction);

transactionHttp.announce(signedTransaction).subscribe(x => console.log(x),
        err => console.error(err));


console.log('HASH:   ' + signedTransaction.hash);
console.log('SIGNER: ' + signedTransaction.signer);

結果

# node aggsendtwo.js
HASH:   47E6573A90ADE86D2225845F52E90A82CC49D0F8DEDDC3BF424F04618A739DC8
SIGNER: 5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C
TransactionAnnounceResponse {
  message: 'packet 9 was pushed to the network via /transaction' }

rest apiで見てみる

$ curl http://localhost:3000/transaction/47E6573A90ADE86D2225845F52E90A82CC49D0F8DEDDC3BF424F04618A739DC8
{
  "meta": {
    "height": [
      55,
      0
    ],
    "hash": "47E6573A90ADE86D2225845F52E90A82CC49D0F8DEDDC3BF424F04618A739DC8",
    "merkleComponentHash": "47E6573A90ADE86D2225845F52E90A82CC49D0F8DEDDC3BF424F04618A739DC8",
    "index": 0,
    "id": "5B0CB92549F94300010935DE"
  },
  "transaction": {
    "signature": "8458C03FAA1FE6D7139A1B51F07B98BEE69FEBAC3F0E9BB4B16DCACB3E2DF9E1CA1274315B44E4E05A623E5F2C08A8201D4B66D3DD71D401F50FC0476456240A",
    "signer": "5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C",
    "version": 36866,
    "type": 16705,
    "fee": [
      0,
      0
    ],
    "deadline": [
      3674365819,
      15
    ],
    "cosignatures": [],
    "transactions": [
      {
        "meta": {
          "height": [
            55,
            0
          ],
          "aggregateHash": "47E6573A90ADE86D2225845F52E90A82CC49D0F8DEDDC3BF424F04618A739DC8",
          "aggregateId": "5B0CB92549F94300010935DE",
          "index": 0,
          "id": "5B0CB92549F94300010935DF"
        },
        "transaction": {
          "signer": "5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C",
          "version": 36867,
          "type": 16724,
          "recipient": "90758EB47C28D6143BAA3DE6A8D9C319B503A1BFD8E789E9E2",
          "message": {
            "type": 0,
            "payload": "7061796F7574"
          },
          "mosaics": [
            {
              "id": [
                3646934825,
                3576016193
              ],
              "amount": [
                10000000,
                0
              ]
            }
          ]
        }
      },
      {
        "meta": {
          "height": [
            55,
            0
          ],
          "aggregateHash": "47E6573A90ADE86D2225845F52E90A82CC49D0F8DEDDC3BF424F04618A739DC8",
          "aggregateId": "5B0CB92549F94300010935DE",
          "index": 1,
          "id": "5B0CB92549F94300010935E0"
        },
        "transaction": {
          "signer": "5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C",
          "version": 36867,
          "type": 16724,
          "recipient": "905546C5C522BF95EC8EF85F6F7CA251936961F8C6193F562D",
          "message": {
            "type": 0,
            "payload": "7061796F7574"
          },
          "mosaics": [
            {
              "id": [
                3646934825,
                3576016193
              ],
              "amount": [
                10000000,
                0
              ]
            }
          ]
        }
      }
    ]
  }
}

デコードされたアドレスだけど、ちゃんと以下の2人に10000000単位送られていることがわかります。
90758EB47C28D6143BAA3DE6A8D9C319B503A1BFD8E789E9E2
905546C5C522BF95EC8EF85F6F7CA251936961F8C6193F562D

コメント

  • NEM2-SDKでは、トランザクションを作る際、受け取る人は指定するが、送る人は指定しない。署名をした段階で、その人が送る人になるのね。
  • YAMLの方がコンパクトに見える。
  • feeどこいった。feeが必要なのは、内部のtransfer txか、aggregate txか。両方か。

関連

nem catapult aggregate tx その2 エスクロー

nem catapult aggregate tx その3 内部tx実行順序

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0