ステーキングとは、特定の受取人に対してトークンやアセット(NFT)をロックアップするプロセスであり、多くの場合、ネットワークのセキュリティを確保したり、ガバナンスに参加したり、報酬を得るために行われます。このガイドでは、OCAP Client を使用したステーキングのライフサイクル全体を段階的に説明します。これには、ステークの作成、その取り消し、アセットの請求、懲罰的な理由によるステークのスラッシュが含まれます。
このプロセスには、いくつかの主要なメソッドが関わります:
stake(): 新しいステークを作成します。revokeStake(): ステークされたアイテムを引き出すプロセスを開始します。claimStake(): 引き出しを完了し、アイテムをアカウントに戻します。slashStake(): 権限を持つ者がステーカーにペナルティを課すことを許可します。
ステーク方法
まず、stake メソッドを使用してトークンやアセットをロックします。このアクションにより、ステークされたアイテムとそのルールを保持する、チェーン上で一意の新しいステークアドレスが作成されます。
パラメータ
- to
string(required) — ステークを受け取るアカウントのDIDアドレス。 - assets
string[]— ステークするアセットアドレス(NFT)の配列。 - tokens
object[]— ステークするトークンオブジェクトの配列。- address
string(required) — トークンコントラクトのアドレス。 - value
number(required) — ステークするトークンの量。
- address
- wallet
WalletObject(required) — ステーカーのウォレットオブジェクト。 - locked
boolean(default:false) — 作成時にステークがロックされるかどうかを示すブール値。 - slashers
string[]— このステークをスラッシュすることが許可されているDIDアドレスの配列。指定しない場合、デフォルトで受取人のアドレスになります。 - message
string— ステークのためのオプションのメモまたはメッセージ。 - nonce
string— ステークアドレスが一意であることを保証するためのオプションのナンス。
例
トークンとアセットのステーキング
// '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) — 取り消すトークンの量。
- address
- wallet
WalletObject(required) — ステーカーのウォレットオブジェクト。ステークの元の作成者である必要があります。
例
ステークの取り消し
// '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) — ステーカーのウォレットオブジェクト。
例
ステークされたアイテムの請求
// '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) — スラッシュするトークンの量。
- address
- wallet
WalletObject(required) — 権限のあるスラッシャーのウォレットオブジェクト。
例
ステークのスラッシュ
// '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 でステークを作成し、revokeStake と claimStake で資金を回収し、slashStake で不正な行為者を罰します。この強力なメカニズムは、多くの分散型アプリケーションの基礎となります。
ステークできるアイテムについてさらに詳しく知りたい場合は、トークンの管理 および アセット(NFT)の管理 のガイドを参照してください。