# 高レベルAPI

トランザクションヘルパーは、OCAP Client に組み込まれた高レベル関数であり、一般的なトランザクションの作成と署名の複雑さを抽象化します。トランザクションオブジェクトを手動で構築する代わりに、アセットの作成、トークンの転送、ステーキング、アトミックスワップの実行などのワークフローに、これらの便利なメソッドを使用できます。これらのヘルパーは、トランザクション構造が正しいことを保証し、開発プロセスを大幅に簡素化します。

基盤となるトランザクションライフサイクルの詳細については、[コアコンセプト：トランザクションライフサイクル](./core-concepts-transaction-lifecycle.md)を参照してください。

---


## アカウント管理

### migrateAccount

アカウントの所有権を新しいキーペアに移行します。これは、キーのローテーションやアカウントの回復に役立ちます。

**パラメータ**

<x-field-group>
  <x-field data-name="from" data-type="WalletObject" data-required="true" data-desc="移行元のアカウントのウォレットオブジェクト。"></x-field>
  <x-field data-name="to" data-type="WalletObject" data-required="true" data-desc="移行先のアカウントのウォレットオブジェクト。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript AccountMigrateTx を送信 icon=logos:javascript
const txHash = await client.migrateAccount({
  from: oldWallet,
  to: newWallet,
});
console.log('Migration transaction hash:', txHash);
```

### delegate

別のアカウント（デリゲート先）がデリゲーター（委任者）に代わって特定の種類のトランザクションを送信することを承認します。これは、安全でサンドボックス化された権限を作成するための強力な機能です。

**パラメータ**

<x-field-group>
  <x-field data-name="from" data-type="WalletObject" data-required="true" data-desc="権限を付与するデリゲーターのウォレット。"></x-field>
  <x-field data-name="to" data-type="WalletObject" data-required="true" data-desc="権限を受け取るデリゲート先のウォレット。"></x-field>
  <x-field data-name="privileges" data-type="array" data-required="true" data-desc="許可されるアクションを指定する権限オブジェクトの配列。">
    <x-field data-name="typeUrl" data-type="string" data-required="true" data-desc="許可されるトランザクションのタイプURL（例：'fg:t:transfer_v2'）。"></x-field>
    <x-field data-name="limit" data-type="object" data-required="false" data-desc="デリゲーションに対するオプションの制限。">
      <x-field data-name="tokens" data-type="array" data-desc="特定のファンジブルトークンに対する制限。"></x-field>
      <x-field data-name="assets" data-type="array" data-desc="特定のアセット（NFT）に対する制限。"></x-field>
    </x-field>
  </x-field>
</x-field-group>

**戻り値**

<x-field data-name="result" data-type="Promise<[string, string]>" data-desc="トランザクションハッシュと新しく作成されたデリゲートアドレスを含む配列。"></x-field>

**例**

```javascript DelegateTx を送信 icon=logos:javascript
const [txHash, delegateAddress] = await client.delegate({
  from: userWallet,
  to: appWallet,
  privileges: [
    {
      typeUrl: 'fg:t:transfer_v2',
    },
  ],
});
console.log('Delegation tx hash:', txHash);
console.log('Delegate address:', delegateAddress);
```

### revokeDelegate

以前に付与された権限をデリゲート先から取り消します。

**パラメータ**

<x-field-group>
  <x-field data-name="from" data-type="WalletObject" data-required="true" data-desc="デリゲーターのウォレット。"></x-field>
  <x-field data-name="to" data-type="WalletObject" data-required="true" data-desc="デリゲート先のウォレット。"></x-field>
  <x-field data-name="privileges" data-type="array" data-required="true" data-desc="取り消す権限を指定する権限オブジェクトの配列。">
     <x-field data-name="typeUrl" data-type="string" data-required="true" data-desc="取り消すトランザクションのタイプURL（例：'fg:t:transfer_v2'）。"></x-field>
  </x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript RevokeDelegateTx を送信 icon=logos:javascript
const txHash = await client.revokeDelegate({
  from: userWallet,
  to: appWallet,
  privileges: ['fg:t:transfer_v2'],
});
console.log('Revocation tx hash:', txHash);
```

---


## アセット (NFT) 管理

### createAsset

ブロックチェーン上に新しいアセット（非代替性トークン）を作成します。

**パラメータ**

<x-field-group>
  <x-field data-name="moniker" data-type="string" data-required="true" data-desc="アセットの短く、人間が読める名前。"></x-field>
  <x-field data-name="data" data-type="object" data-required="true" data-desc="アセットのメタデータを含むJSONオブジェクト。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="アセットの初期所有者のウォレット。"></x-field>
  <x-field data-name="parent" data-type="string" data-required="false" data-desc="親アセットのアドレス。階層的なリンクを確立します。"></x-field>
  <x-field data-name="ttl" data-type="number" data-required="false" data-default="0" data-desc="最初の消費後の生存時間（秒単位）。"></x-field>
  <x-field data-name="readonly" data-type="boolean" data-required="false" data-default="false" data-desc="trueの場合、アセットは作成後に更新できません。"></x-field>
  <x-field data-name="transferrable" data-type="boolean" data-required="false" data-default="true" data-desc="trueの場合、アセットは別のアカウントに転送できます。"></x-field>
  <x-field data-name="display" data-type="object" data-required="false" data-desc="アセット表示メタデータ用のオブジェクト。"></x-field>
  <x-field data-name="endpoint" data-type="object" data-required="false" data-desc="アセットエンドポイントメタデータ用のオブジェクト。"></x-field>
  <x-field data-name="tags" data-type="string[]" data-required="false" data-desc="分類用のタグの配列。"></x-field>
  <x-field data-name="delegator" data-type="string" data-required="false" data-desc="トランザクションがデリゲート先によって送信される場合の、デリゲーターのアドレス。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="result" data-type="Promise<[string, string]>" data-desc="トランザクションハッシュと新しく作成されたアセットのアドレスを含む配列。"></x-field>

**例**

```javascript CreateAssetTx を送信 icon=logos:javascript
const [txHash, assetAddress] = await client.createAsset({
  moniker: 'My First NFT',
  data: {
    typeUrl: 'json',
    value: { name: 'Digital Collectible', description: 'A unique item.' },
  },
  wallet: userWallet,
});
console.log('Create asset tx hash:', txHash);
console.log('New asset address:', assetAddress);
```

### updateAsset

既存の読み取り専用でないアセットの `moniker` と `data` フィールドを更新します。

**パラメータ**

<x-field-group>
  <x-field data-name="address" data-type="string" data-required="true" data-desc="更新するアセットのアドレス。"></x-field>
  <x-field data-name="moniker" data-type="string" data-required="true" data-desc="アセットの新しいモニカー。"></x-field>
  <x-field data-name="data" data-type="object" data-required="true" data-desc="アセットの新しいJSONデータオブジェクト。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="アセットの現在の所有者のウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript UpdateAssetTx を送信 icon=logos:javascript
const txHash = await client.updateAsset({
  address: 'z3g...',
  moniker: 'Updated NFT Name',
  data: {
    typeUrl: 'json',
    value: { name: 'Updated Collectible', description: 'Now with more features!' },
  },
  wallet: userWallet,
});
console.log('Update asset tx hash:', txHash);
```

### createAssetFactory

アセットファクトリーを作成します。これは、一貫した構造を持つ複数の新しいアセットをミントするためのテンプレートとして機能します。

**パラメータ**

<x-field-group>
  <x-field data-name="factory" data-type="object" data-required="true" data-desc="ファクトリーの設定を含むオブジェクト。">
    <x-field data-name="name" data-type="string" data-required="true" data-desc="ファクトリーの名前。"></x-field>
    <x-field data-name="description" data-type="string" data-required="true" data-desc="ファクトリーの説明。"></x-field>
    <x-field data-name="limit" data-type="number" data-required="false" data-default="0" data-desc="ミントできるアセットの最大数（0は無制限）。"></x-field>
    <x-field data-name="trustedIssuers" data-type="string[]" data-required="false" data-desc="このファクトリーからミントすることが許可されているウォレットアドレスのリスト。"></x-field>
    <x-field data-name="input" data-type="object" data-required="true" data-desc="ミントに必要な入力を定義します。"></x-field>
    <x-field data-name="output" data-type="object" data-required="true" data-desc="ミントされたアセットの構造を定義します。多くの場合、テンプレートを使用します。"></x-field>
  </x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ファクトリーを所有するウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="result" data-type="Promise<[string, string]>" data-desc="トランザクションハッシュと新しく作成されたファクトリーのアドレスを含む配列。"></x-field>

**例**

```javascript CreateFactoryTx を送信 icon=logos:javascript
const factoryConfig = {
  name: 'Ticket Factory',
  description: 'Mints event tickets',
  limit: 1000,
  input: { ... },
  output: { ... },
};

const [txHash, factoryAddress] = await client.createAssetFactory({
  factory: factoryConfig,
  wallet: eventCreatorWallet,
});
console.log('Create factory tx hash:', txHash);
console.log('New factory address:', factoryAddress);
```

### acquireAsset

既存のアセットファクトリーから新しいアセットを取得（ミント）します。これは通常、アセットを所有するエンドユーザーによって開始されます。

**パラメータ**

<x-field-group>
  <x-field data-name="itx" data-type="AcquireAssetV2Tx" data-required="true" data-desc="内部トランザクションオブジェクト。多くの場合、`preMintAsset`のようなヘルパーを使用して準備されます。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="アセットを取得するユーザーのウォレット。"></x-field>
  <x-field data-name="delegator" data-type="string" data-required="false" data-desc="該当する場合、デリゲーターのアドレス。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript AcquireAssetV2Tx を送信 icon=logos:javascript
// まず、ミントトランザクションを準備します（例：サーバー上で）
const itx = await client.preMintAsset({
  factory: factoryAddress,
  owner: userWallet.address,
  wallet: issuerWallet,
});

// 次に、ユーザーがトランザクションを送信します
const txHash = await client.acquireAsset({ itx, wallet: userWallet });
console.log('Acquire asset tx hash:', txHash);
```

### mintAsset

これは`acquireAsset`の発行者側の対応物です。信頼できる発行者がファクトリーからアセットをミントし、指定された所有者に割り当てることを許可します。

**パラメータ**

<x-field-group>
  <x-field data-name="itx" data-type="MintAssetTx" data-required="true" data-desc="内部トランザクションオブジェクト。多くの場合、`preMintAsset`を使用して準備されます。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="信頼できる発行者のウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript MintAssetTx を送信 icon=logos:javascript
const itx = await client.preMintAsset({
  factory: factoryAddress,
  owner: userWallet.address,
  wallet: issuerWallet,
});

const txHash = await client.mintAsset({ itx, wallet: issuerWallet });
console.log('Mint asset tx hash:', txHash);
```

---


## トークン管理

### createTokenFactory

特定のファンジブルトークンをミントおよびバーンするための新しいファクトリーを作成します。多くの場合、ボンディングカーブの価格設定モデルに基づいています。

**パラメータ**

<x-field-group>
  <x-field data-name="feeRate" data-type="number" data-required="false" data-default="0" data-desc="ミントおよびバーン操作の手数料率。"></x-field>
  <x-field data-name="curve" data-type="object" data-required="true" data-desc="価格設定のためのボンディングカーブの設定。"></x-field>
  <x-field data-name="token" data-type="object" data-required="true">
    <x-field-desc markdown>作成されるトークンの設定。これには`name`、`symbol`、`decimal`、`maxTotalSupply`などのプロパティが含まれます。</x-field-desc>
  </x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="トークンファクトリーのオプションのメタデータ。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ファクトリーの所有者のウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="result" data-type="Promise<[string, string]>" data-desc="トランザクションハッシュと新しく作成されたトークンファクトリーのアドレスを含む配列。"></x-field>

**例**

```javascript CreateTokenFactoryTx を送信 icon=logos:javascript
const [txHash, factoryAddress] = await client.createTokenFactory({
  feeRate: 100, // 1%
  curve: { fixedPrice: '1' }, // 新規トークンごとに1ネイティブトークン
  token: {
    name: 'My Community Token',
    symbol: 'MCT',
    decimal: 18,
    maxTotalSupply: '1000000',
  },
  wallet: creatorWallet,
});
console.log('Create token factory tx hash:', txHash);
console.log('New token factory address:', factoryAddress);
```

### updateTokenFactory

既存のトークンファクトリーの `feeRate` と `data` を更新します。

**パラメータ**

<x-field-group>
  <x-field data-name="address" data-type="string" data-required="true" data-desc="更新するトークンファクトリーのアドレス。"></x-field>
  <x-field data-name="feeRate" data-type="number" data-required="false" data-desc="ミントおよびバーンの新しい手数料率。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="トークンファクトリーの新しいメタデータ。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ファクトリーの所有者のウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript UpdateTokenFactoryTx を送信 icon=logos:javascript
const txHash = await client.updateTokenFactory({
  address: 'z2f...',
  feeRate: 50, // 0.5%
  wallet: ownerWallet,
});
console.log('Update token factory tx hash:', txHash);
```

### mintToken

トークンファクトリーから新しいトークンを、リザーブトークン（通常はネイティブチェーンのトークン）と引き換えにミントします。コストはファクトリーのボンディングカーブによって決定されます。

**パラメータ**

<x-field-group>
  <x-field data-name="tokenFactory" data-type="string" data-required="true" data-desc="トークンファクトリーのアドレス。"></x-field>
  <x-field data-name="amount" data-type="number" data-required="true" data-desc="ミントする新しいトークンの量。"></x-field>
  <x-field data-name="receiver" data-type="string" data-required="true" data-desc="新しくミントされたトークンを受け取るアドレス。"></x-field>
  <x-field data-name="maxReserve" data-type="number" data-required="true" data-desc="ユーザーが支払うことを許容するリザーブトークンの最大量。これはスリッページ保護として機能します。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="トランザクションのオプションのメタデータ。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ミントを開始するウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript MintTokenTx を送信 icon=logos:javascript
const txHash = await client.mintToken({
  tokenFactory: 'z2f...',
  amount: 100,
  receiver: userWallet.address,
  maxReserve: 105, // 最大105ネイティブトークンまで支払う意思がある
  wallet: userWallet,
});
console.log('Mint token tx hash:', txHash);
```

### burnToken

ファクトリーで既存のトークンをバーンして、基礎となるリザーブトークンを返してもらいます。受け取るリザーブトークンの量は、ファクトリーのボンディングカーブによって決定されます。

**パラメータ**

<x-field-group>
  <x-field data-name="tokenFactory" data-type="string" data-required="true" data-desc="トークンファクトリーのアドレス。"></x-field>
  <x-field data-name="amount" data-type="number" data-required="true" data-desc="バーンするトークンの量。"></x-field>
  <x-field data-name="receiver" data-type="string" data-required="true" data-desc="リザーブトークンを受け取るアドレス。"></x-field>
  <x-field data-name="minReserve" data-type="number" data-required="true" data-desc="ユーザーが受け取ることを期待するリザーブトークンの最小量。これはスリッページ保護として機能します。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="トランザクションのオプションのメタデータ。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="バーンを開始するウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript BurnTokenTx を送信 icon=logos:javascript
const txHash = await client.burnToken({
  tokenFactory: 'z2f...',
  amount: 50,
  receiver: userWallet.address,
  minReserve: 48, // 少なくとも48ネイティブトークンを受け取ることを期待
  wallet: userWallet,
});
console.log('Burn token tx hash:', txHash);
```

---


## 転送と交換

### transfer

ネイティブトークン、カスタムファンジブルトークン、および/またはアセット（NFT）を、単一のトランザクションで別のアカウントに転送します。

**パラメータ**

<x-field-group>
  <x-field data-name="to" data-type="string" data-required="true" data-desc="受信者のアドレス。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="送信者のウォレット。"></x-field>
  <x-field data-name="token" data-type="number" data-required="false" data-default="0" data-desc="転送するチェーンのネイティブトークンの量。"></x-field>
  <x-field data-name="assets" data-type="string[]" data-required="false" data-desc="転送するアセットアドレス（NFT）の配列。"></x-field>
  <x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="転送するカスタムファンジブルトークンオブジェクトの配列。">
    <x-field data-name="address" data-type="string" data-required="true" data-desc="カスタムトークンコントラクトのアドレス。"></x-field>
    <x-field data-name="value" data-type="number" data-required="true" data-desc="転送するカスタムトークンの量。"></x-field>
  </x-field>
  <x-field data-name="memo" data-type="string" data-required="false" data-desc="トランザクションのオプションのメモ。"></x-field>
  <x-field data-name="delegator" data-type="string" data-required="false" data-desc="該当する場合、デリゲーターのアドレス。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript TransferV2Tx を送信 icon=logos:javascript
const txHash = await client.transfer({
  to: 'z1sb...',
  token: 1.5, // 1.5 ネイティブチェーントークン
  assets: ['z3g...'], // NFT
  tokens: [{ address: 'z2t...', value: 100 }], // 100 カスタムトークン
  memo: 'Payment for services',
  wallet: senderWallet,
});
console.log('Transfer tx hash:', txHash);
```

### prepareExchange

アトミックスワップ（交換）トランザクションの送信者側を準備します。送信者のオファーに署名し、受信者に渡すことができるトランザクションオブジェクトを返します。

**パラメータ**

<x-field-group>
  <x-field data-name="receiver" data-type="string" data-required="true" data-desc="交換の相手方のアドレス。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="オファーを行うユーザーのウォレット。"></x-field>
  <x-field data-name="offerToken" data-type="number" data-required="false" data-desc="オファーされたネイティブトークンの量。"></x-field>
  <x-field data-name="offerAssets" data-type="string[]" data-required="false" data-desc="オファーされたアセットアドレスの配列。"></x-field>
  <x-field data-name="offerTokens" data-type="object[]" data-required="false" data-desc="オファーされたカスタムファンジブルトークンの配列。"></x-field>
  <x-field data-name="demandToken" data-type="number" data-required="false" data-desc="見返りとして要求されるネイティブトークンの量。"></x-field>
  <x-field data-name="demandAssets" data-type="string[]" data-required="false" data-desc="見返りとして要求されるアセットアドレスの配列。"></x-field>
  <x-field data-name="demandTokens" data-type="object[]" data-required="false" data-desc="要求されるカスタムファンジブルトークンの配列。"></x-field>
  <x-field data-name="memo" data-type="string" data-required="false" data-desc="トランザクションのオプションのメモ。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionObject" data-type="Promise<object>" data-desc="部分的に署名されたトランザクションオブジェクト。"></x-field>

### finalizeExchange

アトミックスワップの受信者側を最終処理します。`prepareExchange` からの部分的に署名されたトランザクションを受け取り、受信者の署名を追加し、完全に署名されたトランザクションオブジェクトを返します。

**パラメータ**

<x-field-group>
  <x-field data-name="tx" data-type="object" data-required="true" data-desc="`prepareExchange` から返されたトランザクションオブジェクト。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="オファーを受け入れるユーザーのウォレット。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="マルチシグネチャ内の追加データ。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionObject" data-type="Promise<object>" data-desc="完全に署名されたマルチシグネチャトランザクションオブジェクト。"></x-field>

### exchange

完全に署名された交換トランザクションをブロックチェーンに送信します。これは、`finalizeExchange` が完了した後、どちらかの当事者が呼び出すことができます。

**パラメータ**

<x-field-group>
  <x-field data-name="tx" data-type="object" data-required="true" data-desc="`finalizeExchange` から返されたトランザクションオブジェクト。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="トランザクションを送信するユーザーのウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例 (完全な交換フロー)**

```javascript アトミックスワップを実行 icon=logos:javascript
// 1. オファー側がトランザクションを準備
const offerTx = await client.prepareExchange({
  receiver: receiverWallet.address,
  offerAssets: ['z3g...'], // NFTをオファー
  demandToken: 10, // 10ネイティブトークンを要求
  wallet: offererWallet,
});

// 2. 受信者がトランザクションを最終処理
const finalTx = await client.finalizeExchange({
  tx: offerTx,
  wallet: receiverWallet,
});

// 3. どちらかの当事者が最終処理されたトランザクションを送信可能
const txHash = await client.exchange({ tx: finalTx, wallet: offererWallet });
console.log('Exchange tx hash:', txHash);
```

---


## ステーキング

### stake

トークンおよび/またはアセットを受信者アドレスにステークします。ステーキングはリソースをロックし、多くの場合、報酬と引き換えに、またはセキュリティを提供するために行われます。

**パラメータ**

<x-field-group>
  <x-field data-name="to" data-type="string" data-required="true" data-desc="ステークの受信者のアドレス。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ステーカーのウォレット。"></x-field>
  <x-field data-name="assets" data-type="string[]" data-required="false" data-desc="ステークするアセットアドレスの配列。"></x-field>
  <x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="ステークするファンジブルトークンオブジェクトの配列。"></x-field>
  <x-field data-name="locked" data-type="boolean" data-required="false" data-default="false" data-desc="作成時にステークがロックされるかどうか。"></x-field>
  <x-field data-name="slashers" data-type="string[]" data-required="false" data-desc="このステークをスラッシュすることが許可されているアドレスのリスト。"></x-field>
  <x-field data-name="message" data-type="string" data-required="false" data-desc="ステークのオプションのメモ。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="result" data-type="Promise<[string, string]>" data-desc="トランザクションハッシュと新しく作成されたステークのアドレスを含む配列。"></x-field>

**例**

```javascript StakeTx を送信 icon=logos:javascript
const [txHash, stakeAddress] = await client.stake({
  to: 'z1v...',
  tokens: [{ address: 'z2t...', value: 5000 }],
  message: 'Staking for validator rewards',
  wallet: userWallet,
});
console.log('Stake tx hash:', txHash);
console.log('New stake address:', stakeAddress);
```

### revokeStake

以前にステークされたトークンおよび/またはアセットを取り消し、所有者への返還プロセスを開始します。アセットが請求可能になるまでにアンボンディング期間がある場合があることに注意してください。

**パラメータ**

<x-field-group>
  <x-field data-name="from" data-type="string" data-required="true" data-desc="取り消すステークのアドレス。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ステーク所有者のウォレット。"></x-field>
  <x-field data-name="assets" data-type="string[]" data-required="false" data-desc="取り消すアセットアドレスの配列。"></x-field>
  <x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="取り消すファンジブルトークンオブジェクトの配列。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript RevokeStakeTx を送信 icon=logos:javascript
const txHash = await client.revokeStake({
  from: 'z6s...',
  tokens: [{ address: 'z2t...', value: 1000 }],
  wallet: userWallet,
});
console.log('Revoke stake tx hash:', txHash);
```

### claimStake

正常に取り消され、アンボンディング期間が経過したステークからアイテムを請求します。

**パラメータ**

<x-field-group>
  <x-field data-name="from" data-type="string" data-required="true" data-desc="請求するステークのアドレス。"></x-field>
  <x-field data-name="evidence" data-type="string" data-required="true" data-desc="`revokeStake` トランザクションのトランザクションハッシュ。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ステーク所有者のウォレット。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript ClaimStakeTx を送信 icon=logos:javascript
const revokeTxHash = '0x123...abc';
const txHash = await client.claimStake({
  from: 'z6s...',
  evidence: revokeTxHash,
  wallet: userWallet,
});
console.log('Claim stake tx hash:', txHash);
```

### slashStake

指定されたスラッシャーが、通常は不正行為に対してステークにペナルティを課すことを許可します。スラッシュされたアセットは、指定された保管庫アドレスに転送されます。

**パラメータ**

<x-field-group>
  <x-field data-name="from" data-type="string" data-required="true" data-desc="スラッシュするステークのアドレス。"></x-field>
  <x-field data-name="reason" data-type="string" data-required="true" data-desc="スラッシュの理由を説明するメッセージ。"></x-field>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="指定されたスラッシャーのウォレット。"></x-field>
  <x-field data-name="assets" data-type="string[]" data-required="false" data-desc="スラッシュするアセットアドレスの配列。"></x-field>
  <x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="スラッシュするファンジブルトークンオブジェクトの配列。"></x-field>
</x-field-group>

**戻り値**

<x-field data-name="transactionHash" data-type="Promise<string>" data-desc="送信されたトランザクションのハッシュ。"></x-field>

**例**

```javascript SlashStakeTx を送信 icon=logos:javascript
const txHash = await client.slashStake({
  from: 'z6s...',
  reason: 'Validator downtime',
  tokens: [{ address: 'z2t...', value: 500 }],
  wallet: slasherWallet,
});
console.log('Slash stake tx hash:', txHash);
```
