メインコンテンツまでスキップ
バージョン: 3.5.0

ForExchange

このドキュメントは IOST ブロックチェーンを簡潔に紹介します。対象読者は取引所の開発者で、主な内容は IOST パブリックチェーンの経済モデル、アカウント作成方法、トランザクション送信、トランザクション確定 です。

このデモは IOST の JavaScript SDK を基に書かれています。 JavaScript SDK ドキュメント JavaScript SDK

メインネットの基本特性

  1. ネットワークは 0.5 秒ごとに 1 ブロックを生成し、1 ノードが 6 ブロックを連続生成します。
  2. ブロック生成委員会は 17 席で構成され、10 分ごとに更新されます。毎回 Servi 値の高い 17 ノードが委員会に選出され、順番にブロックをパッキングします。
  3. ブロックはブロック生成ノードの 2/3 + 1 によって確定された後、約 40 秒で不可逆 (irreversible) になります。
  4. IOST トークンの最小単位は小数点以下 8 桁です。
  5. システムはアカウントモデルを採用しています。
  6. 失敗したトランザクションもブロックに含まれ、Gas 手数料は差し引かれます。

アカウント作成手順

新しい IOST アカウントは必ず既存アカウントから作成しなければなりません。 アカウント作成時には Gas のために最低 10 IOST が新アカウントへステーキングされます。

最初のアカウントを取得する方法:

まだアカウントがない場合は アカウント作成サービス を使って初めてのアカウントを作成できます。

既存のアカウントから SDK で新規アカウントを作成:

  1. まず既存アカウントを SDK に import します。このアカウントは十分なトークンを保有している必要があります。
  2. 新アカウント用の公開鍵/秘密鍵ペアを生成します。鍵はバイト配列で保存され、出力は base58 でエンコードされます。
  3. アカウント作成トランザクションを生成して署名します。
  4. rpc を通じて メインネットノード へトランザクションを送信し、レスポンスに基づき作成成功かどうかを判定します。

JS SDK 例

IOST 送金トランザクションの手順

送金トランザクションはアカウント間でのみ行えます。公開鍵アドレス宛には直接送金できません。

送金手順:

  1. トランザクションを送るアカウントを import します。
  2. 送金トランザクションを生成して署名します。
  3. rpc を通じてトランザクションを送信し、レスポンスを見て 実行成功かどうかを判定 します。

JS SDK 例

送金成功の確認方法

送金トランザクションの不可逆性と実行成功の判定方法は取引所にとって非常に重要です。トランザクション確定ドキュメント をよくお読みください。

IOST の入出金

IOST はアカウントモデルです。アカウント作成時には Token と Gas を消費するため、取引所がユーザーごとに別アカウントを作成することは推奨されません。MEMO を活用して入出金を管理してください。

IOST 送金トランザクションの送信には RAM の購入は不要です。Gas を獲得するために IOST をステーキングするだけで十分です。1 トランザクションは約 9000 Gas を消費します。追加で 1 IOST をステーキングするごとに、毎日さらに 100,000 GAS が生成されます。すべての IOST アカウントには最低 10 IOST がステーキングされているため、どの IOST アカウントも 1 日に約 100 件の送金を処理できます。それ以上の送金が必要な場合は、より多くの GAS を得るために追加で IOST をステーキングする必要があります。

推奨される入金フロー:

  1. ユーザーが入金リクエストを送信したら、取引所は そのユーザーに紐づくグローバルに一意な memo を検索(なければ生成) して発行します。
  2. 取引所は IOST ブロックチェーンを監視し、該当アカウントと memo を発見します。
  3. トランザクション確定.

推奨される出金フロー:

ユーザーが IOST メインネットアカウントを提示したら、取引所は前述の IOST 送金トランザクション手順に従って出金トランザクションを送信します。 iost.js SDK の txHandler を使えば、オンチェーン情報を簡単にポーリングし、チェーン確定後に出金処理を完了できます。

IRC20, IRC21 トークン

irc20, irc21 トークンの紹介

irc20irc21 は iost チェーン上でトークンを発行するための 2 つの標準です。

irc20 はコントラクトを書く必要がなく、システムコントラクト token.iost の create を呼び出すトランザクションを送るだけで発行できます。irc21 トークンは irc21 標準のすべてのインターフェースを実装するコントラクトを書く必要があります。そのため irc21 トークンはトークン送金・凍結・破棄などについて開発者のカスタマイズ要求を満たせます。irc21 トークンも内部的には token.iost システムコントラクトの create メソッドで作成されます。

irc20 と irc21 トークンの一意識別子はトークンシンボルです。トークンシンボルはトークンシステム内でグローバルに一意です。たとえばトークンシンボル iet の irc21 トークンが存在すれば、他の人は同じシンボル iet で irc20 または irc21 トークンを作ることができません。

irc20 トークンの送金は token.iost の transfer を直接呼ぶことで行えます。irc21 トークンの送金はそのトークンコントラクトアドレスの transfer メソッドを呼びます。irc20 と irc21 トークンの送金は RAM を消費することがあります。送金先がすでにそのトークンを保有している場合は RAM は消費されません。一度もそのトークンを保有したことがないアカウントへ送金すると、約 60 バイトの RAM を消費します。

オンチェーンのトークン情報は getTokenInfo API を呼ぶことで確認できます。例:

curl https://api.iost.io/getTokenInfo/iet/1

{
"symbol": "iet", // トークンシンボル。グローバルに一意
"full_name": "endless token", // フルネーム。表示用
"issuer": "Contract8Hkb1ErxyBsHDYf3YHB7Ex9zuPkEQyNwSq1v4xEhzTqE", // 発行者。アカウントまたはコントラクト
"decimal": 4, // 精度
"current_supply": "529508805248513", // 最小桁単位の数量。実際の量は 529508805248513 / 10000
"total_supply": "1000000000000000", // 供給上限。最小桁単位。通常は非常に大きな値に設定される
"can_transfer": true, //
"only_issuer_can_transfer": false, // トークンの送金がトークンコントラクト経由のみに制限されているか。ERC20 はすべて false。ERC21 はほとんど true。発行者がトークンコントラクトを通じて送金ロジックを管理し、システムコントラクト経由の直接送金を禁止する場合
"total_supply_float": 100000000000, // 供給上限
"current_supply_float": 52950880524.8513
}

アカウント残高は getTokenBalance API で確認できます。例:

curl https://api.iost.io/getTokenBalance/onblockp1/iet/1

{
"balance": 4292197.5628, // 利用可能残高
"frozen_balances": [] // 凍結残高リスト
}

irc20, irc21 トークン送金例

IRC 20 JS SDK サンプルコード IRC 21 JS SDK サンプルコード

IOST, IRC20, IRC21 トークン比較

IOSTIRC20 トークンIRC21 トークン
作成方法ジェネシスブロック内ユーザーが token.iost の create を呼ぶユーザーがカスタムコントラクトをデプロイし、その中で token.iost の create メソッドを呼ぶ
一意識別子トークンシンボルトークンシンボルトークンシンボル
送金方法token.iost の transfertoken.iost の transfer該当トークンのカスタムコントラクトの transfer
送金時のリソース消費gasgas と ramgas と ram
送金判定ドキュメントドキュメントドキュメント

付録

その他の SDK

JAVA SDK PYTHON SDK GO SDK