@ocap/client 1.25.6 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -79
- package/dist/base.js +2 -2
- package/dist/base.js.map +1 -1
- package/dist/bundle.js +1 -1
- package/dist/extension.js +4 -4
- package/dist/extension.js.map +1 -1
- package/dist/report.html +2 -2
- package/docs/api-reference-client-methods.ja.md +38 -38
- package/docs/api-reference-client-methods.zh-TW.md +47 -47
- package/docs/api-reference-client-methods.zh.md +34 -34
- package/docs/api-reference-data-types.ja.md +20 -20
- package/docs/api-reference-data-types.zh-TW.md +17 -17
- package/docs/api-reference-data-types.zh.md +24 -24
- package/docs/api-reference-low-level-api.ja.md +49 -49
- package/docs/api-reference-low-level-api.zh-TW.md +48 -48
- package/docs/api-reference-low-level-api.zh.md +43 -43
- package/docs/api-reference-query-mutation-methods.ja.md +85 -85
- package/docs/api-reference-query-mutation-methods.zh-TW.md +140 -140
- package/docs/api-reference-query-mutation-methods.zh.md +141 -141
- package/docs/api-reference-transaction-helpers.ja.md +120 -120
- package/docs/api-reference-transaction-helpers.zh-TW.md +119 -119
- package/docs/api-reference-transaction-helpers.zh.md +153 -153
- package/docs/api-reference.ja.md +6 -6
- package/docs/api-reference.zh-TW.md +5 -5
- package/docs/api-reference.zh.md +8 -8
- package/docs/core-concepts-client-architecture.ja.md +26 -26
- package/docs/core-concepts-client-architecture.zh-TW.md +34 -34
- package/docs/core-concepts-client-architecture.zh.md +26 -26
- package/docs/core-concepts-event-subscriptions.ja.md +29 -29
- package/docs/core-concepts-event-subscriptions.zh-TW.md +23 -23
- package/docs/core-concepts-event-subscriptions.zh.md +29 -29
- package/docs/core-concepts-gas-payment.ja.md +27 -27
- package/docs/core-concepts-gas-payment.zh-TW.md +28 -28
- package/docs/core-concepts-gas-payment.zh.md +32 -32
- package/docs/core-concepts-transaction-lifecycle.ja.md +40 -40
- package/docs/core-concepts-transaction-lifecycle.zh-TW.md +43 -43
- package/docs/core-concepts-transaction-lifecycle.zh.md +49 -49
- package/docs/core-concepts.ja.md +7 -7
- package/docs/core-concepts.zh-TW.md +6 -6
- package/docs/core-concepts.zh.md +7 -7
- package/docs/getting-started-basic-usage.ja.md +24 -24
- package/docs/getting-started-basic-usage.zh-TW.md +28 -28
- package/docs/getting-started-basic-usage.zh.md +24 -24
- package/docs/getting-started-installation.ja.md +13 -13
- package/docs/getting-started-installation.zh-TW.md +9 -9
- package/docs/getting-started-installation.zh.md +15 -15
- package/docs/getting-started.ja.md +5 -5
- package/docs/getting-started.zh-TW.md +6 -6
- package/docs/getting-started.zh.md +6 -7
- package/docs/how-to-guides-delegate-permissions.ja.md +21 -21
- package/docs/how-to-guides-delegate-permissions.zh-TW.md +20 -21
- package/docs/how-to-guides-delegate-permissions.zh.md +18 -18
- package/docs/how-to-guides-manage-accounts.ja.md +21 -21
- package/docs/how-to-guides-manage-accounts.zh-TW.md +23 -23
- package/docs/how-to-guides-manage-accounts.zh.md +17 -17
- package/docs/how-to-guides-manage-assets.ja.md +137 -60
- package/docs/how-to-guides-manage-assets.md +77 -0
- package/docs/how-to-guides-manage-assets.zh-TW.md +116 -39
- package/docs/how-to-guides-manage-assets.zh.md +142 -65
- package/docs/how-to-guides-manage-tokens.ja.md +47 -47
- package/docs/how-to-guides-manage-tokens.zh-TW.md +49 -49
- package/docs/how-to-guides-manage-tokens.zh.md +34 -34
- package/docs/how-to-guides-stake-tokens-and-assets.ja.md +56 -56
- package/docs/how-to-guides-stake-tokens-and-assets.zh-TW.md +55 -55
- package/docs/how-to-guides-stake-tokens-and-assets.zh.md +51 -51
- package/docs/how-to-guides-transfer-tokens-and-nfts.ja.md +45 -45
- package/docs/how-to-guides-transfer-tokens-and-nfts.zh-TW.md +46 -46
- package/docs/how-to-guides-transfer-tokens-and-nfts.zh.md +37 -37
- package/docs/how-to-guides.ja.md +8 -8
- package/docs/how-to-guides.zh-TW.md +4 -4
- package/docs/how-to-guides.zh.md +6 -6
- package/docs/overview.ja.md +15 -15
- package/docs/overview.zh-TW.md +14 -14
- package/docs/overview.zh.md +12 -12
- package/lib/base.js +2 -2
- package/lib/base.js.map +1 -1
- package/lib/extension.js +4 -4
- package/lib/extension.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
#
|
|
1
|
+
# トークンとアセットのステーク
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
ステーキングとは、特定の受取人に対してトークンやアセット(NFT)をロックアップするプロセスであり、多くの場合、ネットワークのセキュリティを確保したり、ガバナンスに参加したり、報酬を得るために行われます。このガイドでは、OCAP Client を使用したステーキングのライフサイクル全体を段階的に説明します。これには、ステークの作成、その取り消し、アセットの請求、懲罰的な理由によるステークのスラッシュが含まれます。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
- `stake()`:
|
|
7
|
-
- `revokeStake()`:
|
|
8
|
-
- `claimStake()`:
|
|
9
|
-
- `slashStake()`:
|
|
5
|
+
このプロセスには、いくつかの主要なメソッドが関わります:
|
|
6
|
+
- `stake()`: 新しいステークを作成します。
|
|
7
|
+
- `revokeStake()`: ステークされたアイテムを引き出すプロセスを開始します。
|
|
8
|
+
- `claimStake()`: 引き出しを完了し、アイテムをアカウントに戻します。
|
|
9
|
+
- `slashStake()`: 権限を持つ者がステーカーにペナルティを課すことを許可します。
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## ステーク方法
|
|
12
12
|
|
|
13
|
-
まず、`stake`
|
|
13
|
+
まず、`stake` メソッドを使用してトークンやアセットをロックします。このアクションにより、ステークされたアイテムとそのルールを保持する、チェーン上で一意の新しいステークアドレスが作成されます。
|
|
14
14
|
|
|
15
15
|
### パラメータ
|
|
16
16
|
|
|
17
17
|
<x-field-group>
|
|
18
|
-
<x-field data-name="to" data-type="string" data-required="true" data-desc="ステークを受け取るアカウントの
|
|
19
|
-
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="
|
|
18
|
+
<x-field data-name="to" data-type="string" data-required="true" data-desc="ステークを受け取るアカウントのDIDアドレス。"></x-field>
|
|
19
|
+
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="ステークするアセットアドレス(NFT)の配列。"></x-field>
|
|
20
20
|
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="ステークするトークンオブジェクトの配列。">
|
|
21
21
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="トークンコントラクトのアドレス。"></x-field>
|
|
22
22
|
<x-field data-name="value" data-type="number" data-required="true" data-desc="ステークするトークンの量。"></x-field>
|
|
23
23
|
</x-field>
|
|
24
24
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ステーカーのウォレットオブジェクト。"></x-field>
|
|
25
25
|
<x-field data-name="locked" data-type="boolean" data-default="false" data-required="false" data-desc="作成時にステークがロックされるかどうかを示すブール値。"></x-field>
|
|
26
|
-
<x-field data-name="slashers" data-type="string[]" data-required="false" data-desc="このステークをスラッシュすることが許可されている
|
|
26
|
+
<x-field data-name="slashers" data-type="string[]" data-required="false" data-desc="このステークをスラッシュすることが許可されているDIDアドレスの配列。指定しない場合、デフォルトで受取人のアドレスになります。"></x-field>
|
|
27
27
|
<x-field data-name="message" data-type="string" data-required="false" data-desc="ステークのためのオプションのメモまたはメッセージ。"></x-field>
|
|
28
28
|
<x-field data-name="nonce" data-type="string" data-required="false" data-desc="ステークアドレスが一意であることを保証するためのオプションのナンス。"></x-field>
|
|
29
29
|
</x-field-group>
|
|
30
30
|
|
|
31
31
|
### 例
|
|
32
32
|
|
|
33
|
-
```javascript
|
|
34
|
-
// 'client'
|
|
35
|
-
// 'stakerWallet'
|
|
36
|
-
const receiverAddress = 'z29d5852576b8a8b6f3a8b4b74a3f4a3e2e1d'; //
|
|
33
|
+
```javascript トークンとアセットのステーキング icon=logos:javascript
|
|
34
|
+
// 'client' は初期化された GraphQLClient インスタンスであると仮定します
|
|
35
|
+
// また 'stakerWallet' は有効なウォレットオブジェクトであると仮定します。
|
|
36
|
+
const receiverAddress = 'z29d5852576b8a8b6f3a8b4b74a3f4a3e2e1d'; // ステーク受取人のアドレス
|
|
37
37
|
|
|
38
38
|
async function createStake() {
|
|
39
39
|
try {
|
|
@@ -43,16 +43,16 @@ async function createStake() {
|
|
|
43
43
|
address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E', // ステークするトークンのアドレス
|
|
44
44
|
value: 100, // ステークするトークンの量
|
|
45
45
|
}],
|
|
46
|
-
assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], //
|
|
47
|
-
message: '
|
|
46
|
+
assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], // ステークするアセット/NFTのアドレス
|
|
47
|
+
message: 'Staking for validator rewards',
|
|
48
48
|
wallet: stakerWallet,
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
-
console.log('
|
|
52
|
-
console.log('
|
|
51
|
+
console.log('Stake transaction sent:', txHash);
|
|
52
|
+
console.log('New stake address created:', stakeAddress);
|
|
53
53
|
return stakeAddress;
|
|
54
54
|
} catch (error) {
|
|
55
|
-
console.error('
|
|
55
|
+
console.error('Error creating stake:', error);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
```
|
|
@@ -63,27 +63,27 @@ async function createStake() {
|
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
|
-
##
|
|
66
|
+
## ステークの取り消し方法
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
ステークの取り消しは、ステーカーがロックされたトークンとアセットを回収するために開始するプロセスです。このトランザクションは資金を即座に返すのではなく、チェーン上のロックアップ期間に従って、請求可能としてマークします。
|
|
69
69
|
|
|
70
70
|
### パラメータ
|
|
71
71
|
|
|
72
72
|
<x-field-group>
|
|
73
|
-
<x-field data-name="from" data-type="string" data-required="true" data-desc="
|
|
74
|
-
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="
|
|
73
|
+
<x-field data-name="from" data-type="string" data-required="true" data-desc="取り消すステークのアドレス('stake' 呼び出しから取得)。"></x-field>
|
|
74
|
+
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="ステークから取り消すアセットアドレスの配列。"></x-field>
|
|
75
75
|
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="取り消すトークンオブジェクトの配列。">
|
|
76
76
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="トークンコントラクトのアドレス。"></x-field>
|
|
77
77
|
<x-field data-name="value" data-type="number" data-required="true" data-desc="取り消すトークンの量。"></x-field>
|
|
78
78
|
</x-field>
|
|
79
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
79
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ステーカーのウォレットオブジェクト。ステークの元の作成者である必要があります。"></x-field>
|
|
80
80
|
</x-field-group>
|
|
81
81
|
|
|
82
82
|
### 例
|
|
83
83
|
|
|
84
|
-
```javascript
|
|
85
|
-
// 'stakeAddress'
|
|
86
|
-
// 'stakerWallet'
|
|
84
|
+
```javascript ステークの取り消し icon=logos:javascript
|
|
85
|
+
// 'stakeAddress' は前のステップで返されたアドレスであると仮定します
|
|
86
|
+
// また 'stakerWallet' はステークの作成に使用されたものと同じウォレットであると仮定します。
|
|
87
87
|
|
|
88
88
|
async function revokeExistingStake(stakeAddress) {
|
|
89
89
|
try {
|
|
@@ -97,38 +97,38 @@ async function revokeExistingStake(stakeAddress) {
|
|
|
97
97
|
wallet: stakerWallet,
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
console.log('
|
|
101
|
-
console.log('
|
|
100
|
+
console.log('Revoke stake transaction sent:', revokeTxHash);
|
|
101
|
+
console.log('IMPORTANT: Save this hash to claim your stake later.');
|
|
102
102
|
return revokeTxHash;
|
|
103
103
|
} catch (error) {
|
|
104
|
-
console.error('
|
|
104
|
+
console.error('Error revoking stake:', error);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
### 戻り値
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
この関数は、取り消し操作のトランザクションハッシュを返します。このハッシュは証明として機能し、ステークを請求する最終ステップで**必須**となります。
|
|
112
112
|
|
|
113
113
|
---
|
|
114
114
|
|
|
115
|
-
##
|
|
115
|
+
## 取り消されたステークの請求方法
|
|
116
116
|
|
|
117
|
-
ステークが正常に取り消された後、ステーカーは `claimStake`
|
|
117
|
+
ステークが正常に取り消された後、ステーカーは `claimStake` トランザクションを送信して、トークンとアセットを自分のアカウントに戻す必要があります。これにより、引き出しプロセスが完了します。
|
|
118
118
|
|
|
119
119
|
### パラメータ
|
|
120
120
|
|
|
121
121
|
<x-field-group>
|
|
122
122
|
<x-field data-name="from" data-type="string" data-required="true" data-desc="ステークのアドレス。"></x-field>
|
|
123
|
-
<x-field data-name="evidence" data-type="string" data-required="true" data-desc="'revokeStake'
|
|
123
|
+
<x-field data-name="evidence" data-type="string" data-required="true" data-desc="'revokeStake' 呼び出しからのトランザクションハッシュ。これは取り消しの証明として機能します。"></x-field>
|
|
124
124
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ステーカーのウォレットオブジェクト。"></x-field>
|
|
125
125
|
</x-field-group>
|
|
126
126
|
|
|
127
127
|
### 例
|
|
128
128
|
|
|
129
|
-
```javascript
|
|
130
|
-
// 'stakeAddress' と 'revokeTxHash'
|
|
131
|
-
// 'stakerWallet' はステーカーのウォレットであると仮定します。
|
|
129
|
+
```javascript ステークされたアイテムの請求 icon=logos:javascript
|
|
130
|
+
// 'stakeAddress' と 'revokeTxHash' は前のステップからのものであると仮定します。
|
|
131
|
+
// また 'stakerWallet' はステーカーのウォレットであると仮定します。
|
|
132
132
|
|
|
133
133
|
async function claimRevokedStake(stakeAddress, revokeTxHash) {
|
|
134
134
|
try {
|
|
@@ -138,58 +138,58 @@ async function claimRevokedStake(stakeAddress, revokeTxHash) {
|
|
|
138
138
|
wallet: stakerWallet,
|
|
139
139
|
});
|
|
140
140
|
|
|
141
|
-
console.log('
|
|
142
|
-
console.log('
|
|
141
|
+
console.log('Claim stake transaction sent:', claimTxHash);
|
|
142
|
+
console.log('Your tokens and assets have been returned to your account.');
|
|
143
143
|
} catch (error) {
|
|
144
|
-
console.error('
|
|
144
|
+
console.error('Error claiming stake:', error);
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
### 戻り値
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
このメソッドは、最終的なトランザクションハッシュを返します。このトランザクションがチェーン上で確認されると、ステークされたアイテムは `wallet` のアドレスに返されます。
|
|
152
152
|
|
|
153
153
|
---
|
|
154
154
|
|
|
155
|
-
##
|
|
155
|
+
## ステークのスラッシュ方法
|
|
156
156
|
|
|
157
|
-
スラッシュは、指定された `slasher
|
|
157
|
+
スラッシュは、指定された `slasher`(通常はステークの受取人)がステーカーに対して行うことができる懲罰的措置です。これは通常、ステーカーが特定のルールに違反した場合に発生します。スラッシュされたトークンやアセットはステークから削除され、指定された保管庫に送られます。
|
|
158
158
|
|
|
159
159
|
### パラメータ
|
|
160
160
|
|
|
161
161
|
<x-field-group>
|
|
162
162
|
<x-field data-name="from" data-type="string" data-required="true" data-desc="スラッシュされるステークのアドレス。"></x-field>
|
|
163
163
|
<x-field data-name="reason" data-type="string" data-required="true" data-desc="スラッシュが発生する理由を説明する必須のメッセージ。"></x-field>
|
|
164
|
-
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="
|
|
164
|
+
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="ステークからスラッシュされるアセットアドレスの配列。"></x-field>
|
|
165
165
|
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="スラッシュされるトークンオブジェクトの配列。">
|
|
166
166
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="トークンコントラクトのアドレス。"></x-field>
|
|
167
167
|
<x-field data-name="value" data-type="number" data-required="true" data-desc="スラッシュするトークンの量。"></x-field>
|
|
168
168
|
</x-field>
|
|
169
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
169
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="権限のあるスラッシャーのウォレットオブジェクト。"></x-field>
|
|
170
170
|
</x-field-group>
|
|
171
171
|
|
|
172
172
|
### 例
|
|
173
173
|
|
|
174
|
-
```javascript
|
|
175
|
-
// 'stakeAddress'
|
|
176
|
-
// 'slasherWallet'
|
|
174
|
+
```javascript ステークのスラッシュ icon=logos:javascript
|
|
175
|
+
// 'stakeAddress' はスラッシュされるステークのアドレスであると仮定します。
|
|
176
|
+
// また 'slasherWallet' は権限のあるスラッシャーのウォレットであると仮定します。
|
|
177
177
|
|
|
178
178
|
async function slashExistingStake(stakeAddress) {
|
|
179
179
|
try {
|
|
180
180
|
const slashTxHash = await client.slashStake({
|
|
181
181
|
from: stakeAddress,
|
|
182
|
-
reason: '
|
|
182
|
+
reason: 'Validator missed signing 10 consecutive blocks.',
|
|
183
183
|
tokens: [{
|
|
184
184
|
address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E',
|
|
185
|
-
value: 10, //
|
|
185
|
+
value: 10, // ペナルティとして10トークンをスラッシュする
|
|
186
186
|
}],
|
|
187
187
|
wallet: slasherWallet,
|
|
188
188
|
});
|
|
189
189
|
|
|
190
|
-
console.log('
|
|
190
|
+
console.log('Slash stake transaction sent:', slashTxHash);
|
|
191
191
|
} catch (error) {
|
|
192
|
-
console.error('
|
|
192
|
+
console.error('Error slashing stake:', error);
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
```
|
|
@@ -200,6 +200,6 @@ async function slashExistingStake(stakeAddress) {
|
|
|
200
200
|
|
|
201
201
|
## まとめ
|
|
202
202
|
|
|
203
|
-
これで、OCAP
|
|
203
|
+
これで、OCAP ブロックチェーン上でのステーキングの完全なライフサイクルを学びました:`stake` でステークを作成し、`revokeStake` と `claimStake` で資金を回収し、`slashStake` で不正な行為者を罰します。この強力なメカニズムは、多くの分散型アプリケーションの基礎となります。
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
ステークできるアイテムについてさらに詳しく知りたい場合は、[トークンの管理](./how-to-guides-manage-tokens.md) および [アセット(NFT)の管理](./how-to-guides-manage-assets.md) のガイドを参照してください。
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
# 質押代幣與資產
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
「質押」是將代幣或資產 (NFT) 鎖定給特定接收者的過程,通常是為了保護網路、參與治理或賺取獎勵。本指南將逐步引導您使用 OCAP Client 完成整個質押生命週期,包括建立質押、撤銷質押、取回資產以及因懲罰性原因而削減質押。
|
|
4
4
|
|
|
5
5
|
此過程涉及幾個關鍵方法:
|
|
6
|
-
- `stake()`:
|
|
7
|
-
- `revokeStake()`:
|
|
8
|
-
- `claimStake()`:
|
|
9
|
-
- `slashStake()`:
|
|
6
|
+
- `stake()`: 建立新的質押。
|
|
7
|
+
- `revokeStake()`: 啟動撤回您已質押物品的過程。
|
|
8
|
+
- `claimStake()`: 完成撤回並將物品返還至您的帳戶。
|
|
9
|
+
- `slashStake()`: 允許授權方懲罰質押者。
|
|
10
10
|
|
|
11
11
|
## 如何質押
|
|
12
12
|
|
|
13
|
-
首先,您使用 `stake`
|
|
13
|
+
首先,您使用 `stake` 方法來鎖定您的代幣或資產。此操作會在鏈上建立一個新的、唯一的質押地址,用於存放您質押的物品及管理它們的規則。
|
|
14
14
|
|
|
15
15
|
### 參數
|
|
16
16
|
|
|
17
17
|
<x-field-group>
|
|
18
|
-
<x-field data-name="to" data-type="string" data-required="true" data-desc="
|
|
19
|
-
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="
|
|
20
|
-
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="
|
|
18
|
+
<x-field data-name="to" data-type="string" data-required="true" data-desc="將接收質押的帳戶 DID 地址。"></x-field>
|
|
19
|
+
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="待質押的資產地址 (NFT) 陣列。"></x-field>
|
|
20
|
+
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="待質押的代幣物件陣列。">
|
|
21
21
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="代幣合約的地址。"></x-field>
|
|
22
|
-
<x-field data-name="value" data-type="number" data-required="true" data-desc="
|
|
22
|
+
<x-field data-name="value" data-type="number" data-required="true" data-desc="質押的代幣數量。"></x-field>
|
|
23
23
|
</x-field>
|
|
24
24
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="質押者的錢包物件。"></x-field>
|
|
25
|
-
<x-field data-name="locked" data-type="boolean" data-default="false" data-required="false" data-desc="
|
|
25
|
+
<x-field data-name="locked" data-type="boolean" data-default="false" data-required="false" data-desc="一個布林值,表示質押在建立時是否被鎖定。"></x-field>
|
|
26
26
|
<x-field data-name="slashers" data-type="string[]" data-required="false" data-desc="允許削減此質押的 DID 地址陣列。若未提供,則預設為接收者的地址。"></x-field>
|
|
27
|
-
<x-field data-name="message" data-type="string" data-required="false" data-desc="
|
|
28
|
-
<x-field data-name="nonce" data-type="string" data-required="false" data-desc="
|
|
27
|
+
<x-field data-name="message" data-type="string" data-required="false" data-desc="質押的選用註記或訊息。"></x-field>
|
|
28
|
+
<x-field data-name="nonce" data-type="string" data-required="false" data-desc="一個選用的 nonce,以確保質押地址的唯一性。"></x-field>
|
|
29
29
|
</x-field-group>
|
|
30
30
|
|
|
31
31
|
### 範例
|
|
32
32
|
|
|
33
|
-
```javascript
|
|
33
|
+
```javascript 質押代幣與一個資產 icon=logos:javascript
|
|
34
34
|
// 假設 'client' 是一個已初始化的 GraphQLClient 實例
|
|
35
35
|
// 且 'stakerWallet' 是一個有效的錢包物件。
|
|
36
36
|
const receiverAddress = 'z29d5852576b8a8b6f3a8b4b74a3f4a3e2e1d'; // 質押接收者的地址
|
|
@@ -44,46 +44,46 @@ async function createStake() {
|
|
|
44
44
|
value: 100, // 要質押的代幣數量
|
|
45
45
|
}],
|
|
46
46
|
assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], // 要質押的資產/NFT 地址
|
|
47
|
-
message: '
|
|
47
|
+
message: 'Staking for validator rewards',
|
|
48
48
|
wallet: stakerWallet,
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
-
console.log('
|
|
52
|
-
console.log('
|
|
51
|
+
console.log('Stake transaction sent:', txHash);
|
|
52
|
+
console.log('New stake address created:', stakeAddress);
|
|
53
53
|
return stakeAddress;
|
|
54
54
|
} catch (error) {
|
|
55
|
-
console.error('
|
|
55
|
+
console.error('Error creating stake:', error);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
###
|
|
60
|
+
### 回傳值
|
|
61
61
|
|
|
62
|
-
`stake`
|
|
62
|
+
`stake` 方法會回傳一個包含交易雜湊值和新建立的 `stakeAddress` 的元組 (tuple)。此地址對於未來所有與此特定質押相關的互動(例如撤銷或削減)至關重要。
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
66
|
## 如何撤銷質押
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
撤銷質押是由質押者發起以取回其鎖定代幣和資產的過程。此交易不會立即返還資金;而是將其標記為可供領取,但需遵守任何鏈上的鎖定期。
|
|
69
69
|
|
|
70
70
|
### 參數
|
|
71
71
|
|
|
72
72
|
<x-field-group>
|
|
73
|
-
<x-field data-name="from" data-type="string" data-required="true" data-desc="
|
|
74
|
-
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="
|
|
75
|
-
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="
|
|
73
|
+
<x-field data-name="from" data-type="string" data-required="true" data-desc="待撤銷的質押地址(從 'stake' 呼叫中取得)。"></x-field>
|
|
74
|
+
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="從質押中撤銷的資產地址陣列。"></x-field>
|
|
75
|
+
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="待撤銷的代幣物件陣列。">
|
|
76
76
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="代幣合約的地址。"></x-field>
|
|
77
|
-
<x-field data-name="value" data-type="number" data-required="true" data-desc="
|
|
77
|
+
<x-field data-name="value" data-type="number" data-required="true" data-desc="待撤銷的代幣數量。"></x-field>
|
|
78
78
|
</x-field>
|
|
79
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
79
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="質押者的錢包物件,必須是質押的原始建立者。"></x-field>
|
|
80
80
|
</x-field-group>
|
|
81
81
|
|
|
82
82
|
### 範例
|
|
83
83
|
|
|
84
84
|
```javascript 撤銷質押 icon=logos:javascript
|
|
85
|
-
// 假設 'stakeAddress'
|
|
86
|
-
// 且 'stakerWallet'
|
|
85
|
+
// 假設 'stakeAddress' 是上一步回傳的地址
|
|
86
|
+
// 且 'stakerWallet' 是用於建立質押的同一個錢包。
|
|
87
87
|
|
|
88
88
|
async function revokeExistingStake(stakeAddress) {
|
|
89
89
|
try {
|
|
@@ -97,36 +97,36 @@ async function revokeExistingStake(stakeAddress) {
|
|
|
97
97
|
wallet: stakerWallet,
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
console.log('
|
|
101
|
-
console.log('
|
|
100
|
+
console.log('Revoke stake transaction sent:', revokeTxHash);
|
|
101
|
+
console.log('重要:請儲存此雜湊值,以便稍後領取您的質押。');
|
|
102
102
|
return revokeTxHash;
|
|
103
103
|
} catch (error) {
|
|
104
|
-
console.error('
|
|
104
|
+
console.error('Error revoking stake:', error);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
###
|
|
109
|
+
### 回傳值
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
此函數回傳撤銷操作的交易雜湊值。此雜湊值作為證據,並且是領取質押的最後一步所**必需**的。
|
|
112
112
|
|
|
113
113
|
---
|
|
114
114
|
|
|
115
115
|
## 如何領取已撤銷的質押
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
在質押成功撤銷後,質押者必須傳送一筆 `claimStake` 交易,以將代幣和資產移回其帳戶。這一步驟會完成整個撤回過程。
|
|
118
118
|
|
|
119
119
|
### 參數
|
|
120
120
|
|
|
121
121
|
<x-field-group>
|
|
122
122
|
<x-field data-name="from" data-type="string" data-required="true" data-desc="質押的地址。"></x-field>
|
|
123
|
-
<x-field data-name="evidence" data-type="string" data-required="true" data-desc="來自 'revokeStake'
|
|
123
|
+
<x-field data-name="evidence" data-type="string" data-required="true" data-desc="來自 'revokeStake' 呼叫的交易雜湊值,作為撤銷的證明。"></x-field>
|
|
124
124
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="質押者的錢包物件。"></x-field>
|
|
125
125
|
</x-field-group>
|
|
126
126
|
|
|
127
127
|
### 範例
|
|
128
128
|
|
|
129
|
-
```javascript
|
|
129
|
+
```javascript 領取已質押物品 icon=logos:javascript
|
|
130
130
|
// 假設 'stakeAddress' 和 'revokeTxHash' 來自之前的步驟,
|
|
131
131
|
// 且 'stakerWallet' 是質押者的錢包。
|
|
132
132
|
|
|
@@ -138,33 +138,33 @@ async function claimRevokedStake(stakeAddress, revokeTxHash) {
|
|
|
138
138
|
wallet: stakerWallet,
|
|
139
139
|
});
|
|
140
140
|
|
|
141
|
-
console.log('
|
|
141
|
+
console.log('Claim stake transaction sent:', claimTxHash);
|
|
142
142
|
console.log('您的代幣和資產已返還至您的帳戶。');
|
|
143
143
|
} catch (error) {
|
|
144
|
-
console.error('
|
|
144
|
+
console.error('Error claiming stake:', error);
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
-
###
|
|
149
|
+
### 回傳值
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
此方法會回傳最終的交易雜湊值。一旦此交易在鏈上確認,已質押的物品將返還至 `wallet` 的地址。
|
|
152
152
|
|
|
153
153
|
---
|
|
154
154
|
|
|
155
155
|
## 如何削減質押
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
「削減」是一種懲罰性行為,可由指定的 `slasher`(通常是質押接收者)對質押者執行。這種情況通常發生在質押者違反某些規則時。被削減的代幣或資產會從質押中移除,並傳送到指定的金庫。
|
|
158
158
|
|
|
159
159
|
### 參數
|
|
160
160
|
|
|
161
161
|
<x-field-group>
|
|
162
|
-
<x-field data-name="from" data-type="string" data-required="true" data-desc="
|
|
163
|
-
<x-field data-name="reason" data-type="string" data-required="true" data-desc="
|
|
164
|
-
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="
|
|
165
|
-
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="
|
|
162
|
+
<x-field data-name="from" data-type="string" data-required="true" data-desc="待削減的質押地址。"></x-field>
|
|
163
|
+
<x-field data-name="reason" data-type="string" data-required="true" data-desc="解釋削減原因的必要訊息。"></x-field>
|
|
164
|
+
<x-field data-name="assets" data-type="string[]" data-required="false" data-desc="從質押中削減的資產地址陣列。"></x-field>
|
|
165
|
+
<x-field data-name="tokens" data-type="object[]" data-required="false" data-desc="待削減的代幣物件陣列。">
|
|
166
166
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="代幣合約的地址。"></x-field>
|
|
167
|
-
<x-field data-name="value" data-type="number" data-required="true" data-desc="
|
|
167
|
+
<x-field data-name="value" data-type="number" data-required="true" data-desc="待削減的代幣數量。"></x-field>
|
|
168
168
|
</x-field>
|
|
169
169
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="授權削減者的錢包物件。"></x-field>
|
|
170
170
|
</x-field-group>
|
|
@@ -172,34 +172,34 @@ async function claimRevokedStake(stakeAddress, revokeTxHash) {
|
|
|
172
172
|
### 範例
|
|
173
173
|
|
|
174
174
|
```javascript 削減質押 icon=logos:javascript
|
|
175
|
-
// 假設 'stakeAddress'
|
|
175
|
+
// 假設 'stakeAddress' 是待削減質押的地址,
|
|
176
176
|
// 且 'slasherWallet' 是一個授權削減者的錢包。
|
|
177
177
|
|
|
178
178
|
async function slashExistingStake(stakeAddress) {
|
|
179
179
|
try {
|
|
180
180
|
const slashTxHash = await client.slashStake({
|
|
181
181
|
from: stakeAddress,
|
|
182
|
-
reason: '
|
|
182
|
+
reason: '驗證者連續錯過 10 個區塊的簽署。',
|
|
183
183
|
tokens: [{
|
|
184
184
|
address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E',
|
|
185
|
-
value: 10, //
|
|
185
|
+
value: 10, // 削減 10 個代幣作為懲罰
|
|
186
186
|
}],
|
|
187
187
|
wallet: slasherWallet,
|
|
188
188
|
});
|
|
189
189
|
|
|
190
|
-
console.log('
|
|
190
|
+
console.log('Slash stake transaction sent:', slashTxHash);
|
|
191
191
|
} catch (error) {
|
|
192
|
-
console.error('
|
|
192
|
+
console.error('Error slashing stake:', error);
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
-
###
|
|
197
|
+
### 回傳值
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
此方法回傳削減操作的交易雜湊值。
|
|
200
200
|
|
|
201
201
|
## 總結
|
|
202
202
|
|
|
203
|
-
您現在已經學會了在 OCAP 區塊鏈上質押的完整生命週期:使用 `stake`
|
|
203
|
+
您現在已經學會了在 OCAP 區塊鏈上質押的完整生命週期:使用 `stake` 建立質押,使用 `revokeStake` 和 `claimStake` 取回資金,以及使用 `slashStake` 懲罰不良行為者。這個強大的機制是許多去中心化應用的基礎。
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
若要深入了解您可以質押的物品,請參閱 [管理代幣](./how-to-guides-manage-tokens.md) 和 [管理資產 (NFT)](./how-to-guides-manage-assets.md) 指南。
|