コンテンツにスキップ
初級

通貨供給量の照会⚓︎

取引所や市場データアグリゲーターは、時価総額やトークン指標を表示するために正確な供給量の数値を必要とします。

Symbolネットワークは、専用のRESTエンドポイントを通じて、ネイティブ通貨であるXYMの最大供給量、総供給量、および循環供給量を公開しています。

このチュートリアルでは、それぞれの値を照会し、それらから追加の指標を導き出す方法を説明します。

前提条件⚓︎

このチュートリアルでは、SDKを必要とせずにSymbol REST APIを使用します。 HTTPリクエストを行う方法さえあれば実行可能です。

完全なコード⚓︎

このチュートリアルの完全なコード一覧を以下に示します。 詳細な手順ごとの説明は次のセクションで行います。

import os
import urllib.request

NODE_URL = os.getenv('NODE_URL', 'https://reference.symboltest.net:3001')
print(f'Using node {NODE_URL}')

SUPPLY_PATH = '/network/currency/supply'

try:
    with urllib.request.urlopen(
            f'{NODE_URL}{SUPPLY_PATH}/max') as response:
        maximum = float(response.read().decode().strip())
    print(f'Maximum supply: {maximum:,.6f} XYM')

    with urllib.request.urlopen(
            f'{NODE_URL}{SUPPLY_PATH}/total') as response:
        total = float(response.read().decode().strip())
    print(f'Total supply: {total:,.6f} XYM')

    with urllib.request.urlopen(
            f'{NODE_URL}{SUPPLY_PATH}/circulating') as response:
        circulating = float(response.read().decode().strip())
    print(f'Circulating supply: {circulating:,.6f} XYM')

    non_circulating = total - circulating
    print(f'Non-circulating: {non_circulating:,.6f} XYM')

    unminted = maximum - total
    print(f'Unminted: {unminted:,.6f} XYM')

except Exception as error:
    print(error)

Download source

const NODE_URL = process.env.NODE_URL ||
    'https://reference.symboltest.net:3001';
console.log(`Using node ${NODE_URL}`);

const SUPPLY_PATH = '/network/currency/supply';

const fmt = (v) => v.toLocaleString('en-US', { minimumFractionDigits: 6 });

const maxResponse = await fetch(`${NODE_URL}${SUPPLY_PATH}/max`);
const maximum = parseFloat((await maxResponse.text()).trim());
console.log(`Maximum supply: ${fmt(maximum)} XYM`);

const totalResponse = await fetch(`${NODE_URL}${SUPPLY_PATH}/total`);
const total = parseFloat((await totalResponse.text()).trim());
console.log(`Total supply: ${fmt(total)} XYM`);

const circResponse = await fetch(`${NODE_URL}${SUPPLY_PATH}/circulating`);
const circulating = parseFloat((await circResponse.text()).trim());
console.log(`Circulating supply: ${fmt(circulating)} XYM`);

const nonCirculating = total - circulating;
console.log(`Non-circulating: ${fmt(nonCirculating)} XYM`);

const unminted = maximum - total;
console.log(`Unminted: ${fmt(unminted)} XYM`);

Download source

このスニペットでは、 NODE_URL 環境変数を使用してSymbol APIノードを設定します。 値が指定されない場合は、デフォルトのテストネットノードが使用されます。

注意: メインネットノードの使用

デフォルトのノードはテストネットを指しています。 本番環境の供給量データについては、 NODE_URLメインネットノードに設定してください。 利用可能なメインネットノードのリストについては、symbol.fyi/nodesを参照してください。

コード解説⚓︎

供給量の値の取得⚓︎

    with urllib.request.urlopen(
            f'{NODE_URL}{SUPPLY_PATH}/max') as response:
        maximum = float(response.read().decode().strip())
    print(f'Maximum supply: {maximum:,.6f} XYM')

    with urllib.request.urlopen(
            f'{NODE_URL}{SUPPLY_PATH}/total') as response:
        total = float(response.read().decode().strip())
    print(f'Total supply: {total:,.6f} XYM')

    with urllib.request.urlopen(
            f'{NODE_URL}{SUPPLY_PATH}/circulating') as response:
        circulating = float(response.read().decode().strip())
    print(f'Circulating supply: {circulating:,.6f} XYM')
const fmt = (v) => v.toLocaleString('en-US', { minimumFractionDigits: 6 });

const maxResponse = await fetch(`${NODE_URL}${SUPPLY_PATH}/max`);
const maximum = parseFloat((await maxResponse.text()).trim());
console.log(`Maximum supply: ${fmt(maximum)} XYM`);

const totalResponse = await fetch(`${NODE_URL}${SUPPLY_PATH}/total`);
const total = parseFloat((await totalResponse.text()).trim());
console.log(`Total supply: ${fmt(total)} XYM`);

const circResponse = await fetch(`${NODE_URL}${SUPPLY_PATH}/circulating`);
const circulating = parseFloat((await circResponse.text()).trim());
console.log(`Circulating supply: ${fmt(circulating)} XYM`);

各供給量の値は、専用のエンドポイントを通じて利用できます。

これら3つのエンドポイントはすべて、(JSONではなく)プレーンテキストの数値を返します。これらは絶対(アトミック)単位ではなく、すでに小数点以下の桁数を含む全体単位(例: 8999999999.000000 )で表されています。

注意: 循環供給量はノードに依存します

非循環アカウントのリストは各ノードオペレーターによって(ノードの rest.json ファイル内で)設定されるため、異なるノードが異なる循環供給量の値を報告する可能性があります。 供給量データを統合する場合は、デフォルト設定を持つ信頼できるノードを照会するようにしてください。

追加の指標の導出⚓︎

    non_circulating = total - circulating
    print(f'Non-circulating: {non_circulating:,.6f} XYM')

    unminted = maximum - total
    print(f'Unminted: {unminted:,.6f} XYM')
const nonCirculating = total - circulating;
console.log(`Non-circulating: ${fmt(nonCirculating)} XYM`);

const unminted = maximum - total;
console.log(`Unminted: ${fmt(unminted)} XYM`);

3つの値をすべて取得した後、コードは2つの追加の指標を導き出します。

  • Non-circulating (非循環): 総供給量と循環供給量の差。
  • Unminted (未発行): 最大供給量と総供給量の差。今後発行される予定の残りのXYMを表します。

出力⚓︎

以下の出力は、通貨供給量を照会する典型的な実行例を示しています。

Using node https://reference.symboltest.net:3001
Maximum supply: 8,999,999,999.000000 XYM
Total supply: 8,323,505,878.695894 XYM
Circulating supply: 8,323,495,854.693871 XYM
Non-circulating: 10,024.002024 XYM
Unminted: 676,494,120.304106 XYM

これらの値はテストネットノードからのものであり、メインネットの供給量の数値を反映していません。

出力は、XYMの供給量の完全な内訳を示しています。

  • 最大供給量 (maximum supply) はXYMのハードキャップです。

  • すべてのXYMがまだ発行されているわけではないため、 総供給量 (total supply) はそれより少なくなります。

  • 一部の発行済みXYMは非循環アカウントによって保持されているため、 循環供給量 (circulating supply) はさらに少なくなります。

  • 非循環 (non-circulating) の値は、総供給量と循環供給量の差を説明しています。

  • 未発行 (unminted) の値は、インフレーション報酬を通じて徐々に発行される残りのXYMを示しています。

結論⚓︎

このチュートリアルでは、以下の方法を説明しました。

ステップ 関連ドキュメント documentation
最大供給量の取得 /network/currency/supply/max GET
総供給量の取得 /network/currency/supply/total GET
循環供給量の取得 /network/currency/supply/circulating GET
追加の指標の導出 -

次のステップ⚓︎

特定のアカウントのXYM残高を確認するには、アカウント残高の照会 チュートリアルを参照してください。