人生なんて暇つぶし

Webエンジニアの雑記ブログ。技術の話題はDApps開発、NEMアプリ開発がメイン。

移転しました。

約3秒後に自動的にリダイレクトします。

【日本語訳】NEM NIS API Documentation

f:id:maroemon58:20180630194618p:plain

Version 1.22 【2018/07/01更新】

1. イントロダクション

1.1. 概要

NEM Infrastructure Server(略称:NIS)はJavaで書かれており、実行するにはJava 8が必要です。 Java仮想マシンでは最低512MBのメモリで実行できますが、少なくとも1GBを推奨します。

1.2. インストール

NISは、http://bob.nem.ninja/installer/ を使用するか、http://bob.nem.ninja/ でホストされる独立型パッケージとしてインストールできます。 インストーラはJavaの64ビットバージョンのみをサポートしています。 現在の独立型バージョンは、nis-ncc-0.5.13.tgzです。 インストーラを使用する場合、ソフトウェアのインストールと起動は自動的に行われます。 独立型版は任意のディレクトリへの解凍が必要です。 コマンドプロンプトからrunNis.bat(windows)、または、nix.runNis.sh(linux)を実行して起動します。

1.3. リクエスト

NISはクライアントと通信するためにポート7890を使用します。 HTTP GETとPOSTの両方の要求を受け付けます。

NISがローカルで実行されていると仮定すると、HTTP GETリクエストはブラウザから実行され、次の形式になります。

Shttp://127.0.0.1:7890 <APIリクエストへのパス>?

HTTP POSTリクエストは、通常ブラウザ内では実行できないプラグインを使用しない限り、実行できません。 HTTP POSTリクエストは、要求本体のJSON構造を使用してNISにデータを供給します。

両方のリクエストタイプは、JSON構造を使用して(データが返された場合)データを返します。 付録A:JSON構造の説明は、このドキュメントで使用されているすべてのJSON構造を説明しています。

2. NISステータス関連のリクエスト

NISの状態に関する情報を得ることができる要求が2つあります。 /heartbeat リクエストは、ノードが起動して応答性がある場合に情報を提供します。 /status リクエストは、NISの状態に関するより詳細な情報を提供します。 両方の要求がNemRequestResultオブジェクトを返します。 NemRequestResultの解釈の詳細については、付録A:NemRequestResultを参照してください。

2.1. ハートビートリクエスト

  • APIパス:/heartbeat

    • リクエストタイプ:GET
  • 説明:NISが稼動しているかどうかを判断します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/heartbeat
  • 返されるJSONオブジェクトの例:
{
    "code":1,
    "type":2,
    "message": "ok"
}
  • 考えられるエラー: この要求に対する応答がない場合、NISは実行されていないか、要求を処理できない状態になっています。

2.2. ステータスリクエスト

  • APIパス:/status

    • リクエストタイプ:GET
  • 説明:NISの状態を決定します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/status
  • 返されるJSONオブジェクトの例:
{
    "code":6,
    "type":4,
    "message": "status"
}
  • コードは次のように解釈できます。

    • 0:不明なステータス。
    • 1:NISが停止している。
    • 2:NISが開始されている。
    • 3:NISが実行されている。
    • 4:NISはローカルノードを起動している。(NISが実行中であることを意味します)
    • 5:ローカルノードがブートされている。(NISが実行中であることを意味します)
    • 6:ローカルノードが同期している、(NISが実行中で、ローカルノードが起動していることを意味します)
    • 7:NISローカルノードはリモートNISノードを認識しない。(実行中および起動中を意味します)
    • 8:現在、NISはデータベースからブロックチェーンをロードしている。この状態では、NISは要求を処理できません。
  • 考えられるエラー: この要求に対する応答がない場合、NISは実行されていないか、要求を処理できない状態になっています。

3.アカウント関連のリクエスト

3.1.アカウントデータの取得

3.1.1 新しいアカウントデータの生成

  • APIパス:/account/generate

    • リクエストタイプ:GET
  • 説明:KeyPairViewModelを生成します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/account/generate
  • 返されるJSONオブジェクトの例:
{
     "privateKey": "0962c6505d02123c40e858ff8ef21e2b7b5466be12c4770e3bf557aae828390f",
     "address": "NCKMNCU3STBWBR7E3XD2LR7WSIXF5IVJIDBHBZQT",
     "publicKey": "c2e19751291d01140e62ece9ee3923120766c6302e1099b04014fe1009bc89d3"
}
  • 考えられるエラー:なし

3.1.2.アカウントデータの要求

  • APIパス:/account/get

    • リクエストタイプ:GET
  • 説明:アカウントのAccountMetaDataPairを取得します。

  • パラメータ

パラメータ 説明
address アカウントのアドレス
  • 例:
http://127.0.0.1:7890/account/get?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS
  • 返されるJSONオブジェクトの例:
{
    "account":
    {
        "address": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS",
        "balance": 124446551689680,
        "vestedBalance": 104443451691625,
        "importance": 0.010263666447108395,
        "publicKey": "a11a1a6c17a24252e674d151713cdf51991ad101751e4af02a20c61b59f1fe1a",
        "label": null,
        "harvestedBlocks": 645,
        "multisigInfo": {}
    },
    "meta":
    {
        "cosignatoryOf": [ ],
        "cosignatories": [ ],
        "status": "LOCKED",
        "remoteStatus": "ACTIVE"
    }
}
  • 考えられるエラー:addressパラメータが有効でない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

また、アカウントの公開鍵を提供することで、アカウントデータを取得することもできます。

  • APIパス:/account/get/from-public-key

    • リクエストタイプ:GET
  • パラメータ:publicKey(アカウントの公開鍵(16進文字列))

  • 例:

http://127.0.0.1:7890/account/get/from-public-key?publicKey=f9bd190dd0c364261f5c8a74870cc7f7374e631352293c62ecc437657e5de2cd
  • 返されるJSONオブジェクトの構造は、最初の例と同じです。

  • 考えられるエラー:公開鍵パラメータが有効でない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

3.1.3.デリゲートアカウントの元のアカウントデータを要求する

  • APIパス:/account/get/forwarded

    • リクエストタイプ:GET
  • 説明:デリゲート(以前はリモート)アカウントのアドレスが与えられている場合、指定されたアカウントがデリゲートアカウントであるアカウントのAccountMetaDataPairを取得します。指定されたアカウントアドレスが任意のアカウントの委任アカウントでない場合、要求は指定されたアドレスのAccountMetaDataPairを返します。

  • パラメータ:

パラメータ 説明
address デリゲートアカウントのアドレス
  • 例:
http://127.0.0.1:7890/account/get/forwarded?address=NC2ZQKEFQIL3JZEOB2OZPWXWPOR6LKYHIROCR7PK
  • 返されるJSONオブジェクトの例:
{
    "account":
    {
        "address": "NALICE2A73DLYTP4365GNFCURAUP3XVBFO7YNYOW",
        "balance": 11793338398661,
        "vestedBalance": 10890953464862,
        "importance": 0.001264596432148395,
        "publicKey": "bdd8dd702acb3d88daf188be8d6d9c54b3a29a32561a068b25d2261b2b2b7f02",
        "label": null,
        "harvestedBlocks": 742
    },
    "meta":
    {
        "cosignatoryOf": [ ],
        "cosignatories": [ ],
        "status": "LOCKED",
        "remoteStatus": "ACTIVE"
    }
}
  • 考えられるエラー:addressパラメータが有効でない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

代わりに、デリゲートアカウントの公開鍵を提供することで元のアカウントデータを取得することもできます:

  • APIパス:/account/get/forwarded/from-public-key

    • リクエストタイプ:GET
  • パラメータ:publicKey(アカウントの公開鍵(16進文字列))

  • 例:

http://127.0.0.1:7890/account/get/forwarded/from-public-key?publicKey=bdd8dd702acb3d88daf188be8d6d9c54b3a29a32561a068b25d2261b2b2b7f02
  • 返されるJSONオブジェクトの構造は、最初の例と同じです。

  • 考えられるエラー:公開鍵パラメータが有効でない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

3.1.4.アカウントステータスのリクエスト

  • APIパス:/account/status

    • リクエストタイプ:GET
  • 説明:アカウントからAccountMetaDataを取得します。

  • パラメータ:

パラメータ 説明
address アカウントのアドレス
  • 例:
http://127.0.0.1:7890/account/status?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS
  • 返されるJSONオブジェクトの例:
{
     "cosignatories":[],
     "cosignatoryOf":[],
     "status": "LOCKED",
     "remoteStatus": "ACTIVE"
}
  • 考えられるエラー:addressパラメータが有効でない場合、NISはエラーを返します。 エラーの詳細については、付録B:NISエラーを参照してください。

3.1.5.アカウントのトランザクションデータの要求

口座が取引の受領者である場合、取引は口座に関して入金と言われます。同様に、送信トランザクションは、そのアカウントがトランザクションの送信者であるトランザクションです。未確認トランザクションは、ブロックにまだ含まれていないトランザクションです。未確認のトランザクションは、どのブロックにも含まれないことが保証されています。

受信トランザクション

  • APIパス:/account/transfers/incoming

    • リクエストタイプ:GET
  • 説明:受信者が要求のパラメータとして指定されたアドレスを持つTransactionMetaDataPairオブジェクトの配列を取得します。最大25のトランザクション・メタデータ・ペアが戻されます。返されたトランザクションメタデータのペアは、データベースに書き込まれた降順でソートされます。 2番目のパラメータはオプションです。存在しない場合は、上記の基準に従って最新のトランザクションが返されます。ハッシュが2番目のパラメータとして指定されると、要求は、上記の基準に従ってソートされたハッシュを持つトランザクションの直前に現れた最大25個のトランザクションを返します。 3番目のパラメータはオプションです。 idが3番目のパラメータとして指定されると、要求は、上記の基準に従ってソートされたidを持つトランザクションの直前に出現した最大25個のトランザクションを返します。 25件未満のトランザクションが要件を満たす場合、それらのトランザクションのみが返されます。

  • パラメーター

パラメータ 説明
address アカウントのアドレス
hash トランザクションが返されるトランザクションの256ビットsha3ハッシュ
id トランザクションが返されるまでのトランザクションID
  • 例:
http://127.0.0.1:7890/account/transfers/incoming?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS&hash=949583a20ebdfdcb58277eb42fef3e66e9e6bbfc47304d8741a82c68f7c53a2
  • 返されるJSONオブジェクトの例(テストネットワーク):
{
   "data": [
       {
            "meta":
            {
            "id": 71245,
                "height": 40706,
                "hash": {
                "data":"15c373ad4c3fe6af47d1941379ff262f785bdcfa07c02ac3608bc10da27d5e82"
            }
        },
        "transaction":
        {
            "timeStamp": 9106400,
            "amount": 1000000000,
            "signature": "449cd76ea8bda2220b3d6ad6f8db5f81d4e68ad3d4b0c3db9a3c267355657639eabed3dbcef8e0cc22953ae2b36a22ee7dc6327484c9649cccd686a511eca105",
            "fee": 3000000,
            "recipient": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS",
            "type": 257,
            "deadline": 9149600,
            "message":
            {
                "payload": "280000005444334b32493543524850595634425a5a5a4c335850454e4",
                "type": 2
            },
            "version": -1744830463,
            "signer": "c20a1dffe699c7a68328986273265e33fceebe074f274240ef890dd80ad55ed6"
            }
        },
        {
            "meta":
            {
                "id": 71356,
                "height": 40629,
                "hash": {
                "data":"37c34ead4c3fe6af42d994135798262f785ba2d807c02ac3608bc10da12e5f87"
            }
        },
        "transaction":
        {
            "timeStamp": 9101541,
            "amount": 49997995000000,
            "signature": "57c3c48d2ae8b24240b57d72493f498cfeb61e2ab87237dc0e08c51007d5c7f15847d0e08c0286e68a72028925db5fa809ca9d57e2cb6eebe11822176a834c0b",
            "fee": 2005000000,
            "recipient": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS",
            "type": 257,
            "deadline": 9144741,
            "message":
            {
                "payload": "526f6262657279212121",
                "type": 1
            },
            "version": -1744830463,
            "signer": "546e4fb9c81db84e04d8e9e67380db0fe1f540df09a527fb995b589b5695ae24"
        }
    }]
}
  • 考えられるエラー:addressパラメータが有効でないか、データベース内にidが見つからない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

送信トランザクション

  • APIパス:/account/transfers/outgoing

    • リクエストタイプ:GET
  • 説明: 受信者が要求に対するパラメータとして指定されたアドレスを持つトランザクションメタデータペアの配列を取得します。最大25のトランザクション・メタデータ・ペアが戻されます。 2番目のパラメータのソートと説明については、受信トランザクションを参照してください。

  • パラメーター:

パラメータ 説明
address アカウントのアドレス
hash トランザクションが返されるトランザクションの256ビットsha3ハッシュ
id トランザクションが返されるまでのトランザクションID
  • 例:
http://127.0.0.1:7890/account/transfers/outgoing?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS&hash=949583a20ebdfdcb58277eb42fef3e66e9e6bbfc47304d8741a82c68f7c53a22
  • 返されるJSONオブジェクトの例(テストネットワーク):
{
    "data": [
    {
        "meta":
        {
            "id": 70498,
            "height": 40803,
            "hash": {
                "data":"37c34ead4c3fe6af42d994135798262f785ba2d807c02ac3608bc10da12e5f87"
            }
        },
        "transaction":
        {
            "timeStamp": 9111526,
            "amount": 1000000000,
            "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
            "fee": 3000000,
            "recipient": "TDGIMREMR5NSRFUOMPI5OOHLDATCABNPC5ID2SVA",
            "type": 257,
            "deadline": 9154726,
            "message":
            {
                "payload": "74657374207472616e73616374696f6e",
                "type": 1
            },
            "version": -1744830463,
            "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        }
    }]
}
  • 考えられるエラー: addressパラメータが有効でないか、データベース内にidが見つからない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。 全取引

  • APIパス:/account/transfers/all

    • リクエストタイプ:GET
  • 説明: アカウントが送信者または受信者のトランザクションメタデータペアの配列を取得します。最大25のトランザクション・メタデータ・ペアが戻されます。 2番目のパラメータのソートと説明については、受信トランザクションを参照してください。

  • パラメーター:

パラメータ 説明
address アカウントのアドレス
hash トランザクションが返されるトランザクションの256ビットsha3ハッシュ
id トランザクションが返されるまでのトランザクションID
  • 例:
http://127.0.0.1:7890/account/transfers/all?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS&hash=949583a20ebdfdcb58277eb42fef3e66e9e6bbfc47304d8741a82c68f7c53a22
  • 返されるJSONオブジェクトの例: 受信トランザクションまたは送信トランザクションの例を参照してください。

  • 考えられるエラー: addressパラメータが有効でないか、データベース内にidが見つからない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

未確認取引

  • APIパス:/account/unconfirmedTransactions

    • リクエストタイプ:GET
  • 説明: アカウントが送信者または受信者であり、まだブロックに含まれていないトランザクションの配列を取得します。返される構造体はUnconfirmedTransactionMetaDataPairです。付録A:UnconfirmedTransactionMetaDataPairを参照してください。

  • パラメーター:

パラメータ 説明
address アカウントのアドレス
  • 例:
http://127.0.0.1:7890/account/unconfirmedTransactions?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS
  • 返されるJSONオブジェクトの例(テストネットワーク):
{
    "data": [
    {
        "meta":
        {
            "data": "d7c9e33421e43bf4a5d6e21304c8096c599142755d581bd6e9037f41545a5873"
        },
        "transaction":
        {
            "timeStamp": 9131839,
            "amount": 1000000000,
            "signature": "0acface77696a54340a7da8592750ea0410f62717d07e4df30e09718092521262465df5c4d98d32cd9d6e8699d66e016ec8db716d20090ad99cc16f7a6d13904",
            "fee": 2000000,
            "recipient": "TDGIMREMR5NSRFUOMPI5OOHLDATCABNPC5ID2SVA",
            "type": 257,
            "deadline": 9175039,
            "message": {
                "payload": "",
                "type": 1
            },
            "version": -1744830463,
            "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        }
    }]
}
  • 考えられるエラー:addressパラメータが有効でない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーのエラーを参照してください。

3.1.6.デコードされたメッセージによるトランザクションデータ

前の部分で説明したアカウントのトランザクションデータを取得するためのすべての要求は、トランザクションに含まれるメッセージをデコードしません。以下のリクエストは上記と同様ですが、デコードされたメッセージでトランザクションデータを返すことができます。復号には、トランザクションが要求されるアカウントの秘密鍵が必要です。したがって、NISがローカルで実行されている場合にのみ、次の要求を行う必要があります。

受信/送信/デコードされたメッセージによるすべてのトランザクション

  • APIパス:/local/account/transfers/incoming

    • リクエストタイプ:POST
  • APIパス:/local/account/transfers/outgoing

    • リクエストタイプ:POST
  • APIパス:/local/account/transfers/all

    • リクエストタイプ:POST
  • 説明: 前の章で説明したように、要求は受信/送信/すべてのトランザクションを返します。唯一の違いは、トランザクションにエンコードされたメッセージが含まれている場合、このメッセージはリクエスターに送信される前にデコードされることです。

  • パラメーター:

パラメータ 説明
page 付録A:AccountPrivateKeyTransactionsPageで説明されているAccountPrivateKeyTransactionsPage JSONオブジェクト
  • 例: リクエストはブラウザでは実行できません。

  • 返されるJSONオブジェクトの例: 参照:アカウントのトランザクションデータの要求

  • 考えられるエラー: 秘密鍵が供給されない場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

3.1.7.アカウントの収穫情報データの要求

  • APIパス:/account/harvests

    • リクエストタイプ:GET
  • 説明: アカウントの収穫情報オブジェクトの配列を取得します。

  • パラメータ:

パラメータ 説明
address アカウントのアドレス
hash 収穫されたブロックが返されるブロックの256ビットsha3ハッシュ
  • 例:
http://127.0.0.1:7890/account/harvests?address=TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS&hash=81d52a7df4abba8bb1613bcc42b6b93cf3114524939035d88ae8e864cd2c34c8
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "timeStamp": 8879051,
        "difficulty": 26453656336676,
        "totalFee": 102585065,
        "id": 1262068,
        "height": 37015
    }]
}
  • 考えられるエラー: addressパラメータが有効でないか、またはハッシュがデータベースに見つからない場合、NISはエラーを返します。 エラーの詳細については、付録B:NISエラーのエラーを参照してください。

3.1.8.アカウントのアカウントの取り込みの取得

  • APIパス:/account/importances

    • リクエストタイプ:GET
  • 説明: アカウント重要度ビューモデルオブジェクトの配列を取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/account/importances
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "address": "TCYGT6GHZPNASMAXV7YCFCU5R5XTJKNNT66R4A4T",
        "importance": {
            "isSet": 0
        }
    },
    {
        "address": "TD2JJJVPKDZFXWK3N3ZJLN7A5TGNOTM3J5EVSTIG",
        "importance": {
            "score": 0.001222376902598832,
            "ev": 0.004252356221747241,
            "isSet": 1,
            "height": 40926
        }
    }]
}
  • 考えられるエラー:なし

3.1.9.アカウントが所有するネームスペースの取得

  • APIパス:/account/namespace/page

    • リクエストタイプ:GET
  • 説明: 指定されたアカウントアドレスのネームスペースオブジェクトの配列を取得します。 親パラメータはオプションです。 指定された場合は、親のネームスペースのサブネームスペースのみが返されます。

  • パラメータ:

パラメータ 説明
address アカウントのアドレス
parent オプションの親ネームスペースID
id ネームスペースが返されるオプションのネームスペースデータベースID
pageSize 返される(任意の)ネームスペースの数
  • 例:
http://127.0.0.1:7890/account/namespace/page?address=TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH&parent=makoto.metal
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "fqn": "makoto.metal.coins",
        "owner": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
        "height": 13465
    }]
}
  • 考えられるエラー: アドレスまたは親(提供されている場合)が無効な場合、NISはエラーを返します。 エラーの詳細については、付録B:NISエラーを参照してください。

3.1.10.アカウントが作成したモザイク定義を取得する

  • APIパス:/account/mosaic/definition/page

    • リクエストタイプ:GET
  • 説明: 指定されたアカウントアドレスのモザイク定義オブジェクトの配列を取得します。 親パラメータはオプションです。 指定すると、指定された親ネームスペースのモザイク定義のみが返されます。 idパラメータはオプションであり、25のモザイク定義のバッチでモザイク定義を取得できます。 IDの使用方法の詳細については、受信トランザクションを参照してください。

  • パラメータ:

パラメータ 説明
address アカウントのアドレス
parent オプションの親ネームスペースID
id オプションのモザイク定義データベースid。モザイク定義が返されます。
  • 例:
http://127.0.0.1:7890/account/mosaic/definition/page?address=TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH&parent=makoto.metal.coins
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "creator": "10cfe522fe23c015b8ab24ef6a0c32c5de78eb55b2152ed07b6a092121187100",
        "id": {
            "namespaceId": "makoto.metal.coins",
            "name": "silver coin"
        },
        "description": "Real silver coins, pure silver",
        "properties": [{
            "name": "divisibility",
            "value": "0"
        },{
            "name": "initialSupply",
            "value": "1000"
        },{
            "name": "supplyMutable",
            "value": "false"
        },{
            "name": "transferable",
            "value": "true"
        }]
    }]
}
  • 考えられるエラー: アドレス、親(提供されている場合)またはID(提供されている場合)が無効な場合、NISはエラーを返します。 エラーの詳細については、付録B:NISエラーを参照してください。

3.1.11.アカウントが所有するモザイクを取得する

  • APIパス:/account/mosaic/owned

    • リクエストタイプ:GET
  • 説明: 指定されたアカウントアドレスのモザイクオブジェクトの配列を取得します。

  • パラメータ:

パラメータ 説明
address アカウントのアドレス
  • 例:
http://127.0.0.1:7890/account/mosaic/owned?address=TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "mosaicId": {
            "namespaceId": "alice.drinks",
            "name": "orange juice"
        },
        "quantity": 123
    },{
        "mosaicId": {
            "namespaceId": "makoto.metal.coins",
            "name": "silver coin"
        },
        "quantity": 8
    }]
}
  • 考えられるエラー: アドレスが無効な場合、NISはエラーを返します。 エラーの詳細については、付録B:NISエラーを参照してください。

3.1.12.アカウントのロックとロック解除

NEM残高が少なくとも10000個ある口座はブロックを収穫することができます。これを行うには、アカウントのロックを解除する必要があります。 NISの起動後、すべてのアカウントはデフォルトでロックされます。

アカウントのロック解除(収穫を可能にする)

  • APIパス:/account/unlock

    • リクエストタイプ:POST
  • 説明: アカウントのロックを解除します(収穫を開始します)。

  • パラメータ:

パラメータ 説明
privateKey 付録A:PrivateKeyで説明されているPrivateKey JSONオブジェクト
  • 例: リクエストはブラウザでは実行できません。

  • 戻り値なし

アカウントをロックする(収穫を停止する)

  • APIパス:/account/lock

    • リクエストタイプ:POST
  • 説明: アカウントをロックします(収穫を停止します)。

  • パラメータ:

パラメータ 説明
privateKey 付録A:PrivateKeyで説明されているPrivateKey JSONオブジェクト
  • 例:リクエストはブラウザでは実行できません。

  • 戻り値なし

  • 考えられるエラー: 秘密鍵が既知のアカウントに対応していないか、アカウントが収穫を許可されていない場合、どちらの要求もエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

3.1.13.ロック解除情報の取得

各ノードでは、委任されたキーを使用してユーザーがそのノードで収穫できるようにすることができます。 NIS構成には、許可されたハーベスタの最大数を設定するためのエントリがあり、オプションで特定のアカウントアドレスに対してのみハーベスティングを許可することもできます。 アンロック情報は、許可されたハーベスタの最大数、およびノードをすでに使用しているハーベスタの数についての情報を提供します。

  • APIパス:/account/unlocked/info

    • リクエストタイプ:POST
  • パラメータなし:

  • 例:リクエストはブラウザでは実行できません。

  • 返されるJSONオブジェクトの例:

{
     "num-unlocked":2,
     "max-unlocked":3
}
  • 考えられるエラー:なし

3.2.アカウント履歴データの取得

NISの構成では、ノードが他のノードに提供したくない追加機能を公開する可能性があります。これらの機能の1つは、残高と重要度情報などの履歴アカウントデータの提供です。 NISのこの機能を有効にするには、config.propertiesファイルのオプション機能のリストにHISTORICAL_ACCOUNT_DATAを追加する必要があります。

APIパス:/ account / historical / get - リクエストタイプ:GET

  • 説明: アカウントの履歴情報を取得します。

  • パラメータ:

パラメータ 説明
address アカウントのアドレス
startHeight データの供給元となるブロックの高さ
endHeight データが供給されるブロックの高さ。終了高さは開始高さ以上でなければなりません。
increment 各データポイント間で高さが増加する値。値は0より大きくなければなりません。NISは1回の要求で最大1000のデータポイントを供給できます。 1000を超えるデータポイントを要求すると、エラーが発生します。
  • 例:
http://bigalice3.nem.ninja:7890/account/historical/get?address=NALICELGU3IVY4DPJKHYLSSVYFFWYS5QPLYEZDJJ&startHeight=17592&endHeight=17592&increment=1
  • 返されるJSONオブジェクトの例:
{
    "data": [
        {
          "height": 17592,
          "address": "NALICELGU3IVY4DPJKHYLSSVYFFWYS5QPLYEZDJJ",
          "balance": 509676000000,
          "vestedBalance": 100999147150,
          "unvestedBalance": 408676852850,
          "importance": 0.00008857563463531297,
          "pageRank": 0.0007605047835049349
        }
    ]
}
  • 考えられるエラー: アドレスが無効で、開始高さが端高よりも大きい場合、増分が正数でない場合、または要求が1000データ点を超える場合、エラーが返されます。

4.ブロックチェーン関連のリクエスト

NEMは、必要とされるすべての情報を含むブロックチェーンを構築します。ブロックチェーン内の後続のブロックの高さは1ずつ異なる高さになります。各ブロックはトランザクションを含むことができます。トランザクションは、すべてのアカウントアクティビティの基礎を構築します。したがって、ブロックとトランザクションの概念と構造を理解することが重要です。

ブロックはアカウントによって生成されます。アカウントがブロックを生成し、ブロックがブロックチェーンに含まれる場合、ハーベスタと呼ばれる生成アカウントは、ブロックに含まれるトランザクションのすべてのトランザクション料金を取得します。したがって、ハーベスタは、通常、できるだけ多くの取引を含むことになります。

トランザクションはすべてのアカウントアクティビティを反映します。クライアントがすべてのアカウントに対して最新のバランスを取るためには、発生したすべてのトランザクションについて知ることが重要であり、したがって、クライアントはチェーン内のすべての単一ブロックについての知識を持っていなければなりません(クライアントは、ブロックチェーンと一致しなければなりません)。

タイムスタンプが使用されるたびに、時間はネットワークタイムを反映します。 NEMには、ネメシスが経過してから何秒間にすべてのノードが一致するようにする時間同期メカニズムがあります。この共通の時間をネットワークタイムといいます。

以下の章では、まずブロックとトランザクション構造で使用されるフィールドを紹介し、次にクライアントがブロックチェーンの一部を要求する方法を説明します。

ブロックはJSONブロックオブジェクトを使用して転送されます。付録A:Blockには、より多くの情報とJSONブロックオブジェクトの例があります。

次のフィールドが構造内にあります。

フィールド 説明
timeStamp ブロックが作成されたネットワークタイム
signature ブロックの署名。チェーン内のすべてのブロックはハーベスタによって署名されています。
このようにして、ブロックが何らかの悪意のあるエンティティによって変更されたかどうかを任意のノードが確認できます。
prevBlockHash 前のブロックのsha3-256ハッシュを16進文字列として表します。
type ブロックタイプ。現在、2つのブロックタイプが使用されています。
-1:ネーミスブロックタイプ。このブロックタイプはチェーン内に1回だけ表示されます。
1:通常ブロックタイプ。高さ> 1のブロックはすべてこのタイプです。
transactions トランザクションの配列。詳細については、付録A:Transaction objectsを参照してください。ブロックには最大120のトランザクションを含めることができます。
version ブロックバージョン。次のバージョンがサポートされています。
0x68 << 24 + 1(1744830465は4バイト整数):メインネットワークのバージョン
0x60 << 24 + 1(1610612737は4バイト整数):ミジンネットワークバージョン
0x98 << 24 + 1(4バイト整数として-1744830463):テストネットワークのバージョン
signer ブロックのハーベスタの公開鍵を16進文字列として表します。
height ブロックの高さ。各ブロックには一意の高さがあります。後続ブロックの高さは1だけ異なります。

トランザクションは第2章「アカウント関連の要求」ですでに説明しました。JSONトランザクションオブジェクトの例については、付録A:Transaction objectsを参照してください。

4.1.ブロックチェーンステータス情報の要求

4.1.1.ブロックチェーンの高さ

  • APIパス:/chain/height

    • リクエストタイプ:GET
  • 説明: ブロックチェーンの現在の高さを取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/chain/height
  • 返されるJSONオブジェクトの例:
{
    "height": 42799
}
  • 考えられるエラー:なし

4.1.2.ブロックチェーンスコア

  • APIパス:/chain/score

    • リクエストタイプ:GET
  • 説明: ブロックチェーンの現在のスコアを取得します。 スコアが高いほど、チェーンが良好になります。 同期中、ノードはネットワーク内で最良のブロックチェーンを取得しようとします。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/chain/score
  • 返されるJSONオブジェクトの例:
{
    "score": "18722d5a7d590deb"
}
  • 考えられるエラー:なし

4.1.3.ブロックチェーンスコアの最後のブロック

  • APIパス:/chain/last-block

    • リクエストタイプ:GET
  • 説明: チェーンの現在の最後のブロックを取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/chain/last-block
  • 返されるJSONオブジェクト(メインネットワーク)の例:
{
    "timeStamp": 9232968,
    "signature": "0a1351ef3e9b19c601e804a6d329c9ade662051d1da2c12c3aec9934353e421c79de7d8e59b127a8ca9b9d764e3ca67daefcf1952f71bc36f747c8a738036b05",
    "prevBlockHash": {
        "data": "58efa578aea719b644e8d7c731852bb26d8505257e03a897c8102e8c894a99d6"
    },
    "type": 1,
    "transactions": [
    ],
    "version": 1744830465,
    "signer": "2afca04d2cb8d16cf3656274bc55b95e60be823cfb7230d82f791ed42a309ee7",
    "height": 42804
}
  • 考えられるエラー:なし

4.2.ブロックチェーンの一部のリクエスト

NISは、ブロックの高さまたはブロックのハッシュによって識別される個々のブロックのいずれかを供給することも、特定の高さから始まるブロックを最大10個まで供給することもできます。

4.2.1与えられた高さでブロックを取得する

  • APIパス:/block/at/public

    • リクエストタイプ:POST
  • 説明: 指定された高さを持つブロックをチェーンから取得します。

  • パラメータ:

パラメータ 説明
height BlockHeight JSONオブジェクト (参照:付録A:BlockHeight)
  • 例:リクエストはブラウザでは実行できません。

  • 返されるJSONオブジェクトの例(テストネットワーク):

{
    "timeStamp": 9232942,
    "signature": "005f91b8908fc173a428ff8e8c4a0ee0d69e4004aed0d08f27690b6b6672ef74ccc6b89695bed5f29b0f4a812cb84bfa459f52a4e14a11e574793969f0e1a30f",
    "prevBlockHash": {
        "data": "f721e563b4431594c5af6f6be0a913f47f0aca6c3b8ee6a703bfe175ee54babf"
    },
    "type": 1,
    "transactions": [
    ],
    "version": -1744830463,
    "signer": "78e121cc1cf63424651ec64251e78efda81386c9f5e9eb4cb08b2a2192c9dce5",
    "height": 42803
}
  • 考えられるエラー: 指定された高さのブロックがデータベース内に見つからない場合、NISはJSONエラーオブジェクトを返します。エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

4.2.2.チェーンの一部を取得する

  • APIパス:/local/chain/blocks-after

    • リクエストタイプ:POST
  • 説明: チェーンから与えられたブロックの高さの後に最大10ブロックを取得します。与えられた高さの後にデータベースが10ブロック未満の場合、より少ないブロックが返されます。返されるデータは、ExplorerBlockViewModel JSONオブジェクトの配列です。

  • パラメータ:

パラメータ 説明
height BlockHeight JSONオブジェクト (参照:付録A:BlockHeight)
  • 例:リクエストはブラウザでは実行できません。

  • 返されるJSONオブジェクトの例:

{
    "data":[{
        "txes":[{
            "tx": <ExplorerViewModelTransaction>
            "tx": <ExplorerViewModelTransaction>
        }],
        "block": <Block>
        "hash":"8ca8a3e01ac0eb482e668fda74141984ba118b027fc5f1f67d2d36a38bf48c49"
    }]
}
  • 考えられるエラー: 与えられたブロックの高さが正でない場合、NISはJSONエラーオブジェクトを返します。エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.ノード関連のリクエスト

ノードは、ネットワーク内でデータを交換するエンティティです。 基本的に、ノードはコンピュータ上で動作するNISインスタンスです。 ネットワークと通信できるようにするには、ノードを起動する必要があります。 ノード要求によって、ネットワーク内の他のノードを発見し、他のノードの経験について学び、現在のチェーンの高さに関する情報を得ることができます。

ノード構造は、ID、エンドポイント、およびメタデータの3つの部分で構成されます。

すべてのノードは、アカウントによって表されるアイデンティティに結びついています。 そうすれば、ノードの識別が容易になります。 ブートプロセス中にノードにIDが与えられます。

ノードのエンドポイントは、通信に使用されるIPアドレス、ポート、およびプロトコルに関する情報を保持します。

メタデータには、NISのバージョンとプラットフォームNISが実行されていることに関する追加情報が格納されています。

ノードは、各ノードにステータスを割り当てることによって、隣接ノードのセットをいくつかのサブセットにグループ化します。

可能なステータスは次のとおりです。

ステータス 説明
active この状態のノードは正常に通信できます。ノードが通信のためのノードを選択しているときはいつでも、アクティブノードのセットからノードを選びます。
inactive 非アクティブノードは、接続を確立できないノードです。
busy 接続が確立されても、ノードが特定の時間制限内で要求に応答しなかった場合、ノードはステータス「busy」に設定されます。
failure 状態障害は、通信中に重大なエラーが発生した場合に備えて、リモートノードに割り当てられます。これは、例えば、遠隔ノードが異なるプロトコルを使用しているか、または遠隔ノードが予想されたアイデンティティと異なるアイデンティティを使用していることが原因である可能性があります。
unknown このステータスは、利用可能なステータスに関する情報がない場合にノードに与えられます。

付録A:Nodeには、より多くの情報とJSON Nodeオブジェクトの例があります。

ノードオブジェクトには、次のフィールドがあります。

フィード 説明
name ノードの名前。これには任意の文字列を使用できます。
public-key ノードを識別するために使用される公開鍵。
protocol 通信に使用されるプロトコル(現在はHTTPのみがサポートされています)。
port 通信に使用されるポート。
host エンドポイントのIPアドレス。
application ノードを実行しているアプリケーションの名前。
version アプリケーションのバージョン。
platform 基礎的なプラットフォーム(OS、javaバージョン)。

5.1.ノードに関する情報の要求

5.1.1.基本ノード情報

  • APIパス:/node/info

    • リクエストタイプ:GET
  • 説明: ノードに関する基本情報を取得します。 IPの使用127.0.0.1は、ローカルノードに関する情報を取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/info
  • 返されるJSONノードの例:
{
    "metaData":
    {
        "features": 1,
        "application": "NIS",
        "networkId": -104,
        "version": "0.4.33-BETA",
        "platform": "Oracle Corporation (1.8.0_25) on Windows 8"
    },
    "endpoint":
    {
        "protocol": "http",
        "port": 7890,
        "host": "81.224.224.156"
    },
    "identity":
    {
         "name": "Alice",
         "public-key": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
    }
}
  • 考えられるエラー: ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.1.2.拡張ノード情報

  • APIパス:/node/extended-info

    • リクエストタイプ:GET
  • 説明: ノードに関する拡張情報を取得します。 IP 127.0.0.1を使用すると、ローカルノードに関する拡張情報が取得されます。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/extended-info
  • 返されるJSON NisNodeInfoオブジェクトの例:
{
    "node": {
        "metaData":
        {
             "features": 1,
             "application": "NIS",
             "networkId": -104,
             "version": "0.4.33-BETA",
             "platform": "Oracle Corporation (1.8.0_25) on Windows 8"
        },
        "endpoint":
        {
             "protocol": "http",
             "port": 7890,
             "host": "81.224.224.156"
        },
        "identity":
        {
             "name": "Alice",
             "public-key": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        }
    },
    "nisInfo":
    {
        "currentTime": 9288341,
        "application": "NEM Infrastructure Server",
        "startTime": 9238484,
        "version": "0.4.33-BETA",
        "signer": "CN=VeriSign Class 3 Code Signing 2010 CA,OU=Terms of use at https://www.verisign.com/rpa (c)10,OU=VeriSign Trust Network,O=VeriSign\\, Inc.,C=US"
    }
}
  • 考えられるエラー: ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.2.ノードの近傍を発見する要求

5.2.1.完全な近傍

  • APIパス:/node/peer-list/all

    • リクエストタイプ:GET
  • 説明: 近傍にあるすべての既知のノードの配列を取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/peer-list/all
  • 返されるJSON NodeCollectionオブジェクトの例(はNodeオブジェクトを表します):
{
    "inactive": [
          <Node>,
          <Node>
    ],
    "active": [
          <Node>,
          <Node>
    ],
    "busy": [
          <Node>,
          <Node>
    ],
    "failure": [
          <Node>,
          <Node>
    ]
}
  • 考えられるエラー: ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.2.2.到達可能な近所

  • APIパス:/node/peer-list/reachable

    • リクエストタイプ:GET
  • 説明: 近傍にステータスが「アクティブ」であるすべてのノードの配列を取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/peer-list/reachable
  • 返されるJSON NodeCollectionオブジェクトの例(はNodeオブジェクトを表します):
{
    "data": [
        "metaData":
        {
             "features": 1,
             "application": "NIS",
             "networkId": -104,
             "version": "0.4.33-BETA",
             "platform": "Oracle Corporation (1.8.0_25) on Windows 8"
        },
        "endpoint":
        {
             "protocol": "http",
             "port": 7890,
             "host": "81.224.224.156"
        },
        "identity":
        {
             "name": "Alice",
             "public-key": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        }
    ]
}
  • 考えられるエラー:

ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.2.3.アクティブな近所

  • APIパス:/node/peer-list/active

    • リクエストタイプ:GET
  • 説明: ブロードキャストのために選択された近隣のアクティブなノードの配列を取得します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/peer-list/active
  • 返されるJSON NodeCollectionオブジェクトの例(はNodeオブジェクトを表します):
{
    "data": [
        "metaData":
        {
             "features": 1,
             "application": "NIS",
             "networkId": -104,
             "version": "0.4.33-BETA",
             "platform": "Oracle Corporation (1.8.0_25) on Windows 8"
        },
        "endpoint":
        {
             "protocol": "http",
             "port": 7890,
             "host": "81.224.224.156"
        },
        "identity":
        {
             "name": "Alice",
             "public-key": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        }
    ]
}
  • 考えられるエラー: ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.2.4.アクティブ近傍の最大チェーン高さ

  • APIパス:/node/active-peers/max-chain-height

    • リクエストタイプ:GET
  • 説明: アクティブノードリスト内のすべてのノードからチェインの高さを要求し(Active neighborhoodで説明)、表示されている最大高さを返します。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/active-peers/max-chain-height
  • 返されるJSON BlockHeightオブジェクトの例:
{
       "height": 43920
}
  • 考えられるエラー: ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.3.ノードエクスペリエンスの要求

  • APIパス:/node/experiences

    • リクエストタイプ:GET
  • 説明: 別のノードからノードエクスペリエンスの配列を取得します。 各ノードは、他のノードとの経験を内部マップに保存します。 経験を共有することにより、ノードはコミュニケーションのための正直なノードを選択するのに役立ちます。

  • パラメータ:なし

  • 例:

http://127.0.0.1:7890/node/experiences
  • JSON ExtendedNodeExperiencePairオブジェクトの返された配列の例:
{
    "data": [
    {
          "node": {
                 "metaData":
                 {
                        "features": 1,
                        "application": "NIS",
                        "networkId": -104,
                        "version": "0.4.33-BETA",
                        "platform": "Oracle Corporation (1.8.0_25) on Windows 8"
                 },
                 "endpoint":
                 {
                        "protocol": "http",
                        "port": 7890,
                        "host": "81.224.224.156"
                 },
                 "identity":
                 {
                        "name": "Alice",
                        "public-key": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
                 }
          },
          "syncs": 3,
          "experience":
          {
                 "s": 1,
                 "f": 0
          }
    }]
}
  • 考えられるエラー: ノードがまだ起動されていない場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

5.4.ローカルノードを起動する

  • APIパス:/node/boot

    • リクエストタイプ:POST
  • 説明: ローカルノードを起動し、ローカルノードにアカウント(ID)を割り当てます。

  • パラメータ:

パラメータ 説明
bootNodeRequest 付録A:BootNodeRequestで説明されているBootNodeRequest JSONオブジェクト。
  • 例:リクエストはブラウザでは実行できません。

  • 戻り値なし

  • 考えられるエラー: ノードが既にブートされている場合、NISはJSONエラーオブジェクトを返します。 エラーオブジェクトの詳細については付録A:Error object、エラーメッセージについては付録B:NISエラーを参照してください。

6. ネームスペースとモザイク

6.1.ネームスペース

NEMは、インターネットドメイン名のNEMアナログであるネームスペースの概念をサポートしています。ネームスペースは、ドットで連結された1つ以上の部分で構成される識別文字列です(例: 'makoto.metals.silver')。すべてのネームスペースは一意であり、一度に1人の所有者しか持てません。部分が1つしかないネームスペースは、ルートネームスペースと呼ばれ、それ以外の場合はサブネームスペースと呼ばれます。ルートネームスペースは、1年間のアカウントでレンタルすることができます。ルートネームスペースが期限切れになる1か月前に、レンタル契約をもう1年更新することができます。ルートネームスペースのレンタル契約が更新された場合、すべてのサブネームスペースはもう1年間有効です。ルートネームスペースが更新されない場合は、すべてのサブネームスペースとともに終了します。ルートネームスペースの有効期限が切れてから1ヶ月後に、別のアカウントがそのルートネームスペースをレンタルすることができます。ただし、新しい所有者は以前の所有者のサブネームスペースを継承しません。アカウントは、対応するルートネームスペースを所有している場合にのみサブネームスペースをレンタルすることができます。

ネームスペースには、部品に許容される文字や部品の長さに関して一定の制限があります。ルートネームスペースの長さは16文字、サブネームスペースの長さは64文字です。有効な文字は次のとおりです。

  • a, b, c, ..., z, A, B, C, ..., Z, 0, 1, 2, ..., 9, _ , -

しかし、アルファベットの文字で始まる部分のみが許可されます。したがって、 'alice'はルートネームスペースの許可された部分ですが、 '1alice'は違います。特定の文字列は予約されているため、ネームスペースの一部として使用できません。許可されていないネームスペースの一部の中には、

  • nem, user, account, org, com, biz, net, edu, mil, gov and info.

このリストは最終的なものではなく、今後拡張することができます。したがって、 'user.alice'または'alice.user'はNEMネームスペースシステムでは使用できません。ネームスペースには最大3つの部分があるため、'makoto.metals.silver'は有効で、 'makoto.metals.silver.coin'は有効ではありません。

ネームスペースのレンタル契約は、付録A:ProvisionNamespaceTransactionを介して行われます。通常の取引手数料に加えて、レンタル料があります。この手数料は、住所を持つ特別な口座であるいわゆるレンタル料金シンクに支払われます。

  • メインネット内の NAMESPACEWH4MKFMBCVFERDPOOP4FK7MTBXDPZZA
  • テストネット内の TAMESPACEWH4MKFMBCVFERDPOOP4FK7MTDJEYP35

1年間のネームスペースのレンタル料金は、

  • 100 XEMのルートネームスペースと
  • 10サブネームスペースのXEMです。

モザイクを作成するには、ネームスペースの所有権が必要です。

6.1.1.ルートネームスペースの取得

  • APIパス:/namespace/root/page

    • リクエストタイプ:GET
  • 説明: ルートネームスペースを取得します。 要求はページングをサポートする、すなわち、指定されたサイズのバッチでルートネームスペースを検索する。 要求はNamespaceMetaDataPairオブジェクトの配列を返します。

パラメータ:

パラメータ 説明
id ルートネームスペースが返される最上位のネームスペースデータベースID。
パラメータはオプションです。指定されていない場合、最新のレンダリングされたルートネームスペースが返されます。
pagesize 要求ごとに返されるネームスペースオブジェクトの数。
パラメータはオプションです。 デフォルト値は25、最小値は5、最大値は100です。
  • 例:
http://127.0.0.1:7890/namespace/roots?id=26754&pageSize;=35
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "meta": {
            "id": 26264
        },
        "namespace": {
            "fqn": "makoto.metal.coins",
            "owner": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
            "height": 13465
        }
    },{
        "meta": {
            "id": 25421
        },
        "namespace": {
            "fqn": "gimre.vouchers",
            "owner": "TDGIMREMR5NSRFUOMPI5OOHLDATCABNPC5ID2SVA",
            "height": 12392
        }
    }]
}
  • 考えられるエラー:なし

6.1.2.特定のネームスペースを取得する

  • APIパス:/namespace

    • リクエストタイプ:GET
  • 説明: 指定されたIDを持つネームスペースを取得します。

  • パラメータ:

パラメータ 説明
namespace ネームスペースID
  • 例:
http://127.0.0.1:7890/namespace?namespace=makoto.metal.coins
  • 返されるJSONオブジェクトの例:
{
    "fqn": "makoto.metal.coins",
    "owner": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
    "height": 13465
}
  • 考えられるエラー: ネームスペースパラメータがないか無効である場合、NISはエラーを返します。 エラーの詳細については、付録B:NISエラーを参照してください。

6.2.モザイク

NEMモザイクは、追加のプロパティおよびその他の機能を公開するアセットです。 各モザイクには、基本的なモザイクの定義があります。 モザイク定義を作成できるようにするには、アカウントはモザイク定義が参照できる少なくとも1つのルートネームスペースをレンタルする必要があります。 モザイク定義の基本データは、

  • mosaic id

    • モザイクIDは、ネームスペースIDとモザイク名の2つの部分で構成されます。 文字列としてモザイクIDを表すとき、2つの部分は '*'で連結されます。たとえば、ネームスペースidが 'makoto.metals.silver'で、モザイク名が 'coin'の場合、文字列表現は 'makoto.metals.silver * coin'になります。 モザイクidsは一意でなければならないので、モザイク名は、モザイク定義が参照するネームスペース内で一意でなければならない。 モザイク名の最大長は32文字です。 許可される文字は「1.a, b, c, ..., z, 0, 1, 2, ..., 9, ', _ , -」ですが、最初の文字はアルファベットの文字でなければなりません。
  • description

    • 各定義にはモザイクの説明が必要です。説明は512文字を超えてはいけません。説明に使用される文字には制限はありません。
  • properties

    • モザイクの動作は、一連のプロパティによってカスタマイズできます。プロパティーが指定されていない場合は、デフォルトのプロパティーが適用されます。サポートされるプロパティは次のとおりです。

    • initialSupply:作成者は、定義を作成するときにモザイクの初期供給を指定できます。供給は、最小のサブユニットではなく、モザイクのユニット全体で行われます。初期供給量は0〜9,000,000,000の範囲でなければなりません。デフォルト値は "1000"です。

    • divisibility:分割可能性は、モザイクを何小数点以下に分割できるかを決定します。したがって、3の割算可能性は、モザイクが0.001モザイクの最小部分に分割され得ること、すなわちミリモザイクが最小サブユニットであることを意味する。転送トランザクションを介してモザイクを転送する場合、転送される数量はそれらの最小パーツの倍数で与えられます。 除算は0と6の範囲内でなければなりません。デフォルト値は "0"です。

    • supplyMutable:作成者は、後でモザイク供給を変更できる定義か不変の供給を選択できます。プロパティの値は "true"と "false"です。デフォルト値は "false"です。

    • transferable:作成者は、モザイク定義が、作成者以外のアカウント間でモザイクの転送を許可する必要があるかどうかを選択できます。 'transferable'プロパティが 'false'に設定されている場合、送信者または受信者として作成者を持つ転送トランザクションのみ、そのタイプのモザイクを転送できます。 "true"に設定すると、モザイクを任意のアカウントとの間でやりとりできます。プロパティの値は "true"と "false"です。デフォルト値は "true"です。

  • levy

    • 作成者は、そのタイプのモザイクを転送するたびに、特別料金が送信者から収集され、自分の選択した口座に送信されることを要求できます(したがって、作成者はこの手数料の受領者として自分の口座を指定できます)。課金のデータは次のとおりです。

    • fee type:​​2種類の料金タイプ、絶対料金とパーセンタイル料金があります。

      1. absolute fee:料金は絶対量として指定されているため、転送される数量には依存しません。
      2. percentile fee:手数料は、移転される数量のパーセンタイルの倍数として指定されます。このようにして、移転されたモザイクの量に応じて料金は直線的に増加します。
    • recipient:課徴金の受領者。これはどのアカウントでもかまいません。

    • mosaic id:料金を支払う必要があるモザイクのID。既存のモザイクIDを指定できます。作成者がXEMで料金を支払うことを希望する場合、彼はモザイクID 'nem * xem'を使用しなければなりません。

    • fee:手数料。解釈は、フィールド「料金タイプ」に依存します(上記を参照)。

モザイク定義は、付録A:MosaicDefinitionCreationTransactionを使用して作成できます。通常の取引手数料に加えて、作成料があります。この手数料は住所を持つ特別な口座である所謂創造費シンクに支払われます。

  • メインネット内の NBMOSAICOD4F54EE5CDMR23CCBGOAM2XSIUX6TRS
  • テストネット中の TBMOSAICOD4F54EE5CDMR23CCBGOAM2XSJBR5OLC

モザイク定義を作成するための料金は10XEMです。

XEMコインを表す1つの所定のモザイクがある。このXEMモザイクのデータは次のとおりです。

  • ネームスペース:nem
  • 名前:xem
  • 初回供給:8,999,999,999
  • 可分性:6
  • supply mutable:false
  • 転送可能:true
  • 徴収:なし

6.2.1.モザイク定義の取得

  • APIパス:/namespace/mosaic/definition/page

    • リクエストタイプ:GET
  • 説明: 指定されたネームスペースのモザイク定義を取得します。 要求はページングをサポートします。 要求はMosaicDefinitionMetaDataPairオブジェクトの配列を返します。

  • パラメータ:

パラメータ 説明
namespace ネームスペースID。
id ルートモザイク定義が返される最上位のモザイク定義データベースID。
パラメータはオプションです。 指定されていない場合、最新のモザイク定義が返されます。
pagesize 各要求に対して返されるモザイク定義オブジェクトの数。
パラメータはオプションです。 デフォルト値は25、最小値は5、最大値は100です。
  • 例:
http://127.0.0.1:7890/namespace/mosaic/definition/page?namespace=makoto.metal.coins
  • 返されるJSONオブジェクトの例:
{
    "data": [{
        "meta": {
            "id": 3541
        },
        "mosaic": {
            "creator": "10cfe522fe23c015b8ab24ef6a0c32c5de78eb55b2152ed07b6a092121187100",
            "id": {
                "namespaceId": "makoto.metal.coins",
                "name": "silver coin"
            },
            "description": "Real silver coins, pure silver",
            "properties": [{
                 "name": "divisibility",
                 "value": "0"
            },{
                "name": "initialSupply",
                "value": "1000"
            },{
                "name": "supplyMutable",
                "value": "false"
            },{
                "name": "transferable",
                "value": "true"
            }]
        }
    }]
}
  • 考えられるエラー: パラメータ「namespace」がないか無効である場合、NISはエラーを返します。エラーの詳細については、付録B:NISエラーを参照してください。

7.トランザクションの開始

トランザクションとは、あるアカウントから別のアカウントにNEMやメッセージを転送する方法です。トランザクションが開始されると、それは未だ確認されておらず、したがってネットワークによってまだ受け入れられていません。この時点で、それがブロックに含まれるかどうかはまだ明確ではありません。状態が「未確認」のトランザクションに決して依存しないでください。ブロックに含まれると、トランザクションが処理され、転送トランザクションの場合、トランザクションで指定された金額が送信者のアカウントから受信者のアカウントに転送されます。さらに、取引手数料は差出人の口座から差し引かれます。この時点で取引には確認は行われていないと言われています。ブロックチェーンに別のブロックが追加されると、トランザクションは確認を1回行います。チェーンに追加された次のブロックは確認を2回行います。

暗号化通貨には、ブロックチェーンの一部をロールバックする機能があります。これは、ブロックチェーンのフォークを解決するために不可欠です。ただし、ロールバックできるブロックの最大数があります。これは書き換え制限と呼ばれます。したがって、フォークは特定の深さまでしか解決できません。 NEMの書き換え限界は360ブロックです。トランザクションの確認が360回を超えると、それを元に戻すことはできません。実際の生活では、コードのバグや何らかの攻撃のためにブロックチェーンに重大な問題がなければ、20ブロックよりも深いフォークは起こりません。

クライアントは、次の2つの方法でトランザクションを開始できます。

  • クライアントがトランザクションデータに署名できない場合、RequestPrepareAnnounce JSONオブジェクトをNISに送信することにより、ローカルNISが署名を行うことができます。詳細は付録A:RequestPrepareAnnounceを参照してください。

WARNING: API /transaction/prepare-announce は信頼されたローカルノードのみで使用して下さい!

注:NCCはこのAPIを使用しないことに注意してください。それはそれ自身のものですべてのトランザクション署名を行います。

  • クライアントがed25519の実装を持っている場合、トランザクションに署名することができれば、RequestAnnounce JSONオブジェクトをNISに送ることができます。そうすることで、信頼できないリモートNISを使用してトランザクションを送信できるという利点があります。このオブジェクトの詳細については、付録A:RequestAnnounceを参照してください。

ほとんどのクライアントはローカルのNISに依存してトランザクション署名を作成するため、第6.1章から第6.6章では、トランザクション関連のアクションを最初の方法で説明します。第6.7節では、署名が必要なデータを収集するための手順と、トランザクションを開始する方法を説明します。ただし、署名の作成方法については説明しませんが、これはこのドキュメントの範囲外の暗号概念を含むためです。

7.1.トランザクションの開始

  • APIパス:/transaction/prepare-announce

    • リクエストタイプ:POST
  • 説明: トランザクションを作成してブロードキャストします。この要求にはアカウントの秘密鍵が含まれているため、ローカルのNISにのみ送信する必要があります。

  • パラメータ: |パラメータ|説明| |:------:|:--| | requestPrepareAnnounce | RequestPrepareはJSONオブジェクトをアナウンスします。(参照:付録A:RequestPrepareAnnounce) |

  • 例:リクエストはブラウザでは実行できません。

  • 返されるJSON NemAnnounceResultオブジェクトの例:

{
   "type":1,
   "code":1,
   "message":"SUCCESS",
   "transactionHash": {
      "data":"c1786437336da077cd572a27710c40c378610e8d33880bcb7bdb0a42e3d35586"
   },
   "innerTransactionHash": {
      "data":"cc317a7674d56352b4c711096a7594bd11908bf518293a191fc2faa12eac0fbb"
   }
}
  • 考えられるエラー: トランザクションの検証が失敗したために発生する可能性があるさまざまなエラーがあります。エラーオブジェクトの詳細については付録A:Error object、エラーメッセージの付録B:NISエラーを参照してください。

一般的なエラーは次のとおりです。

  • 送信者アカウントに十分な資金がありません。
  • タイムスタンプが未来の時間すぎると無効となります。
  • 締め切りを過ぎているため無効です。
  • 添付されたメッセージが大きすぎます。
  • トランザクションは既に知られています。
  • この取引と競合する別の取引があります。これは、重要度を別のアカウントに転送しようとしているときに発生します。

7.2.転送トランザクションの開始

NISはバージョン1または2の転送トランザクションをサポートしています。バージョン1の転送トランザクションはメッセージとXEMコインのみを転送でき、バージョン2の転送トランザクションはモザイクセットも転送できます。

7.2.1.バージョン1転送トランザクション

送信者アカウント(以下、「Alice」といいます)から1000 NEMを送信するとします。

TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS 受信者アカウントへ:

TBOBBSXX7BESJXDWGLP5Z7FM5HSTKUH5WIMPW562 POSTリクエストを介してNISに送信する必要のあるRequestPrepareAnnounce JSONオブジェクトは、これと同じようになります(テストネットワーク)。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "amount": 1000000000,
        "fee": 3000000,
        "recipient": "TBOBBSXX7BESJXDWGLP5Z7FM5HSTKUH5WIMPW562",
        "type": 257,
        "deadline": 9154726,
        "message":
        {
            "payload": "",
            "type": 1
        },
        "version": -1744830463,
        "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
    },
    "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

NISは署名を作成するため、オブジェクトのトランザクション部分に署名がないことに注意してください。また、'version'フィールドには、値を16進数のシステムに変換するときに表示されるネットワークバージョンとトランザクションバージョンの両方が含まれています(-1744830463 = 0x98000001(ネットワークバージョン0x98およびトランザクションバージョン0x01)。送信者アカウントにトランザクションに十分な資金がある場合、NISはJSONオブジェクトで応答します。

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

7.2.2.バージョン2転送トランザクション

転送トランザクションバージョン2では、前の章で説明したようにメッセージとXEMを転送できます。唯一の違いは、テストネットでは-1744830462 = 0x98000002、メインネットでは1744830466 = 0x68000002、ミジンネットワークでは1610612738 = 0x60000002です。

しかし、バージョン2の転送トランザクションは、モザイクも転送できるので、より強力です。 分割数0のid 'makoto.metals.silver * coin'を持つモザイクをすでに作成していて、銀貨コインごとに100 XEMの転送でこれらの銀貨モザイクの転送をバンドルしたいとします。 3つのシルバーコインモザイクを転送し、1回の転送トランザクションで300のXEMを転送するには、次のようなRequestPrepareAnnounce JSONオブジェクトをNISに発行します。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "amount": 3000000,
        "fee": 30000000,
        "recipient": "TBOBBSXX7BESJXDWGLP5Z7FM5HSTKUH5WIMPW562",
        "type": 257,
        "deadline": 9154726,
        "message":
        {
            "payload": "",
            "type": 1
        },
        "version": -1744830462,
        "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        "mosaics":[{
            "mosaicId":{
                "namespaceId": "makoto.metals.silver",
                "name": "coin"
            },
            "quantity": 1
        },{
            "mosaicId":{
                "namespaceId": "nem",
                "name": "xem"
            },
            "quantity": 100000000
        }]
    },
    "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

転送トランザクションには2つのモザイクが添付されています。

  • id 'makoto.metals.silver * coin'を持つモザイク。モザイクに使用可能な最小単位の1を表す数量1。そのモザイクの分割可能性は0であるので(上述のように)、その数量は1単位、すなわち1コインを表す。

  • id 'nem * xem'(通常のXEMコインを表す特別なXEMモザイクである)を持つモザイクは、6という割り算を持ち、したがって100000000の数量は100 XEMを表します。 添付ファイルは、この例では1個の銀貨モザイクと100個のXEMを保持するモザイクの袋として見ることができます。

トランザクションの金額項目は、添付のためにトランザクションの解釈が異なります。添付書類に記載されている数量を掛ける数は、金額を1,000,000で割ったものです(このバージョンでは、NISは分数転送をサポートしていません)。したがって、この例では3,000,000 / 1,000,000 = 3であり、したがってアタッチメントが3回転写され、3個の銀貨モザイクが得られ、300個のXEMがレシピエントに転送される。

トランザクションが拒否される一般的な理由は次のとおりです。

  • 添付ファイルで指定された少なくとも1つのモザイクはNISには不明です。

  • 送信者は、少なくとも添付ファイルで指定されたタイプの十分なモザイクを所有していません。

  • 添付ファイルで指定された少なくとも1つのモザイクは転送不可と定義され、送信者と受信者の両方がそのモザイクの作成者ではありません。

モザイクの「makoto.metals.silver * coin」のモザイク定義に、銀貨モザイクを含む各転送で、XEMを住所TDGOGOGOWZJ3HU4F6CUM5IKE7GHG4FFTF5BZ7JPWの受領者に支払わなければならないと記載する徴収部分がある場合、転送トランザクションによって自動的にトランザクション送信者から10 XEMをTDGOGOGOWZJ3HU4F6CUM5IKE7GHG4FFTF5BZ7JPWに転送します。

7.3.アカウントをマルチアカウントに変換する

NISは、n個のmultisigアカウントのうちのm個をネイティブにサポートします。これは、口座がn個の共済を有するmultisig口座に変換され、これらの従属口座のうちのm人が、取引を完了するためにmultisig口座から取引に署名する必要があることを意味する。通常のアカウントをmultisigアカウントに変換するには、集約変更トランザクション(付録A:MultisigAggregateModificationTransactionを参照)をネットワークに送信する必要があります。アリスを公開鍵で変換したいと仮定します:

  • アカウント 'Alice':
    • 公開鍵:a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a

2つの3つのmultisigアカウントにアカウントが3つのcosignatorを持ち、少なくとも2つのcosignatorがmultisigトランザクションを完了するために署名する必要があることを意味します。

  1. Cosignatory 'Bob':
  2. アドレス:TBOBBSXX7BESJXDWGLP5Z7FM5HSTKUH5WIMPW562
  3. 公開鍵:6083df7119d43e815ed2967c795f806f6b73f8f92a56a7611e3848816ec50958

  4. Cosignatory 'jusan':

  5. アドレス:TBJUSANZ63AKNJ57XMK6Y2IBH55UNNRXJFZRDTRW
  6. 公開鍵:0662ed29cbfa7038530fb7f52df865eed6708d51bc7a24bcd05db35185b53c70

  7. Cosignatory 'go':

  8. アドレス:TDGOGOGOWZJ3HU4F6CUM5IKE7GHG4FFTF5BZ7JPW
  9. 公開鍵:cc61676a4275abcffd10a9ea1081091ff054a1a8a720429256aebf8034aab099

これに似たJSONオブジェクト(テストネットワーク)を作成する必要があります:

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 28000000,
        "type": 4097,
        "deadline": 9154726,
        "version": -1744830462,
        "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a",
        "modifications": [
            {
                "modificationType": 1,
                "cosignatoryAccount": "6083df7119d43e815ed2967c795f806f6b73f8f92a56a7611e3848816ec50958"
            },{
                "modificationType": 1,
                "cosignatoryAccount": "0662ed29cbfa7038530fb7f52df865eed6708d51bc7a24bcd05db35185b53c70"
            },{
                "modificationType": 1,
                "cosignatoryAccount": "cc61676a4275abcffd10a9ea1081091ff054a1a8a720429256aebf8034aab099"
            }
        ],
        "minCosignatories" : {
            "relativeChange": 2
        }
    },
    "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

NISによってトランザクションに署名されるため、署名がないことに再度注意してください。

トランザクションがNISによって署名され、ブロックにそれを含めることによってネットワークによって受け入れられた後、アカウントAliceは2/3 multisigアカウントになりました。 この時点から、コーディネーターだけが口座アリスの取引を開始することができます。 また、アカウントAliceからのトランザクションは、multisigトランザクションでなければなりません。

7.4.multisigトランザクションの開始

上で述べたように、コッシネータ(Bob、Jusan、Go)のうちの1つのみが、アカウントAliceのトランザクションを作成できます。

Bobは、アカウントAliceからアカウントJusanに1000 NEMを転送する転送トランザクションを開始したいと考えます。 アカウントAliceはmultisigアカウントなので、転送トランザクション(JSONオブジェクトの "otherTrans"構造内)はマルチトランザクションにラップする必要があります(付録A:MultisigTransactionを参照)。 対応するRequestPrepareAnnounceオブジェクトは次のようになります(テストネットワーク)。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 3000000,
        "type": 4100,
        "deadline": 9154726,
        "version": -1744830463,
        "signer": "6083df7119d43e815ed2967c795f806f6b73f8f92a56a7611e3848816ec50958",
        "otherTrans": {
            "timeStamp": 9111526,
            "amount": 1000000000,
            "fee": 4000000,
            "recipient": "TBJUSANZ63AKNJ57XMK6Y2IBH55UNNRXJFZRDTRW",
            "type": 257,
            "deadline": 9154726,
            "message":
            {
                "payload": "",
                "type": 1
            },
            "version": -1744830463,
            "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
        },
        "signatures":[
        ]
    },
    "privateKey": "00a6e2526b5cc84f9174c4ff050ca352623061115951c649b36b08409c4ccb7b2e"
}

NISは取引に署名し、それを公表します。 今回返されたNemAnnounceResultオブジェクトには、内部トランザクションのハッシュ(上記の構造のotherTrans)が含まれています。

{
    "type": 1,
    "code": 1,
    "message": "SUCCESS"
    "transactionHash": {
        "data":"c1786437336da077cd572a27710c40c378610e8d33880bcb7bdb0a42e3d35586"
    },
    "innerTransactionHash": {
        "data": "44e4968e5aa35fe182d4def5958e23cf941c4bf809364afb4431ebbf6a18c039"
    }
}

ハッシュは、上記のトランザクションのためのマルチサイン署名トランザクションを作成するノードによって必要とされる。

この時点で、取引はブロックに含まれていない(そしてそうではない)。なぜなら、他の共同主体 - ジュサンとゴ - はまだ取引に署名していないからだ。

7.4.1.multisigトランザクションの共起

...そうするために、JusanまたはGoはマルチシグニチャ署名トランザクションを開始する必要があります(付録A:MultisigSignatureTransactionを参照)。 Jusanはこれに似たRequestPrepareAnnounce JSONオブジェクトを作成する必要があります(テストネットワーク)。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 6000000,
        "type": 4098,
        "deadline": 9157365,
        "version": -1744830463,
        "signer": "0662ed29cbfa7038530fb7f52df865eed6708d51bc7a24bcd05db35185b53c70",
        "otherHash": {
            "data": "44e4968e5aa35fe182d4def5958e23cf941c4bf809364afb4431ebbf6a18c039"
        },
        "otherAccount": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS"
    },
    "privateKey": "00be34fdb20a9f6fed51376f0bab9f25ea7a48d610324588a6b203d0a1a6db4bc1"
}

Jusanは、Bobの要求からNISによって返されたハッシュ( 'otherHash')を使用したことに注意してください。

NISがトランザクションに署名してネットワークに送信した後、署名トランザクションはmultisigトランザクションにアタッチされます。 JusanがBobが開始したmultisigトランザクションに署名すると、3つの提携機関のうちの2つが内部転送トランザクション(multisigトランザクションを開始することによって間接的に署名されたBob)に署名し、multisigトランザクションをブロックに含めることができます。

7.5.cosignatorの追加と削除

multisigアカウントのcosignatorのリストを変更することは可能です。これは、multisigトランザクションでラップされた集約変更トランザクションを介して行われます。

multisigアカウントAliceにcosignatory Hachiを追加し、トランザクションを完了するために必要なcosignatoriesの最小値を2から3に増やしたいとします。

  1. Cosignatory 'hachi':
  2. アドレス:TDHACHIMHRBBRHR57SR3BDBFFWDTYVSLGMFKIDOR
  3. 公開鍵:6c66ea288522990db7a0a63c9c20f532cdcb68dc3c9544fb20f7322c92ceadbb

そのためには、既存の共同主体(ここではJusanと仮定)の1つが、対応するmultisigトランザクション(テストネットワーク)を開始する必要があります。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 6000000,
        "type": 4100,
        "deadline": 9154726,
        "version": -1744830462,
        "signer": "6083df7119d43e815ed2967c795f806f6b73f8f92a56a7611e3848816ec50958",
        "otherTrans": {
            "timeStamp": 9111526,
            "fee": 16000000,
            "type": 4097,
            "deadline": 9154726,
            "version": -1744830462,
            "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a",
            "modifications": [
                {
                "modificationType": 1,
                "cosignatoryAccount": "6c66ea288522990db7a0a63c9c20f532cdcb68dc3c9544fb20f7322c92ceadbb"
                }
            ],
            "minCosignatories" : {
                "relativeChange": 1
            }
        },
        "signatures":[
        ]
    },
    "privateKey": "00be34fdb20a9f6fed51376f0bab9f25ea7a48d610324588a6b203d0a1a6db4bc1"
}

NISが署名し、ネットワークにトランザクションをブロードキャストした後、他の2つの提携機関の1人は、トランザクションに署名する必要があります(multisigトランザクションの開始を参照)。トランザクションがブロックに正常に組み込まれた後、アカウントAliceは3/4のmultisigアカウントです。

後でBob、Jusan、Goがcosinectorを削除して2/3 multisigアカウントにする場合は、cosignatoriesの1人が上記と同様のトランザクションを開始することができますが、今回は "modificationType"を2に設定します(remove )、最小コサネーター相対変化値-1を使用して計算されます。 共済を削除するには、削除されているものを除いて、すべての共標をトランザクションに署名する必要があります。一度ネットワークによって承認されると、ハチはもはやマルチサインアカウントアリスの協会ではありません。

WARNING: アカウントの削除は最終的なものではなく、変更の対象となる可能性があります!

7.6.マルチアカウントの使用方法

マルチアカウントの目的は、アカウントをより安全にすることです。しかし、これは、multisigアカウントを使用する際に間違いをしないようにユーザーに依存しています。 たとえば、マルチアカウントアカウントの共用体のすべての秘密鍵が1台のコンピュータに存在する場合、multisigアカウントは本質的に通常アカウントと同じくらい良好です。そのコンピュータが侵害されると、すべての秘密鍵が攻撃に一度に公開されるからです。

したがって、好ましくは異なる場所に異なるコンピュータ上の共標の秘密鍵を有することが不可欠です。

multisigトランザクションの開始」を読んだ場合は、マルチトランザクションに署名できるようにするには、マルチトランザクションのコーディネータが内部トランザクションのハッシュを知っていなければならないことがわかります。そのハッシュの知識を得るには2つの方法があります:

  1. multisigトランザクションのイニシエータは、(NISによって返されたJSONオブジェクトに含まれる)ハッシュを書き出し、そのハッシュをcosignatorに送信します。

  2. cosignatorは未確認トランザクションをローカルNISを使用してポーリングします。未確認トランザクションの章で説明したように、未確認トランザクションJSONオブジェクトのメタデータ部分には、マルチトランザクションの場合の内部トランザクションのハッシュが含まれています。 最初のケースでは、クライアント側のソフトウェアの実装者は、ハッシュをコサンジトリーに転送する責任があり、後者の場合は、NEMネットワークがそれを行います。

標準クライアントNCCは、2番目の方法を使用します。それは便利な方法でmultisigアカウントを扱うことができます。

現在、multisigアカウント機能を使用する場合、異なる場所に少なくとも3つのcosignatorを使用することをお勧めします。 cosignatoryの秘密鍵のいずれかが侵害された場合は、そのアカウントをcosignatorのリストから直ちに削除し、その後に新しいcosignatoryを追加する必要があります(これについては、cosignatorの追加と削除の章を参照してください)。

プライベートキーがコンピュータに保存されている場合、そのコンピュータはインターネットをサーフィンしたり、他の危険なことをしたりするために使用されるべきではありません。

7.7.ネームスペースのプロビジョニング

この章では、ネームスペースをプロビジョニング(すなわちレンタル)するために必要なアクションについて説明します。ネームスペースの詳細については、multisigトランザクションの開始の章を参照してください。ルートネームスペース 'alice'とサブネームスペース 'alice.vouchers'を要求したいとします。最初のアクションは、ProvisionNamespaceTransactionを発行することです。いつものように、これは、RequestPrepareAnnounce JSONオブジェクトをNISに送信することによって行われます。この場合は、次のようになります。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 150000,
        "type": 8193,
        "deadline": 9154726,
        "version": -1744830463,
        "signer": "d99e88c90da71a4b0d848454e59e296c9ef7a8f018f3eaa3a198dc460b6621a4",
        "rentalFeeSink": "3e82e1c1e4a75adaa3cba8c101c3cd31d9817a2eb966eb3b511fb2ed45b8e262",
        "rentalFee": 100000000,
        "newPart": "alice",
        "parent": null
    },
    "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

フィールド 'parent'は、ルートネームスペースをレンタルすることを示すnullに設定されています。また、誰もすでにそのルートネームスペースを借りていないことを確認する必要があります。そうしないと、NISはエラーを返します。高い賃貸料は、ユーザーがすべての種類のルートネームスペースを占領するのを防ぐためです。収穫業者は、ブロックを収穫し、そのブロックにプロビジョニング・ネームスペース・トランザクションを含め、本質的に無料のネーム・スペースを取得することが許可されるまで収穫業者を待たせるので、収穫業者には与えられない。代わりに、すべての賃貸料は特別なマルチアカウントで収集されます。

NISからの最も一般的なエラー応答は次のとおりです。

  • ネームスペースはすでに別のアカウントによって所有されています。
  • ネームスペースに不正な文字または予約されたネームスペース部分が含まれています。
  • レンタル料金シンクの公開鍵が無効です。
  • レンタル料金は無効です(低すぎます)。

NISが成功メッセージで応答すると、トランザクションはネットワークにブロードキャストされ、将来のブロックに含まれます。トランザクションがブロックに含まれた後、/ account / namespacesリクエストを発行して、そのネームスペースの所有者であることを確認できます。xyzの章を参照してください。

サブネームスペース 'alice.vouchers'をレンタルするには、今度は次のようなRequestPrepareAnnounce JSONオブジェクトをNISに送信する必要があります。

{
     "transaction":
     {
         "timeStamp": 9111526,
         "fee": 150000,
         "type": 8193,
         "deadline": 9154726,
         "version": -1744830463,
         "signer": "d99e88c90da71a4b0d848454e59e296c9ef7a8f018f3eaa3a198dc460b6621a4",
         "rentalFeeSink": "3e82e1c1e4a75adaa3cba8c101c3cd31d9817a2eb966eb3b511fb2ed45b8e262",
         "rentalFee": 10000000,
         "newPart": "vouchers",
         "parent": "alice"
     },
     "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

今回は、親が親のネームスペースに設定されています。この場合、ルートのネームスペース 'alice'に設定されています。サブネームスペースのレンタル料金は10 XEMです。ルートネームスペースを所有するまで待つか、NISがエラーメッセージで応答します。トランザクションがブロックに含まれると、ルートネームスペース 'alice'が期限切れでない限り、サブネーム空間 'alice.vouchers'を所有します。

サブネームスペース 'alice.vouchers.special'をレンタルしたい場合、今度はRequestPrepareAnnounceオブジェクトを再度発行しなければなりません。このとき、親は 'alice.vouchers'に設定されます。 newPartは「特別」です。

1年後、ルートネームスペースの有効期限が切れます。これが起こらないようにするには、有効期限が切れる1か月以内にルートネームスペースのプロビジョニングネームスペーストランザクションを送信する必要があります。 RequestPrepareAnnounceオブジェクトは、初めてネームスペースをレンタルする場合と同じです。ルートネームスペースを更新すると、アカウントが既に所有しているルートネームスペースのサブネームスペースも自動的に更新されます。

7.8.モザイクを作成する

7.8.1.モザイク定義を作成する

NEMモザイクの概念の基礎は、モザイクの章にあります。 モザイクタイプを定義して作成するには、MosaicDefinitionCreationTransactionを発行する必要があります。いつものように、これは、RequestPrepareAnnounce JSONオブジェクトをNISに送信することによって行われます。この場合は、次のようになります。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 150000,
        "type": 16385,
        "deadline": 9154726,
        "version": -1744830463,
        "signer": "cbda3edb771d42801a5c6ce0725f9374efade19a8933d6ac22ccfa50c777d0f9",
        "creationFee": 10000000,
        "creationFeeSink": "53e140b5947f104cabc2d6fe8baedbc30ef9a0609c717d9613de593ec2a266d3",
        "mosaicDefinition": {
            "creator": "cbda3edb771d42801a5c6ce0725f9374efade19a8933d6ac22ccfa50c777d0f9",
            "description": "precious vouchers",
            "id": {
                "namespaceId": "alice.vouchers",
                "name": "Alice's gift vouchers"
            },
            "properties": [{
                "name": "divisibility",
                "value": "0"
            },{
                "name": "initialSupply",
                "value": "1000"
            },{
                "name": "supplyMutable",
                "value": "true"
            },{
                "name": "transferable",
                "value": "false"
            }
        ],
        "levy": {
            "type": 1,
            "recipient": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
            "mosaicId": {
                "namespaceId": "nem",
                "name": "xem"
            },
            "fee": 10
            }
        }
    },
    "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

上記のトランザクションでは、id 'alice.vouchers * Aliceのギフトバウチャー'という名前のモザイクがネームスペース 'alice.vouchers'内に作成されます。アカウントは、そのネームスペースを所有していなければなりません。不法占拠を阻止するために、モザイク定義を作成するために高い作成費用があります。前の章で述べたように、料金はブロック収穫業者には転送されず、 'creationFeeSink'フィールドに公開鍵が提供される特別なアカウントに転送されます。

モザイクは次のプロパティを持ちます。

  • それは割り切れません。つまり、モザイクが表す伝票は部分的ではなく全体としてのみ転送できます。
  • 当初1000枚のバウチャー(そのタイプのモザイク)があります。
  • 供給(そのタイプのモザイクの数)は後で変更することができます。
  • バウチャーは口座間で譲渡できません。モザイクの作成者のみがバウチャーを他の口座に振り替えることができ、口座がバウチャーを所有すると、それは作成者に戻すことしかできません。

この定義はまた、各移転の課金を意味する。課金セクションには、転送ごとに10 XEMの追加料金があると記載されています。その手数料は、住所TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXHで受信者に送信されます。 この賦課金の一部はオプションです。その部分が省略されている場合は、モザイクを転送することによって追加料金は発生しません。

取引を受け入れているNISの理由は、

  • トランザクション署名者は、モザイク定義で指定されているネームスペースを所有していないか、ネームスペースの有効期限が切れています。
  • 指定されたモザイクIDを持つモザイク定義はすでに存在します(モザイク定義の変更については後述の説明を参照してください)。
  • 作成料シンクの公開鍵が無効であるか、または作成料金が低すぎます。
  • 取引の徴収部分のモザイクIDはNISには不明です。

トランザクションがブロックに含まれブロックが実行されると、「initialSupply」フィールド(例では1000)に記述されているモザイクの量がクリエイターに入金されます。

7.8.2.モザイク定義を変更する

説明を変更したい場合や、不完全なプロパティーや欠陥のある課金データを提供したために、モザイク定義を変更する必要があるかもしれません。これは、同じモザイクIDであるが記述/プロパティ/課金が異なる前述の別のモザイク定義作成トランザクションを発行するだけで簡単に実行されます。ただし、その際にはいくつかの制限があります。

  • 説明は、作成者が供給品全体を所有していなくても、いつでも変更することができます。
  • プロパティと課金データは、作成者がそのタイプのすべての単一のモザイクを所有している場合にのみ変更できます。これは、クリエイターが秘密に徴収金を導入したり、供給を増やしてモザイクを膨らませたりしないようにするために必要です。

モザイクの定義を更新すると10 XEMの費用がかかりますので、トランザクションを発行する前にデータを再確認することは価値があります。

7.8.3.モザイク供給の変更

'supplyMutable'をtrueに設定してモザイク定義を作成した場合は、モザイクの供給を変更することができます。これを行うには、MosaicSupplyChangeTransactionを発行する必要があります。これは、RequestPrepareAnnounce JSONオブジェクトをNISに送信することによって行われます。このオブジェクトは、次のようになります。

{
    "transaction":
    {
        "timeStamp": 9111526,
        "fee": 150000,
        "type": 16386,
        "deadline": 9154726,
        "version": -1744830463,
        "signer": "d99e88c90da71a4b0d848454e59e296c9ef7a8f018f3eaa3a198dc460b6621a4",
        "supplyType": 1,
        "delta": 100,
        "mosaicId": {
            "namespaceId": "alice.vouchers",
            "name": "Alice's gift vouchers"
        }
    },
    "privateKey": "00983bb01d05edecfaef55df9486c111abb6299c754a002069b1d0ef4537441bda"
}

上記の例では、id 'alice.vouchers * Aliceのギフトバウチャー'を持つ既存のモザイクの供給が変更されています。特に

  • supplyType1は供給が増加したことを意味します(供給タイプ2は供給減少を意味します)。
  • デルタ100は、作成者のアカウントに100単位追加されたことを意味します。

取引を受け入れているNISの理由は、

  • トランザクション署名者は、モザイクの作成者ではありません。
  • モザイクの定義は、供給が不変であると述べている。
  • 供給を増やそうとするとき、総供給は9,000,000,000モザイクを超えてはならない。
  • 供給を減らそうとするとき、作成者は自分が削除したいモザイクの数を所有していなければなりません。

トランザクションがブロックチェーンに含まれると、供給の変更が実現されます。

7.9.署名付きトランザクションの作成

この章では、トランザクションのどのデータを署名する必要があるのか​​、どのJSONオブジェクトをNISに送信するのかについて説明します。

7.9.1.署名用データの収集

トランザクション署名を作成するには、トランザクションから抽出されたバイト配列を署名する必要があります。複数のタイプのトランザクションが存在するため、バイト配列はトランザクションのタイプごとに異なる構造を持ちます。それにもかかわらず、バイト配列の最初の部分はすべてのトランザクションで同じ構造を持ちます。ご了承ください:

  • フィールドが数字を示すとき、エンディアンは重要です。
  • フィールドが連結される順序は重要です。

バイト配列の共通トランザクション部分

  • トランザクションタイプ:4バイト(整数)。 以下のタイプがサポートされています:

    • 0x0101(振替取引)
    • 0x0801(重要度転送トランザクション)
    • 0x1001(multisig集約変更転送トランザクション)
    • 0x1002(マルチサイン署名トランザクション)
    • 0x1004(マルチトランザクション)
    • 0x2001(プロキシネームスペーストランザクション)
    • 0x4001(モザイク定義作成トランザクション)
    • 0x4002(モザイク供給変更トランザクション)
    • 例(重要度転送トランザクション):0x01,0x08,0x00,0x00
  • バージョン:4バイト(整数)。 次のバージョンがサポートされています。

    重要度転送トランザクション、マルチシグニチャトランザクション、マルチシグニチャトランザクション、プロビジョニングネームスペーストランザクション、モザイク定義作成トランザクション、モザイク供給変更トランザクションでは、

    • 0x68 << 24 + 1(メインネットワーク)
    • 0x60 << 24 + 1(ミジンネットワーク)
    • 0x98 << 24 + 1(テストネットワーク)
    • 例(メインネットワーク):0x01、0x00、0x00、0x68

    転送トランザクションとmultisig集約変更トランザクションでは、バージョンは

    • 0x68 << 24 + 2(メインネットワーク)
    • 0x60 << 24 + 2(ミジンネットワーク)
    • 0x98 << 24 + 2(テストネットワーク)
    • 例(メインネットワーク):0x02、0x00、0x00、0x68
  • タイムスタンプ:4バイト(整数)。

    • 例(タイムスタンプ= 0x129623):0x23、0x96、0x12、0x00
  • 公開鍵バイト配列の長さ(常に32):4バイト(整数)。

    • 常に:0x20、0x00、0x00、0x00
  • 署名者の公開鍵バイト:32バイト

    • 例:0x6d、0xa3、0x76、0x07、0x13、0x01、0x9e、0x26、0xb1,0x86,0x24,0x3a、0xb6,0xec、0xba、0x9f、0x70,0x78,0x4c、0x59,0x92,0x3d、0x68,0x9a、 0xb5、0x4d、0x4b、0x2b、0xf0、0xe2、0x0f、0x5d
  • 料金(マイクロネーム):8バイト(ロング)。

    • 例(12 nem):0x00、0x1b、0xb7、0x00、0x00、0x00、0x00、0x00
  • 締め切り:4バイト(整数)。

    • 例(期限= 0x147824):0x24,0x78,0x14,0x00

転送取引部分

  • 受信者アドレスの長さ(常に40):4バイト(整数)。

    • 常に:0x28、0x00、0x00、0x00
  • 受信者アドレス:40バイト(UTF8エンコーディングを使用)。

    • 例( "NACCH2WPJYVQ3PLGMVZVRK5JI6POTJXXHLUG3P4J"):0x4e、0x41,0x43,0x43,0x48,0x32,0x57,0x50,0x51,0x33,0x50,0x4c、0x47,0x4d、0x56,0x5a、0x56,0x52,0x4b 0x35、0x4、0x49、0x36、0x50、0x4f、0x54、0x4a、0x58、0x58、0x48、0x4c、0x55、0x47、0x33、0x50、0x34、0x4a
  • 金額(マイクロネーム):8バイト(長)。

    • 例(1234 NEM):0x80、0x58、0x8d、0x49、0x00、0x00、0x00、0x00
  • メッセージフィールドの長さ:4バイト(整数)。注:長さが0の場合、次の2つのフィールドは適用されません。

    • 例:0x24、0x00、0x00、0x00
  • メッセージタイプ:4バイト(整数)。次のメッセージタイプがサポートされています。

    • 0x01(プレーンメッセージ)
    • 0x02(安全な、すなわち暗号化されたメッセージ)
    • 例:0x01、0x00、0x00、0x00
  • ペイロードの長さ:4バイト(整数)。

    • 例:0x05、0x00、0x00、0x00
  • ペイロード:UTF8でエンコードされた文字列。

    • 例( "Hello"):0x48、0x65、0x6c、0x6c、0x6f

注:次の部分はオプションであり、添付ファイルを持つバージョン2の転送トランザクションでのみ使用できます。

  • モザイクの数:4バイト(整数)。
    • 例(1モザイク):0x01、0x00、0x00、0x00
次の部分は、添付ファイル内のすべてのモザイクに対して繰り返されます。
  • モザイク構造の長さ:4バイト(整数)。

    • 例:0x1c、0x00、0x00、0x00
  • モザイクID構造の長さ:4バイト(整数)。

    • 例:0x10、0x00、0x00、0x00
  • ネームスペースID文字列の長さ:4バイト(整数)。

    • 例:0x03,0x00,0x00,0x00
  • ネームスペースID文字列:UTF8でエンコードされた文字列。

    • 例:( "id9")0x69、0x64、0x39
  • モザイク名文字列の長さ:4バイト(整数)。

    • 例:0x05、0x00、0x00、0x00
  • モザイク名文字列:UTF8でエンコードされた文字列。

    • 例:( "name9")0x6e、0x61、0x6d、0x65、0x39
  • 数量:8バイト(長い)。

    • 例:(24)0x18、0x00、0x00、0x00、0x00、0x00、0x00、0x00

重要な振替取引部分

  • 重要度転送モード:4バイト(整数)。以下のモードがサポートされています:

    • 0x01(アクティブ化)
    • 0x02(非アクティブ化)
    • 例(モード起動):0x01、0x00、0x00、0x00
  • リモートアカウントの公開鍵バイト配列の長さ(常に32):4バイト(整数)。

    • 常に:0x20、0x00、0x00、0x00
  • リモートアカウントの公開鍵バイト:32バイト

    • 例:0x6d、0xa3、0x76、0x07、0x13、0x01、0x9e、0x26、0xb1,0x86,0x24,0x3a、0xb6,0xec、0xba、0x9f、0x70,0x78,0x4c、0x59,0x92,0x3d、0x68,0x9a、 0xb5、0x4d、0x4b、0x2b、0xf0、0xe2、0x0f、0x5d

集約変更トランザクションパート

  • 共存修正数:4バイト(整数)。
    • 例:0x03,0x00,0x00,0x00

次の部分は、すべてのコーパスの変更のために繰り返されます

  • 共存修正構造の長さ:4バイト(整数)。

    • 常に:0x28、0x00、0x00、0x00
  • 変更タイプ:4バイト(整数)。以下の変更タイプがサポートされています:

    • 0x01(コーパスを追加)
    • 0x02(コーパスを削除)
    • 例(削除):0x02,0x00,0x00,0x00
  • 共コードの公開鍵のバイト配列の長さ(常に32):4バイト(整数)。

    • 常に:0x20、0x00、0x00、0x00
  • 共用体の公開鍵バイト:32バイト

    • 例:0x6d、0xa3、0x76、0x07、0x13、0x01、0x9e、0x26、0xb1,0x86,0x24,0x3a、0xb6,0xec、0xba、0x9f、0x70,0x78,0x4c、0x59,0x92,0x3d、0x68,0x9a、 0xb5、0x4d、0x4b、0x2b、0xf0、0xe2、0x0f、0x5d

次の部分では、最小二乗法の変更について説明します。この部分はオプションです。バージョン1の集約変更トランザクションでは、この部分を省略する必要があります。最小コサネーターの変更がないバージョン2の集約変更トランザクションでは、値0x00、0x00、0x00、0x00の長さフィールドのみを書き込む必要があります。

  • 最小コサネーター変更構造の長さ:4バイト(整数)。

    • 常に:0x04、0x00、0x00、0x00
  • 相対的な変更:4バイト(整数)。

    • 例(2の相対的な変化):0x02,0x00,0x00,0x00

マルチサイン署名取引部

  • ハッシュオブジェクトの長さ(対応するmultisigトランザクションのハッシュ):4バイト(整数)

    • 常に:0x24、0x00、0x00、0x00
  • ハッシュの長さ:4バイト(整数)。

    • 常に:0x20、0x00、0x00、0x00
  • SHA3​​ハッシュ・バイト:32バイト

    • 0x7、0x76、0xfe、0x26、0xc4、0x54、0x61、0xf7、0x4b、0xcb、0x76、0xac、0xae、0xb0、0x17、0x39、0x9e、0xbe、0x50、0xaa、0x71、 0x57,0x39,0x5f、0xbb、0xc0,0x25,0xac、0xb7
  • 対応するマルチアカウントのアドレスの長さ(常に40):4バイト(整数)。

    • 常に:0x28、0x00、0x00、0x00
  • Multisigアカウントアドレス:40バイト(UTF8エンコーディングを使用)。

    • 例( "NACCH2WPJYVQ3PLGMVZVRK5JI6POTJXXHLUG3P4J"):0x4e、0x41,0x43,0x43,0x48,0x32,0x57,0x50,0x51,0x33,0x50,0x4c、0x47,0x4d、0x56,0x5a、0x56,0x52,0x4b 0x35、0x4、0x49、0x36、0x50、0x4f、0x54、0x4a、0x58、0x58、0x48、0x4c、0x55、0x47、0x33、0x50、0x34、0x4a

Multisig取引部分

  • 内部トランザクションオブジェクトの長さ。これは、転送、重要度転送、または集約変更トランザクションです。
    • 例:0x74、0x00、0x00、0x00

以下は内部トランザクションオブジェクトです。構造は、上記のトランザクション(署名トランザクションを除く)の構造の1つです。

プロビジョニングネームスペーストランザクション部分

  • レンタル料金シンクの符号化アドレスの長さ(常に40):4バイト(整数)。

    • 常に:0x28、0x00、0x00、0x00
  • レンタル料金シンクのアドレスバイト:40バイト。

    • ネットワーク依存シンクアドレス(すなわち、TAMESPACEWH4MKFMBCVFERDPOOP4FK7MTDJEYP35):0x54,0x41,0x4,0x45,0x53,0x50,0x41,0x43,0x45,0x57,0x48,0x34,0x4d、0x4b、0x46、0x4d、0x42、0x43、0x56、0x46、0x45 、0x52,0x44,0x50,0x4f、0x4f、0x50,0x34,0x46,0x4b、0x37,0x4d、0x54,0x44,0x4a、0x45,0x59,0x50,0x33,0x35
  • ネームスペース:8バイト(long)のレンタル料金(Root always:100000000、Sub always:10000000)

    • ルートは常に:0x00、0xe1、0xf5、0x05、0x00、0x00、0x00、0x00
    • 常に下位:0x80、0x96、0x98、0x00、0x00、0x00、0x00、0x00
  • 新しい部分文字列の長さ:4バイト(整数)。

    • 例:0x03,0x00,0x00,0x00
  • 新しい部分文字列:UTF8でエンコードされた文字列。

    • 例:( "bar")0x62、0x61、0x72
  • 親ストリングの長さ:4バイト(整数)。注意:親がnull(ルートネームスペースをプロビジョニングする)である必要がある場合、このフィールドは0xff、0xff、0xff、0xffに設定され、次のフィールドは省略されます。

    • 例:0x03,0x00,0x00,0x00
    • 親ストリング:UTF8でエンコードされた文字列。
    • 例:( "foo")0x66、0x6f、0x6f

モザイク定義作成トランザクション部分

  • モザイク定義構造の長さ:4バイト(整数)。

    • 例:0x29、0x01、0x00、0x00
  • 作成者の公開鍵バイト配列の長さ(常に32):4バイト(整数)。

    • 常に:0x20、0x00、0x00、0x00
  • 作成者の公開鍵バイト:32バイト

    • 例:0x8f、0xcd、0xce、0xd0、0x85、0xcb、0x58、0xe3、0x62、0x6e、0x7e、0xfb、0xab、0xc7,0xa6,0x3d、0x87,0x3e、0x7d、0xf5,0xb6,0x24,6x6c、 0x9b、0x2c、0x10、0x8f、0x90、0xab、0x44、0xf2
  • モザイクID構造の長さ:4バイト(整数)。

    • 例:0x2b、0x00、0x00、0x00
  • ネームスペースID文字列の長さ:4バイト(整数)。

    • 例:0x0e、0x00、0x00、0x00
  • ネームスペースID文字列:UTF8でエンコードされた文字列。

    • 例:( "alice.vouchers")0x61、0x6c、0x69、0x63、0x65、0x2e、0x76、0x6f、0x75、0x63、0x68、0x65、0x72、0x73
  • モザイク名文字列の長さ:4バイト(整数)。

    • 例:0x15、0x00、0x00、0x00
  • モザイク名文字列:UTF8でエンコードされた文字列。

    • 例:( "アリスのギフトバウチャー")0x41,0x6c、0x69,0x63,0x65,0x27,0x73,0x20,0x67,0x69,0x66,0x74,0x20,0x76,0x6f、0x75、0x63、0x68、0x65、0x72、0x73
  • 説明文字列の長さ:4バイト(整数)。

    • 例:0x11、0x00、0x00、0x00
  • 説明文字列:UTF8でエンコードされた文字列。

    • 例:(「貴重品」)0x70,0x72,0x65,0x63,0x69,0x6f、0x75,0x73,0x20,0x76,0x6f、0x75,0x63,0x68,0x65,0x72,0x73
  • プロパティの数:4バイト(整数)。

    • 例:0x02、0x00、0x00、0x00

次の5つのフィールドがすべてのプロパティに対して繰り返されます。注:プロパティ値は常に文字列です

  • プロパティー構造体の長さ:4バイト(整数)。

    • 例:0x15、0x00、0x00、0x00
  • プロパティ名の長さ:4バイト(整数)。

    • 例:0x0c、0x00、0x00、0x00
  • プロパティ名:UTF8でエンコードされた文字列。

    • 例:(除算)0x64、0x69、0x76、0x69、0x73、0x69、0x62、0x69、0x6c、0x69、0x74、0x79
  • プロパティ値の長さ:4バイト(整数)。

    • 例:0x01、0x00、0x00、0x00
  • プロパティ値:UTF8でエンコードされた文字列。

    • 例:( "3")0x33
  • プロパティー構造体の長さ:4バイト(整数)。

    • 例:0x16、0x00、0x00、0x00
  • プロパティ名の長さ:4バイト(整数)。

    • 例:0x0d、0x00、0x00、0x00
  • プロパティ名:UTF8でエンコードされた文字列。

    • 例:( "initialSupply")0x69、0x6e、0x69、0x74、0x69、0x61、0x6c、0x53、0x75、0x70、0x70、0x6c、0x79
  • プロパティ値の長さ:4バイト(整数)。

    • 例:0x01、0x00、0x00、0x00
  • プロパティ値:UTF8でエンコードされた文字列。

    • 例:( "0")0x30
  • プロパティー構造体の長さ:4バイト(整数)。

    • 例:0x1a、0x00、0x00、0x00
  • プロパティ名の長さ:4バイト(整数)。

    • 例:0x0d、0x00、0x00、0x00
  • プロパティ名:UTF8でエンコードされた文字列。

    • 例:( "supplyMutable")0x73、0x75、0x70、0x70、0x6c、0x79、0x4d、0x75、0x74、0x61、0x62、0x6c、0x65
  • プロパティ値の長さ:4バイト(整数)。

    • 例:0x05、0x00、0x00、0x00
  • プロパティ値:UTF8でエンコードされた文字列。

    • 例:( "false")0x66、0x61、0x6c、0x73、0x65
  • プロパティー構造体の長さ:4バイト(整数)。

    • 例:0x18、0x00、0x00、0x00
  • プロパティ名の長さ:4バイト(整数)。

    • 例:0x0c、0x00、0x00、0x00
  • プロパティ名:UTF8でエンコードされた文字列。

    • 例:( "転送可能")0x74、0x72、0x61、0x6e、0x73、0x66、0x65、0x72、0x61、0x62、0x6c、0x65
  • プロパティ値の長さ:4バイト(整数)。

    • 例:0x04、0x00、0x00、0x00
  • プロパティ値:UTF8でエンコードされた文字列。

    • 例:( "true")0x74、0x72、0x75、0x65

    注:以下の課金オブジェクトはオプションです。モザイク定義に課金がない場合は長さフィールドを0に設定し、「課金構造はここで終わります。」というコメントまですべての後続フィールドを省略します。

  • 課金構造の長さ:4バイト(整数)。

    • 例:0x4c、0x00、0x00、0x00
  • 料金タイプ:​​4バイト(整数)。以下の料金タイプがサポートされています。

    • 0x01(絶対費用)
    • 0x02(百分率)
    • 例:0x01、0x00、0x00、0x00
  • 受信者アドレスフィールドの長さ(常に40):4バイト(整数)。

    • 例:0x28、0x00、0x00、0x00
  • 受信者アドレス:40バイト(UTF8エンコーディングを使用)。

    • 例( "NACCH2WPJYVQ3PLGMVZVRK5JI6POTJXXHLUG3P4J"):0x4e、0x41,0x43,0x43,0x48,0x32,0x57,0x50,0x51,0x33,0x50,0x4c、0x47,0x4d、0x56,0x5a、0x56,0x52,0x4b 0x35、0x4、0x49、0x36、0x50、0x4f、0x54、0x4a、0x58、0x58、0x48、0x4c、0x55、0x47、0x33、0x50、0x34、0x4a
  • モザイクID構造の長さ:4バイト(整数)。

    • 例:0x10、0x00、0x00、0x00
  • ネームスペースID文字列の長さ:4バイト(整数)。

    • 例:0x03,0x00,0x00,0x00
  • ネームスペースID文字列:UTF8でエンコードされた文字列。

    • 例:( "id2")0x69、0x64、0x32
  • モザイク名文字列の長さ:4バイト(整数)。

    • 例:0x05、0x00、0x00、0x00
  • モザイク名文字列:UTF8でエンコードされた文字列。

    • 例:( "name2")0x6e、0x61、0x6d、0x65、0x32
  • 料金の数量:8バイト(長い)。

    • 例:(123)0x7b、0x00、0x00、0x00、0x00、0x00、0x00、0x00

課金構造はここで終わります。

  • 作成料金の長さは、シンクのコード化アドレスバイト配列(常に40):4バイト(整数)です。

    • 常に:0x28、0x00、0x00、0x00
  • 作成料金シンクのアドレスキーバイト:40バイト。

    • ネットワーク依存シンクアドレス(すなわちTBMOSAICOD4F54EE5CDMR23CCBGOAM2XSJBR5OLC):が0x54、0x42に、0x4d、0x4f、$ 53、0×41、0x49、0x43この、0x4f、0x44の、0x34の、0x46の、0x35の0x34の、0x45、0x45、0x35の0x43この、0x44の、0x4d、0x52 、0x32の、0x33の、0x43この、0x43この、0x42に、0x47、0x4f、0×41、0x4d、0x32の、0x58、$ 53、0x4a、0x42に、0x52、0x35の0x4f、0x4c、0x43この
  • 料金の数量:8バイト(長い)。

    • 常に:(5000000000)0x00、0xf2、0x05、0x2a、0x01、0x00、0x00、0x00

モザイク供給変更取引部

  • モザイクID構造の長さ:4バイト(整数)。

    • 例:0x12、0x00、0x00、0x00
  • ネームスペースID文字列の長さ:4バイト(整数)。

    • 例:0x07、0x00、0x00、0x00
  • ネームスペースID文字列:UTF8でエンコードされた文字列。

    • 例:( "foo.bar")0x66、0x6f、0x6f、0x2e、0x62、0x61、0x72
  • モザイク名文字列の長さ:4バイト(整数)。

    • 例:0x03,0x00,0x00,0x00
  • モザイク名文字列:UTF8でエンコードされた文字列。

    • 例:( "baz")0x62、0x61、0x7a
  • 供給タイプ:4バイト(整数)。以下の電源タイプがサポートされています。

    • 0x01(供給を増やす)
    • 0x02(供給を減らす)
    • 例:0x01、0x00、0x00、0x00
  • デルタ(供給の変化):8バイト(長い)。

    • 例:(100)0x64,0x00、0x00、0x00、0x00、0x00、0x00、0x00

バイト配列の作成

署名が必要な最終バイト配列を作成するには、トランザクションの共通部分と型固有の部分を連結するだけです。たとえば、転送トランザクションのバイト配列を作成する場合は、次のような共通のものがあります

0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x32,0x03,0xb4,0x55,0x09,0x0e、0x2f、0xfe、0x00、0x00、0x00、0x00、0x01、0x00、0x00、0x00、 0x8、0x53、0x6、0x48、0x53、0x6c、0x99、0x01、0x4d、0x1c、0xa9、0x2c、0x10、0x47、0xaf、0xbc、0xae、0x58、0x05、0x7b、0xb6、 0x1e、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00

転送トランザクション特定部

0x28、0x00、0x00、0x00、0x54,0x41,0x49,0x34,0x35,0x32,0x53,0x37,0x44,0x4c、0x36,0x57,0x48,0x57,0x54,0x5a、0x5a、0x32、0x57、0x33、0x44、 0x49、0x4、0x34、0x32,0x36,0x58,0x57,0x49,0x4a、0x4b、0x4c、0x55、0x4e、0x58、0x4e、0x4b、0x54,0x37,0x4c、0x40,0x2f、0x07,0x2f、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、0x00

最終的な配列

0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x32,0x03,0xb4,0x55,0x09,0x0e、0x2f、0xfe、0x00、0x00、0x00、0x00、0x01、0x00、0x00、0x00、 0x8、0x53、0x6、0x48、0x53、0x6c、0x99、0x01、0x4d、0x1c、0xa9、0x2c、0x10、0x47、0xaf、0xbc、0xae、0x58、0x05、0x7b、0xb6、 0x1、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x28,0x00,0x00,0x00,0x54,0x41,0x49,0x34,0x35,0x32,0x53,0x37,0x44,0x4c、0x36,0x57 、0x48、0x57、0x54、0x5a、0x5a、0x32、0x57、0x33、0x44、0x49、0x4d、0x34,0x32,0x36,0x58,0x57,0x49,0x4a、0x4b、0x4c、0x55、0x4e、0x58、0x4e、0x4b 、0x54、0x37、0x4c、0x40、0x2f、0x07、0x2f、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00

この配列に署名すると、64バイト長の署名が得られます。

トランザクションのハッシュ計算

NISはSHA3-256ハッシュ関数を使用します。トランザクションのハッシュを作成するには、トランザクションのバイト配列をハッシュする必要があります。トランザクションからバイト配列を構築する方法については、上のセクションを参照してください。

7.9.2.NISにデータを送信する

最後のセクションで説明したようにデータを準備したら、配列と対応する署名をRequestAnnounceリクエストで送信できます

  • APIパス:/transaction/announce

    • リクエストタイプ:POST
  • 説明: トランザクションを作成してブロードキャストします。 秘密鍵は関与していません。

  • パラメータ: requestAnnounce(付録A:RequestAnnounceで説明されているように、RequestAnnounce JSONオブジェクト。)

  • 例: リクエストはブラウザでは実行できません。

  • 返されるJSON NemAnnounceResultオブジェクトの例:

{
    "type":1,
    "code":1,
    "message":"SUCCESS",
    "transactionHash": {
    "data":"c1786437336da077cd572a27710c40c378610e8d33880bcb7bdb0a42e3d35586"
    },
    "innerTransactionHash": {
        "data":"cc317a7674d56352b4c711096a7594bd11908bf518293a191fc2faa12eac0fbb"
    }
}
  • 考えられるエラー:発生する可能性のあるエラーは第6.1章で説明されています。

7.10.取引手数料

ハーベスタがブロックを収穫しているノードを実行するインセンティブを持つためには、ブロックチェーンに含めるすべてのトランザクションに対して料金を支払う必要があります。

異なる取引タイプには異なる手数料があります。 NISで取引を有効にするには、最低手数料が必要です。

注: トランザクションタイプによっては、トランザクション実行中のアクション(たとえば、ネームスペースのレンタル)により追加料金がかかる可能性があります。

以下のチャートは、各取引タイプの最低手数料をまとめたものです。 すべての計算は、丸められた量のXEMで行われます(つまり、マイクロXEMは無視されます)。

トランザクションの転送

料金は、XEMの金額を転送するための料金とトランザクションにメッセージを追加する料金の合計です。

  1. XEMを別のアカウントに移管するための手数料:

    10,000 XEMあたり0.05 XEM、1.25 XEMでキャップした

    例: XEM転送の場合は0.20 XEM転送、XEM転送の場合はXEM転送の1.25。

  2. 取引にメッセージを追加するための手数料:

    開始されたメッセージのバイト数が32(メッセージ長/ 32 + 1)で0.05 XEM。

    例: 暗号化されていないメッセージ "新しい経済運動は世界を変えます!!!"は長さが49文字なので、XEM料金は0.15です。

  3. モザイクを別の口座に移管するための手数料:

    1. 分割可能度が0で最大供給量が10,000のモザイクを中小企業モザイクといいます。 中小企業モザイクの譲渡には0.05 XEM手数料。

    2. 転送された各モザイクについて、料金は次のように計算されます。初期サプライs、除算d、量qのモザイクが与えられた場合、XEMの等価物は(次の小さい整数への丸め)

      xemEquivalent =(8,999,999,999 * q)/(s * 10 ^ d)

      異なるモザイクの総量を考慮に入れるために、調整項が計算される。

      計算と呼ばれるモザイクの場合

      1. maxMosaicQuantity = 9,000,000,000,000,000

      2. totalMosaicQuantity =モザイクm供給* 10 ^(モザイクm除算)

      3. supplyRelatedAdjustment = floor(0.8 * ln(maxMosaicQuantity / totalMosaicQuantity)

      4. その後、加重されない料金は次のように計算されます。 unweightedFee = max(1L、xemFee - supplyRelatedAdjustment)

      5. 最後に、加重された料金を計算することができます: fee = unweightedFee * feeUnit

      例:

      9,000,000の供給と分配の3つのモザイクがあるとします。

      1. totalMosaicQuantity = 9,000,000 * 1,000 = 9,000,000,000

      2. supplyRelatedAdjustment = floor(0.8 * ln(9,000,000,000,000,000 / 9,000,000,000))= floor(11.052)= 11

      3. そのようなモザイクを転写する(150,000個の最小単位の量) xemEquivalent =(8,999,999,999 * 150,000)/(9,000,000 * 10 ^ 3)= 149,999 xemFee = 14 XEM

      4. したがって、取引には次の非加重料金が適用されます。 unweightedFee = 14 XEM - 11 XEM = 3 XEM

      5. 現在の料金単位0.05で加重: 手数料= 3 XEM * 0.05 = 0.15 XEM

8. NISからの追加情報の要求

いくつかのリクエストは、NISの内部ステータスに関する追加情報を提供します。

WARNING: NISの将来のバージョンでは、これらの要求は予告なしに削除される可能性があります。その存在に頼るべきではありません。

8.1.ネットワーク時間の監視

  • APIパス:/debug/time-synchronization

    • リクエストタイプ:GET
  • 説明: 付録A:TimeSynchronizationResultで説明されている時刻同期結果の配列を取得します。 この情報を使用して、ネットワーク時間の変化を監視できます。

  • パラメータ:なし

  • 例: http://127.0.0.1:7890/debug/time-synchronization

  • JSON TimeSynchronizationResultオブジェクトの返された配列の例:

{
       "data": [
       {
              "dateTime": "2014-11-19 19:23:04",
              "currentTimeOffset": 1747,
              "change": 57
       },
       {
              "dateTime": "2014-11-19 19:24:17",
              "currentTimeOffset": 1776,
              "change": 29
       },
       {
              "dateTime": "2014-11-19 19:25:18",
              "currentTimeOffset": 1729,
              "change": -47
       }]
}
  • 考えられるエラー:なし

8.2.受信および送信の監視

  • APIパス:/debug/connections/incoming

    • リクエストタイプ:GET
  • 説明: 付録A:AuditCollectionの説明に従って、着信コールの監査コレクションを取得します。 この情報を使用して、未処理および最新の着信要求を監視できます。

  • パラメータ:なし

  • 例: http://127.0.0.1:7890/debug/connections/incoming

  • 返されるJSON AuditCollectionオブジェクトの例:

{
       "outstanding": [
       {
              "path": "/debug/connections/incoming",
              "start-time": 9317306,
              "host": "127.0.0.1",
              "elapsed-time": 0,
              "id": 4070
       }],
       "most-recent": [
       {
              "path": "/debug/connections/incoming",
              "start-time": 9317306,
              "host": "127.0.0.1",
              "elapsed-time": 0,
              "id": 4070
       },
       {
              "path": "/chain/score",
              "start-time": 9317303,
              "host": "95.16.203.168",
              "elapsed-time": 3,
              "id": 4069
       }]
}
  • 考えられるエラー:なし

  • APIパス:/debug/connections/outgoing

    • リクエストタイプ:GET
  • 説明: 付録A:AuditCollectionの説明に従って、発信呼び出しの監査コレクションを取得します。 未処理および最近の発信要求をこの情報で監視できます。

  • パラメータ:なし

  • 例: http://127.0.0.1:7890/debug/connections/outgoing

  • 返されるJSON AuditCollectionオブジェクトの例:

{
       "outstanding": [
       {
              "path": "/chain/blocks-after",
              "start-time": 9317511,
              "host": "88.12.55.125",
              "elapsed-time": 6,
              "id": 6452
       }],
       "most-recent": [
       {
              "path": "/chain/blocks-after",
              "start-time": 9317511,
              "host": "88.12.55.125",
              "elapsed-time": 6,
              "id": 6452
       },
       {
              "path": "/chain/hashes-from",
              "start-time": 9317511,
              "host": "88.12.55.125",
              "elapsed-time": 6,
              "id": 6451
       }]
}
  • 考えられるエラー:なし

8.3.タイマーの監視

  • APIパス:/debug/connections/timers

    • リクエストタイプ:GET
  • 説明: 付録A:NemAsyncTimerVisitorで説明されているタスクモニター構造の配列を取得します。 この情報を使用して、定期的なタスクの統計を監視できます。

  • パラメータなし:

  • 例: http://127.0.0.1:7890/debug/timers

  • JSON NemAsyncTimerVisitorオブジェクトの返された配列の例:

{
       "data": [
       {
              "last-delay-time": 3000,
              "executions": 1024,
              "failures": 0,
              "successes": 1024,
              "last-operation-start-time": 9317695,
              "is-executing": 0,
              "name": "FORAGING",
              "average-operation-time": 0,
              "last-operation-time": 0
       },
       {
              "last-delay-time": 74181,
              "executions": 71,
              "failures": 0,
              "successes": 71,
              "last-operation-start-time": 9317654,
              "is-executing": 0,
              "name": "REFRESH",
              "average-operation-time": 6,
              "last-operation-time": 7
       }]
}
  • 考えられるエラー:なし

9.付録A:JSON構造の説明

9.1.AccountHistoricalDataViewModel

  • 説明: ノードは、アカウントの履歴データを取得する機能をサポートできます。 ノードがこの機能をサポートしている場合、AccountHistoricalDataViewModelオブジェクトの配列が返されます。

  • JSON構造体の例:

{
        "height": 8976,
        "address": "NALICELGU3IVY4DPJKHYLSSVYFFWYS5QPLYEZDJJ",
        "balance": 80670000000,
        "vestedBalance": 13949175142,
        "unvestedBalance": 66720824858,
        "importance": 0.00008166760846617221,
        "pageRank": 0.0006944567083595363
}
  • フィールドの説明:
フィールド 説明
height データが有効な高さ。
address アカウントのアドレス。
balance アカウントの残高。
vestedBalance 残高の権利確定部分。
unvestedBalance 残高の未払部分。
importance アカウントの重要性。
pageRank 重要度のページランク部分。

9.2.AccountImportanceViewModel

  • 説明: 各アカウントにはNEMネットワークの重要性が割り当てられます。 新しいブロックを生成するアカウントの能力は、その重要度に比例します。 重要度は0と1の間の数値です。

  • JSON構造体の例:

{
       "address": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS"
       "importance":
       {
           "isSet": 1,
           "score": 0.0011561555164258449,
           "ev": 0.004367936531009263,
           "height": 38413
       }
}
  • フィールドの説明:
フィールド 説明
address アカウントのアドレス。
importance アカウントの重要性を示す部分構造。
isSet "score"、 "ev"、および "height"の各フィールドが使用可能かどうかを示します。isSetの値は0または1です。isSetが0の場合、フィールドは使用できません。
score アカウントの重要性。 重要度の範囲は0〜1です。
ev 重要度のページランク部分。 ページランクは0と1の間の範囲です。
height 重要度計算が行われた高さ。

9.3.AccountInfo

  • 説明: アカウント構造は、アカウントの基本情報を記述します。

  • JSON構造体の例:

{
       "address": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS",
       "balance": 124446551689680,
       "vestedBalance": 1041345514976241,
       "importance": 0.010263666447108395,
       "publicKey": "a11a1a6c17a24252e674d151713cdf51991ad101751e4af02a20c61b59f1fe1a",
       "label": null,
       "harvestedBlocks": 645,
       "multisigInfo": {}
}
  • フィールドの説明:
フィールド 説明
address アカウントのアドレス。
balance マイクロNEMでの口座の残高。
vestedBalance マイクロNEMの口座残高の権利確定部分。
importance アカウントの重要性。
publicKey アカウントの公開鍵。
label アカウントのラベル(使用されていない、常にnull)。
harvestedBlocks アカウントがすでに収穫したブロック数。

9.4.AccountMetaData

  • 説明: アカウントメタデータには、アカウントの追加情報が記載されています。 詳細については、アカウント関連のリクエストをご覧ください。

  • JSON構造体の例:

{
       "status": "LOCKED",
       "remoteStatus": "ACTIVE",
        "cosignatoryOf" : [
            <AccountInfo>,
            <AccountInfo>
        ],
        "cosignatories" : [
            <AccountInfo>,
            <AccountInfo>
        ]
}
  • フィールドの説明:
フィールド 説明
status 照会されたアカウントのハーベスト状況。
ハーベスト状況は、次のいずれかの値になります。
"UNKNOWN":アカウントのハーベスト状況は不明です。
"LOCKED":アカウントはハーベストされていません。
"UNLOCKED":アカウントがハーベストされています。
remoteStatus 照会されたアカウントのリモートハーベストのステータス。
リモート収集ステータスは、次のいずれかの値になります。
"REMOTE":アカウントはリモートアカウントなので、remoteStatusは適用されません。
"ACTIVATING":アカウントはリモートハーベストを有効にしましたが、まだアクティブではありません。
"ACTIVE":アカウントはリモートハーベスティングを有効にしており、リモートハーベスティングはアクティブです。
"DEACTIVATING":アカウントはリモートハーベスティングを無効にしましたが、リモートハーベスティングはまだ有効です。
"INACTIVE":アカウントが非アクティブなリモートハーベスティングを行っているか、リモートハーベスティングが無効になっており、非アクティブ化が動作しています。
cosignatoryOf AccountInfo構造体のJSON配列。このアカウントは、配列内の各アカウントに対して共通です。
cosignatories AccountInfo構造体のJSON配列。この配列には、このアカウントのコーディネーションであるすべてのアカウントが格納されます。

9.5.AccountMetaDataPair

  • 説明: アカウントメタデータのペアには、アカウントの永続的な情報とその状態に関する追加情報が含まれています。

  • JSON構造体の例:

{
    "account":
        <AccountInfo>,
    "meta":
        <AccountMetaData>
}
  • フィールドの説明:
フィールド 説明
account アカウントオブジェクトを含みます。
\ AccountInfoで説明されているアカウントオブジェクト。
meta アカウントメタデータオブジェクトを格納します。
\ AccountMetaDataで説明されているアカウントメタデータオブジェクト。

9.6.AccountPrivateKeyTransactionsPage

  • 説明: アカウントの秘密鍵トランザクションページには、NISがデータベースから一連のトランザクションを取得するために必要なデータが含まれています。データには、トランザクションが取得されるアカウントの秘密鍵が含まれます。 NISがローカルで実行されている場合にのみ、この構造を使用する要求を使用します。

    フィールド "hash"と "id"はオプションです。

  • JSON構造体の例:

{
    "value": "68e4f79f886927de698df4f857de2aada41ccca6617e56bb0d61623b35b08cc0",
    "hash": "44e4968e5aa35fe182d4def5958e23cf941c4bf809364afb4431ebbf6a18c039",
    "id": "12345"
}
  • フィールドの説明:
フィールド 説明
value 16進文字列としての秘密鍵。
hash オプションのハッシュ値。
id オプションのトランザクションID。

9.7.ApplicationMetaData

  • 説明: アプリケーションメタデータオブジェクトは、ノード上で実行されているアプリケーションに関する追加情報を提供します。

  • JSON構造体の例:

{
   "currentTime": 9189086,
   "application": "NEM Infrastructure Server",
   "startTime": 9060202,
   "version": "0.4.30-BETA",
   "signer": "CN=NEM Community,OU=Development Team,O=NEM,L=Internet,ST=web,C=WD"
}
  • フィールドの説明:
フィールド 説明
currentTime 現在のネットワーク時間、すなわち、nemesisブロックの作成から経過した秒数。
application ノード上で実行されているアプリケーションの名前。
startTime アプリケーションが開始されたネットワーク時刻。
version アプリケーションのバージョン。
signer アプリケーションによって使用される証明書の署名者。

9.8.AuditCollection

  • 説明: 監査コレクションは、他のノードからの着信要求に関する情報を含む2つのアレイで構成されています。最初の配列には未処理(つまり未処理のリクエスト)に関する情報が格納され、2番目の配列には最新のリクエストに関する情報が格納されます。監査コレクションはデバッグのためのものです。

  • JSON構造体の例:

{
   "outstanding": [{
      "path": "/chain/score",
      "start-time": 9020618,
      "host": "86.124.91.183",
      "elapsed-time": 5,
      "id": 797725
   }],
   "most-recent": [{
      "path": "/push/transaction",
      "start-time": 9020621,
      "host": "hachi.nem.ninja",
      "elapsed-time": 2,
      id": 797750
   }]
}
  • フィールドの説明:
フィールド 説明
path 相対URLパス。
start-time nemesisブロックの作成から経過した秒数。
host 要求を開始したホスト。
elapsed-time 要求が受信されてから経過した時間(秒単位)。
id 要求の一意のID。

9.9.Block

  • 説明: ブロックは、トランザクション情報を含む構造体です。ブロックには最大120のトランザクションを含めることができます。ブロックは、アカウントによって生成され、署名され、情報がネットワークに広まる手段です。

  • JSON構造体の例(メインネットワーク):

{
    "timeStamp": 9022656,
    "signature": "256ebcfa4f92e2881963359c51095a390b9f4d1b3fee75ae19f96d5e6bcf055abbcaae3e55bcc17e6214924e4e6a9ebbe77357236b1a235e944950b851bda804",
    "prevBlockHash":
    {
        "data": "0a3d6bea020bb1a503364c37d57392342f368389bb23b05799c54d536d94749b"
    },
    "type": 1,
    "transactions": [
        Transaction1, Transaction2, …, Transaction11
    ],
    "version": 1744830465,
    "signer": "6c66ea288522990db7a0a63c9c20f532cdcb68dc3c9544fb20f7322c92ceadbb",
    "height": 39324
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
Signature ブロックの署名。署名は署名者によって生成され、ブロックデータがノードによって変更されていないことを検証するために使用できます。
prevBlockHash 最後のブロックのsha3-256ハッシュを16進数文字列として表します。
type ブロックタイプ。現在、2つのブロックタイプが使用されています。
-1:敵対ブロックのみがこのタイプです。
1:通常ブロックタイプ。
transactions トランザクション構造の配列。この構造の詳細については、付録A:Transaction objectsを参照してください。
version ブロックのバージョン。以下のバージョンがサポートされています。
0x68 << 24 + 1(1744830465は4バイト整数):メインネットワークのバージョン
0x60 << 24 + 1(1610612737は4バイト整数):ミジンネットワークバージョン
0x98 << 24 + 1(4バイト整数として-1744830463):テストネットワークのバージョン
signer ブロックの収穫者の公開鍵を16進数で表したものです。
height ブロックの高さ。各ブロックには一意の高さがあります。後続ブロックの高さは1だけ異なります。

9.10.BlockChainScore

  • 説明: ブロックチェインスコアは、ブロックチェインがどれくらい良いかを示す指標です。スコアが高いほど、ブロックチェーンが優れています。

  • JSON構造体の例:

{
    "score": "17a3077c927d9a7e"
}
  • フィールドの説明:
フィールド 説明
score スコアはゼロ以上の整数です。それは16進形式で提出されます。

9.11.BlockHeight

  • 説明: ブロックの高さは、ブロックチェーン内のブロックの位置を表します。チェーンの最初のブロックの高さは1です。各後続ブロックの高さは、前のブロックよりも1つ高い。

  • JSON構造体の例:

{
    "height":2649
}
  • フィールドの説明:
フィールド 説明
height 高さは0より大きい整数です。

9.12.BootNodeRequest

  • 説明: BootNodeRequest JSNONオブジェクトは、ローカルノードを起動するための関連データをNISに転送するために使用されます。ブートデータを使用すると、NISはローカルノードオブジェクトを作成してネットワークに接続できます。

  • JSON構造体の例:

{
    "metaData":
    {
        "application":"NIS"
    },
    "endpoint":
    {
        "protocol":"http",
        "port":7890,
        "host":"localhost"
    },
    "identity":
    {
        "private-key":"a6cbd01d04edecfaef51df9486c111abb6299c764a00206eb1d01f4587491b3f",
        "name":"Alice"
    }
}
  • フィールドの説明:
フィールド 説明
metaData metaDataサブ構造の先頭を示します。
application アプリケーション名。
endpoint エンドポイントの下部構造の始まりを示します。
protocol 使用するプロトコル(現在のところHTTPのみサポート)。
port 使用するポート。
host 使用するIPアドレス。
host 使用するIPアドレス。
identity アイデンティティの部分構造を示します。
private-key アイデンティティの作成に使用される秘密鍵。
name ノードの名前です(何でもかまいません)。

9.13.CommunicationTimeStamps

  • 説明: 通信タイムスタンプには、リモートNISのネットワーク時刻に関する情報が含まれています。 NEMは時間同期メカニズムを使用してネットワーク全体の時間を同期させます。各ノードは、コンピュータクロックの時間に他のノードのコンピュータクロックからの偏差を補償するオフセットを加えたネットワーク時間を維持する。

  • JSON構造体の例:

{
    "sendTimeStamp":9145477789,
    "receiveTimeStamp":9145477789
}
  • フィールドの説明:
フィールド 説明
sendTimeStamp 応答が送信された時点のネットワーク時刻。
receiveTimeStamp 要求を受信した瞬間のネットワーク時刻。

9.14.ExplorerBlockViewModel

  • 説明: 以下の構造は、便宜上、NEMブロックチェーンエクスプローラで使用されています。データは類似していますが、ブロックと同じではありません。

  • JSON構造体の例:

{
    "data":[
        {
            "txes":[
                <ExplorerTransferViewModel>,
                &vellip;
                <ExplorerTransferViewModel>
            ],
            "block": <Block> ,
            "hash":"a6f62c62eedf4fafe6991e5cf31eae440963577c919f4eae86b4db8f8e572dce",
            "difficulty": 23456345897
        },
        …
    ]
}
  • フィールドの説明:
フィールド 説明
txes ブロックのトランザクションを含む配列。
\ ExplorerTransferViewModelで説明されているExplorerBlockViewModelオブジェクト
block JSONブロックオブジェクトを含むエントリ。
\ 付録A:Blockで説明されているBlockオブジェクト
hash ブロックのハッシュを16進文字列として表します。
difficulty ブ ロック難易度。

9.15.ExplorerTransferViewModel

  • 説明: 以下の構造は、便宜上、NEMブロックチェーンエクスプローラで使用されています。データは類似していますが、トランザクション構造のデータと同一ではありません。

  • JSON構造体の例:

{
    "tx": <Transaction>,
    "hash": "5cba4614e52af19417fb53c4bdf442a57b9f558aee17ece530a5220da55cf47d",
    "innerHash": "ae3b107f1216e1ccf12b6f3c3c555bc1d95311747338ce66f539ea2c18c0aa57"
}
  • フィールドの説明:
フィールド 説明
tx JSON Transactionオブジェクトを含むエントリ。
\ Transactionオブジェクト。トランザクションのタイプによって、構造が異なるように見えます。さまざまなトランザクションタイプについては、付録A:Transaction objectsを参照してください。
hash トランザクションのハッシュ。
innerHash 内部トランザクションのハッシュ。このエントリは、マルチジグ取引でのみ利用可能です

9.16.ExtendedNodeExperiencePair

  • 説明: 他のノードとデータを交換する場合、通信の結果は、成功、中立、失敗の3つの異なる結果に分けられます。成功と失敗の場合、ノードの品質を判断できるように結果が保存されます。これは、特定のノードがパートナーとして選択される確率に影響します。

  • JSON構造体の例:

{
    "node":
    {
        <Node>
    },
    "syncs": 822,
    "experience":
    {
        "s": 357,
        "f": 0
    }
}
  • フィールドの説明:
フィールド 説明
node Nodeサブ構造の始まりを示します。
\ Nodeで説明されているリモートNodeオブジェクト。
syncs ノードがリモートノードと持っていた同期試行の回数。
experience NodeExperienceサブ構造の始まりを示します。
s リモートノードとの正常な通信の数。
f リモートノードとの通信に失敗した回数。

9.17.HarvestInfo

  • 説明: HarvestInfoオブジェクトには、アカウントが収穫したブロックに関する情報が含まれています。

  • JSON構造体の例:

{
   "timeStamp": 8963798,
   "id": 254378,
   "difficulty": 46534789865332,
   "totalFee": 2041299054,
   "height": 38453
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
id 収穫されたブロックのデータベースID。
difficulty ブロック難易度。最初の難易度は100000000000000に設定されました。ブロックの難易度は、初期難易度の10分の1から10倍です。
totalFee ブロックを収穫することによって収集された合計料金。
height 収穫されたブロックの高さ。

9.18.KeyPairViewModel

  • 説明: KeyPairViewModelオブジェクトには、新しいアカウントに関する情報が含まれます。情報には、秘密鍵、公開鍵、およびアドレスが含まれます

  • JSON構造体の例:

{
    "privateKey": "0962c6505d02123c40e858ff8ef21e2b7b5466be12c4770e3bf557aae828390f",
    "publicKey": "c2e19751291d01140e62ece9ee3923120766c6302e1099b04014fe1009bc89d3",
    "address": "NCKMNCU3STBWBR7E3XD2LR7WSIXF5IVJIDBHBZQT"
}
  • フィールドの説明:
フィールド 説明
privateKey 16進文字列としてのアカウントの秘密鍵。
publicKey アカウントの公開鍵を16進文字列として表します。
address アカウントのアドレス。

9.19.Transaction objects

9.19.1.ImportanceTransferTransaction

  • 説明: NISは、あるアカウントの重要性をハーベスティングのために別のアカウントに移すことができます。重要度を受け取ったアカウントは、リモートアカウントと呼ばれます。重要性移転取引は、NEMの安全な収穫機能の一部です。重要なトランザクションがブロックに含まれると、アクティブになるには6時間を要します。

  • JSON構造体の例(メインネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 150000,
    "mode": 1,
    "remoteAccount": "cc6c9485d15b992501e57fe3799487e99de272f79c5442de94eeb998b45e0144",
    "type": 2049,
    "deadline": 9154726,
    "version": 1744830465,
    "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
}
  • フィールドの説明:

|フィールド|説明| |:-:|:--| | timeStamp | 敵対ブロックの作成から経過した秒数。 | | signature | トランザクションシグニチャ(マルチシグニチャトランザクションの一部である場合は失われます)。 | | fee | 取引の手数料。料金が高ければ高いほど、取引の優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。 | | mode | モード。可能な値は次のとおりです。
1:リモートハーベスティングを有効にします。 2:リモートハーベスティングを無効にします。
remoteAccount受信アカウントの公開鍵を16進文字列で指定します。 | | type | トランザクションタイプ。 | | deadline | 取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。| | version | 構造体のバージョン。 | | signer | トランザクションを作成したアカウントの公開鍵。 |

9.19.2.MosaicDefinitionCreationTransaction

  • 説明: モザイクを作成または転送する前に、対応するモザイクの定義を作成してネットワークに公開する必要があります。これは、モザイク定義作成トランザクションを介して行われます。

  • JSONの構造例(テストネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 150000,
    "type": 16385,
    "deadline": 9154726,
    "version": -1744830463,
    "signer": "cbda3edb771d42801a5c6ce0725f9374efade19a8933d6ac22ccfa50c777d0f9",
    "creationFee": 10000000,
    "creationFeeSink": "53e140b5947f104cabc2d6fe8baedbc30ef9a0609c717d9613de593ec2a266d3",
    "mosaicDefinition": {
        "creator": "cbda3edb771d42801a5c6ce0725f9374efade19a8933d6ac22ccfa50c777d0f9",
        "description": "precious vouchers",
        "id": {
            "namespaceId": "alice.vouchers",
            "name": "Alice's gift vouchers"
        },
        "properties": [{
                "name": "divisibility",
                "value": "3"
            },{
                "name": "initialSupply",
                "value": "1000"
            },{
                "name": "supplyMutable",
                "value": "false"
            },{
                "name": "transferable",
                "value": "true"
            }
        ],
        "levy": {
            "type": 1,
            "recipient": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
            "mosaicId": {
                "namespaceId": "nem",
                "name": "xem"
            },
            "fee": 1000
        }
    }
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
signature トランザクションシグニチャ(マルチシグニチャトランザクションの一部である場合は失われます)。
fee 取引の手数料。料金が高ければ高いほど、取引の優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。
type トランザクションタイプ。
deadline 取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。
version 構造体のバージョン。
signer トランザクションを作成したアカウントの公開鍵。
creationFee モザイク作成の手数料。
creationFeeSink 作成料が払われるアカウントの公開鍵。
mosaicDefinition 実際のモザイクの定義。詳細については、付録A:MosaicDefinitionを参照してください。

9.19.3.MosaicSupplyChangeTransaction

  • 説明: モザイク定義のプロパティが 'supplyMutable'がtrueに設定されている場合、モザイク定義の作成者は、供給を変更すること、すなわち供給を増減することができる。

  • JSONの構造例(テストネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 150000,
    "type": 16386,
    "deadline": 9154726,
    "version": -1744830463,
    "signer": "d99e88c90da71a4b0d848454e59e296c9ef7a8f018f3eaa3a198dc460b6621a4",
    "supplyType": 1,
    "delta": 123,
    "mosaicId": {
        "namespaceId": "alice.vouchers",
        "name": "gift vouchers"
    }
}
  • フィールドの説明:

|フィールド|説明| |:-:|:--| | timeStamp | 敵対ブロックの作成から経過した秒数。| | signature | トランザクションシグニチャ(マルチシグニチャトランザクションの一部である場合は失われます)。| | fee | 取引の手数料。料金が高ければ高いほど、取引の優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。| | type | トランザクションタイプ。| 締め切り取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。| | version | 構造体のバージョン。| | signer | トランザクションを作成したアカウントの公開鍵。| | supplyType | 供給タイプ。サポートされる供給タイプは次のとおりです。
1:供給の増加。
2:供給の減少。| | delta | モザイクの単位で供給量が変化します。| | mosaicId | モザイクIDです。詳細については、付録A:MosaicIdしてください。|

9.19.4.MultisigAggregateModificationTransaction

  • 説明: Multisig集約変更トランザクションは、NEMのmultisigアカウントシステムの一部です。 multisig集約変更トランザクションは、トランザクション内でmultisig cosignatory変更の配列とsingle multisig最小cosignatories変更を保持します。 multisig集約変更トランザクションは、multisigトランザクションによってラップすることができます。 minCosignatoriesフィールドを使用する集約変更トランザクションでは、メインネットでは0x68000002(10進数1744830466)、testnetでは0x98000002(10進数-1744830462)、mijinネットワークでは0x60000002(10101612738)が必要です。

  • JSON構造体の例(メインネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 500000,
    "type": 257,
    "deadline": 9154726,
    "version": 1744830466,
    "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a",
    "modifications": [
        <MultisigCosignatoryModification>,
        <MultisigCosignatoryModification>
    ],
    "minCosignatories" : {
        "relativeChange" : 2
    }
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
signature トランザクションシグニチャ(マルチシグニチャトランザクションの一部である場合は失われます)。
fee 取引の手数料。料金が高ければ高いほど、取引の優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。
type トランザクションタイプ。
締め切り取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。
version 構造体のバージョン。
署名者トランザクションを作成したアカウントの公開鍵。
modifications 多変量のJSON配列です。
minCosignatories 最小コサネーターの変更を保持するJSONオブジェクト。
relativeChange 最小共標の相対的な変化を示す値。

9.19.5.MultisigCosignatoryModification

  • 説明: Multisig cosignatoryの変更は、NEMのmultisigアカウントシステムの一部です。 multisig cosignatoryの変更では、cosignatoryはmultisigアカウントに追加または削除されます。 Multisig共同編集は、multisig集約変更トランザクションの一部です(詳細はこちらを参照してください)。

  • JSON構造体の例:

{
    "modificationType":1,
    "cosignatoryAccount": "213150649f51d6e9113316cbec5bf752ef7968c1e823a28f19821e91daf848be"
}
  • フィールドの説明:
フィールド 説明
modificationType 変更のタイプ。可能な値は次のとおりです。
1:新しい共通記号を追加する。
2:既存の協会を削除する。
cosignatoryAccount 16進文字列としての共用勘定の公開鍵

9.19.6.MultisigSignatureTransaction

  • 説明: Multisig署名トランザクションは、NEMのmultisigアカウントシステムの一部です。 Multisig署名トランザクションは、対応するmultisigトランザクションに含まれており、multisigアカウントのコーディネータがそのアカウントのmultisigトランザクションに署名する方法です。

  • JSONの構造例(テストネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 150000,
    "type": 257,
    "deadline": 9154726,
    "version": -1744830463,
    "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a",
    "otherHash": {
        "data": "44e4968e5aa35fe182d4def5958e23cf941c4bf809364afb4431ebbf6a18c039"
    },
    "otherAccount": "TDGIMREMR5NSRFUOMPI5OOHLDATCABNPC5ID2SVA"
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
signature トランザクション署名。
fee 取引の手数料。
type トランザクションタイプ。
deadline 取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。
version 構造体のバージョン。
signer トランザクションを作成したアカウントの公開鍵。
otherHash 対応するmultisigトランザクションの内部トランザクションのハッシュ。
otherAccount 対応するmultisigアカウントのアドレス。

9.19.7.MultisigTransaction

  • 説明: Multisig取引は、multisig口座から別の口座への取引を行う唯一の方法です。 multisigトランザクションは、内部で別のトランザクションを実行します(しばしば「内部」トランザクションと呼ばれます)。内部トランザクションは、転送、重要度転送、または集約変更トランザクションです。また、multisigトランザクションは、内部にmultisigアカウントのcosignatoriesからのmultisig署名トランザクションを持っています。

  • JSONの構造例(テストネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 150000,
    "type": 257,
    "deadline": 9154726,
    "version": -1744830463,
    "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a",
    "otherTrans": <inner transaction>,
    "signatures":[
        <MultisigSignatureTransaction>,
        <MultisigSignatureTransaction>
    ]
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
signature トランザクション署名。
fee 取引の手数料。
type トランザクションタイプ。
deadline 取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。
version 構造体のバージョン。
signer トランザクションを作成したアカウントの公開鍵。
otherTrans 内部トランザクションです。内部トランザクションは、転送トランザクション、重要度転送トランザクション、またはマルチセグメント集約変更トランザクションとすることができる。内部トランザクションに有効な署名がありません。
signatures MulsigSignatureTransactionオブジェクトのJSON配列。

9.19.8.ProvisionNamespaceTransaction

  • 説明: アカウントは1年間のネームスペースを借りて、1年後に契約を更新することができます。これはProvisionNamespaceTransactionを介して行われます。

  • JSONの構造例(テストネットワーク):

{
    "timeStamp": 9111526,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 150000,
    "type": 8193,
    "deadline": 9154726,
    "version": -1744830463,
    "signer": "d99e88c90da71a4b0d848454e59e296c9ef7a8f018f3eaa3a198dc460b6621a4",
    "rentalFeeSink": "3e82e1c1e4a75adaa3cba8c101c3cd31d9817a2eb966eb3b511fb2ed45b8e262",
    "rentalFee": 10000000,
    "newPart": "voucher",
    "parent": "alice"
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
signature トランザクションシグニチャ(マルチシグニチャトランザクションの一部である場合は失われます)。
fee 取引の手数料。料金が高ければ高いほど、取引の優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。
type トランザクションタイプ。
deadline 取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。
version 構造体のバージョン。
signer トランザクションを作成したアカウントの公開鍵。
rentFeeSink 賃貸料が払われる口座の公開鍵。
rentFee ネームスペースをレンタルするための料金。
newPart 親に連結された新しい部分。セパレータとして。
parent 親のネームスペースです。トランザクションがルートネームスペースをレンタルする場合、この値はnullになります。

9.19.9.TransferTransaction

  • 説明: 転送トランザクションには、XEMまたはモザイクの別のアカウントへの転送に関するデータが含まれています。バージョン1転送トランザクションはXEMとメッセージのみを転送することができ、バージョン2転送トランザクションはさらにモザイクのセットを転送することができます。

  • JSONの構造例(v1転送トランザクション、テストネットワーク):

{
    "timeStamp": 9111526,
    "amount": 1000000000,
    "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
    "fee": 50000,
    "recipient": "TDGIMREMR5NSRFUOMPI5OOHLDATCABNPC5ID2SVA",
    "type": 257,
    "deadline": 9154726,
    "message":
    {
    "payload": "74657374207472616e73616374696f6e",
    "type": 1
    },
    "version": -1744830463,
    "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
}
  • JSONの構造例(v2転送トランザクション、テストネットワーク):
{
    "timeStamp": 9111526,
    "amount": 123000000,
    "signature": "fad7ea2b5df5f7846f45fd9983a75ad8d333af3660f4f0d355864420f4482605d675e89d97177385338b226097342b4222add52c5397423f9eaf6b01fe3ef70c",
    "fee": 100000,
    "recipient": "TBEH27FNRS43FNH3PXE4XN3H7HXA37H77APSZW46",
    "type": 257,
    "deadline": 9154726,
    "message":
    {
        "payload": "74657374207472616e73616374696f6e",
        "type": 1
    },
    "version": -1744830462,
    "signer": "cb4ef3709d25ccd0c022b2d53e4ce31478ebc4bf177b1b54482afb8e55692521",
    "mosaics":[{
        "mosaicId":{
            "namespaceId": "id0",
            "name": "name0"
        },
        "quantity": 10
    },{
        "mosaicId":{
            "namespaceId": "id1",
            "name": "name1"
        },
        "quantity": 11
    }]
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
amount 送信者から受信者に転送されるマイクロNEMの量。
signature トランザクション署名。
fee 取引の手数料。料金が高ければ高いほど、取引の優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。
recipient 受信者のアドレス。
type トランザクションタイプ。
deadline 取引の期限。締め切りは、敵対ブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、そのトランザクションは削除されます。
message オプションで、トランザクションにメッセージを含めることができます。この場合、トランザクションにはメッセージの下部構造が含まれます。そうでない場合、フィールドはnullです。
payload トランザクションにメッセージが含まれている場合のオプションフィールド。ペイロードは実際の(おそらく暗号化された)メッセージデータです。
type トランザクションにメッセージが含まれている場合のオプションフィールド。フィールドは、メッセージタイプ情報を保持します。考えられるメッセージの種類は次のとおりです。
1:メッセージは暗号化されていません。
2:メッセージは暗号化されています。
version 構造体のバージョン。
signer トランザクションを作成したアカウントの公開鍵。
mosaics モザイクオブジェクトの配列。

9.20.Mosaic

  • 説明: モザイクは、モザイク定義のインスタンスを表します。モザイクは、転送トランザクションを使用して転送することができます。

  • JSON構造体の例:

{
    "mosaicId": {
        "namespaceId": "alice.drinks",
        "name": "orange juice"
    },
    "quantity": 123000
}
  • フィールドの説明:
フィールド 説明
mosaicId モザイクIDです。 付録A:MosaicIdしてください
quantity モザイク量。 量は常にモザイクの最小単位で与えられる。すなわち、それが3の分割可能性を有する場合、その量はミリ秒単位で与えられる。

9.21.MosaicDefinition

  • 説明: モザイク定義は、資産クラスを記述します。 一部のフィールドは必須フィールドで、その他はオプションです。 モザイク定義のプロパティは、常にデフォルト値を持ち、デフォルト値と異なる場合にのみ提供する必要があります。

  • JSON構造体の例:

{
    "creator": "10cfe522fe23c015b8ab24ef6a0c32c5de78eb55b2152ed07b6a092121187100",
    "id": {
        "namespaceId": "alice.drinks",
        "name": "orange juice"
    },
    "description": "A healthy drink with lots of vitamins",
    "properties": [{
        "name": "divisibility",
        "value": "3"
    },{
        "name": "initialSupply",
        "value": "1000"
    },{
        "name": "supplyMutable",
        "value": "false"
    },{
        "name": "transferable",
        "value": "true"
    }],
    "levy": {
        "type": 1,
        "recipient": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
        "mosaicId": {
            "namespaceId": "alice.drinks",
            "name": "orange juice"
        },
        "fee": 1000
    }
}
  • フィールドの説明:
フィールド 説明
creator モザイク定義作成者の公開鍵。
id モザイクのIDです。 付録A:MosaicIdしてください。
description モザイクの説明。 説明の長さは512文字までで、空であってはなりません。| 詳細については、付録A:MosaicPropertiesを参照してください。
properties モザイクプロパティ。 プロパティは、すべてのプロパティのデフォルト値が適用される空の配列です。
levy モザイクのオプション課金。 作成者は、モザイク転送ごとに追加料金を請求することができます。 詳細は、付録A:MosaicLevyを参照してください。

9.22.MosaicDefinitionMetaDataPair

  • 説明: モザイク定義は、データベースIDとモザイク定義オブジェクトで構成されます。 idは、ページングをサポートする要求に必要です。

  • JSON構造体の例:

{
        "meta" {
            "id": 3541
        }
        "mosaic": {
            "creator": "10cfe522fe23c015b8ab24ef6a0c32c5de78eb55b2152ed07b6a092121187100",
            "id": {
                "namespaceId": "alice.drinks",
                "name": "orange juice"
            },
            "description": "A healthy drink with lots of vitamins",
            "properties": [
            ]
        }
}
  • フィールドの説明:
フィールド 説明
meta メタデータオブジェクトのラベル。
id モザイク定義オブジェクトのIDです。
mosaic モザイク定義オブジェクトのラベル。オブジェクトの詳細な説明については、「付録A:MosaicDefinition」を参照してください。
creator モザイク定義作成者の公開鍵。
id モザイクのIDです。 付録A:MosaicIdしてください。
description モザイクの説明。説明の長さは512文字までで、空であってはなりません。
properties モザイクプロパティ。

9.23.MosaicProperties

  • 説明: 各モザイクの定義には一連のプロパティがあります。各プロパティーには、指定されていない場合に適用されるデフォルト値があります。将来のリリースでは、利用可能なプロパティのセットに追加のプロパティが追加される可能性があります。利用可能なプロパティとそのデフォルト値は次のとおりです。

    • divisibility:モザイクを分割できる最小のサブユニットを定義します。分割可能性が0の場合は、ユニット全体のみが転送可能であり、分割可能性が3の場合は、モザイクをミリ単位で転送できることを意味します。
    • initialSupply:最初に作成されるモザイクの単位数を定義します。これらのモザイクは、モザイクの作成者に貸し出されます。最初の供給には9,000,000,000ユニットの上限があります。
    • supplyMutable:後でMosaicSupplyChangeTransactionを使用して、供給元を作成者が変更できるかどうかを決定します。可能な値は "true"と "false"であり、前者は電源を変更できることを意味し、後者は電源が常に固定されていることを意味します。
    • transferable:モザイクを作成者以外のユーザーに転送できるかどうかを判断します。特定のシナリオでは、ユーザーがモザイクを交換できるようにすることは望ましくありません(たとえば、モザイクは、会社が他のユーザーに移転したくないボーナスポイントを表す場合など)。可能な値は "true"と "false"です。前者はユーザー間で任意に転送でき、後者は作成者との間でのみモザイクを転送できることを意味します。
  • JSON構造体の例:

[{
        "name": "divisibility",
        "value": "3"
        },{
        "name": "initialSupply",
        "value": "1000"
        },{
        "name": "supplyMutable",
        "value": "false"
        },{
        "name": "transferable",
        "value": "true"
}]
  • フィールドの説明:
フィールド 説明
name モザイクプロパティの名前。
value モザイク・プロパティーの名前。

9.24.MosaicLevy

  • 説明: モザイク定義では、これらのモザイクを転送するための課金をオプションで指定できます。 これは、移転のために税金を徴収する必要がある法人によって必要となる可能性があります。

  • JSON構造体の例:

{
    "type": 1,
    "recipient": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
    "mosaicId":  {
        "namespaceId": "nem",
        "name": "xem"
    },
    "fee": 1000
}
  • フィールドの説明:
フィールド 説明
type課金タイプ。以下のタイプがサポートされています:
1:課税は絶対料金です。フィールド 'fee'には、指定されたモザイクのサブユニットの数が受信者に転送されることが示されます。
2:課税額は譲渡額から計算されます。項目「手数料」には、転送された数量のパーセンタイル数が受信者に転送される数が記載されています。
recipient レビの受領者。
mosaicId 課税されたモザイク。
fee 手数料。解釈は課税のタイプに依存します。

9.25.MosaicId

  • 説明:  モザイクIDは、基本的なモザイク定義を一意に識別します。

  • JSON構造体の例:

{
    "namespaceId": "alice.drinks",
    "name": "orange juice"
}
  • フィールドの説明:
フィールド 説明
namespaceId 対応するネームスペースのIDです。 詳細については、Namespace構造体の説明を参照してください。
name モザイク定義の名前。

9.26.付録A:Namespace

  • 説明: ネームスペースは、ドメインのNEMバージョンです。料金を支払うことで、年間のネームスペースを借りることができます。ネームスペースの部分の命名には一定の制限があります。対応するネームスペースの章を参照してください。

  • JSON構造体の例:

{
    "fqn": "makoto.metal.coins",
    "owner": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
    "height": 13465
}
  • フィールドの説明:
フィールド 説明
fqn ネームスペースの完全修飾名。ネームスペースIDとも呼ばれます。
owner ネームスペースの所有者。
height 所有権が始まる高さ。

9.27.NamespaceMetaDataPair

  • 説明: ネームスペースは、ネームスペースオブジェクトとデータベースIDで構成されます。 idはページングをサポートする要求に必要です。

  • JSON構造体の例:

{
    "meta":{
        "id":26264,
    },
    "namespace":{
        "fqn": "makoto.metal.coins",
        "owner": "TD3RXTHBLK6J3UD2BH2PXSOFLPWZOTR34WCG4HXH",
        "height": 13465
    }
}
  • フィールドの説明:
フィールド 説明
meta メタデータオブジェクトのラベル。
id ネームスペースオブジェクトのデータベースID。
namespace ネームスペースオブジェクトのラベル。
fqn ネームスペースの完全修飾名。ネームスペースIDとも呼ばれます。
owner ネームスペースの所有者。
height 所有権が始まる高さ。

9.28.NemAnnounceResult

  • 説明: NemAnnounceResultは、追加フィールド 'transactionHash'とmultisigトランザクション 'innerTransactionHash'の場合に、NemRequestResultを拡張します。

  • JSON構造体の例:

{
    "type": 4,
    "code": 6,
    "message": "status",
    "transactionHash": {
    "data":"c1786437336da077cd572a27710c40c378610e8d33880bcb7bdb0a42e3d35586"
    },
    "innerTransactionHash": {
    "data": "44e4968e5aa35fe182d4def5958e23cf941c4bf809364afb4431ebbf6a18c039"
    }
}
  • フィールドの説明:
フィールド 説明
type 付録A:NemRequestResultの説明を参照してください。
code 付録A:NemRequestResultの説明を参照してください。
message 付録A:NemRequestResultの説明を参照してください。
transactionHash トランザクションのJSONハッシュオブジェクト。
innerTransactionHash 内部トランザクションのJSONハッシュオブジェクト。トランザクションがマルチトランザクションでない場合はnullです。

9.29.NemAsyncTimerVisitor

  • 説明: NISはタイマーを使用して定期的なタスクをスケジュールします。これらのタスクは監視され、その結果が記憶されます。 NemAsyncTimeVisitor構造体は情報を保持します。

  • JSON構造体の例:

{
    "last-delay-time": 3000,
    "executions": 1024,
    "failures": 0,
    "successes": 1024,
    "last-operation-start-time": 9317695,
    "is-executing": 0,
    "name": "FORAGING",
    "average-operation-time": 0,
    "last-operation-time": 0
}
  • フィールドの説明:
フィールド 説明
last-delay-time タイマーの最後の実行からのミリ秒数。
executions タスクが実行された回数。
failures タスクが失敗した回数。
successes タスクが成功した回数。
last-operation-start-time タスクが前回開始された時刻。
タスクが実行されている場合はtrueを実行し、実行していない場合はfalseを返します。
nameタスクの名前。
average-operation-time タスクが平均して必要とした秒数。
last-operation-time タスクが最後に必要な秒数。

9.30.NemRequestResult

新しいトランザクションをアナウンスするなどの要求によっては、要求の結果に関する詳細情報が返されます。そのような場合、要求の結果はNemRequestResultという特別なJSONオブジェクトに返されます。この構造体は、通常、検証を実行したり、ステータスを返す要求に使用されます。

  • JSON構造体の例:
{
   "type": 4,
   "code": 6,
   "message": "status"
}
  • フィールドの説明:
フィールド 説明
type タイプは、応答された要求に依存しています。コードフィールドの解釈はタイプによって異なります。
現在、次のタイプがサポートされています:
1:結果は検証結果です。
2:結果はハートビートの結果です。
4:結果はステータスを示します。
code コードコードの意味は型によって異なります。タイプ1(検証結果)では、0と1だけが失敗しなかったことを意味します。検証結果の完全な一覧については、付録B:NISエラーを参照してください。

次のコードが最も頻繁に発生します。
0:中立の結果。典型的な例は、ノードが着信トランザクションを検証し、それがトランザクションについて既に知っていることを認識することである。この場合、それは成功(ノードが新しいトランザクションを有することを意味する)でなく、失敗(トランザクション自体が有効であるため)でもない。
1:成功の結果。典型的な例は、ノードが新しい有効なトランザクションを検証することです。
2:不明なエラー。検証が不明な理由で失敗しました。
3:検証されたエンティティは既に期限を過ぎています。
4:エンティティは、あまりにも遠すぎる将来の期限を使用した。
5:操作を実行するバランスが不十分なアカウントがありました。
6:トランザクションで提供されたメッセージが大きすぎます。
7:検証されたエンティティのハッシュがすでにデータベースにあります。
8:エンティティの署名を検証できませんでした。
9:エンティティは過去にあまりにも遠すぎるタイムスタンプを使用しました。
10:エンティティは、将来受け入れられないタイムスタンプを使用しました。
11:エンティティは使用できません。
12:リモートブロックチェーンのスコアは劣っています(ただし、優れたスコアが約束されています)。
13:リモートブロックチェーンが検証に失敗しました。
14:重複の重要性が検出されました。
15:提供されたブロックにトランザクションが多すぎます。
16:ブロックには、ハーベスタによって署名されたトランザクションが含まれています。
17:以前の重要度トランザクションが新しいトランザクションと競合する。
18:重要度転送のアクティブ化が、前のアクティブ化中に試行されました。
19:重要度転送の非アクティブ化が試行されましたが、アクティブではありません。

タイプ2の場合、次のコードがサポートされています。
1:正常な心拍が検出されました。

タイプ3では、次のコードがサポートされています。
0:不明なステータス。
1:NISが停止しています。
2:NISが開始されています。
3:NISが実行されています。
4:NISはローカルノードを起動しています(NISが実行中であることを意味します)。
5:ローカルノードがブートされている(NISが実行中であることを意味します)。
6:ローカルノードが同期している(NISが実行中で、ローカルノードが起動していることを意味します)。
7:使用可能なリモートノードがありません(NISが実行され、ローカルノードが起動されていることを意味します)。
8:NISは現在ブロックチェーンをロードしています。

9.31.NisNodeInfo

  • 説明: NisNodeInfoオブジェクトは、ノードに関する詳細情報を提供します。

  • JSON構造体の例:

{
    "node": {
        <Node>
    },
    "nisInfo": {
        <ApplicationMetaData>
    }
}
  • フィールドの説明:

|フィールド|説明| |:-:|:--| nodeノードの下部構造の始まりを示します。 Nodeで説明されているNodeオブジェクト。 nisInfoアプリケーションメタデータの下部構造の始まりを示します。 ApplicationMetaDataで説明されているApplicationMetaDataオブジェクト。

9.32.Node

  • 説明: ノードは、データの送受信のようにネットワーク内で通信を実行するエンティティです。ノードは、ノードがネットワークに自身を識別させることができるアカウントに結び付けられた識別情報を有する。通信は、ノードのエンドポイントを介して行われます。さらに、ノードはメタデータ情報を提供する。

  • JSON構造体の例:

{
    "metaData":
    {
        "features": 1,
        "networkId": -104,
        "application": "NIS",
        "version": "0.4.30-BETA",
        "platform": "Oracle Corporation (1.8.0_05) on Windows 8.1"
    },
        "endpoint":
    {
        "protocol": "http",
        "port": 7890,
        "host": "85.25.36.97"
    },
    "identity":
    {
        "name": "Hi, I am Alice2",
        "public-key": "3302e7703ee9f364c25bbfebb9c12ac91fa9dcd69e09a5d4f3830d71505a2350"
    }
}
  • フィールドの説明:
フィールド 説明
metaData メタデータの部分構造の先頭を示します。
features ノードのフィーチャーの数。
networkId ネットワークID。次のネットワークIDがサポートされています。
・104(16進数0x68):メインネットワークID。
・96(16進数0x60):ミジンネットワークID。
・152(16進0x98):テストネットワークID。
application ノードを実行しているアプリケーションの名前。
version アプリケーションのバージョン。
platform 基盤となるプラットフォーム(OS、javaバージョン)。
endpoint エンドポイントの下部構造の始まりを示します。
protocol 通信に使用されるプロトコル(HTTPまたはHTTPS)。
port 通信に使用するポート。
host エンドポイントのIPアドレス。
identity アイデンティティ部分構造の始まりを示します。
name ノードの名前。
public-key ノードを識別するために使用される公開鍵。

9.33.NodeCollection

  • 説明: NodeCollectionオブジェクトは、状態の異なるノードの配列を保持します。次のステータスがサポートされています。

  • フィールドの説明:

フィールド 説明
inactive ノードへの接続を確立できません。
active接 続が確立され、リモートノードがタイムリーに応答します。
busy 接続は確立できますが、ノードはタイムアウト制限内で情報を提供できません。
failure 接続を確立しようとしたときに致命的なエラーが発生したか、ノードが正しく認証されなかった。
data ノード収集を示す一般的な状態は、ノードの状態について何も言わずにノードをリストするだけです。
  • JSON構造体の例:
{
   "inactive": [
      <Node>,
      <Node>
   ],
   "active": [
      <Node>,
      <Node>
   ],
   "busy": [
      <Node>,
      <Node>
   ],
   "failure": [
      <Node>,
      <Node>
   ],
}
  • フィールドの説明:
フィールド 説明
inactive 非アクティブなノードの配列の先頭を示します。
active アクティブなノードの配列の先頭を示します。
busy ビジー・ノードの配列の始まりを示します。
failure 失敗したノードの配列の先頭を示します。
\ Nodeで説明されているNodeオブジェクト。

9.34.PrivateKey

  • 説明: 秘密鍵はアカウントの鍵です。 アカウントへの秘密鍵を持つ人は誰でも、アカウント関連のアクションを開始できます。 したがって秘密鍵は、すべてのコストをかけて秘密にしておく必要があります。

  • JSON構造体の例:

{
    "value": "68e4f79f886927de698df4f857de2aada41ccca6617e56bb0d61623b35b08cc0",
}
  • フィールドの説明:
フィールド 説明
value 秘密鍵の256ビット値を16進文字列として表します。

9.35.RequestAnnounce

  • 説明: RequestAnnounceオブジェクトは、トランザクションデータと署名をNISに転送してトランザクションを開始し、ブロードキャストするために使用されます。

  • JSON構造体の例:

{
    "data": "010100000100000000000000200000002b76078fa709bbe675
             2222b215abc7ec0152ffe831fb4f9aed3e7749a425900a0009
             3d0000000000000000002800000054444e46555946584f5353
             334e4e4c4f35465a5348535a49354c33374b4e514945485055
             4d584c54c0d45407000000000b00000001000000030000000c
             3215",
    "signature": "db2473513c7f0ce9f8de6345f0fbe773
                  dc687eb571123d08eab4d98f96849eae
                  b63fa8756fb6c59d9b9d0e551537c1cd
                  ad4a564747ff9291db4a88b65c97c10d"
}
  • フィールドの説明:
フィールド 説明
data トランザクションデータを文字列として表します。 文字列は、最初に対応するバイト配列を作成し(第7.9章を参照)、バイト配列を16進文字列に変換して作成されます。
signature 16進文字列としてのトランザクションの署名。

9.36.RequestPrepareAnnounce

  • 説明: RequestPrepareAnnounceオブジェクトは、トランザクションデータとプライベートキーをNISに転送するために使用され、トランザクションを開始してブロードキャストします。

  • JSONの構造例(テストネットワーク):

{
    "transaction":
    {
      "timeStamp": 9111526,
      "amount": 1000000000,
      "fee": 50000,
      "recipient": "TDGIMREMR5NSRFUOMPI5OOHLDATCABNPC5ID2SVA",
      "type": 257,
      "deadline": 9154726,
      "message":
      {
         "payload": "74657374207472616e73616374696f6e",
         "type": 1
      },
      "version": -1744830463,
      "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
    },
    "privateKey": "68e4f79f886927de698df4f857de2aada41ccca6617e56bb0d61623b35b08cc0"
}
  • フィールドの説明:
フィールド 説明
transaction トランザクションデータ部分の開始を示します。取引データは、付録A:Transaction objectsで説明されています。この時点でトランザクションが署名されていないため、フィールドの署名がありません。
privateKey NISがトランザクションに署名するために使用する秘密鍵。

9.37.TimeSynchronizationResult

  • 説明: 時間同期結果は、他の遠隔ノードとのノードのネットワーク時間同期の結果である。共通の時間に合意するために、ノードは毎時の時間を同期させる必要がある。

  • JSON構造体の例:

{
       "dateTime": "2014-11-16 20:47:06",
       "currentTimeOffset":2786,
       "change":36
}
  • フィールドの説明:
フィールド 説明
dateTime 同期が実行された日時。
currentTimeOffset ローカルコンピュータのクロックへの現在のオフセット(ミリ秒単位)。
change 最後の同期と比較したミリ秒単位の変化。

9.38.TransactionMetaData

  • 説明: トランザクションメタデータオブジェクトには、トランザクションに関する追加情報が含まれています。

  • JSON構造体の例:

{
    "height": 40706,
    "id": 2769,
    "hash": {
        "data":"37c34ead4c3fe6af42d994135798262f785ba2d807c02ac3608bc10da12e5f87"
    }
}
  • フィールドの説明:
フィールド 説明
height トランザクションが含まれていたブロックの高さ。
id トランザクションのID。
hash トランザクションハッシュ。

9.39.TransactionMetaDataPair

  • 説明: トランザクションメタデータオブジェクトには、トランザクションに関する追加情報が含まれています。

  • JSON構造体の例:

{
    "meta":
        <TransactionMetaData>,
    "transaction":
        <Transaction>
}
  • フィールドの説明:
フィールド 説明
meta トランザクションメタデータオブジェクトを格納します。
\ TransactionMetaDataで説明されているトランザクションメタデータオブジェクト。
Transaction トランザクションオブジェクトを含みます。
\ Transactionに記述されているトランザクションオブジェクト。

9.40.UnconfirmedTransactionMetaData

  • 説明: 確認されていないトランザクションメタデータには、トランザクションがマルチシグトランザクションの場合の内部トランザクションのハッシュが含まれます。このデータは、マルチ署名署名トランザクションを開始する必要があります。
{
    "data":"d7c9e33421e43bf4a5d6e21304c8096c599142755d581bd6e9037f41545a5873"
}
  • フィールドの説明:
フィールド 説明
data 内部トランザクションのハッシュ。トランザクションがマルチトランザクションでない場合はnull。

9.41.UnconfirmedTransactionMetaDataPair

  • 説明: トランザクションメタデータオブジェクトには、トランザクションに関する追加情報が含まれています。
{
    "meta":
        <UnconfirmedTransactionMetaData>,
    "transaction":
        <Transaction>
}
  • フィールドの説明:
フィールド 説明
meta トランザクションメタデータオブジェクトを格納します。|Â
\ UnconfirmedTransactionMetaDataで説明されているトランザクションメタデータオブジェクト。
transaction トランザクションオブジェクトを含みます。
\ Transactionに記述されているトランザクションオブジェクト。

9.42.Error object

  • 説明: 無効な要求または内部の問題のためにNISでエラーが発生すると、JSONエラーオブジェクトが返されます。エラーオブジェクトの解釈は、コンテキストに依存します。考えられるエラーの詳細については、付録B:NISエラーを参照してください。

  • JSONの構造例:

{
    "timeStamp":9108808,
    "error": "Bad Request",
    "message":  "address must be valid",
    "status":400
}
  • フィールドの説明:
フィールド 説明
timeStamp 敵対ブロックの作成から経過した秒数。
error エラーの一般的な説明。
message 詳細なエラーメッセージです。
Status HTTPステータス。

10. 付録B:NISエラー

要求の処理中にNISでエラーが発生した場合、その構造は付録A:Error objectで説明されているJSONエラーオブジェクトを返します。この章では、NISから返されるエラーメッセージについて説明します。

10.1.エラーメッセージ

  • Request method 'GET' not supported

    • 要求はGET要求として実行されましたが、POST要求であると予想されていました。
  • address must be valid:

    • リクエストで指定されたアドレスが無効です。アドレスは、要求を処理する前に検証されます。検証に失敗すると、このメッセージを含むエラーが返されます。
  • FAILURE_SERVER_LIMIT:

    • NISで収穫が許可されたアカウント数を超えました。
  • JSON Object was expected:

    • 要求にパラメータがありません。
  • FAILURE_UNKNOWN_ACCOUNT:

    • 要求で指定されたアカウントが不明です。
  • block not found in the db

    • 要求されたブロックはデータベースに見つかりませんでした。
  • height must be positive

    • リクエストで指定されたブロックの高さはゼロまたは負でした。ブロックの高さは常にゼロより大きくなければなりません。
  • network has not been booted yet

    • ネットワークはまだブートされていません。ほとんどの要求では、すでに起動されている要求に応答するノードが必要です。ノードがまだ起動されていない場合は、このエラーメッセージが返されます。
  • network boot was already attempted

    • 既に起動しているノードを起動しようとしました。ノードは一度しかブートできません。
  • remote 123.45.67.89 attempted to call local /node/boot

    • リモートノードをブートしようとしました。ローカルノードのみを起動できます。
  • FAILURE_PAST_DEADLINE

    • エンティティの期限はすでに切れています。締め切りはいつも将来あるはずです。
  • FAILURE_FUTURE_DEADLINE

    • 締め切りはあまりにも遠すぎます。締め切りは将来24時間までしか許されません。
  • FAILURE_INSUFFICIENT_BALANCE

    • アカウントに十分な資金がありません。
  • FAILURE_MESSAGE_TOO_LARGE

    • トランザクションのメッセージが512バイトの制限を超えています。
  • FAILURE_HASH_EXISTS

    • エンティティのハッシュは、すでにキャッシュまたはデータベースに存在します。
  • FAILURE_SIGNATURE_NOT_VERIFIABLE

    • エンティティの署名は検証時に失敗しました。
  • FAILURE_TIMESTAMP_TOO_FAR_IN_PAST

    • エンティティのタイムスタンプは、過去には遠いです。
  • FAILURE_TIMESTAMP_TOO_FAR_IN_FUTURE

    • エンティティのタイムスタンプは将来、あまりにも遠すぎます。
  • FAILURE_INELIGIBLE_BLOCK_SIGNER

    • ブロックに不適格な署名者が含まれているため、検証に失敗しました。これは、通常、リモートハーベスティングがアクティブ化または非アクティブ化されているときに発生します。
  • FAILURE_ENTITY_UNUSABLE_OUT_OF_SYNC

    • リモートノードがローカルノードと同期していないため、エンティティを処理できません。これは、ノードが完全に同期しておらず、自身のチェーンよりもはるかに高い新しいブロックを受け取った場合に頻繁に発生します。
  • FAILURE_INSUFFICIENT_FEE

    • 提供された取引には不十分な料金があります。
  • FAILURE_NEMESIS_ACCOUNT_TRANSACTION_AFTER_NEMESIS_BLOCK

    • 提供された取引には送信者としてのネメシスアカウントがあり、通常のブロックに含めることはできません。
  • FAILURE_TRANSACTION_CACHE_TOO_FULL

    • トランザクションキャッシュがいっぱいであるため、トランザクションは拒否されました。これは、アカウントが短時間に多すぎるトランザクションを送信しようとした場合に発生します。取引が承認される可能性を高めるために、取引手数料を引き上げることができます。
  • FAILURE_WRONG_NETWORK

    • エンティティは、間違ったネットワークが指定されているため、拒否されました。
  • FAILURE_CANNOT_HARVEST_FROM_BLOCKED_ACCOUNT

    • ブロックされたアカウント(通常は予約済みのNEMファンド)によって収穫されたため、ブロックは拒否されました。
  • FAILURE_DESTINATION_ACCOUNT_HAS_NONZERO_BALANCE

    • ゼロ以外の残高を持つ口座には重要性を移すことはできません。
  • FAILURE_IMPORTANCE_TRANSFER_IN_PROGRESS

    • 進行中の重要性の移転がすでに存在するため、トランザクションは競合しています。
  • FAILURE_IMPORTANCE_TRANSFER_NEEDS_TO_BE_DEACTIVATED

    • 重要性が既に移転されたため、取引は競合しています。
  • FAILURE_IMPORTANCE_TRANSFER_IS_NOT_ACTIVE

    • 重要性がまだ移転されていないため、トランザクションは競合しています。
  • FAILURE_TRANSACTION_NOT_ALLOWED_FOR_REMOTE

    • トランザクションが不適切な方法でリモートアカウントを使用しているため、検証に失敗しました。
  • FAILURE_MULTISIG_NOT_A_COSIGNER

    • トランザクションの署名者が内部トランザクションの送信者アカウントのコーディネータリではないため、multisigトランザクションは拒否されました。
  • FAILURE_MULTISIG_INVALID_COSIGNERS

    • multisigトランザクションに接続されたcosignatorが無効であるため、検証に失敗しました。
  • FAILURE_MULTISIG_NO_MATCHING_MULTISIG

    • 対応するmultisigトランザクションが見つからなかったため、署名トランザクションは拒否されました。
  • FAILURE_TRANSACTION_NOT_ALLOWED_FOR_MULTISIG

    • 署名者がマルチサインアカウントであるため、トランザクションは拒否されました。 Multisig口座はいかなる取引も開始することができません。
  • FAILURE_MULTISIG_ALREADY_A_COSIGNER

    • トランザクションは、既にこのコーパスリーディングを持つマルチサインアカウントにコーディネーターを追加しようとしたため、却下されました。
  • FAILURE_MULTISIG_MODIFICATION_MULTIPLE_DELETES

    • 一度に複数の補助弁を取り除こうとしたため、取引は却下された。一度に1つの共済を削除することのみが許可されています。
  • FAILURE_MULTISIG_MODIFICATION_REDUNDANT_MODIFICATIONS

    • 冗長な変更を行おうとしたため、トランザクションは拒否されました。これは、トランザクションが同じコーパスを2回追加しようとした場合に発生します。
  • FAILURE_CONFLICTING_MULTISIG_MODIFICATION

    • マルチジグ・アカウントに矛盾する変更が含まれているため、トランザクションは拒否されました。例えば、トランザクションが同じコーパスを追加してから削除しようとすると、これが起こります。
  • FAILURE_TOO_MANY_MULTISIG_COSIGNERS

    • トランザクションには余分な余地が含まれているため、拒否されました。 multisigアカウントに許可されているcosignatorの最大数は32です。
  • FAILURE_MULTISIG_ACCOUNT_CANNOT_BE_COSIGNER

    • multisigの変更によって、multisigアカウントがcosignerになるため、検証に失敗しました。
  • FAILURE_MULTISIG_MIN_COSIGNATORIES_OUT_OF_RANGE

    • cosignatoriesの最小数が負であるか、cosignatoriesの数よりも大きいため、検証に失敗しました。
  • FAILURE_NAMESPACE_UNKNOWN

    • ネームスペースが不明なため、検証に失敗しました。
  • FAILURE_NAMESPACE_ALREADY_EXISTS

    • ネームスペースがすでに存在するため、検証に失敗しました。
  • FAILURE_NAMESPACE_EXPIRED

    • ネームスペースの有効期限が切れているため、検証に失敗しました。
  • FAILURE_NAMESPACE_OWNER_CONFLICT

    • トランザクション署名者がネームスペースの所有者ではないため、検証に失敗しました。
  • FAILURE_NAMESPACE_INVALID_NAME

    • ネームスペースの名前が無効であるため、検証に失敗しました。
  • FAILURE_NAMESPACE_INVALID_RENTAL_FEE_SINK

    • 指定されたネームスペースレンタル料金シンクが無効であるため、検証に失敗しました。
  • FAILURE_NAMESPACE_INVALID_RENTAL_FEE

    • 指定されたレンタル料金が無効であるため、検証に失敗しました。
  • FAILURE_NAMESPACE_PROVISION_TOO_EARLY

    • プロビジョニングが早過ぎたため、検証に失敗しました。
  • FAILURE_NAMESPACE_NOT_CLAIMABLE

    • ネームスペースに予約された部分が含まれているため、検証ができませんでした。
  • FAILURE_MOSAIC_UNKNOWN

    • モザイクが不明なため検証が失敗しました。
  • FAILURE_MOSAIC_MODIFICATION_NOT_ALLOWED

    • 既存のモザイクの変更が許可されていないため、検証に失敗しました。
  • FAILURE_MOSAIC_CREATOR_CONFLICT

    • トランザクションの署名者がモザイクの作成者ではないため、検証に失敗しました。
  • FAILURE_MOSAIC_SUPPLY_IMMUTABLE

    • モザイク供給が不変であるため、検証に失敗しました。
  • FAILURE_MOSAIC_MAX_SUPPLY_EXCEEDED

    • モザイク全体の最大供給量を超えているため、検証に失敗しました。
  • FAILURE_MOSAIC_SUPPLY_NEGATIVE

    • 結果のモザイク供給が負になるため、検証に失敗しました。
  • FAILURE_MOSAIC_NOT_TRANSFERABLE

    • モザイクが転送できないため、検証に失敗しました。
  • FAILURE_MOSAIC_DIVISIBILITY_VIOLATED

    • モザイクの分割可能性に違反しているため、検証に失敗しました。
  • FAILURE_CONFLICTING_MOSAIC_CREATION

    • 競合するモザイク作成が存在するため、検証に失敗しました。
  • FAILURE_MOSAIC_INVALID_CREATION_FEE_SINK

    • モザイク作成料シンクが無効であるため、検証に失敗しました。
  • FAILURE_MOSAIC_INVALID_CREATION_FEE

    • 指定された作成料金が無効であるため、検証に失敗しました。
  • FAILURE_TOO_MANY_MOSAIC_TRANSFERS

    • 転送トランザクションに添付されたモザイク転送が多すぎるため、検証に失敗しました。