mijin

User Guide Introduction

mijin Catapult SDKサンプル集

ここでは、mijin CatapultにおけるSDKを利用したサンプルを実行できます。

実装例

FAQ

デプロイメントガイド

SDKサンプル インストール

準備

nodejsで動いているため、事前にnodejsのインストールが必要です。 14.x以上をインストールしてください。

https://nodejs.org/ja/

mijin サンプルソースの取得

サンプルソースをgit cloneしてください。


git clone git@github.com:tech-bureau-jp/mijin-scripts.git && cd mijin-scripts

ファイルの構成

.
├── README.md
├── catapult
│   ├── javascript
│   │   ├──  .. javascript サンプル集
│   │   └── config
│   │       └── local.json.mt .. 設定ファイルのベース
│   └── python
│       ├──  .. python サンプル集
│       └── config
│           └── local.json.mt .. 設定ファイルのベース
├── package.json
├── requirements.txt
└── yarn.lock

ライブラリのインストール

@tech-bureau/symbol-sdkなどのライブラリが必要のため、以下を実行してください。

yarn

configの配置

「catapult/javascript/config/local.json.mt」を

「catapult/javascript/config/local.json」にコピーしてください。

cp catapult/javascript/config/local.json.mt catapult/javascript/config/local.json

エンドポイントURLの指定

コピーしたlocal.jsonにmijinのエンドポイントURLを指定してください。

{
  "private1": {
    "url": "http://xxxxxxxx:3000" //エンドポイントを指定してください

エンドポイントURLの指定(mijin BODの場合)

mijin BODの場合は以下

mijin BOD サイト ダッシュボード 契約情報 -> mijin エンドポイント

にて確認できます。

mijin BOD Endpoint

コピーしたlocal.json private1.urlにmijin BOD のエンドポイントURLを指定してください。

{
  "private1": {
    "url": "https://xxxxxxxx.mijin.io" //エンドポイントを指定してください

注意)mijin BODの場合、PORT番号の記載は必要ありません。

xxxxxxxxの部分は、それぞれ正しいエンドポイントURLに置き換えてください。

本サンプル実行前に

サンプルディレクトリへ移動

javascriptディレクトリへ移動をします。

cd catapult/javascript

以後のサンプルは

catapult/javascript

ディレクトリで実行するものとします。

ブロック高の確認

ブロック情報を取得します。

heightは現在のブロック高

finaliize heightは確定したブロック高

になります。

最新のブロック高の確認 block_check.js

node block_check.js
出力例:
height 118365
finaliize height 7040

websocket経由でリアルタイムのブロック高確認 block_check_listener.js

websocketで、リアルタイムのブロック高を取得します。

node block_check_listener.js
出力例:
height 118399
finaliize height 7680
height 118400
height 118401
height 118402

終了する場合は、Ctrl+c で抜けてください。


直近の10ブロック高の時刻とトランザクション数を確認 block_info.js

node block_info.js
出力例:
-------------------------------------------------
BlockHeight 136603
Date Thu May 18 2023 14:07:17 GMT+0900 (日本標準時)
TotalTranction 1
-------------------------------------------------
-------------------------------------------------
BlockHeight 136602
Date Thu May 18 2023 14:07:08 GMT+0900 (日本標準時)
TotalTranction 1
-------------------------------------------------
-------------------------------------------------
BlockHeight 136601
Date Thu May 18 2023 14:06:55 GMT+0900 (日本標準時)
TotalTranction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 136600
Date Thu May 18 2023 14:06:51 GMT+0900 (日本標準時)
TotalTranction 1
-------------------------------------------------
-------------------------------------------------
BlockHeight 136599
Date Thu May 18 2023 14:06:41 GMT+0900 (日本標準時)
TotalTranction 1
-------------------------------------------------
-------------------------------------------------
BlockHeight 136598
Date Thu May 18 2023 14:06:28 GMT+0900 (日本標準時)
TotalTranction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 136597
Date Thu May 18 2023 14:06:17 GMT+0900 (日本標準時)
TotalTranction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 136596
Date Thu May 18 2023 14:06:05 GMT+0900 (日本標準時)
TotalTranction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 136595
Date Thu May 18 2023 14:05:55 GMT+0900 (日本標準時)
TotalTranction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 136594
Date Thu May 18 2023 14:05:40 GMT+0900 (日本標準時)
TotalTranction 0
-------------------------------------------------

ブロック高が正常に出力されれば、エンドポイントURLの設定は正常に完了しています。

mijin Catapult Javascript サンプル集

ここでは、mijin CatapultにおけるJavascriptのサンプルを実行できます。

本サンプル実行前に

を実施している必要があります

サンプル集 index

本サンプル集の記述は注記がない限り、手数料なしモード時 のサンプルとなります

アドレスの発行

1.アドレスの発行

本サンプルではmijinブロックチェーン上に、空のアドレスを7つ発行します。

mijin

実行

node 01_account_generate.js

出力された結果をconfigファイルである

catapult/javascript/config/local.json

private1内を

  • workaddress (以後、送信元のアドレスとなります)
  • address1-6 (以後、送信先のアドレスとなります)

に置き換えて保存してください。

  "workaddress": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address1": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address2": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address3": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address4": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address5": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address6": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  }

モザイク発行(token)トランザクションの実行

2.モザイク発行(token)トランザクションの実行

前項:アドレスの発行をしたworkaddress にて、新規のモザイクを発行します。

mijin

実行

node 02_mosaic_definition.js

本サンプルではモザイクの定義を

Mosaic発行数:100

可分性:0

ハードコーディングにて定義しています。

新規に発行したMosaicIdは、上記コマンド結果の最後に出力されます。

(以下の例では、1D361778B3471970の値)

出力例:
------------------------------------------------------------
New Mosaic Id 1D361778B3471970
------------------------------------------------------------

出力されたMosaicIDをconfigファイルである

catapult/javascript/config/local.json

private1内 workaddressの「mosaicId」を置き換えてください。

    "workaddress": {
      "privatekey": "<既に記載済みのprivatekey>",
      "address": "<既に記載済みのaddress>",
      "mosaicId": "1D361778B3471970", //⇐mosaicIdに記載する
      "namespace": ""
    },

アカウント情報の取得

workaddressが新規に発行したMosaicを持っているか確認します。

実行

node account_info.js workaddress
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'workaddress',
  address: '<workaddressのアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '100', //⇐workaddressが新規発行したモザイク1D361778B3471970を発行数100保持していることを表します
      namespaceAlias: 'No Namespace'
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

転送トランザクションの実行(モザイク)

3.転送トランザクションの実行(モザイク)

前項:workaddressで発行したモザイク を、別のアドレスaddress1へ送金します。

mijin

workaddress ->(mosaic送信数:1)-> address1

本サンプルでは送信するMosaic数を1としています。

実行

node 03_mosaic_transaction.js
出力例:
txsize 187
payload 374
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: '60741EC2EAF613A659556B688D6ACD77452D252CC367F593E03CD197B2E0CAEC',
  signerPublicKey: '<送信元workaddressのpublicKeyが表示されます>',
  type: 16724,
  networkType: 96
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction TransferTransaction {
  type: 16724,
  networkType: 96,
  version: 1,
  deadline: Deadline { adjustedValue: 124090630660 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 135709, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '60741EC2EAF613A659556B688D6ACD77452D252CC367F593E03CD197B2E0CAEC',
    merkleComponentHash: '60741EC2EAF613A659556B688D6ACD77452D252CC367F593E03CD197B2E0CAEC'
  },
  payloadSize: undefined,
  recipientAddress: Address {
    address: '<送信先address1のアドレスが表示されます>',
    networkType: 96
  },
  mosaics: [ Mosaic { id: [MosaicId], amount: [UInt64] } ],
  message: PlainMessage {
    builder: Uint8Array(11) [
       0, 84, 69, 83, 84,
      32, 77, 73, 74, 73,
      78
    ],
    type: 0,
    payload: 'TEST MIJIN'
  }
}

アカウント情報の取得

address1が、送金されたMosaicを持っているか確認します。

実行

node account_info.js address1
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address1',
  address: '<address1のアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '1', //⇐address1へ送金されたモザイクを1保持している
      namespaceAlias: 'No Namespace'
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

workaddressが、address1へ送金したMosaicが1減っていることを確認します。

実行

node account_info.js workaddress
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'workaddress',
  address: '<workaddressのアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '99', //⇐workaddressからaddress1へ送金されたモザイクを1が減り、100から99になっている
      namespaceAlias: 'No Namespace'
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

Namespace作成トランザクションの実行

4.Namespace作成トランザクションの実行

workaddressにてNamespaceをレンタル期間制限付きで発行します。

mijin

本サンプルでは1000ブロックのレンタル期間としています。

任意のネームスペース名を configファイルである

catapult/javascript/config/local.json

private1内 workaddressの「namespace」に記載してください。

(e.g. techbureauなど)

  "workaddress": {
    "privatekey": "<既に記載済みのprivatekey>",
    "address": "<既に記載済みのaddress>",
    "mosaicId": "1D361778B3471970",
    "namespace": "techbureau" //⇐任意のネームスペース名を記載する
  },

実行

node 04_namespace_registration.js
出力例:
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: 'E2C3978DE8B3A2BFF25AAFD36AB9C8E56F7EA830BB18FD8C95CE82D2BCBEC96A',
  signerPublicKey: '<送信元workaddressのpublicKeyが表示されます>',
  type: 16718,
  networkType: 96
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction NamespaceRegistrationTransaction {
  type: 16718,
  networkType: 96,
  version: 1,
  deadline: Deadline { adjustedValue: 124097600720 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 136405, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: 'E2C3978DE8B3A2BFF25AAFD36AB9C8E56F7EA830BB18FD8C95CE82D2BCBEC96A',
    merkleComponentHash: 'E2C3978DE8B3A2BFF25AAFD36AB9C8E56F7EA830BB18FD8C95CE82D2BCBEC96A'
  },
  payloadSize: undefined,
  registrationType: 0,
  namespaceName: 'techbureau', //⇐発行されたネームスペース名が表示されます
  namespaceId: NamespaceId { id: Id { lower: 3396223920, higher: 2354151119 } },
  duration: UInt64 { lower: 1000, higher: 0 },
  parentId: undefined
}

Aliasトランザクションの実行

5.Aliasトランザクションの実行

2.モザイク発行(token)トランザクションの実行 で作成したモザイクと

4.Namespace作成トランザクションの実行 で作成したNamespaceを

Aliasトランザクションで紐付けます。

mijin

紐付けることで、Namespace名でtokenをやり取りすることが可能です。

実行

node 05_namespace_to_mosaic_alias.js
出力例:
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: '52EE9D4C97FE62875676C14B56FE81E1C4E2E423213C75B7E775BBD952624389',
  signerPublicKey: '<送信元workaddressのpublicKeyが表示されます>',
  type: 17230,
  networkType: 96
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction MosaicAliasTransaction {
  type: 17230,
  networkType: 96,
  version: 1,
  deadline: Deadline { adjustedValue: 124098021658 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 136448, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '52EE9D4C97FE62875676C14B56FE81E1C4E2E423213C75B7E775BBD952624389',
    merkleComponentHash: '52EE9D4C97FE62875676C14B56FE81E1C4E2E423213C75B7E775BBD952624389'
  },
  payloadSize: undefined,
  aliasAction: 1,
  namespaceId: NamespaceId { id: Id { lower: 3396223920, higher: 2354151119 } },
  mosaicId: MosaicId { id: Id { lower: 3007781232, higher: 490084216 } }
}

アカウント情報の取得

workaddressが作成したMosaicとNamespaceで解決できているか確認します。

実行

node account_info.js workaddress
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'workaddress',
  address: '<workaddressのアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '99',
      namespaceAlias: 'techbureau' //⇐workaddressが作成したモザイク1D361778B3471970にネームスペースtechbureauが紐付されている
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

参考)ブロックチェーンエクスプローラーでworkaddressのアドレスを検索すると、以下の様に表示されます

mijin

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください

AgregateCompleteトランザクションの実行

6.AgregateCompleteトランザクションの実行

送信元workaddressが保持するモザイクを、複数の送付先アドレスへ送付するトランザクションを、一つのトランザクションに纏めて送信します。

mijin

送信するモザイクの指定は

2.モザイク発行(token)トランザクションの実行

4.Namespace作成トランザクションの実行

5.Aliasトランザクションの実行

にて設定ファイルであるlocal.jsonにprivate1.workaddress.namespaceとして記載し、モザイクに紐づけたNamespaceを指定して送付します。

送付するモザイクはNamespaceで指定しています。

  • private1.workaddress.namespace

送信元 -> 送信先

  • workaddress -> address1
  • workaddress -> address2
  • workaddress -> address3
  • workaddress -> address4
  • workaddress -> address5
  • workaddress -> address6

workaddressからaddress1-address6へのモザイク送信を一つのAgregateCompleteトランザクションに纏めています。

実行

node 06_aggregate_complete_transaction_mosaic.js
出力例:
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: 'B9F1B7AA62CEAEF900726D44791CD5BDA300BFB78F3D054F980613D3E529922D',
  signerPublicKey: '<送信元workaddressのpublicKeyが表示されます>',
  type: 16705,
  networkType: 96
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction AggregateTransaction {
  type: 16705,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 124180415246 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 144675, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: 'B9F1B7AA62CEAEF900726D44791CD5BDA300BFB78F3D054F980613D3E529922D',
    merkleComponentHash: 'B9F1B7AA62CEAEF900726D44791CD5BDA300BFB78F3D054F980613D3E529922D'
  },
  payloadSize: undefined,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    }
  ],
  cosignatures: []
}

アカウント情報の取得

address1-6が、送金されたMosaicを持っているか確認します。

  • address1の場合

実行

node account_info.js address1
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address1',
  address: '<address1のアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '2', //⇐address1へ送金されたモザイクを2保持している
      namespaceAlias: 'techbureau' //ネームスペースtechbureauが紐付されているモザイク
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

  • address6の場合

実行

node account_info.js address6
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address6',
  address: '<address6のアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '1', //⇐address6へ送金されたモザイクを1保持している
      namespaceAlias: 'techbureau' //ネームスペースtechbureauが紐付されているモザイク
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

workaddressから、送金されたモザイクが減っていることを確認します。

  • workaddressの場合

実行

node account_info.js workaddress
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'workaddress',
  address: '<workaddressのアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '93', //⇐6送金した分が減算されている
      namespaceAlias: 'techbureau' //ネームスペースtechbureauが紐付されているモザイク
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

AggregateBondedトランザクションの実行

7-1.AggregateBondedトランザクションの実行

複数の送信元 が存在するトランザクションを纏めて送信します。

mijin

本サンプルではaddress1とaddress2の二つの送信元が存在します。

  • address1 -> address3
  • address2 -> address3

前項:6.AggregateCompleteサンプルとの違いは、HashLockトランザクションを作成し、送信元となるユーザー全員がトランザクションへ署名する必要があります。

送信するモザイクの指定は

2.モザイク発行(token)トランザクションの実行

4.Namespace作成トランザクションの実行

5.Aliasトランザクションの実行

にて設定ファイルであるlocal.jsonにprivate1.workaddress.namespaceとして記載し、モザイクに紐づけたNamespaceを指定して送付します。

送付するモザイクはNamespaceで指定しています。

  • private1.workaddress.namespace

07_01_aggregate_bonded_transaction.jsでは

  • HashLockトランザクションの作成
  • AggregateBondedトランザクションの作成
  • address1の署名

を行います。

実行

node 07_01_aggregate_bonded_transaction.js
出力例:
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
Fee TransactionFees {
  averageFeeMultiplier: 0,
  medianFeeMultiplier: 0,
  highestFeeMultiplier: 0,
  lowestFeeMultiplier: 0,
  minFeeMultiplier: 0
}
UInt64 { lower: 0, higher: 0 }
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: '84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306',
  signerPublicKey: '<送信元address1のpublicKeyが表示されます>',
  type: 16961,
  networkType: 96
}
------------------- hashRockTransaction ------------------------
LockFundsTransaction {
  type: 16712,
  networkType: 96,
  version: 1,
  deadline: Deadline { adjustedValue: 126957206432 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: undefined,
  signer: undefined,
  transactionInfo: undefined,
  payloadSize: undefined,
  mosaic: Mosaic {
    id: MosaicId { id: [Id] },
    amount: UInt64 { lower: 0, higher: 0 }
  },
  duration: UInt64 { lower: 1000, higher: 0 },
  hash: '84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306'
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 126960806412 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元address1のpublicKeyが表示されます>',
    address: Address {
      address: '<送信元address1のアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: undefined,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    }
  ],
  cosignatures: []
}
Next Command: node ./07_02_aggregate_bonded_transaction_cosign address2 84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306

最期に Next Command: が表示されます。


7-2.AggregateBondedトランザクションの実行

上記で発行したTxhashに対して、address2が署名を行います。

署名は期限内に行う必要があります。

本サンプルでは期限を1時間としています。

address2の署名を実行する際に、署名対象のTxhashを指定します。

07_02_aggregate_bonded_transaction_cosign.jsではaddress2の署名を行っています。

上記出力例ではTxhashとして 84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306 が表示されていますが、実行は実際のTxhashを指定して下さい。

実行

node 07_02_aggregate_bonded_transaction_cosign.js address2 <出力されたTxhash>
出力例:
node ./07_02_aggregate_bonded_transaction_cosign address2 84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 126960806412 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元address1のpublicKeyが表示されます>',
    address: Address {
      address: '<送信元address1のアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: 0,
    id: '64915B00E1FE0179BF2BA9B8',
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '84B32BB4461B9F3EEDD94791F53EC43AE72F94A61959AFB6E5CE5848CF8DC306',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: 392,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    }
  ],
  cosignatures: []
}

アカウント情報の取得

address1,2,3のアカウント情報を確認します。

  • address1の場合

実行

node account_info.js address1
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address1',
  address: '<address1のアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '1', //⇐address3へ送金した分が減算されている
      namespaceAlias: 'techbureau' //ネームスペースtechbureauが紐付されているモザイク
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

  • address2の場合

実行

node account_info.js address2
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address2',
  address: '<address2のアドレスが表示されます>',
  mosaics: [],//⇐address3へ送金したためmosaicを保持していない
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

  • address3の場合

実行

node account_info.js address3
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address3',
  address: '<address3のアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '3', //address1 address2 から送金された分が増加している
      namespaceAlias: 'techbureau' //ネームスペースtechbureauが紐付されているモザイク
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: []
}

注記)手数料ありモードの場合:複数の送信元のトランザクションですが、纏めたトランザクション(HashLock)に署名した人のみが手数料を纏めて支払う(代払い)が可能になります。

マルチシグ化

8.マルチシグトランザクションの実行

address3を、address1,address2を連署者とした1of2のマルチシグ化するトランザクションを実行します。

mijin

使用するトランザクションは前項:7.AggregateBondedサンプルと同じ、AggregateBondedトランザクションになります。

実行

node 08_multisig_transaction.js
出力例:
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
Fee TransactionFees {
  averageFeeMultiplier: 0,
  medianFeeMultiplier: 0,
  highestFeeMultiplier: 0,
  lowestFeeMultiplier: 0,
  minFeeMultiplier: 0
}
UInt64 { lower: 0, higher: 0 }
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: '55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2',
  signerPublicKey: '<送信元workaddressのpublicKeyが表示されます>',
  type: 16961,
  networkType: 96
}
------------------- hashRockTransaction ------------------------
LockFundsTransaction {
  type: 16712,
  networkType: 96,
  version: 1,
  deadline: Deadline { adjustedValue: 127126704591 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: undefined,
  signer: undefined,
  transactionInfo: undefined,
  payloadSize: undefined,
  mosaic: Mosaic {
    id: MosaicId { id: [Id] },
    amount: UInt64 { lower: 0, higher: 0 }
  },
  duration: UInt64 { lower: 1000, higher: 0 },
  hash: '55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2'
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127202304571 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: undefined,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    MultisigAccountModificationTransaction {
      type: 16725,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      minApprovalDelta: 1,
      minRemovalDelta: 1,
      addressAdditions: [Array],
      addressDeletions: []
    }
  ],
  cosignatures: []
}
Next Command: node ./07_02_aggregate_bonded_transaction_cosign address1 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2
Next Command: node ./07_02_aggregate_bonded_transaction_cosign address2 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2
Next Command: node ./07_02_aggregate_bonded_transaction_cosign address3 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2

最期に Next Command: が3つ表示されます。


上記でworkaddressが発行したTxhashに対して、address1,address2,address3がそれぞれ署名を行います。

署名は

  • address1
  • address2
  • address3

3つのアドレスが署名を期限内に行う必要があります。

本サンプルでは期限を2時間としています。

署名を実行する際に、署名対象のTxhashを指定します。

上記出力例ではTxhashとして 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2 が表示されていますが、実行は実際のTxhashを指定して下さい。

address1の署名

実行

node 07_02_aggregate_bonded_transaction_cosign.js address1 <出力されたTxhash>
出力例:
node ./07_02_aggregate_bonded_transaction_cosign address1 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127202304571 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: 0,
    id: '6493E303E1FE0179BF2C2C3C',
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: 392,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    MultisigAccountModificationTransaction {
      type: 16725,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      minApprovalDelta: 1,
      minRemovalDelta: 1,
      addressAdditions: [Array],
      addressDeletions: []
    }
  ],
  cosignatures: []
}

address2の署名

実行

node 07_02_aggregate_bonded_transaction_cosign.js address2 <出力されたTxhash>
出力例:
node ./07_02_aggregate_bonded_transaction_cosign address2 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127038296433 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: 0,
    id: '64916266E1FE0179BF2BAB44',
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: 392,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    MultisigAccountModificationTransaction {
      type: 16725,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      minApprovalDelta: 1,
      minRemovalDelta: 1,
      addressAdditions: [Array],
      addressDeletions: []
    }
  ],
  cosignatures: [
    AggregateTransactionCosignature {
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      version: [UInt64]
    }
  ]
}

address3の署名

実行

node 07_02_aggregate_bonded_transaction_cosign.js address3 <出力されたTxhash>
出力例:
 node ./07_02_aggregate_bonded_transaction_cosign address3 55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127202304571 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: 0,
    id: '6493E303E1FE0179BF2C2C3C',
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: '55C8CA907165A5610A5C33969338C0CA0D441E7FB5274BAF01FE7B799DDDCFF2',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: 392,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    MultisigAccountModificationTransaction {
      type: 16725,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      minApprovalDelta: 1,
      minRemovalDelta: 1,
      addressAdditions: [Array],
      addressDeletions: []
    }
  ],
  cosignatures: [
    AggregateTransactionCosignature {
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      version: [UInt64]
    },
    AggregateTransactionCosignature {
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      version: [UInt64]
    }
  ]
}

マルチシグ化アカウント情報の取得

上記でマルチシグ化を実施した、address3のアカウント情報を確認します。

  • address3

実行

node account_info.js address3
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'address3',
  address: '<address3のアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '3',
      namespaceAlias: 'techbureau'
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: [],
  multisig: [
    '<address1のアドレスが表示されます>',
    '<address2のアドレスが表示されます>'
  ]
}

multisig の値が追加され、連署者であるaddress1,address2が表示されます。


参考)ブロックチェーンエクスプローラーでaddress3のアドレスを検索すると、以下の様に表示されます。

mijin

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください。

マルチシグ(モザイク転送)

9.マルチシグアカウントから転送トランザクションの実行

前項:マルチシグ化にてマルチシグ化したaddress3から、workaddress宛てへモザイク転送トランザクションを実行します。

mijin

address3はaddress1,address2 が連署者の1of2マルチシグのため address1またはaddress2 何れかが連署者として署名し、送信を行います。

実行

node 09_multisig_mosaic_transaction.js
出力例:
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
Fee TransactionFees {
  averageFeeMultiplier: 0,
  medianFeeMultiplier: 0,
  highestFeeMultiplier: 0,
  lowestFeeMultiplier: 0,
  minFeeMultiplier: 0
}
UInt64 { lower: 0, higher: 0 }
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: 'BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735',
  signerPublicKey: '<送信元workaddressのpublicKeyが表示されます>',
  type: 16961,
  networkType: 96
}
------------------- hashRockTransaction ------------------------
LockFundsTransaction {
  type: 16712,
  networkType: 96,
  version: 1,
  deadline: Deadline { adjustedValue: 127129562080 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: undefined,
  signer: undefined,
  transactionInfo: undefined,
  payloadSize: undefined,
  mosaic: Mosaic {
    id: MosaicId { id: [Id] },
    amount: UInt64 { lower: 0, higher: 0 }
  },
  duration: UInt64 { lower: 1000, higher: 0 },
  hash: 'BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735'
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127205162057 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: 'BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: undefined,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    }
  ],
  cosignatures: []
}
Next Command: node ./07_02_aggregate_bonded_transaction_cosign address1 BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735
  OR Command: node ./07_02_aggregate_bonded_transaction_cosign address2 BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735

最期に Next Command: が2つ表示されます。


上記でworkaddressが発行したTxhashに対して、address1またはaddress2いずれかが署名を行います。

署名を実行する際に、署名対象のTxhashを指定します。

上記出力例ではTxhashとして BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735 が表示されていますが、実行は実際のTxhashを指定して下さい

ここではaddress1に署名を行わせます

address1の署名

実行

node 07_02_aggregate_bonded_transaction_cosign.js address1 <出力されたTxhash>
出力例:
node ./07_02_aggregate_bonded_transaction_cosign address1 BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735

network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
AggregateTransaction {
  type: 16961,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127205162057 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 0, higher: 0 },
    index: 0,
    id: '6493EE33E1FE0179BF2C2E91',
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: 'BBB72A0C529CEED52BB0016A7E842A21366CBDAF730330CB6ADD6A39BEF6A735',
    merkleComponentHash: '0000000000000000000000000000000000000000000000000000000000000000'
  },
  payloadSize: 400,
  innerTransactions: [
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    },
    TransferTransaction {
      type: 16724,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: [AggregateTransactionInfo],
      payloadSize: undefined,
      recipientAddress: [Address],
      mosaics: [Array],
      message: [PlainMessage]
    }
  ],
  cosignatures: []
}

参考)ブロックチェーンエクスプローラーでTxhashを検索すると、以下の様に表示されます。

mijin

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください。

メタデータ(アカウント)

10.アカウントメタデータトランザクションの実行

メタデータ: アカウント, モザイク, ネームスペース にkey,valueにてカスタムデータを添付して関連付けることができます。

本サンプルではworkaddressアカウントへメタデータを割り当てます。

mijin

割り当てるメタデータはハードコーディングされています。

const key = "AccountMetaTest";
const value = "AccountTest";

実行

node 10_metadata_account.js
出力例:
network 96
GenerationHash 7E77022504E4EAEFC49F4C1F33A30BEE6E40417BB63597CA400EED72ECBFF6A4
scopedMetadataKey D509356FC9B5BACF //HEX化されたメタデータキーが表示されます
txsize 175
payload 528
------------------- signedTransaction ------------------------
SignedTransaction {
  payload: '<payloadが表示されます>',
  hash: 'AD0D1C42E9A5FD71495ED6C82FBD29BC1FA5810678D511CFE8E660957F600A8A',
  signerPublicKey: 'B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F',
  type: 16705,
  networkType: 96
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction AggregateTransaction {
  type: 16705,
  networkType: 96,
  version: 2,
  deadline: Deadline { adjustedValue: 127137273415 },
  maxFee: UInt64 { lower: 0, higher: 0 },
  signature: '<signatureが表示されます>',
  signer: PublicAccount {
    publicKey: '<送信元workaddressのpublicKeyが表示されます>',
    address: Address {
      address: '<送信元workaddressのアドレスが表示されます>',
      networkType: 96
    }
  },
  transactionInfo: TransactionInfo {
    height: UInt64 { lower: 440090, higher: 0 },
    index: undefined,
    id: undefined,
    timestamp: UInt64 { lower: 0, higher: 0 },
    feeMultiplier: 0,
    hash: 'AD0D1C42E9A5FD71495ED6C82FBD29BC1FA5810678D511CFE8E660957F600A8A',
    merkleComponentHash: 'AD0D1C42E9A5FD71495ED6C82FBD29BC1FA5810678D511CFE8E660957F600A8A'
  },
  payloadSize: undefined,
  innerTransactions: [
    AccountMetadataTransaction {
      type: 16708,
      networkType: 96,
      version: 1,
      deadline: [Deadline],
      maxFee: [UInt64],
      signature: '<signatureが表示されます>',
      signer: [PublicAccount],
      transactionInfo: undefined,
      payloadSize: undefined,
      targetAddress: [Address],
      scopedMetadataKey: [UInt64],
      valueSizeDelta: 11,
      value: [Uint8Array]
    }
  ],
  cosignatures: []
}

メタデータを付与したアカウント情報の取得

上記でメタデータを付与実施した、workaddressのアカウント情報を確認します。

  • workaddress

実行

node account_info.js workaddress
出力例:
AccountInfo {
  url: 'https://xxxxxxxx.mijin.io',
  network: '96',
  account: 'workaddress',
  address: '<workaddressのアドレスが表示されます>',
  mosaics: [
    {
      mosaic: '1D361778B3471970',
      amount: '94',
      namespaceAlias: 'techbureau'
    }
  ],
  linkedKeys: { linked: 'None', node: 'None', vrf: 'None', voting: 'None' },
  meta: [
    {
      id: '64940C4D9AAC44BA5541D8A8',
      scopedMetadataKey: 'D509356FC9B5BACF', //HEX化されたメタデータキーが表示されます
      sourceAddress: '<workaddressのアドレスが表示されます>',
      targetAddress: '<workaddressのアドレスが表示されます>',
      metadataType: 0,
      targetId: 'None',
      metadataValue: 'AccountTest' //メタデータの値が表示されます
    }
  ],
  multisig: []
}

参考)ブロックチェーンエクスプローラーでworkaddressのアドレスを検索すると、以下の様に表示されます。

mijin

メタデータエントリ欄に値として表示されます。

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください。

SDKサンプル インストール

準備

Pythonで動いているため、事前にPythonのインストールが必要です。 3.7以上をインストールしてください。

https://www.python.org/downloads/

必要に応じて仮想環境を作成して有効化してください。

python -m venv .venv
source .venv/bin/activate

mijin サンプルソースの取得

サンプルソースをgit cloneしてください。


git clone git@github.com:tech-bureau-jp/mijin-scripts.git && cd mijin-scripts

ファイルの構成

.
├── README.md
├── catapult
│   ├── javascript
│   │   ├──  .. javascript サンプル集
│   │   └── config
│   │       └── local.json.mt .. 設定ファイルのベース
│   └── python
│       ├──  .. python サンプル集
│       └── config
│           └── local.json.mt .. 設定ファイルのベース
├── package.json
├── requirements.txt
└── yarn.lock

ライブラリのインストール

techbureau-symbol-sdk-pythonなどのライブラリが必要のため、以下を実行してください。

pip install -r requirements.txt

configの配置

「catapult/python/config/local.json.mt」を

「catapult/python/config/local.json」にコピーしてください。

cp catapult/python/config/local.json.mt catapult/python/config/local.json

エンドポイントURLの指定

コピーしたlocal.jsonにmijinのエンドポイントURLを指定してください。

{
  "private1": {
    "url": "http://xxxxxxxx:3000" //エンドポイントを指定してください

エンドポイントURLの指定(mijin BODの場合)

mijin BODの場合は以下

mijin BOD サイト ダッシュボード 契約情報 -> mijin エンドポイント

にて確認できます。

mijin BOD Endpoint

コピーしたlocal.json private1.urlにmijin BOD のエンドポイントURLを指定してください。

{
  "private1": {
    "url": "https://xxxxxxxx.mijin.io" //エンドポイントを指定してください

注意)mijin BODの場合、PORT番号の記載は必要ありません。

xxxxxxxxの部分は、それぞれ正しいエンドポイントURLに置き換えてください。

本サンプル実行前に

サンプルディレクトリへ移動

pythonディレクトリへ移動をします。

cd catapult/python

以後のサンプルは

catapult/python

ディレクトリで実行するものとします。

ブロック高の確認

ブロック情報を取得します。

heightは現在のブロック高

finalize heightは確定したブロック高

になります。

最新のブロック高の確認 block_check.py

python block_check.py
出力例:
height 205103
finalize height 205084

websocket経由でリアルタイムのブロック高確認 block_check_listener.py

websocketで、リアルタイムのブロック高を取得します。

python block_check_listener.py
出力例:
height 205741
height 205742
height 205743
finalize height 205724
height 205744

終了する場合は、Ctrl+c で抜けてください。


直近の10ブロック高の時刻とトランザクション数を確認 block_info.py

python block_info.py
出力例:
-------------------------------------------------
BlockHeight 206172
Date 2023-05-26 15:32:03.796000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206171
Date 2023-05-26 15:32:00.021000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206170
Date 2023-05-26 15:31:46.011000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206169
Date 2023-05-26 15:31:30.768000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206168
Date 2023-05-26 15:31:20.761000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206167
Date 2023-05-26 15:31:07.751000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206166
Date 2023-05-26 15:30:57.974000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206165
Date 2023-05-26 15:30:46.735000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206164
Date 2023-05-26 15:30:33.725000
TotalTransaction 0
-------------------------------------------------
-------------------------------------------------
BlockHeight 206163
Date 2023-05-26 15:30:24.717000
TotalTransaction 0
-------------------------------------------------

ブロック高が正常に出力されれば、エンドポイントURLの設定は正常に完了しています。

mijin Catapult Python サンプル集

ここでは、mijin CatapultにおけるPythonのサンプルを実行できます。

本サンプル実行前に

を実施している必要があります

サンプル集 index

本サンプル集の記述は注記がない限り、手数料なしモード時 のサンプルとなります

アドレスの発行

1.アドレスの発行

本サンプルではmijinブロックチェーン上に、空のアドレスを7つ発行します。

mijin

実行

python 01_account_generate.py

出力した結果をconfigファイルである

catapult/python/config/local.json

private1内を

  • workaddress (以後、送信元のアドレスとなります)
  • address1-6 (以後、送信先のアドレスとなります)

に置き換えて保存してください。

  "workaddress": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address1": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address2": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address3": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address4": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address5": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  },
  "address6": {
    "privatekey": "<出力されたprivatekey>",
    "address": "<出力されたaddress>",
    "mosaicId": "",
    "namespace": ""
  }

モザイク発行(token)トランザクションの実行

2.モザイク発行(token)トランザクションの実行

前項:アドレスの発行をしたworkaddress にて、新規のモザイクを発行します。

mijin

実行

python 02_mosaic_definition.py

本サンプルではモザイクの定義を

Mosaic発行数:100

可分性:0

ハードコーディングにて定義しています。

新規に発行したMosaicIdは、上記コマンド結果の最後に出力されます。

(以下の例では、078ABAE03B6EF461の値)

出力例:
------------------------------------------------------------
New Mosaic Id 078ABAE03B6EF461
------------------------------------------------------------

出力されたMosaicIDをconfigファイルである

catapult/python/config/local.json

private1内 workaddressの「mosaicId」を置き換えてください。

    "workaddress": {
      "privatekey": "<既に記載済みのprivatekey>",
      "address": "<既に記載済みのaddress>",
      "mosaicId": "078ABAE03B6EF461", //⇐mosaicIdに記載する
      "namespace": ""
    },

アカウント情報の取得

workaddressが新規に発行したMosaicを持っているか確認します。

実行

python account_info.py workaddress
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "workaddress",
    "address": "<workaddressのアドレスが表示されます",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "100", //⇐workaddressが新規発行したモザイク078ABAE03B6EF461を発行数100保持していることを表します
        "namespaceAlias": "No Namespace"
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

転送トランザクションの実行(モザイク)

3.転送トランザクションの実行(モザイク)

前項:workaddressで発行したモザイクを、別のアドレスaddress1へ送金します。

mijin

workaddress ->(mosaic送信数:1)-> address1

本サンプルでは送信するMosaic数を1としています。

実行

python 03_mosaic_transaction.py
出力例:
------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "B5C88EC83C8B0456DD0879B44861ADE6606F37A1525C096881B4AC62B4078316",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16724,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます",
    "version": 1,
    "network": 96,
    "type": 16724,
    "maxFee": "0",
    "deadline": "125214989000",
    "recipientAddress": "<送信元workaddressのアドレスが表示されます",
    "mosaics": [
      {
        "id": "078ABAE03B6EF461",
        "amount": "1"
      }
    ],
    "message": "0054455354204D494A494E"
  },
  "meta": {
    "hash": "B5C88EC83C8B0456DD0879B44861ADE6606F37A1525C096881B4AC62B4078316",
    "merkleComponentHash": "B5C88EC83C8B0456DD0879B44861ADE6606F37A1525C096881B4AC62B4078316",
    "height": "248400"
  }
}
------------------------------------------------------------

アカウント情報の取得

address1が、送金されたMosaicを持っているか確認します。

実行

python account_info.py address1
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address1",
    "address": "<address1のアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "1", //⇐address1へ送金されたモザイクを1保持している
        "namespaceAlias": "No Namespace"
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

workaddressが、address1へ送金したMosaicが1減っていることを確認します。

実行

python account_info.py workaddress
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "workaddress",
    "address": "<workaddressのアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "99", //⇐workaddressからaddress1へ送金されたモザイクを1が減り、100から99になっている
        "namespaceAlias": "No Namespace"
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

Namespace作成トランザクションの実行

4.Namespace作成トランザクションの実行

workaddressにてNamespaceをレンタル期間制限付きで発行します。

mijin

本サンプルでは1000ブロックのレンタル期間としています。

任意のネームスペース名を configファイルである

catapult/python/config/local.json

private1内 workaddressの「namespace」に記載してください。

(e.g. techbureauなど)

  "workaddress": {
    "privatekey": "<既に記載済みのprivatekey>",
    "address": "<既に記載済みのaddress>",
    "mosaicId": "078ABAE03B6EF461",
    "namespace": "techbureau" //⇐任意のネームスペース名を記載する
  },

実行

python 04_namespace_registration.py
出力例:
------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "92CDDED9CCFF5B048E81508BF51DA3828AD9B89C508F6DDC1782887298CCCB8E",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16718,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます",
    "version": 1,
    "network": 96,
    "type": 16718,
    "maxFee": "0",
    "deadline": "125215548000",
    "id": "D34E4D45AFAFB385",
    "registrationType": 0,
    "duration": "1000",
    "name": "techbureau" //⇐発行されたネームスペース名が表示されます
  },
  "meta": {
    "hash": "92CDDED9CCFF5B048E81508BF51DA3828AD9B89C508F6DDC1782887298CCCB8E",
    "merkleComponentHash": "92CDDED9CCFF5B048E81508BF51DA3828AD9B89C508F6DDC1782887298CCCB8E",
    "height": "248457"
  }
}
------------------------------------------------------------

Aliasトランザクションの実行

5.Aliasトランザクションの実行

2.モザイク発行(token)トランザクションの実行 で作成したモザイクと

4.Namespace作成トランザクションの実行 で作成したNamespaceを

Aliasトランザクションで紐付けます。

mijin

紐付けることで、Namespace名でtokenをやり取りすることが可能です。

実行

python 05_namespace_to_mosaic_alias.py
出力例:
------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "4CFB5DAD16F09D7DF99E4851D043E827C731F5B98AABBD89BFBC0DEC0B76B8B7",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 17230,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 1,
    "network": 96,
    "type": 17230,
    "maxFee": "0",
    "deadline": "125219644000",
    "namespaceId": "D34E4D45AFAFB385",
    "mosaicId": "078ABAE03B6EF461",
    "aliasAction": 1
  },
  "meta": {
    "hash": "4CFB5DAD16F09D7DF99E4851D043E827C731F5B98AABBD89BFBC0DEC0B76B8B7",
    "merkleComponentHash": "4CFB5DAD16F09D7DF99E4851D043E827C731F5B98AABBD89BFBC0DEC0B76B8B7",
    "height": "248867"
  }
}
------------------------------------------------------------

アカウント情報の取得

workaddressが作成したMosaicとNamespaceで解決できているか確認します。

実行

python account_info.py workaddress
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "workaddress",
    "address": "<workaddressのアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "99",
        "namespaceAlias": "techbureau" //⇐workaddressが作成したモザイク078ABAE03B6EF461にネームスペースtechbureauが紐付されている
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

参考)ブロックチェーンエクスプローラーでworkaddressのアドレスを検索すると、以下の様に表示されます

mijin

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください

AgregateCompleteトランザクションの実行

6.AgregateCompleteトランザクションの実行

送信元workaddressが保持するモザイクを、複数の送付先アドレスへ送付するトランザクションを、一つのトランザクションに纏めて送信します。

mijin

送信するモザイクの指定は

2.モザイク発行(token)トランザクションの実行

4.Namespace作成トランザクションの実行

5.Aliasトランザクションの実行

にて設定ファイルであるlocal.jsonにprivate1.workaddress.namespaceとして記載し、モザイクに紐づけたNamespaceを指定して送付します。

送付するモザイクはNamespaceで指定しています。

  • private1.workaddress.namespace

送信元 -> 送信先

  • workaddress -> address1
  • workaddress -> address2
  • workaddress -> address3
  • workaddress -> address4
  • workaddress -> address5
  • workaddress -> address6

workaddressからaddress1-address6へのモザイク送信を一つのAgregateCompleteトランザクションに纏めています。

実行

python 06_aggregate_complete_transaction_mosaic.py
出力例:
------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "05683CF48128D705639A1F07D6114DD8E3E74839A9FE690C6DC9889E15EFB52F",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16705,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16705,
    "maxFee": "0",
    "deadline": "125219869000",
    "transactionsHash": "C40D1535B15D0255A8CF4E20E7B990A1E54906DA870705B2E42D87F8AC511F33",
    "transactions": [
      {
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "6062BDADCC9536197302CD17459F5EF7DC1FFFA6472662AA",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747831"
        }
      },
      {
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "6015D4A567D88B8B366939B09DD2931589242677BEE7B060",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747832"
        }
      },
      {
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "600C04B9ED97A976B7CAE5609941049509F4665779ACB89A",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747833"
        }
      },
      {
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "60D419A457E31C5B8FFEE308959098E6515D7219AB6EE1D9",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747834"
        }
      },
      {
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "60C017E64167B0A176DA6FA933E93CF5019B06302724AD90",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747835"
        }
      },
      {
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "60C3C1432109437B620F0E3183EBDA3355C73D5FA801D349",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747836"
        }
      }
    ]
  },
  "meta": {
    "hash": "05683CF48128D705639A1F07D6114DD8E3E74839A9FE690C6DC9889E15EFB52F",
    "merkleComponentHash": "05683CF48128D705639A1F07D6114DD8E3E74839A9FE690C6DC9889E15EFB52F",
    "height": "248892"
  }
}
------------------------------------------------------------

アカウント情報の取得

address1-6が、送金されたMosaicを持っているか確認します。

  • address1の場合
python account_info.py address1
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address1",
    "address": "<address1のアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "2", //⇐address1へ送金されたモザイクを2保持している
        "namespaceAlias": "techbureau" ////ネームスペースtechbureauが紐付されているモザイク
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

  • address6の場合

実行

python account_info.py address6
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address6",
    "address": "<address6のアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "1", //⇐address6へ送金されたモザイクを1保持している
        "namespaceAlias": "techbureau" //ネームスペースtechbureauが紐付されているモザイク
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

workaddressから、送金されたモザイクが減っていることを確認します。

  • workaddressの場合

実行

python account_info.py workaddress
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "workaddress",
    "address": "<workaddressのアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "93", //⇐6送金した分が減算されている
        "namespaceAlias": "techbureau" //ネームスペースtechbureauが紐付されているモザイク
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

AggregateBondedトランザクションの実行

7.AggregateBondedトランザクションの実行

複数の送信元 が存在するトランザクションを纏めて送信します。

mijin

本サンプルではaddress1とaddress2の二つの送信元が存在します。

  • address1 -> address3
  • address2 -> address3

前項:6.AggregateCompleteサンプルとの違いは、HashLockトランザクションを作成し、送信元となるユーザー全員がトランザクションへ署名する必要があります。

送信するモザイクの指定は

2.モザイク発行(token)トランザクションの実行

4.Namespace作成トランザクションの実行

5.Aliasトランザクションの実行

にて設定ファイルであるlocal.jsonにprivate1.workaddress.namespaceとして記載し、モザイクに紐づけたNamespaceを指定して送付します。

送付するモザイクはNamespaceで指定しています。

  • private1.workaddress.namespace

07_01_aggregate_bonded_transaction.pyでは

  • HashLockトランザクションの作成
  • AggregateBondedトランザクションの作成
  • address1の署名

を行います。

実行

python 07_01_aggregate_bonded_transaction.py
出力例:
python 07_01_aggregate_bonded_transaction.py

------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    payload: '<payloadが表示されます>',
    "hash": "23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481",
    "signerPublicKey": '<送信元address1のpublicKeyが表示されます>',
    "type": 16961,
    "networkType": 96
  }
}
------------------- hashLockTransaction ------------------------
{
  "SignedTransaction": {
    payload: '<payloadが表示されます>',
    "hash": "BFCE91A375E1BE0F26BE153F7D89FBF3DF90360E2770E3CFB83AF4E9EF984138",
    "signerPublicKey": '<送信元address1のpublicKeyが表示されます>',
    "type": 16712,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    '<signatureが表示されます>',
    "signerPublicKey": '<送信元address1のpublicKeyが表示されます>',
    "version": 1,
    "network": 96,
    "type": 16712,
    "maxFee": "0",
    "deadline": "127803000000",
    "mosaicId": "570AAB28BDA34D9F",
    "amount": "0",
    "duration": "1000",
    "hash": "23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481"
  },
  "meta": {
    "hash": "BFCE91A375E1BE0F26BE153F7D89FBF3DF90360E2770E3CFB83AF4E9EF984138",
    "merkleComponentHash": "BFCE91A375E1BE0F26BE153F7D89FBF3DF90360E2770E3CFB83AF4E9EF984138",
    "height": "506969"
  }
}
Next Command: python ./07_02_aggregate_bonded_transaction_cosign.py address2 23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481 880100000000000014F44987B5707599A64D006BF2CA257B00D5103DE36ADFB62C222C8E2F45DB85B4303300B04E6F0F07B5A43DB2A4181E347CDE5DCAE338637EE2C28E6EC6720C91230DF117F252C06BD82EE412997215311A1F76736D3AA2B09026C01A9805D600000000026041420000000000000000C004A7C11D0000005031EE1853789C3E935B0AC7382C1EB0126E25037978D22D1DA84B7E7F22563DE0000000000000006F0000000000000091230DF117F252C06BD82EE412997215311A1F76736D3AA2B09026C01A9805D60000000001605441602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF30F000100000000008E5792A6E142885201000000000000000054455354204D494A494E20747831006F0000000000000080D4EDF3FB35F1F28D5D6B0555DF807823185F3F7D725C1669BD4B1F3647F3420000000001605441602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF30F000100000000008E5792A6E142885201000000000000000054455354204D494A494E2074783200

最期に Next Command: が表示されます。


7-2.AggregateBondedトランザクションの実行

上記で発行したTxhashに対して、address2が署名を行います。

署名は期限内に行う必要があります。

本サンプルでは期限を1時間としています。

address2の署名を実行する際に、署名対象のTxhashを指定します。

07_02_aggregate_bonded_transaction_cosign.pyではaddress2の署名を行っています。

上記出力例ではTxhashとして `` が表示されていますが、実行は実際のTxhashを指定して下さい。

実行

python 07_02_aggregate_bonded_transaction_cosign.py address2 <Txhash> <Payload>
出力例:
{
  "meta": {
    "height": "0",
    "hash": "23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481",
    "merkleComponentHash": "0000000000000000000000000000000000000000000000000000000000000000",
    "index": 0
  },
  "transaction": {
    "size": 392,
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16961,
    "maxFee": "0",
    "deadline": "127803000000",
    "transactionsHash": "5031EE1853789C3E935B0AC7382C1EB0126E25037978D22D1DA84B7E7F22563D",
    "cosignatures": [],
    "transactions": [
      {
        "meta": {
          "height": "0",
          "aggregateHash": "23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481",
          "aggregateId": "649E42E8E1FE0179BF2E4474",
          "index": 0
        },
        "transaction": {
          "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "message": "0054455354204D494A494E20747831",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ]
        },
        "id": "649E42E8E1FE0179BF2E4475"
      },
      {
        "meta": {
          "height": "0",
          "aggregateHash": "23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481",
          "aggregateId": "649E42E8E1FE0179BF2E4474",
          "index": 1
        },
        "transaction": {
          "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "message": "0054455354204D494A494E20747832",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ]
        },
        "id": "649E42E8E1FE0179BF2E4476"
      }
    ]
  },
  "id": "649E42E8E1FE0179BF2E4474"
}
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16961,
    "maxFee": "0",
    "deadline": "127803000000",
    "transactionsHash": "5031EE1853789C3E935B0AC7382C1EB0126E25037978D22D1DA84B7E7F22563D",
    "transactions": [
      {
        "transaction": {
          "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747831"
        }
      },
      {
        "transaction": {
          "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ],
          "message": "0054455354204D494A494E20747832"
        }
      }
    ],
    "cosignatures": [
      {
        "version": "0",
        "signerPublicKey": "<送信元address1のpublicKeyが表示されます>",
        "signature": "<signatureが表示されます>"
      }
    ]
  },
  "meta": {
    "hash": "23CBAD14FA9900DD357215B68932C152FF0F7F268C7F21ED98B96A6DE529D481",
    "merkleComponentHash": "46FB1D3A89FC88A2914CB7EE6FB7C864B2B0D444E35DDAE043F6613B3BD5C8DF",
    "height": "506978"
  }
}
------------------------------------------------------------

アカウント情報の取得

address1,2,3のアカウント情報を確認します。

  • address1の場合

実行

python account_info.py address1
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address1",
    "address": "<address1のアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "1", //⇐address3へ送金した分が減算されている
        "namespaceAlias": "techbureau" //ネームスペースtechbureauが紐付されているモザイク
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

  • address2の場合

実行

python account_info.py address2
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address2",
    "address": "MACPXFZDMYINNT7PFWQTVPTNBPQCRF4S2XVTTUI",
    "mosaics": [], //⇐address3へ送金したためmosaicを保持していない
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

  • address3の場合

実行

python account_info.py address3
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address3",
    "address": "MAWNTF5R6FLICX7UW3UNMBQEK3I2SYT34G2Y34Y",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "3", //address1 address2 から送金された分が増加している
        "namespaceAlias": "techbureau" //ネームスペースtechbureauが紐付されているモザイク
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": []
  }
}

注記)手数料ありモードの場合:複数の送信元のトランザクションですが、纏めたトランザクション(HashLock)に署名した人のみが手数料を纏めて支払う(代払い)が可能になります。

マルチシグ化

8.マルチシグトランザクションの実行

address3を、address1,address2を連署者とした1of2のマルチシグ化するトランザクションを実行します。

mijin

使用するトランザクションは前項:7.AggregateBondedサンプルと同じ、AggregateBondedトランザクションになります。

実行

python 08_multisig_transaction.py
出力例:

------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16961,
    "networkType": 96
  }
}
------------------- hashLockTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "A32A377939281D456C1F9FCDEF97EC25CAC14CC407A3BB4DE2B3691A708E1045",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16712,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 1,
    "network": 96,
    "type": 16712,
    "maxFee": "0",
    "deadline": "127803378000",
    "mosaicId": "570AAB28BDA34D9F",
    "amount": "0",
    "duration": "1000",
    "hash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349"
  },
  "meta": {
    "hash": "A32A377939281D456C1F9FCDEF97EC25CAC14CC407A3BB4DE2B3691A708E1045",
    "merkleComponentHash": "A32A377939281D456C1F9FCDEF97EC25CAC14CC407A3BB4DE2B3691A708E1045",
    "height": "507002"
  }
}
Next Command: python ./07_02_aggregate_bonded_transaction_cosign.py address1 430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349 880100000000000043C8371202B63D6C8711FB551F956437E9586369AE75DCF65FF6521FA6440B1B6D03F1AD27B857DA9B00DBFECB1EDB15534E6BAF46A01049B330BF547ABD540AB1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000002604142000000000000000050C9ACC11D0000003928E16AEF154097B983795C6F64D7880BBF797D94AF05B78167E27371D421A9E0000000000000007100000000000000B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000001605441602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF311000100000000008E5792A6E142885200000000000000000054455354204D494A494E2064756D6D790000000000000068000000000000005A4107FC227AC66BF2626654EF90F6C63FDB241DCC000570F45CBBA466BF702600000000016055410101020000000000604E8AB826559C805E060AD671802927773571767E6559AD6004FB97236610D6CFEF2DA13ABE6D0BE0289792D5EB39D1
Next Command: python ./07_02_aggregate_bonded_transaction_cosign.py address2 430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349 880100000000000043C8371202B63D6C8711FB551F956437E9586369AE75DCF65FF6521FA6440B1B6D03F1AD27B857DA9B00DBFECB1EDB15534E6BAF46A01049B330BF547ABD540AB1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000002604142000000000000000050C9ACC11D0000003928E16AEF154097B983795C6F64D7880BBF797D94AF05B78167E27371D421A9E0000000000000007100000000000000B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000001605441602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF311000100000000008E5792A6E142885200000000000000000054455354204D494A494E2064756D6D790000000000000068000000000000005A4107FC227AC66BF2626654EF90F6C63FDB241DCC000570F45CBBA466BF702600000000016055410101020000000000604E8AB826559C805E060AD671802927773571767E6559AD6004FB97236610D6CFEF2DA13ABE6D0BE0289792D5EB39D1
Next Command: python ./07_02_aggregate_bonded_transaction_cosign.py address3 430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349 880100000000000043C8371202B63D6C8711FB551F956437E9586369AE75DCF65FF6521FA6440B1B6D03F1AD27B857DA9B00DBFECB1EDB15534E6BAF46A01049B330BF547ABD540AB1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000002604142000000000000000050C9ACC11D0000003928E16AEF154097B983795C6F64D7880BBF797D94AF05B78167E27371D421A9E0000000000000007100000000000000B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000001605441602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF311000100000000008E5792A6E142885200000000000000000054455354204D494A494E2064756D6D790000000000000068000000000000005A4107FC227AC66BF2626654EF90F6C63FDB241DCC000570F45CBBA466BF702600000000016055410101020000000000604E8AB826559C805E060AD671802927773571767E6559AD6004FB97236610D6CFEF2DA13ABE6D0BE0289792D5EB39D1

最期に Next Command: が3つ表示されます。


上記でworkaddressが発行したTxhashに対して、address1,address2,address3がそれぞれ署名を行います。

署名は

  • address1
  • address2
  • address3

3つのアドレスが署名を期限内に行う必要があります。

本サンプルでは期限を2時間としています。

署名を実行する際に、署名対象のTxhashを指定します。

上記出力例ではTxhashとして `` が表示されていますが、実行は実際のTxhashを指定して下さい。

address1の署名

実行

python 07_02_aggregate_bonded_transaction_cosign.py address1 <Txhash> <Payload>
出力例:
{
  "meta": {
    "height": "0",
    "hash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
    "merkleComponentHash": "0000000000000000000000000000000000000000000000000000000000000000",
    "index": 0
  },
  "transaction": {
    "size": 392,
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16961,
    "maxFee": "0",
    "deadline": "127803378000",
    "transactionsHash": "3928E16AEF154097B983795C6F64D7880BBF797D94AF05B78167E27371D421A9",
    "cosignatures": [],
    "transactions": [
      {
        "meta": {
          "height": "0",
          "aggregateHash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
          "aggregateId": "649E4456E1FE0179BF2E44C3",
          "index": 0
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "message": "0054455354204D494A494E2064756D6D79",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "0"
            }
          ]
        },
        "id": "649E4456E1FE0179BF2E44C4"
      },
      {
        "meta": {
          "height": "0",
          "aggregateHash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
          "aggregateId": "649E4456E1FE0179BF2E44C3",
          "index": 1
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16725,
          "minRemovalDelta": 1,
          "minApprovalDelta": 1,
          "addressAdditions": [
            "604E8AB826559C805E060AD671802927773571767E6559AD",
            "6004FB97236610D6CFEF2DA13ABE6D0BE0289792D5EB39D1"
          ],
          "addressDeletions": []
        },
        "id": "649E4456E1FE0179BF2E44C5"
      }
    ]
  },
  "id": "649E4456E1FE0179BF2E44C3"
}

address2の署名

実行

python 07_02_aggregate_bonded_transaction_cosign.py address2 <Txhash> <Payload>
出力例:
{
  "meta": {
    "height": "0",
    "hash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
    "merkleComponentHash": "0000000000000000000000000000000000000000000000000000000000000000",
    "index": 0
  },
  "transaction": {
    "size": 392,
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16961,
    "maxFee": "0",
    "deadline": "127803378000",
    "transactionsHash": "3928E16AEF154097B983795C6F64D7880BBF797D94AF05B78167E27371D421A9",
    "cosignatures": [
      {
        "version": "0",
        "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
        "signature": "<signatureが表示されます>"
      }
    ],
    "transactions": [
      {
        "meta": {
          "height": "0",
          "aggregateHash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
          "aggregateId": "649E4456E1FE0179BF2E44C3",
          "index": 0
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "message": "0054455354204D494A494E2064756D6D79",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "0"
            }
          ]
        },
        "id": "649E4456E1FE0179BF2E44C4"
      },
      {
        "meta": {
          "height": "0",
          "aggregateHash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
          "aggregateId": "649E4456E1FE0179BF2E44C3",
          "index": 1
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16725,
          "minRemovalDelta": 1,
          "minApprovalDelta": 1,
          "addressAdditions": [
            "604E8AB826559C805E060AD671802927773571767E6559AD",
            "6004FB97236610D6CFEF2DA13ABE6D0BE0289792D5EB39D1"
          ],
          "addressDeletions": []
        },
        "id": "649E4456E1FE0179BF2E44C5"
      }
    ]
  },
  "id": "649E4456E1FE0179BF2E44C3"
}

address3の署名

実行

python 07_02_aggregate_bonded_transaction_cosign.py address3 <Txhash> <Payload>
出力例:
{
  "meta": {
    "height": "0",
    "hash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
    "merkleComponentHash": "0000000000000000000000000000000000000000000000000000000000000000",
    "index": 0
  },
  "transaction": {
    "size": 392,
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16961,
    "maxFee": "0",
    "deadline": "127803378000",
    "transactionsHash": "3928E16AEF154097B983795C6F64D7880BBF797D94AF05B78167E27371D421A9",
    "cosignatures": [
      {
        "version": "0",
        "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
        "signature": "<signatureが表示されます>"
      }
    ],
    "transactions": [
      {
        "meta": {
          "height": "0",
          "aggregateHash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
          "aggregateId": "649E4456E1FE0179BF2E44C3",
          "index": 0
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "602CD997B1F156815FF4B6E8D6060456D1A9627BE1B58DF3",
          "message": "0054455354204D494A494E2064756D6D79",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "0"
            }
          ]
        },
        "id": "649E4456E1FE0179BF2E44C4"
      },
      {
        "meta": {
          "height": "0",
          "aggregateHash": "430882470CE539351DB9385A487DA901F32463A08E8842D060F1FF7393F36349",
          "aggregateId": "649E4456E1FE0179BF2E44C3",
          "index": 1
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16725,
          "minRemovalDelta": 1,
          "minApprovalDelta": 1,
          "addressAdditions": [
            "604E8AB826559C805E060AD671802927773571767E6559AD",
            "6004FB97236610D6CFEF2DA13ABE6D0BE0289792D5EB39D1"
          ],
          "addressDeletions": []
        },
        "id": "649E4456E1FE0179BF2E44C5"
      }
    ]
  },
  "id": "649E4456E1FE0179BF2E44C3"
}

マルチシグ化アカウント情報の取得

上記でマルチシグ化を実施した、address3のアカウント情報を確認します。

  • address3

実行

python account_info.py address3
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "address3",
    "address": "MAWNTF5R6FLICX7UW3UNMBQEK3I2SYT34G2Y34Y",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "3",
        "namespaceAlias": "techbureau"
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [],
    "multisig": [
      '<address1のアドレスが表示されます>',
      '<address2のアドレスが表示されます>'
    ]
  }
}

multisig の値が追加され、連署者であるaddress1,address2が表示されます。


参考)ブロックチェーンエクスプローラーでaddress3のアドレスを検索すると、以下の様に表示されます。

mijin

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください。

マルチシグ(モザイク転送)

9.マルチシグアカウントから転送トランザクションの実行

前項:マルチシグ化にてマルチシグ化したaddress3から、workaddress宛てへモザイク転送トランザクションを実行します。

mijin

address3はaddress1,address2 が連署者の1of2マルチシグのため address1またはaddress2 何れかが連署者として署名し、送信を行います。

実行

python 09_multisig_mosaic_transaction.py
出力例:
------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16961,
    "networkType": 96
  }
}
------------------- hashLockTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "226539909A4FE1AC1A64E2766C38ABD6119F83CADD8BEF2C85E74DE22907CDD3",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16712,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------
------------------- Success --------------------------------
Success: Transaction
{
  "transaction": {
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 1,
    "network": 96,
    "type": 16712,
    "maxFee": "0",
    "deadline": "127803805000",
    "mosaicId": "570AAB28BDA34D9F",
    "amount": "0",
    "duration": "1000",
    "hash": "41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967"
  },
  "meta": {
    "hash": "226539909A4FE1AC1A64E2766C38ABD6119F83CADD8BEF2C85E74DE22907CDD3",
    "merkleComponentHash": "226539909A4FE1AC1A64E2766C38ABD6119F83CADD8BEF2C85E74DE22907CDD3",
    "height": "507045"
  }
}
Next Command: python ./07_02_aggregate_bonded_transaction_cosign.py address1 41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967 9001000000000000C65A09BD75E26EA8E70393D37136AE67E0B4C9BFA45E7892828C57EC32DB7B565C6CB781AF299AE2D6D00F7F57415A5B1B5AC9F10125F6C4531F91F2222C960FB1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F00000000026041420000000000000000484DB3C11D000000D25F3BF0060E2296896018166184A76615782F5940FB524D5EECE52B2AE4DD07E8000000000000007100000000000000B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000001605441603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B011000100000000008E5792A6E142885201000000000000000054455354204D494A494E2064756D6D79000000000000006B000000000000005A4107FC227AC66BF2626654EF90F6C63FDB241DCC000570F45CBBA466BF70260000000001605441603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B00B000100000000008E5792A6E142885201000000000000000054455354204D494A494E0000000000
  OR Command: python ./07_02_aggregate_bonded_transaction_cosign.py address2 41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967 9001000000000000C65A09BD75E26EA8E70393D37136AE67E0B4C9BFA45E7892828C57EC32DB7B565C6CB781AF299AE2D6D00F7F57415A5B1B5AC9F10125F6C4531F91F2222C960FB1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F00000000026041420000000000000000484DB3C11D000000D25F3BF0060E2296896018166184A76615782F5940FB524D5EECE52B2AE4DD07E8000000000000007100000000000000B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000001605441603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B011000100000000008E5792A6E142885201000000000000000054455354204D494A494E2064756D6D79000000000000006B000000000000005A4107FC227AC66BF2626654EF90F6C63FDB241DCC000570F45CBBA466BF70260000000001605441603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B00B000100000000008E5792A6E142885201000000000000000054455354204D494A494E0000000000
------------------------------------------------------------

最期に Next Command: が2つ表示されます。


上記でworkaddressが発行したTxhashに対して、address1またはaddress2いずれかが署名を行います。

署名を実行する際に、署名対象のTxhashを指定します。

上記出力例ではTxhashとして `` が表示されていますが、実行は実際のTxhashを指定して下さい

ここではaddress1に署名を行わせます

address1の署名

実行

python ./07_02_aggregate_bonded_transaction_cosign.py address1 41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967 9001000000000000C65A09BD75E26EA8E70393D37136AE67E0B4C9BFA45E7892828C57EC32DB7B565C6CB781AF299AE2D6D00F7F57415A5B1B5AC9F10125F6C4531F91F2222C960FB1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F00000000026041420000000000000000484DB3C11D000000D25F3BF0060E2296896018166184A76615782F5940FB524D5EECE52B2AE4DD07E8000000000000007100000000000000B1E269453CD3FEE641088B752A394A4BA53AD2E01B583533558A2CBD51C02E8F0000000001605441603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B011000100000000008E5792A6E142885201000000000000000054455354204D494A494E2064756D6D79000000000000006B000000000000005A4107FC227AC66BF2626654EF90F6C63FDB241DCC000570F45CBBA466BF70260000000001605441603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B00B000100000000008E5792A6E142885201000000000000000054455354204D494A494E0000000000

出力例:
{
  "meta": {
    "height": "0",
    "hash": "41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967",
    "merkleComponentHash": "0000000000000000000000000000000000000000000000000000000000000000",
    "index": 0
  },
  "transaction": {
    "size": 400,
    "signature": "<signatureが表示されます>",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "version": 2,
    "network": 96,
    "type": 16961,
    "maxFee": "0",
    "deadline": "127803805000",
    "transactionsHash": "D25F3BF0060E2296896018166184A76615782F5940FB524D5EECE52B2AE4DD07",
    "cosignatures": [],
    "transactions": [
      {
        "meta": {
          "height": "0",
          "aggregateHash": "41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967",
          "aggregateId": "649E4605E1FE0179BF2E4523",
          "index": 0
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B0",
          "message": "0054455354204D494A494E2064756D6D79",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ]
        },
        "id": "649E4605E1FE0179BF2E4524"
      },
      {
        "meta": {
          "height": "0",
          "aggregateHash": "41C09CCE925DD9CD25683CB6F7882F654F6846344ED4E8ACCBF14AB59B062967",
          "aggregateId": "649E4605E1FE0179BF2E4523",
          "index": 1
        },
        "transaction": {
          "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
          "version": 1,
          "network": 96,
          "type": 16724,
          "recipientAddress": "603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B0",
          "message": "0054455354204D494A494E",
          "mosaics": [
            {
              "id": "078ABAE03B6EF461",
              "amount": "1"
            }
          ]
        },
        "id": "649E4605E1FE0179BF2E4525"
      }
    ]
  },
  "id": "649E4605E1FE0179BF2E4523"
}

参考)ブロックチェーンエクスプローラーでTxhashを検索すると、以下の様に表示されます。

mijin

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください。

メタデータ(アカウント)

10.アカウントメタデータトランザクションの実行

メタデータ: アカウント, モザイク, ネームスペース にkey,valueにてカスタムデータを添付して関連付けることができます。

本サンプルではworkaddressアカウントへメタデータを割り当てます。

mijin

割り当てるメタデータはハードコーディングされています。

    key = generate_uint64_key("AccountMetaTest")
    value = "AccountTest".encode("utf8")

実行

python 10_metadata_account.py
出力例:
{
  "data": [
    {
      "metadataEntry": {
        "version": 1,
        "compositeHash": "D26993A77B103BF1DCD43E02DFDE42A42DB13F0C428CFACEE00789F36B1E3A9B",
        "sourceAddress": "603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B0",
        "targetAddress": "603A11372E9F1F0AA802852FB43E61BBA7561503E9F746B0",
        "scopedMetadataKey": "D509356FC9B5BACF",
        "targetId": "0000000000000000",
        "metadataType": 0,
        "valueSize": 11,
        "value": "4163636F756E7454657374"
      },
      "id": "64940C4D9AAC44BA5541D8A8"
    }
  ],
  "pagination": {
    "pageNumber": 1,
    "pageSize": 100
  }
}
------------------- signedTransaction ------------------------
{
  "SignedTransaction": {
    "payload": "<payloadが表示されます>",
    "hash": "154302211D58268BFBA5AC23E37941F82F553F9385272698307C130467E44E78",
    "signerPublicKey": "<送信元workaddressのpublicKeyが表示されます>",
    "type": 16705,
    "networkType": 96
  }
}
------------------- sendTransaction ------------------------

メタデータを付与したアカウント情報の取得

上記でメタデータを付与実施した、workaddressのアカウント情報を確認します。

  • workaddress

実行

python account_info.py workaddress
出力例:
{
  "AccountInfo": {
    "url": "https://xxxxxxxx.mijin.io",
    "network": 96,
    "account": "workaddress",
    "address": "<workaddressのアドレスが表示されます>",
    "mosaics": [
      {
        "mosaic": "078ABAE03B6EF461",
        "amount": "94",
        "namespaceAlias": "techbureau"
      }
    ],
    "linkedKeys": {
      "linked": null,
      "node": null,
      "vrf": null,
      "voting": null
    },
    "meta": [
      {
        "id": "64940C4D9AAC44BA5541D8A8",
        "scopedMetadataKey": "D509356FC9B5BACF", //HEX化されたメタデータキーが表示されます
        "sourceAddress": "<workaddressのアドレスが表示されます>",
        "targetAddress": "<workaddressのアドレスが表示されます>",
        "metadataType": 0,
        "targetId": "0000000000000000",
        "metadataValue": "AccountTest" //メタデータの値が表示されます
      }
    ],
    "multisig": []
  }
}

参考)ブロックチェーンエクスプローラーでworkaddressのアドレスを検索すると、以下の様に表示されます。

mijin

メタデータエントリ欄に値として表示されます。

ブロックチェーンエクスプローラーに関しては以下FAQを参照ください。

mijin BOD よくある質問集

一般的な質問

技術的な質問

一般的な質問

https://mijin.io/bod_faq/

mijin

技術的な質問


ネットワーク手数料について

手数料とは、以下の項目で発行するトランザクションによって手数料が発生し、基軸通貨(cat.currency)にて支払う必要があります。

  • トランザクション手数料

  • Mosaicレンタル手数料

  • Namespaceレンタル手数料

  • ロック保証金

mijin BOD / AWSマーケットプレイスで提供する mijin では手数料モードは標準で 手数料なし に設定されています。

手数料なしモードでは、アカウントに基軸通貨の残高を持つ必要がありませんので特に意識することはありませんが、sdkなどで手数料設定を都度 0 を設定する必要があります。

本サンプルではcatapult/javascript/config/local.json

private1.minfeemultiplierを0にすることにより

手数料設定を0にしています。

{
  "private1": {
    "url": "https://xxxxxxxx.mijin.io",
    "minfeemultiplier": 0, //手数料なし 0 設定

本サンプル集を手数料ありのmijinで利用する場合は、private1.minfeemultiplierの値を 0 -> 100 に設定してください。

本サンプル集の記述は注記がない限り、手数料なしモード時 のサンプルとなります。


トランザクション発行時に基軸通貨は必要ですか?

mijin BODプランで使用している mijin ブロックチェーンは

  • トランザクション手数料無料

の設定にしています。 トランザクション発行時に、基軸通貨を保持している必要はありません。


トランザクション手数料無料の場合のトランザクション発行方法を教えてください。

本サンプルはトランザクション手数料無料でのサンプルコードとなっています。


トランザクション発行のサンプルコードはありますか?

本サンプルを参照ください。

Javascript版

Python版


使用できるSDKについて教えてください。

以下のSDKを提供しています。

Typescript/Javasript

@tech-bureau/symbol-sdk

install

npm i @tech-bureau/symbol-sdk
(yarn add @tech-bureau/symbol-sdk)

Python

techbureau-symbol-sdk-python

install

pip install techbureau-symbol-sdk-python

使用できるCLIツールについて教えてください。

以下のCLIツールを提供しています。

@tech-bureau/mijin-catapult-tools

install

npm i @tech-bureau/mijin-catapult-tools
(yarn add @tech-bureau/mijin-catapult-tools)

まず初めに、最初に何をするといいですか?

本サンプルにてインストールからアドレス発行までをお試しください。

Javascript版

Python版


エンドポイントについて

mijin BOD ブロックチェーンへアクセスするURLになります。

mijin BOD サイト ダッシュボード 契約情報 -> mijin エンドポイント

mijin BOD Endpoint

にて確認ができます。


接続許可IPアドレスについて

mijin BODへアクセスするIPアドレスを設定します。最大6IPアドレスとなります。

mijin BOD サイト 契約情報 > 接続許可IPアドレス

にて設定ができます。

IP v4 の形式にのみ対応しています。

IP v6 の形式には対応していません。

mijin IPAddress


接続許可IPアドレスを設定してもすぐに反映されません。

接続許可IPアドレスが問題ないかをチェックを行ってから接続許可を行うため、

許可されるまで数分程度時間がかかることがあります。

削除においても同様です。


GenerationHashSeedを教えてください。

お客様が契約時に割り当てられたエンドポイント毎に違います。

https://<エンドポイントURL>/node/info

networkGenerationHashSeed の値で確認することができます。


mijin BOD ブロックチェーンエクスプローラーについて教えてください。

mijin BODのトランザクションやアドレスが確認できるブロックチェーンエクスプローラーです。

mijin Explorer view

mijin BOD サイト 契約情報 > 契約中のサービス > mijin Blockchain エクスプローラー

にてURLが確認できます。

接続許可IPアドレスからのアクセスのみ、許可しています。

mijin Explorer


mijin BOD で使用する mijin Catapult (v.2) のバージョンを教えてください。

catapult: 1.0.3.6


mijin BOD で使用する mijin Catapult (v.2) のrestバージョンを教えてください。

rest: mijin-2.4.3

https://<エンドポイントURL>/node/server

でも確認することができます。


mijinでエラーが拾えないことがあります。どうすればいいでしょうか?

mijin BODはアプリケーションロードバランサ(L7)を使用しているため、スティッキーセッションを有効にしています。

sdkを使う場合、トランザクション発行したノードと同じCookieを使用することでエラー取得が可能です。

スティッキーセッションについて

本サンプルではトランザクション発行したノードと同じCookieを使用しています。

Javascript版

Python版


ERROR: Access Denied or Unauthorized

Q.指定されたエンドポイントにアクセスしたが[Access Denied or Unauthorized]エラーが出てしまい、アクセスできません。

{ "nodename": "mijin1", "code": "Forbidden", "message": "Access Denied or Unauthorized" }

A.mijin BODへアクセスするIPアドレスを設定する必要があります。

mijin BODサイト 契約情報 > 接続許可IPアドレス

から、mijin BODエンドポイントへアクセスするIPアドレスを設定してください。


ERROR: Rate Limited

Q.指定されたエンドポイントにアクセスしたが[Rate Limited]エラーが出てしまい、アクセスできません。

{ "nodename": "mijin1", "code": "Restict", "message": "Rate Limited" }

A.アクセス数制限を設けています。

トランザクション発行 100tx/5分

APIアクセス 10,000/5分

30秒毎に集計し、総アクセス数が閾値を下回った段階で制限が解除されます。


ERROR: DENY

Q.指定されたエンドポイントにアクセスしたが[DENY]エラーが出てしまい、アクセスできません。

{  "code": "Forbidden",  "message": "DENY" }

A.基本プランの契約がされていません

クレジットカード情報を登録し、基本プランの契約を行ってください。


ERROR: LIMIT

Q.指定されたエンドポイントにアクセスしたが[LIMIT]エラーが出てしまい、アクセスできません。

{  "code": "Forbidden",  "message": "LIMIT" }

A.使用できるtxサイズ残高不足です。

追加オプションの購入が必要です。


ERROR: PENDING

Q.指定されたエンドポイントにアクセスしたが[PENDING]エラーが出てしまい、アクセスできません。

{  "code": "Forbidden",  "message": "PENDING" }

A.基本プランがサブスクリプション解約されています。

BODサイトログイン後、再登録画面が表示されます。

クレジットカード情報を登録し、再度基本プランの契約を行ってください。


ERROR: Gateway-Error

Q.指定されたエンドポイントにアクセスしたが[Gateway-Error]エラーが出てしまい、アクセスできません。

{  "code": "Forbidden",  "message": "Gateway-Error" }

A.mijinやDB障害があった場合の内部エラーです。

障害メンテナンス情報にて状況を通知します。

mijin BOD FAQ

General FAQ

Technical FAQ

General Frequently Asked Questions

https://mijin.io/en/bod_faq/

mijin

Technical Frequently Asked Questions


About Network Fees

Fees are charged for transactions issued in the following categories and must be paid in the base currency (cat.currency):

  • Transaction fees
  • Mosaic rental fees
  • Namespace rental fees
  • Lock Deposit

The fee mode in mijin, which is provided on the mijin BOD / AWS Marketplace, is set to 'no fees' by default. In no-fee mode, you do not need to be particularly concerned about having a balance of the base currency in your account, but you do need to set the fee setting to 0 each time with the sdk, etc.

In this example, the fee setting is set to 0 by setting the private1.minfeemultiplier in catapult/javascript/config/local.json to 0.

{
  "private1": {
    "url": "https://xxxxxxxx.mijin.io",
    "minfeemultiplier": 0, 

If you want to use this sample collection with mijin, which has fees, please set the value of private1.minfeemultiplier from 0 to 100.

Unless otherwise noted, the descriptions in this sample collection are based on no-fee mode samples.


Do I need the base currency to issue a transaction?

The mijin blockchain used in the mijin BOD plan is set to

  • No transaction fees.

Therefore, you do not need to hold the base currency when issuing a transaction.


Can you tell me how to issue a transaction when there are no transaction fees?

This sample code is set up to issue transactions with no transaction fees.


Is there a sample code for issuing a transaction?

Please see this sample.

Javascript

Python


Can you tell me what SDKs are available?

We provide the following SDKs.

Typescript/Javasript

@tech-bureau/symbol-sdk

install

npm i @tech-bureau/symbol-sdk
(yarn add @tech-bureau/symbol-sdk)

Python

techbureau-symbol-sdk-python

install

pip install techbureau-symbol-sdk-python

Can you tell me what CLI tools are available?

We provide the following CLI tools.

@tech-bureau/mijin-catapult-tools

install

npm i @tech-bureau/mijin-catapult-tools
(yarn add @tech-bureau/mijin-catapult-tools)

What should I do first?

Please try to follow this example, from the installation process to issuing an address.

Javascript

Python


About the endpoint

This is the URL to access the mijin BOD blockchain. You can check it at: mijin BOD Site > Contract Information > Current Services > mijin Endpoint.

mijin BOD Endpoint


About allowed IP addresses

This is where you set the IP address to access the mijin BOD. Up to 6 IP addresses are allowed. You can set them under mijin BOD Site > Contract Information > Allowed IP Addresses.

It supports IP v4 format only.

IP v6 format is not supported.

mijin IPAddress


Changes to allowed IP addresses are not reflected immediately.

Since we verify that the allowed IP address is valid before granting access, it may take a few minutes to grant access. The same applies to deletions.


Can you tell me about the GenerationHashSeed?

It is different for each endpoint assigned to you at the time of subscription. You can check it with the value of networkGenerationHashSeed at https:///node/info.


Can you tell me about the Mijin BOD Blockchain Explorer

This is a blockchain explorer where you can check transactions and addresses on mijin BOD.

mijin Explorer view

You can verify the URL at mijin BOD Site > Contract Information > Current Services > mijin blockchain explorer.

Access is only allowed from approved IP addresses.

mijin Explorer


Which version of mijin Catapult (v.2) is used in mijin BOD?

catapult: 1.0.3.6


Which rest version of mijin Catapult (v.2) used in mijin BOD?

rest: mijin-2.4.3

How to check: You can also check at https:///node/server.


Sometimes I can't catch errors in mijin. What should I do?

Mijin BOD uses an application load balancer (L7) and has sticky sessions enabled. When using the SDK, it is possible to catch errors by using the same cookie as the node that issued the transaction.

About sticky sessions:

In this example, we use the same cookie as the node that issued the transaction. Here is an example of how to retrieve it.

Javascript

Python


ERROR: Access Denied or Unauthorized

Q. I tried to access the specified endpoint, but I received an [Access Denied or Unauthorized] error and cannot access it.

{ "nodename": "mijin1", "code": "Forbidden", "message": "Access Denied or Unauthorized" }

A. You need to set the IP address to access mijin BOD.

Please set the IP address to access the mijin BOD endpoint from mijin BOD website > Contract Information > Allowed IP Addresses.


ERROR: Rate Limited

Q. I tried to access the specified endpoint, but I received an error [Rate Limited] and cannot access it.
{ "nodename": "mijin1", "code": "Restict", "message": "Rate Limited" }

A. There is a limit on the number of accesses.

Transaction output: 100tx/5 minutes API access: 10,000/5 minutes The total number of hits is counted every 30 seconds, and the limit is lifted when the total number of hits falls below the threshold.


ERROR: DENY

Q. I tried to access the specified endpoint, but I received an error [DENY] and cannot access it.

{  "code": "Forbidden",  "message": "DENY" }

A. The Basic Plan has not been contracted.

Please register your credit card information and subscribe to the Basic Plan.


ERROR: LIMIT

Q. I tried to access the specified endpoint, but I received an error [LIMIT] and cannot access it.

{  "code": "Forbidden",  "message": "LIMIT" }

A. The available Tx Size balance is insufficient.

An additional option purchase is required.


ERROR: PENDING

Q. I tried to access the specified endpoint, but I received an error [PENDING] and cannot access it.

{  "code": "Forbidden",  "message": "PENDING" }

A. Your Basic Plan subscription has been canceled.

The re-registration screen will be displayed after you log in to the BOD website. Please register your credit card information and subscribe to the Basic Plan again.


ERROR: Gateway-Error

Q. I tried to access the specified endpoint, but I received an error [Gateway-Error] and cannot access it.

{  "code": "Forbidden",  "message": "Gateway-Error" }

A. In case of internal error due to failure in mijin or DB

We will notify you of the situation via failure maintenance information.


mijin

mijin Catapult(v.2) Deployment Guide's documentation