@ocap/client 1.25.4 → 1.25.6

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.
Files changed (68) hide show
  1. package/dist/report.html +1 -1
  2. package/docs/api-reference-client-methods.ja.md +229 -0
  3. package/docs/api-reference-client-methods.zh-TW.md +229 -0
  4. package/docs/api-reference-client-methods.zh.md +27 -27
  5. package/docs/api-reference-data-types.ja.md +482 -0
  6. package/docs/api-reference-data-types.zh-TW.md +482 -0
  7. package/docs/api-reference-data-types.zh.md +14 -14
  8. package/docs/api-reference-low-level-api.ja.md +228 -0
  9. package/docs/api-reference-low-level-api.zh-TW.md +228 -0
  10. package/docs/api-reference-low-level-api.zh.md +39 -39
  11. package/docs/api-reference-query-mutation-methods.ja.md +814 -0
  12. package/docs/api-reference-query-mutation-methods.zh-TW.md +814 -0
  13. package/docs/api-reference-query-mutation-methods.zh.md +158 -158
  14. package/docs/api-reference-transaction-helpers.ja.md +649 -0
  15. package/docs/api-reference-transaction-helpers.zh-TW.md +649 -0
  16. package/docs/api-reference-transaction-helpers.zh.md +112 -112
  17. package/docs/api-reference.ja.md +23 -0
  18. package/docs/api-reference.zh-TW.md +23 -0
  19. package/docs/api-reference.zh.md +6 -6
  20. package/docs/core-concepts-client-architecture.ja.md +102 -0
  21. package/docs/core-concepts-client-architecture.zh-TW.md +102 -0
  22. package/docs/core-concepts-client-architecture.zh.md +21 -21
  23. package/docs/core-concepts-event-subscriptions.ja.md +123 -0
  24. package/docs/core-concepts-event-subscriptions.zh-TW.md +123 -0
  25. package/docs/core-concepts-event-subscriptions.zh.md +22 -22
  26. package/docs/core-concepts-gas-payment.ja.md +111 -0
  27. package/docs/core-concepts-gas-payment.zh-TW.md +111 -0
  28. package/docs/core-concepts-gas-payment.zh.md +30 -30
  29. package/docs/core-concepts-transaction-lifecycle.ja.md +183 -0
  30. package/docs/core-concepts-transaction-lifecycle.zh-TW.md +183 -0
  31. package/docs/core-concepts-transaction-lifecycle.zh.md +51 -51
  32. package/docs/core-concepts.ja.md +22 -0
  33. package/docs/core-concepts.zh-TW.md +22 -0
  34. package/docs/core-concepts.zh.md +6 -6
  35. package/docs/getting-started-basic-usage.ja.md +87 -0
  36. package/docs/getting-started-basic-usage.zh-TW.md +87 -0
  37. package/docs/getting-started-basic-usage.zh.md +17 -17
  38. package/docs/getting-started-installation.ja.md +60 -0
  39. package/docs/getting-started-installation.zh-TW.md +60 -0
  40. package/docs/getting-started-installation.zh.md +14 -14
  41. package/docs/getting-started.ja.md +16 -0
  42. package/docs/getting-started.zh-TW.md +16 -0
  43. package/docs/getting-started.zh.md +6 -5
  44. package/docs/how-to-guides-delegate-permissions.ja.md +167 -0
  45. package/docs/how-to-guides-delegate-permissions.zh-TW.md +167 -0
  46. package/docs/how-to-guides-delegate-permissions.zh.md +27 -28
  47. package/docs/how-to-guides-manage-accounts.ja.md +73 -0
  48. package/docs/how-to-guides-manage-accounts.zh-TW.md +73 -0
  49. package/docs/how-to-guides-manage-accounts.zh.md +14 -14
  50. package/docs/how-to-guides-manage-assets.ja.md +255 -0
  51. package/docs/how-to-guides-manage-assets.zh-TW.md +255 -0
  52. package/docs/how-to-guides-manage-assets.zh.md +60 -60
  53. package/docs/how-to-guides-manage-tokens.ja.md +179 -0
  54. package/docs/how-to-guides-manage-tokens.zh-TW.md +179 -0
  55. package/docs/how-to-guides-manage-tokens.zh.md +52 -52
  56. package/docs/how-to-guides-stake-tokens-and-assets.ja.md +205 -0
  57. package/docs/how-to-guides-stake-tokens-and-assets.zh-TW.md +205 -0
  58. package/docs/how-to-guides-stake-tokens-and-assets.zh.md +44 -44
  59. package/docs/how-to-guides-transfer-tokens-and-nfts.ja.md +179 -0
  60. package/docs/how-to-guides-transfer-tokens-and-nfts.zh-TW.md +179 -0
  61. package/docs/how-to-guides-transfer-tokens-and-nfts.zh.md +47 -47
  62. package/docs/how-to-guides.ja.md +27 -0
  63. package/docs/how-to-guides.zh-TW.md +27 -0
  64. package/docs/how-to-guides.zh.md +11 -11
  65. package/docs/overview.ja.md +70 -0
  66. package/docs/overview.zh-TW.md +70 -0
  67. package/docs/overview.zh.md +8 -8
  68. package/package.json +14 -14
@@ -1,12 +1,12 @@
1
1
  # 质押通证和资产
2
2
 
3
- 质押是将通证或资产 (NFT) 锁定到特定接收者的过程,通常是为了保护网络、参与治理或赚取奖励。本指南使用 OCAP Client 提供了整个质押生命周期的分步演练,包括创建质押、撤销质押、领回资产以及因惩罚性原因罚没质押。
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
 
@@ -23,7 +23,7 @@
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="允许罚没此质押的 DID 地址数组。如果未提供,则默认为接收者地址。"></x-field>
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="一个可选的 nonce,以确保质押地址是唯一的。"></x-field>
29
29
  </x-field-group>
@@ -32,7 +32,7 @@
32
32
 
33
33
  ```javascript 质押通证和资产 icon=logos:javascript
34
34
  // 假设 'client' 是一个已初始化的 GraphQLClient 实例
35
- // 并且 'stakerWallet' 是一个有效的钱包对象。
35
+ // 'stakerWallet' 是一个有效的钱包对象。
36
36
  const receiverAddress = 'z29d5852576b8a8b6f3a8b4b74a3f4a3e2e1d'; // 质押接收者的地址
37
37
 
38
38
  async function createStake() {
@@ -43,35 +43,35 @@ async function createStake() {
43
43
  address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E', // 要质押的通证地址
44
44
  value: 100, // 要质押的通证数量
45
45
  }],
46
- assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], // 要质押的资产/NFT 地址
46
+ assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], // 要质押的资产/NFT 的地址
47
47
  message: '为验证者奖励而质押',
48
48
  wallet: stakerWallet,
49
49
  });
50
50
 
51
- console.log('质押交易已发送:', txHash);
52
- console.log('新的质押地址已创建:', stakeAddress);
51
+ console.log('质押交易已发送:', txHash);
52
+ console.log('新质押地址已创建:', stakeAddress);
53
53
  return stakeAddress;
54
54
  } catch (error) {
55
- console.error('创建质押时出错:', error);
55
+ console.error('创建质押时出错:', error);
56
56
  }
57
57
  }
58
58
  ```
59
59
 
60
60
  ### 返回值
61
61
 
62
- `stake` 方法返回一个包含交易哈希和新创建的 `stakeAddress` 的元组。此地址对于未来与此特定质押的所有交互(例如撤销或罚没)都至关重要。
62
+ `stake` 方法返回一个包含交易哈希和新创建的 `stakeAddress` 的元组。此地址对于未来与此特定质押的所有交互(例如撤销或惩罚)至关重要。
63
63
 
64
64
  ---
65
65
 
66
66
  ## 如何撤销质押
67
67
 
68
- 撤销质押是质押者为取回其锁定的通证和资产而发起的过程。此交易不会立即返还资金;相反,它会将资金标记为可领取,但需遵守任何链上锁定期。
68
+ 撤销质押是质押者为取回其锁定的通证和资产而发起的过程。此交易不会立即返还资金;相反,它会将它们标记为可申领,并受任何链上锁定期限制。
69
69
 
70
70
  ### 参数
71
71
 
72
72
  <x-field-group>
73
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>
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>
@@ -83,7 +83,7 @@ async function createStake() {
83
83
 
84
84
  ```javascript 撤销质押 icon=logos:javascript
85
85
  // 假设 'stakeAddress' 是上一步返回的地址
86
- // 并且 'stakerWallet' 是用于创建质押的同一个钱包。
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('撤销质押交易已发送:', revokeTxHash);
101
- console.log('重要提示:请保存此哈希值,以便稍后领取您的质押。');
100
+ console.log('撤销质押交易已发送:', revokeTxHash);
101
+ console.log('重要提示:请保存此哈希以便稍后申领您的质押。');
102
102
  return revokeTxHash;
103
103
  } catch (error) {
104
- console.error('撤销质押时出错:', error);
104
+ console.error('撤销质押时出错:', 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' 调用的交易哈希,用作撤销证明。"></x-field>
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 领取已质押的物品 icon=logos:javascript
129
+ ```javascript 申领已质押的物品 icon=logos:javascript
130
130
  // 假设 'stakeAddress' 和 'revokeTxHash' 来自之前的步骤,
131
- // 并且 'stakerWallet' 是质押者的钱包。
131
+ // 'stakerWallet' 是质押者的钱包。
132
132
 
133
133
  async function claimRevokedStake(stakeAddress, revokeTxHash) {
134
134
  try {
@@ -138,42 +138,42 @@ async function claimRevokedStake(stakeAddress, revokeTxHash) {
138
138
  wallet: stakerWallet,
139
139
  });
140
140
 
141
- console.log('领取质押交易已发送:', claimTxHash);
141
+ console.log('申领质押交易已发送:', claimTxHash);
142
142
  console.log('您的通证和资产已返回到您的账户。');
143
143
  } catch (error) {
144
- console.error('领取质押时出错:', error);
144
+ console.error('申领质押时出错:', error);
145
145
  }
146
146
  }
147
147
  ```
148
148
 
149
149
  ### 返回值
150
150
 
151
- 该方法返回最终的交易哈希。一旦该交易在链上得到确认,质押的物品将返还到 `wallet` 的地址。
151
+ 该方法返回最终的交易哈希。一旦此交易在链上确认,质押的物品将返回到 `wallet` 的地址。
152
152
 
153
153
  ---
154
154
 
155
- ## 如何罚没质押
155
+ ## 如何惩罚质押
156
156
 
157
- 罚没是一种惩罚性操作,可由指定的 `slasher`(通常是质押接收者)对质押者采取。这通常发生在质押者违反某些规则的情况下。被罚没的通证或资产将从质押中移除,并发送到指定的保险库。
157
+ 惩罚(Slashing)是一种惩罚性行为,可由指定的 `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="要被罚没的质押地址。"></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="要罚没的通证对象数组。">
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="要罚没的通证数量。"></x-field>
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="授权罚没者的钱包对象。"></x-field>
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 罚没质押 icon=logos: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 {
@@ -182,24 +182,24 @@ async function slashExistingStake(stakeAddress) {
182
182
  reason: '验证者连续错过 10 个区块的签名。',
183
183
  tokens: [{
184
184
  address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E',
185
- value: 10, // 罚没 10 个通证作为惩罚
185
+ value: 10, // 惩罚 10 个通证作为罚款
186
186
  }],
187
187
  wallet: slasherWallet,
188
188
  });
189
189
 
190
- console.log('罚没质押交易已发送:', slashTxHash);
190
+ console.log('惩罚质押交易已发送:', slashTxHash);
191
191
  } catch (error) {
192
- console.error('罚没质押时出错:', error);
192
+ console.error('惩罚质押时出错:', error);
193
193
  }
194
194
  }
195
195
  ```
196
196
 
197
197
  ### 返回值
198
198
 
199
- 此方法返回罚没操作的交易哈希。
199
+ 此方法返回惩罚操作的交易哈希。
200
200
 
201
201
  ## 总结
202
202
 
203
- 现在您已经学习了在 OCAP 区块链上质押的完整生命周期:使用 `stake` 创建质押,使用 `revokeStake` 和 `claimStake` 取回资金,以及使用 `slashStake` 惩罚不良行为者。这个强大的机制是许多去中心化应用的基础。
203
+ 您现在已经学习了在 OCAP 区块链上进行质押的完整生命周期:使用 `stake` 创建质押,使用 `revokeStake` 和 `claimStake` 取回资金,以及使用 `slashStake` 惩罚不良行为者。这个强大的机制是许多去中心化应用的基础。
204
204
 
205
- 要了解更多关于您可以质押的物品的信息,请参阅[管理通证](./how-to-guides-manage-tokens.md)和[管理资产 (NFT)](./how-to-guides-manage-assets.md)指南。
205
+ 要了解有关可以质押的物品的更多信息,请参阅 [管理通证](./how-to-guides-manage-tokens.md) [管理资产 (NFT)](./how-to-guides-manage-assets.md) 指南。
@@ -0,0 +1,179 @@
1
+ # トークンとNFTの転送
2
+
3
+ このガイドでは、OCAP Clientを使用して、アカウント間でファンジブルトークン(ネイティブおよびカスタムの両方)とノンファンジブルトークン(NFTまたは資産)を転送する手順を段階的に説明します。すべての転送の主要なメソッドは `client.transfer()` です。
4
+
5
+ 覚えておくべき重要な特徴の1つは、新しいアカウントが最初の受信トランザクションを受け取ると、自動的にオンチェーンで作成されることです。これは、受信者の事前設定なしで、全く新しいアドレスにトークンや資産を転送できることを意味します。
6
+
7
+ ## `transfer` メソッド
8
+
9
+ `client.transfer()` メソッドは、資産やトークンを送信するプロセスを簡素化する多機能なヘルパー関数です。単一の呼び出しで、適切なトランザクション(`transferV2Tx`)を構築、署名し、ブロックチェーンに送信します。
10
+
11
+ ### パラメータ
12
+
13
+ <x-field-group>
14
+ <x-field data-name="to" data-type="string" data-required="true">
15
+ <x-field-desc markdown>受信者のアカウントアドレス。これは有効なDIDアドレスでなければなりません。</x-field-desc>
16
+ </x-field>
17
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="トランザクションに署名するために使用される送信者のウォレットオブジェクト。"></x-field>
18
+ <x-field data-name="token" data-type="number" data-default="0">
19
+ <x-field-desc markdown>転送するチェーンのネイティブトークンの量。クライアントは自動的に正しい小数点単位への変換を処理します。</x-field-desc>
20
+ </x-field>
21
+ <x-field data-name="assets" data-type="string[]" data-default="[]" data-desc="転送する資産アドレス(NFT)の配列。"></x-field>
22
+ <x-field data-name="tokens" data-type="object[]" data-default="[]">
23
+ <x-field-desc markdown>転送するカスタムファンジブルトークンオブジェクトの配列。</x-field-desc>
24
+ <x-field data-name="address" data-type="string" data-required="true" data-desc="カスタムトークンコントラクトのアドレス。"></x-field>
25
+ <x-field data-name="value" data-type="number" data-required="true" data-desc="転送するカスタムトークンの量。"></x-field>
26
+ </x-field>
27
+ <x-field data-name="memo" data-type="string" data-required="false" data-desc="トランザクションに含めるオプションのメッセージまたはメモ。"></x-field>
28
+ <x-field data-name="delegator" data-type="string" data-required="false">
29
+ <x-field-desc markdown>`wallet` が別のアカウントの代理として機能している場合、これは委任元アカウントのアドレスである必要があります。詳細については、[Delegate Permissions](./how-to-guides-delegate-permissions.md) ガイドを参照してください。</x-field-desc>
30
+ </x-field>
31
+ </x-field-group>
32
+
33
+ ### 戻り値
34
+
35
+ <x-field data-name="Promise<string>" data-type="Promise">
36
+ <x-field-desc markdown>ブロックチェーンへの送信が成功すると、トランザクションハッシュに解決されるPromise。</x-field-desc>
37
+ </x-field>
38
+
39
+ ## ステップバイステップの例
40
+
41
+ ### 前提条件
42
+
43
+ 始める前に、以下が揃っていることを確認してください:
44
+
45
+ 1. `https://beta.abtnetwork.io` のようなチェーンホストに接続された、初期化済みの `GraphQLClient`。
46
+ 2. 転送およびトランザクション手数料をカバーするのに十分なトークンが入金されている送信者のウォレットオブジェクト(`senderWallet`)。
47
+ 3. アドレスを取得するための受信者のウォレットオブジェクト(`recipientWallet`)。受信者のアカウントはまだオンチェーンに存在する必要はありません。
48
+
49
+ ```javascript Basic Setup icon=logos:javascript
50
+ import GraphQLClient from '@ocap/client';
51
+ import { fromRandom } from '@ocap/wallet';
52
+
53
+ // 1. クライアントを初期化
54
+ const client = new GraphQLClient({ endpoint: 'https://beta.abtnetwork.io/api' });
55
+
56
+ // 2. 送信者と受信者のウォレットを作成
57
+ // 実際のアプリケーションでは、送信者のウォレットはランダムに作成されるのではなく、ロードされます。
58
+ const senderWallet = fromRandom(); // このウォレットには資金が入金されていると仮定
59
+ const recipientWallet = fromRandom();
60
+
61
+ console.log(`送信者アドレス: ${senderWallet.address}`);
62
+ console.log(`受信者アドレス: ${recipientWallet.address}`);
63
+
64
+ // この例のために送信者のウォレットに資金を入金するには、faucetを使用してください:
65
+ // https://faucet.abtnetwork.io/
66
+ ```
67
+
68
+ ### 例1:ネイティブトークンの転送
69
+
70
+ この例では、送信者から受信者に10ネイティブトークンを送信する方法を示します。
71
+
72
+ ```javascript Transfer Native Tokens icon=logos:javascript
73
+ async function transferNativeTokens() {
74
+ try {
75
+ const hash = await client.transfer({
76
+ to: recipientWallet.address,
77
+ token: 10, // 送信するネイティブトークンの量
78
+ wallet: senderWallet,
79
+ memo: '10ネイティブトークンを送ります!'
80
+ });
81
+ console.log('ネイティブトークンの転送に成功しました。Txハッシュ:', hash);
82
+ } catch (err) {
83
+ console.error('トークン転送エラー:', err);
84
+ }
85
+ }
86
+
87
+ transferNativeTokens();
88
+ ```
89
+
90
+ ### 例2:NFT(資産)の転送
91
+
92
+ NFTを転送するには、そのユニークな資産アドレスが必要です。まず、資産を作成または取得します([資産(NFT)の管理](./how-to-guides-manage-assets.md) を参照)。この例では、`senderWallet` がすでにアドレス `zNKj...` のNFTを所有していると仮定します。
93
+
94
+ ```javascript Transfer an NFT icon=logos:javascript
95
+ async function transferNFT() {
96
+ // senderWalletが所有するNFTのアドレスと仮定
97
+ const nftAddress = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
98
+
99
+ try {
100
+ const hash = await client.transfer({
101
+ to: recipientWallet.address,
102
+ assets: [nftAddress], // 資産アドレスの配列
103
+ wallet: senderWallet,
104
+ memo: 'ご希望のNFTです。'
105
+ });
106
+ console.log('NFTの転送に成功しました。Txハッシュ:', hash);
107
+ } catch (err) {
108
+ console.error('NFT転送エラー:', err);
109
+ }
110
+ }
111
+
112
+ transferNFT();
113
+ ```
114
+
115
+ ### 例3:カスタムトークンの転送
116
+
117
+ この例では、カスタムファンジブルトークンを転送する方法を示します。トークンのコントラクトアドレスが必要です。カスタムトークンの作成については、[トークンの管理](./how-to-guides-manage-tokens.md) ガイドを参照してください。
118
+
119
+ ```javascript Transfer Custom Tokens icon=logos:javascript
120
+ async function transferCustomToken() {
121
+ // senderWalletが所有するカスタムトークンのアドレスと仮定
122
+ const customTokenAddress = 'z37bA4x...';
123
+
124
+ try {
125
+ const hash = await client.transfer({
126
+ to: recipientWallet.address,
127
+ wallet: senderWallet,
128
+ tokens: [
129
+ { address: customTokenAddress, value: 50 } // 50単位のカスタムトークン
130
+ ],
131
+ memo: '50カスタムトークンを送ります。'
132
+ });
133
+ console.log('カスタムトークンの転送に成功しました。Txハッシュ:', hash);
134
+ } catch (err) {
135
+ console.error('カスタムトークン転送エラー:', err);
136
+ }
137
+ }
138
+
139
+ transferCustomToken();
140
+ ```
141
+
142
+ ### 例4:組み合わせた転送
143
+
144
+ ネイティブトークン、カスタムトークン、および複数のNFTをすべて単一のアトミックなトランザクションで送信できます。これは非常に効率的です。
145
+
146
+ ```javascript Combined Transfer icon=logos:javascript
147
+ async function combinedTransfer() {
148
+ // これらはsenderWalletが所有する資産とトークンのアドレスと仮定
149
+ const nftAddress1 = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
150
+ const nftAddress2 = 'zNKiabcdeQPk5nN2ADDPCd58286b2defghj';
151
+ const customTokenAddress = 'z37bA4x...'; // カスタムファンジブルトークンのアドレス
152
+
153
+ try {
154
+ const hash = await client.transfer({
155
+ to: recipientWallet.address,
156
+ wallet: senderWallet,
157
+ token: 5, // 5ネイティブトークン
158
+ assets: [nftAddress1, nftAddress2], // 2つのNFTの配列
159
+ tokens: [
160
+ { address: customTokenAddress, value: 50 } // 50単位のカスタムトークン
161
+ ],
162
+ memo: 'トークンとNFTのミックスを送ります。'
163
+ });
164
+ console.log('組み合わせた転送に成功しました。Txハッシュ:', hash);
165
+ } catch (err) {
166
+ console.error('組み合わせた転送でのエラー:', err);
167
+ }
168
+ }
169
+
170
+ combinedTransfer();
171
+ ```
172
+
173
+ これらの例に従うことで、アプリケーションにトークンとNFTの転送を簡単に実装できます。転送したいアイテムの作成に関する詳細については、関連ガイドを参照してください。
174
+
175
+ ### 参考文献
176
+
177
+ - [資産(NFT)の管理方法](./how-to-guides-manage-assets.md)
178
+ - [トークンの管理方法](./how-to-guides-manage-tokens.md)
179
+ - [高レベルAPI](./api-reference-transaction-helpers.md)
@@ -0,0 +1,179 @@
1
+ # 轉移代幣和 NFT
2
+
3
+ 本指南提供了使用 OCAP Client 在帳戶之間轉移可替代代幣(包括原生和自訂代幣)和不可替代代幣(NFT 或資產)的逐步演練。所有轉移的主要方法是 `client.transfer()`。
4
+
5
+ 一個需要記住的關鍵功能是,當新帳戶收到第一筆傳入交易時,它會自動在鏈上創建。這意味著您可以將代幣或資產轉移到一個全新的地址,而無需為接收者進行任何預先設定。
6
+
7
+ ## `transfer` 方法
8
+
9
+ `client.transfer()` 方法是一個多功能的輔助函數,可簡化發送資產和代幣的過程。它在單次呼叫中建構、簽署並將適當的交易(`transferV2Tx`)發送到區塊鏈。
10
+
11
+ ### 參數
12
+
13
+ <x-field-group>
14
+ <x-field data-name="to" data-type="string" data-required="true">
15
+ <x-field-desc markdown>接收者的帳戶地址。這必須是一個有效的 DID 地址。</x-field-desc>
16
+ </x-field>
17
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="用於簽署交易的發送者錢包物件。"></x-field>
18
+ <x-field data-name="token" data-type="number" data-default="0">
19
+ <x-field-desc markdown>要轉移的鏈原生代幣數量。客戶端會自動處理轉換為正確的小數位數。</x-field-desc>
20
+ </x-field>
21
+ <x-field data-name="assets" data-type="string[]" data-default="[]" data-desc="要轉移的資產地址(NFT)陣列。"></x-field>
22
+ <x-field data-name="tokens" data-type="object[]" data-default="[]">
23
+ <x-field-desc markdown>要轉移的自訂可替代代幣物件陣列。</x-field-desc>
24
+ <x-field data-name="address" data-type="string" data-required="true" data-desc="自訂代幣合約的地址。"></x-field>
25
+ <x-field data-name="value" data-type="number" data-required="true" data-desc="要轉移的自訂代幣數量。"></x-field>
26
+ </x-field>
27
+ <x-field data-name="memo" data-type="string" data-required="false" data-desc="可隨交易包含的選用訊息或備註。"></x-field>
28
+ <x-field data-name="delegator" data-type="string" data-required="false">
29
+ <x-field-desc markdown>如果 `wallet` 代表另一個帳戶行事,這應該是委託帳戶的地址。更多詳細資訊請參閱 [委派權限](./how-to-guides-delegate-permissions.md) 指南。</x-field-desc>
30
+ </x-field>
31
+ </x-field-group>
32
+
33
+ ### 返回值
34
+
35
+ <x-field data-name="Promise<string>" data-type="Promise">
36
+ <x-field-desc markdown>一個 Promise,在成功提交到區塊鏈後,會解析為交易雜湊值。</x-field-desc>
37
+ </x-field>
38
+
39
+ ## 逐步範例
40
+
41
+ ### 先決條件
42
+
43
+ 在開始之前,請確保您具備:
44
+
45
+ 1. 一個已初始化並連接到鏈主機(如 `https://beta.abtnetwork.io`)的 `GraphQLClient`。
46
+ 2. 一個發送者的錢包物件(`senderWallet`),其中有足夠的代幣來支付轉帳和交易費用。
47
+ 3. 一個接收者的錢包物件(`recipientWallet`)以獲取其地址。接收者的帳戶尚無需存在於鏈上。
48
+
49
+ ```javascript Basic Setup icon=logos:javascript
50
+ import GraphQLClient from '@ocap/client';
51
+ import { fromRandom } from '@ocap/wallet';
52
+
53
+ // 1. 初始化客戶端
54
+ const client = new GraphQLClient({ endpoint: 'https://beta.abtnetwork.io/api' });
55
+
56
+ // 2. 為發送者和接收者創建錢包
57
+ // 在實際應用中,發送者的錢包將被載入,而不是隨機創建。
58
+ const senderWallet = fromRandom(); // 假設此錢包已有資金
59
+ const recipientWallet = fromRandom();
60
+
61
+ console.log(`Sender Address: ${senderWallet.address}`);
62
+ console.log(`Recipient Address: ${recipientWallet.address}`);
63
+
64
+ // 要為此範例的發送者錢包注資,請使用水龍頭:
65
+ // https://faucet.abtnetwork.io/
66
+ ```
67
+
68
+ ### 範例 1:轉移原生代幣
69
+
70
+ 此範例展示了如何從發送者向接收者發送 10 個原生代幣。
71
+
72
+ ```javascript Transfer Native Tokens icon=logos:javascript
73
+ async function transferNativeTokens() {
74
+ try {
75
+ const hash = await client.transfer({
76
+ to: recipientWallet.address,
77
+ token: 10, // 要發送的原生代幣數量
78
+ wallet: senderWallet,
79
+ memo: '發送 10 個原生代幣給您!'
80
+ });
81
+ console.log('原生代幣轉移成功。交易雜湊值:', hash);
82
+ } catch (err) {
83
+ console.error('轉移代幣時出錯:', err);
84
+ }
85
+ }
86
+
87
+ transferNativeTokens();
88
+ ```
89
+
90
+ ### 範例 2:轉移 NFT(資產)
91
+
92
+ 要轉移 NFT,您需要其唯一的資產地址。首先,您需要創建或獲取一個資產(請參閱 [管理資產 (NFT)](./how-to-guides-manage-assets.md))。在此範例中,我們假設 `senderWallet` 已經擁有一個地址為 `zNKj...` 的 NFT。
93
+
94
+ ```javascript Transfer an NFT icon=logos:javascript
95
+ async function transferNFT() {
96
+ // 假設這是 senderWallet 擁有的 NFT 地址
97
+ const nftAddress = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
98
+
99
+ try {
100
+ const hash = await client.transfer({
101
+ to: recipientWallet.address,
102
+ assets: [nftAddress], // 資產地址的陣列
103
+ wallet: senderWallet,
104
+ memo: '這是您想要的 NFT。'
105
+ });
106
+ console.log('NFT 轉移成功。交易雜湊值:', hash);
107
+ } catch (err) {
108
+ console.error('轉移 NFT 時出錯:', err);
109
+ }
110
+ }
111
+
112
+ transferNFT();
113
+ ```
114
+
115
+ ### 範例 3:轉移自訂代幣
116
+
117
+ 此範例演示了如何轉移自訂的可替代代幣。您需要該代幣的合約地址。有關創建自訂代幣的資訊,請參閱 [管理代幣](./how-to-guides-manage-tokens.md) 指南。
118
+
119
+ ```javascript Transfer Custom Tokens icon=logos:javascript
120
+ async function transferCustomToken() {
121
+ // 假設這是 senderWallet 擁有的自訂代幣地址
122
+ const customTokenAddress = 'z37bA4x...';
123
+
124
+ try {
125
+ const hash = await client.transfer({
126
+ to: recipientWallet.address,
127
+ wallet: senderWallet,
128
+ tokens: [
129
+ { address: customTokenAddress, value: 50 } // 50 單位的自訂代幣
130
+ ],
131
+ memo: '發送 50 個自訂代幣。'
132
+ });
133
+ console.log('自訂代幣轉移成功。交易雜湊值:', hash);
134
+ } catch (err) {
135
+ console.error('轉移自訂代幣時出錯:', err);
136
+ }
137
+ }
138
+
139
+ transferCustomToken();
140
+ ```
141
+
142
+ ### 範例 4:組合轉移
143
+
144
+ 您可以在單一的原子交易中發送原生代幣、自訂代幣和多個 NFT。這是非常高效的。
145
+
146
+ ```javascript Combined Transfer icon=logos:javascript
147
+ async function combinedTransfer() {
148
+ // 假設這些是 senderWallet 擁有的資產和代幣地址
149
+ const nftAddress1 = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
150
+ const nftAddress2 = 'zNKiabcdeQPk5nN2ADDPCd58286b2defghj';
151
+ const customTokenAddress = 'z37bA4x...'; // 自訂可替代代幣的地址
152
+
153
+ try {
154
+ const hash = await client.transfer({
155
+ to: recipientWallet.address,
156
+ wallet: senderWallet,
157
+ token: 5, // 5 個原生代幣
158
+ assets: [nftAddress1, nftAddress2], // 包含兩個 NFT 的陣列
159
+ tokens: [
160
+ { address: customTokenAddress, value: 50 } // 50 單位的自訂代幣
161
+ ],
162
+ memo: '發送混合的代幣和 NFT。'
163
+ });
164
+ console.log('組合轉移成功。交易雜湊值:', hash);
165
+ } catch (err) {
166
+ console.error('組合轉移時出錯:', err);
167
+ }
168
+ }
169
+
170
+ combinedTransfer();
171
+ ```
172
+
173
+ 通過遵循這些範例,您可以輕鬆地在您的應用程式中實現代幣和 NFT 的轉移。有關創建您希望轉移的項目的更多詳細資訊,請參閱相關指南。
174
+
175
+ ### 延伸閱讀
176
+
177
+ - [如何管理資產 (NFT)](./how-to-guides-manage-assets.md)
178
+ - [如何管理代幣](./how-to-guides-manage-tokens.md)
179
+ - [高階 API](./api-reference-transaction-helpers.md)