支払い高度な支払い

支出権限

Solanaのトークンプログラムは委任をサポートしています。これは、指定された上限まで、あなたのトークンアカウントからトークンを転送する権限を別のアカウントに付与するものです。これにより、資金の管理権を手放すことなく、自動支払い、エスクローサービス、サードパーティ決済処理などのユースケースが可能になります。

委任の仕組み

委任先を承認すると、特定のアカウントにあなたの代わりにトークンを転送する権限を与えることになります。

  • 所有者が管理権を保持: トークンの所有権は引き続きあなたにあり、いつでも転送または取り消しが可能です
  • 支出上限の設定: 委任先は承認された金額までしか転送できません
  • アカウントごとに1つの委任先: 各トークンアカウントは、アクティブな委任先を1つだけ持つことができます
  • 新しい承認で古い承認を置き換え: 新しい委任先を承認すると、以前の委任先は自動的に取り消されます

委任は非カストディアルです。委任先は上限までトークンを使用できますが、承認された金額を超えてアカウントにアクセスしたり、資金を引き出したりすることはできません。所有者はいつでも取り消すことができます。

ビジネスユースケース

ユースケース委任の活用方法
決済処理業者加盟店が決済処理業者に取引決済の権限を付与
自動給与支払い財務部門が給与サービスに給与支払いの権限を承認
エスクローサービス購入者がエスクローエージェントに条件付きリリースの権限を委任
取引プラットフォームユーザーが取引所に代理取引の実行を承認
カード発行ユーザーがカード発行会社に、トークンアカウントへの購入請求を承認

委任先の承認

あなたのアカウントからトークンを使用する権限を別のアカウントに付与します:

import { getApproveCheckedInstruction } from "@solana-program/token";
// Approve delegate to spend up to 1,000 USDC (6 decimals)
const approveInstruction = getApproveCheckedInstruction({
source: tokenAccountAddress, // Your token account
mint: usdcMintAddress, // USDC mint
delegate: delegateAddress, // Account receiving permission
owner: ownerKeypair, // You (must sign)
amount: 1_000_000_000n, // 1,000 USDC in base units
decimals: 6
});

パラメータ:

  • source: 権限を付与するトークンアカウント
  • delegate: 使用権限を持つアカウント
  • owner: トークンアカウントの現在の所有者(トランザクションに署名する必要があります)
  • amount: デリゲートが転送できる最大トークン数
  • decimals: 検証用のトークンの小数点以下桁数(小数点エラーを防ぎます)

デリゲートの取り消し

現在のデリゲートからすべての使用権限を削除します:

import { getRevokeInstruction } from "@solana-program/token";
const revokeInstruction = getRevokeInstruction({
source: tokenAccountAddress, // Your token account
owner: ownerKeypair // You (must sign)
});

取り消しはすべてのデリゲート権限を削除します。部分的な取り消しはできません。制限を減らす必要がある場合は、同じデリゲートに対してより低い金額で承認してください。

デリゲーションステータスの確認

トークンアカウントを照会して、現在のデリゲートと残りの許可量を確認します:

import { fetchToken } from "@solana-program/token";
const tokenAccount = await fetchToken(rpc, tokenAccountAddress);
if (tokenAccount.data.delegate) {
console.log("Delegate:", tokenAccount.data.delegate);
console.log("Remaining allowance:", tokenAccount.data.delegatedAmount);
} else {
console.log("No delegate set");
}

デリゲートとしての転送

デリゲートとして動作する場合は、標準的な転送を使用しますが、所有者ではなくデリゲートのkeypairで署名します:

Transfer as Delegate
import { getTransferCheckedInstruction } from "@solana-program/token";
const transferInstruction = getTransferCheckedInstruction({
source: ownerTokenAccount, // The account you have permission to spend from
mint: usdcMintAddress,
destination: recipientTokenAccount,
authority: delegateKeypair, // You (the delegate) sign, not the owner
amount: 100_000_000n, // 100 USDC
decimals: 6
});

転送は次の場合に成功します:

  • 送信元アカウントに十分な残高がある
  • デリゲートがトランザクションに署名する

各転送により、残りの許可額が減少します。許可額がゼロになると、委任者はトークンを転送できなくなります。

セキュリティに関する考慮事項

アカウント所有者の場合:

  • 信頼できる委任者のみを承認する
  • 必要最小限の支出制限を設定する
  • 不要になった委任は取り消す
  • 予期しない転送がないかアカウントを監視する

サービスプロバイダー(委任者)の場合:

  • 要求する支出制限をユーザーに明確に伝える
  • 委任者アカウントの適切な鍵管理を実装する
  • 許可額の消費を追跡し、制限に達する前に再承認を要求する

委任と保管の比較

項目委任完全保管
トークンの所有権ユーザーが保持ユーザーが保管者に譲渡
支出管理承認額で上限設定譲渡された資金への完全アクセス
取り消し所有者による即時実行保管者の協力が必要
リスクエクスポージャー承認額に限定残高全体
必要な信頼限定的高い

委任は中間的な選択肢を提供し、承認額にリスクエクスポージャーを制限しながら自動支払いを可能にします。

関連リソース

Is this page helpful?

目次

ページを編集

管理運営

© 2026 Solana Foundation.
無断転載を禁じます。
つながろう