# ヘルパーメソッド

`GraphQLClient` クラスは、OCAP を利用したブロックチェーンと対話するための主要なインターフェースです。チェーンの状態のクエリ、トランザクションの送信、リアルタイムイベントのサブスクライブのための一連の包括的なメソッドを提供します。Node.js とブラウザ環境の両方でシームレスに動作するように設計されています。

```javascript クライアントの初期化 icon=logos:javascript
const GraphQLClient = require('@ocap/client');

// Beta チェーンに接続
const client = new GraphQLClient('https://beta.abtnetwork.io/api');

(async () => {
  const res = await client.getChainInfo();
  console.log('Connected to chain:', res.info.network);
})();
```

このセクションでは、`GraphQLClient` クラスのコアヘルパーメソッドについて詳しく解説します。


## コンストラクタ

### new GraphQLClient(endpoint, autoInit)

`GraphQLClient` の新しいインスタンスを作成します。

**パラメータ**

<x-field-group>
  <x-field data-name="endpoint" data-type="string" data-required="true">
    <x-field-desc markdown>ブロックチェーンノードの GraphQL エンドポイントの絶対 URL（例：`https://beta.abtnetwork.io/api`）。</x-field-desc>
  </x-field>
  <x-field data-name="autoInit" data-type="boolean" data-default="true" data-required="false">
    <x-field-desc markdown>`true` の場合、クライアントは初期化時に不可欠なチェーン情報（「コンテキスト」）を自動的に取得してキャッシュします。これはほとんどのユースケースで推奨されます。</x-field-desc>
  </x-field>
</x-field-group>

**例**

```javascript クライアントインスタンスの作成 icon=logos:javascript
const client = new GraphQLClient('https://beta.abtnetwork.io/api', true);
```

---


## コアメソッド

これらのメソッドは、クライアントとチェーンと対話するための基本的な機能を提供します。

### getContext()

チェーンID、ネイティブトークンの詳細、トランザクション手数料の設定など、不可欠なチェーン情報を取得してキャッシュします。このメソッドは、コンストラクタで `autoInit` が有効になっている場合に自動的に呼び出されます。それ以降の呼び出しでは、キャッシュされたコンテキストが返されます。

**戻り値**

<x-field data-name="Promise<object>" data-type="object" data-desc="チェーンのメタデータを含むコンテキストオブジェクトに解決される Promise。">
  <x-field data-name="chainId" data-type="string" data-desc="ブロックチェーンネットワークの一意の識別子。"></x-field>
  <x-field data-name="consensus" data-type="string" data-desc="コンセンサスエンジンのバージョン。"></x-field>
  <x-field data-name="token" data-type="object" data-desc="ネイティブトークンに関する情報。">
    <x-field data-name="address" data-type="string" data-desc="ネイティブトークンコントラクトのアドレス。"></x-field>
    <x-field data-name="decimal" data-type="number" data-desc="ネイティブトークンの小数点以下の桁数。"></x-field>
    <x-field data-name="symbol" data-type="string" data-desc="ネイティブトークンのシンボル（例：TBA）。"></x-field>
  </x-field>
  <x-field data-name="txConfig" data-type="object" data-desc="トランザクション手数料とガスの設定。"></x-field>
</x-field>

**例**

```javascript チェーンコンテキストの取得 icon=logos:javascript
async function logChainToken() {
  const context = await client.getContext();
  console.log(`Native Token Symbol: ${context.token.symbol}`);
}

logChainToken();
```

### setGasPayer(wallet)

ウォレットを「ガス支払者」として機能するように設定します。設定されると、このウォレットはこのクライアントインスタンスを通じて送信されるトランザクションのトランザクション手数料を負担し、ユーザーにガスレス体験を提供します。詳細については、[ガス支払い](./core-concepts-gas-payment.md)のコンセプトガイドを参照してください。

**パラメータ**

<x-field data-name="wallet" data-type="WalletObject" data-required="true">
  <x-field-desc markdown>`address`、`publicKey`、`secretKey`プロパティを持ち、`sign`メソッドを備えたウォレットオブジェクト。</x-field-desc>
</x-field>

### decodeTx(input)

さまざまな形式のトランザクションを、人間が読める形式の JavaScript オブジェクトにデシリアライズします。

**パラメータ**

<x-field data-name="input" data-type="Buffer | string" data-required="true">
  <x-field-desc markdown>デコードするトランザクションデータ。`Buffer` または `hex`、`base58`、`base64` 形式の文字列を指定できます。</x-field-desc>
</x-field>

**戻り値**

<x-field data-name="object" data-type="object" data-desc="デコードされたトランザクションオブジェクト。"></x-field>

### getType(name)

指定された型名の Protobuf メッセージクラスを取得します。これは、Protobuf メッセージを手動で構築または検査する必要がある高度なシナリオで役立ちます。

**パラメータ**

<x-field data-name="name" data-type="string" data-required="true" data-desc="Protobuf メッセージタイプの名前（例：'Transaction'、'TransferTx'）。"></x-field>

**戻り値**

<x-field data-name="class | null" data-type="object" data-desc="メッセージクラスのコンストラクタ。見つからない場合は null。"></x-field>

---


## イベントのサブスクリプション

クライアントは WebSocket を介したリアルタイムのイベントサブスクリプションをサポートしており、アプリケーションがオンチェーンイベントに即座に反応できるようにします。

### subscribe(topic, callback)

WebSocket 接続を確立し、特定のイベントトピックをサブスクライブします。

**パラメータ**

<x-field-group>
  <x-field data-name="topic" data-type="string" data-required="true" data-desc="サブスクライブするイベントトピック（例：'newBlock'、'tx:transfer'）。"></x-field>
  <x-field data-name="callback" data-type="function" data-required="true" data-desc="イベントが受信されたときに実行される関数。イベントのペイロードを唯一の引数として受け取ります。"></x-field>
</x-field-group>

### unsubscribe(topic, callback)

特定のトピックに対して以前に登録されたコールバックを削除します。

**パラメータ**

<x-field-group>
  <x-field data-name="topic" data-type="string" data-required="true" data-desc="サブスクライブを解除するイベントトピック。"></x-field>
  <x-field data-name="callback" data-type="function" data-required="true" data-desc="削除する特定のコールバック関数。"></x-field>
</x-field-group>

**例**

```javascript 新規ブロックのサブスクライブ icon=logos:javascript
const handleNewBlock = (block) => {
  console.log(`New block received! Height: ${block.height}`);
  
  // 1つのブロックを受信した後にサブスクライブを解除
  client.unsubscribe('newBlock', handleNewBlock);
  console.log('Unsubscribed from newBlock events.');
};

client.subscribe('newBlock', handleNewBlock);
console.log('Subscribed to newBlock events...');
```

---


## トークンユーティリティメソッド

これらのヘルパーは、人間が読める形式のトークン量とオンチェーンの基本単位表現との間の変換を簡素化します。

### fromUnitToToken(value)

チェーンの基本単位（大きな整数文字列）の値を、ネイティブトークンの小数点以下の桁数に基づいて標準的な10進数文字列に変換します。

**パラメータ**

<x-field data-name="value" data-type="string" data-required="true" data-desc="チェーンの基本単位での量。"></x-field>

**戻り値**

<x-field data-name="string" data-type="string" data-desc="標準トークン単位での量。"></x-field>

### fromTokenToUnit(amount)

標準的な10進数量をチェーンの基本単位表現（BN.js インスタンス）に変換します。

**パラメータ**

<x-field data-name="amount" data-type="number | string" data-required="true" data-desc="標準的な10進数形式でのトークン量。"></x-field>

**戻り値**

<x-field data-name="BN" data-type="object" data-desc="チェーンの基本単位での値を表す BN.js インスタンス。"></x-field>

**例**

```javascript トークン量の変換 icon=logos:javascript
async function convertToken() {
  // 100 TBA をその基本単位に変換
  const unitAmount = await client.fromTokenToUnit(100);
  console.log(`100 TBA is ${unitAmount.toString()} in base units.`);

  // 元に戻す
  const tokenAmount = await client.fromUnitToToken(unitAmount.toString());
  console.log(`${unitAmount.toString()} base units is ${tokenAmount} TBA.`);
}

convertToken();
```

---


## メソッドのディスカバリー

クライアントは、接続されている OCAP ノードでサポートされているすべてのトランザクションタイプに対応するメソッドを動的に生成します。これらのディスカバリーメソッドを使用すると、利用可能なすべてのトランザクション関連の関数をプログラムで一覧表示できます。

### getTxSendMethods()

利用可能なすべての `send...Tx` メソッド名の配列を返します。これらのメソッドは、トランザクションの署名と送信の完全なライフサイクルを処理します。

### getTxEncodeMethods()

利用可能なすべての `encode...Tx` メソッド名の配列を返します。これらのメソッドは、トランザクションを準備してバッファにシリアライズしますが、署名は行いません。

### getTxSignMethods()

利用可能なすべての `sign...Tx` メソッド名の配列を返します。これらのメソッドは、トランザクションをエンコードしてから署名し、署名済みのトランザクションオブジェクトを返します。

### getTxMultiSignMethods()

マルチシグネチャワークフローで使用される、利用可能なすべての `multiSign...Tx` メソッド名の配列を返します。

**例**

```javascript 利用可能なトランザクションメソッドの一覧表示 icon=logos:javascript
const sendMethods = client.getTxSendMethods();
console.log('Available send methods:', sendMethods);
// 出力例: [ 'sendPokeTx', 'sendTransferTx', ... ]
```
