メインコンテンツへスキップ

トークンとアセットのステーク

ステーキングとは、特定の受取人に対してトークンやアセット(NFT)をロックアップするプロセスであり、多くの場合、ネットワークのセキュリティを確保したり、ガバナンスに参加したり、報酬を得るために行われます。このガイドでは、OCAP Client を使用したステーキングのライフサイクル全体を段階的に説明します。これには、ステークの作成、その取り消し、アセットの請求、懲罰的な理由によるステークのスラッシュが含まれます。

このプロセスには、いくつかの主要なメソッドが関わります:

  • stake(): 新しいステークを作成します。
  • revokeStake(): ステークされたアイテムを引き出すプロセスを開始します。
  • claimStake(): 引き出しを完了し、アイテムをアカウントに戻します。
  • slashStake(): 権限を持つ者がステーカーにペナルティを課すことを許可します。

ステーク方法

まず、stake メソッドを使用してトークンやアセットをロックします。このアクションにより、ステークされたアイテムとそのルールを保持する、チェーン上で一意の新しいステークアドレスが作成されます。

パラメータ

  • to string (required) — ステークを受け取るアカウントのDIDアドレス。
  • assets string[] — ステークするアセットアドレス(NFT)の配列。
  • tokens object[] — ステークするトークンオブジェクトの配列。
    • address string (required) — トークンコントラクトのアドレス。
    • value number (required) — ステークするトークンの量。
  • wallet WalletObject (required) — ステーカーのウォレットオブジェクト。
  • locked boolean (default: false) — 作成時にステークがロックされるかどうかを示すブール値。
  • slashers string[] — このステークをスラッシュすることが許可されているDIDアドレスの配列。指定しない場合、デフォルトで受取人のアドレスになります。
  • message string — ステークのためのオプションのメモまたはメッセージ。
  • nonce string — ステークアドレスが一意であることを保証するためのオプションのナンス。

トークンとアセットのステーキング

javascript
// 'client' は初期化された GraphQLClient インスタンスであると仮定します
// また 'stakerWallet' は有効なウォレットオブジェクトであると仮定します。
const receiverAddress = 'z29d5852576b8a8b6f3a8b4b74a3f4a3e2e1d'; // ステーク受取人のアドレス

async function createStake() {
  try {
    const [txHash, stakeAddress] = await client.stake({
      to: receiverAddress,
      tokens: [{
        address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E', // ステークするトークンのアドレス
        value: 100, // ステークするトークンの量
      }],
      assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], // ステークするアセット/NFTのアドレス
      message: 'Staking for validator rewards',
      wallet: stakerWallet,
    });

    console.log('Stake transaction sent:', txHash);
    console.log('New stake address created:', stakeAddress);
    return stakeAddress;
  } catch (error) {
    console.error('Error creating stake:', error);
  }
}

戻り値

stake メソッドは、トランザクションハッシュと新しく作成された stakeAddress を含むタプルを返します。このアドレスは、取り消しやスラッシュなど、この特定のステークとの将来のすべてのやり取りにとって重要です。

ステークの取り消し方法

ステークの取り消しは、ステーカーがロックされたトークンとアセットを回収するために開始するプロセスです。このトランザクションは資金を即座に返すのではなく、チェーン上のロックアップ期間に従って、請求可能としてマークします。

パラメータ

  • from string (required) — 取り消すステークのアドレス('stake' 呼び出しから取得)。
  • assets string[] — ステークから取り消すアセットアドレスの配列。
  • tokens object[] — 取り消すトークンオブジェクトの配列。
    • address string (required) — トークンコントラクトのアドレス。
    • value number (required) — 取り消すトークンの量。
  • wallet WalletObject (required) — ステーカーのウォレットオブジェクト。ステークの元の作成者である必要があります。

ステークの取り消し

javascript
// 'stakeAddress' は前のステップで返されたアドレスであると仮定します
// また 'stakerWallet' はステークの作成に使用されたものと同じウォレットであると仮定します。

async function revokeExistingStake(stakeAddress) {
  try {
    const revokeTxHash = await client.revokeStake({
      from: stakeAddress,
      tokens: [{
        address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E',
        value: 100,
      }],
      assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'],
      wallet: stakerWallet,
    });

    console.log('Revoke stake transaction sent:', revokeTxHash);
    console.log('IMPORTANT: Save this hash to claim your stake later.');
    return revokeTxHash;
  } catch (error) {
    console.error('Error revoking stake:', error);
  }
}

戻り値

この関数は、取り消し操作のトランザクションハッシュを返します。このハッシュは証明として機能し、ステークを請求する最終ステップで必須となります。

取り消されたステークの請求方法

ステークが正常に取り消された後、ステーカーは claimStake トランザクションを送信して、トークンとアセットを自分のアカウントに戻す必要があります。これにより、引き出しプロセスが完了します。

パラメータ

  • from string (required) — ステークのアドレス。
  • evidence string (required) — 'revokeStake' 呼び出しからのトランザクションハッシュ。これは取り消しの証明として機能します。
  • wallet WalletObject (required) — ステーカーのウォレットオブジェクト。

ステークされたアイテムの請求

javascript
// 'stakeAddress' と 'revokeTxHash' は前のステップからのものであると仮定します。
// また 'stakerWallet' はステーカーのウォレットであると仮定します。

async function claimRevokedStake(stakeAddress, revokeTxHash) {
  try {
    const claimTxHash = await client.claimStake({
      from: stakeAddress,
      evidence: revokeTxHash,
      wallet: stakerWallet,
    });

    console.log('Claim stake transaction sent:', claimTxHash);
    console.log('Your tokens and assets have been returned to your account.');
  } catch (error) {
    console.error('Error claiming stake:', error);
  }
}

戻り値

このメソッドは、最終的なトランザクションハッシュを返します。このトランザクションがチェーン上で確認されると、ステークされたアイテムは wallet のアドレスに返されます。

ステークのスラッシュ方法

スラッシュは、指定された slasher(通常はステークの受取人)がステーカーに対して行うことができる懲罰的措置です。これは通常、ステーカーが特定のルールに違反した場合に発生します。スラッシュされたトークンやアセットはステークから削除され、指定された保管庫に送られます。

パラメータ

  • from string (required) — スラッシュされるステークのアドレス。
  • reason string (required) — スラッシュが発生する理由を説明する必須のメッセージ。
  • assets string[] — ステークからスラッシュされるアセットアドレスの配列。
  • tokens object[] — スラッシュされるトークンオブジェクトの配列。
    • address string (required) — トークンコントラクトのアドレス。
    • value number (required) — スラッシュするトークンの量。
  • wallet WalletObject (required) — 権限のあるスラッシャーのウォレットオブジェクト。

ステークのスラッシュ

javascript
// 'stakeAddress' はスラッシュされるステークのアドレスであると仮定します。
// また 'slasherWallet' は権限のあるスラッシャーのウォレットであると仮定します。

async function slashExistingStake(stakeAddress) {
  try {
    const slashTxHash = await client.slashStake({
      from: stakeAddress,
      reason: 'Validator missed signing 10 consecutive blocks.',
      tokens: [{
        address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E',
        value: 10, // ペナルティとして10トークンをスラッシュする
      }],
      wallet: slasherWallet,
    });

    console.log('Slash stake transaction sent:', slashTxHash);
  } catch (error) {
    console.error('Error slashing stake:', error);
  }
}

戻り値

このメソッドは、スラッシュ操作のトランザクションハッシュを返します。

まとめ

これで、OCAP ブロックチェーン上でのステーキングの完全なライフサイクルを学びました:stake でステークを作成し、revokeStakeclaimStake で資金を回収し、slashStake で不正な行為者を罰します。この強力なメカニズムは、多くの分散型アプリケーションの基礎となります。

ステークできるアイテムについてさらに詳しく知りたい場合は、トークンの管理 および アセット(NFT)の管理 のガイドを参照してください。