@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,36 +1,36 @@
|
|
|
1
1
|
# 质押通证和资产
|
|
2
2
|
|
|
3
|
-
质押是将通证或资产 (NFT)
|
|
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="
|
|
18
|
+
<x-field data-name="to" data-type="string" data-required="true" data-desc="接收质押的账户的 DID 地址。"></x-field>
|
|
19
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
|
-
<x-field data-name="locked" data-type="boolean" data-default="false" data-required="false" data-desc="
|
|
26
|
-
<x-field data-name="slashers" data-type="string[]" 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
|
+
<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
|
-
<x-field data-name="nonce" data-type="string" data-required="false" data-desc="
|
|
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 Staking Tokens and an Asset icon=logos:javascript
|
|
34
34
|
// 假设 'client' 是一个已初始化的 GraphQLClient 实例
|
|
35
35
|
// 且 'stakerWallet' 是一个有效的钱包对象。
|
|
36
36
|
const receiverAddress = 'z29d5852576b8a8b6f3a8b4b74a3f4a3e2e1d'; // 质押接收者的地址
|
|
@@ -43,35 +43,35 @@ async function createStake() {
|
|
|
43
43
|
address: 'z35n6aTUTK8h5nAF43h21A1g84g3C3D7B5E', // 要质押的通证地址
|
|
44
44
|
value: 100, // 要质押的通证数量
|
|
45
45
|
}],
|
|
46
|
-
assets: ['zNKtA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'], // 要质押的资产/NFT
|
|
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
|
```
|
|
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="
|
|
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>
|
|
@@ -81,7 +81,7 @@ async function createStake() {
|
|
|
81
81
|
|
|
82
82
|
### 示例
|
|
83
83
|
|
|
84
|
-
```javascript
|
|
84
|
+
```javascript Revoking a Stake icon=logos:javascript
|
|
85
85
|
// 假设 'stakeAddress' 是上一步返回的地址
|
|
86
86
|
// 且 'stakerWallet' 是用于创建质押的同一个钱包。
|
|
87
87
|
|
|
@@ -97,37 +97,37 @@ 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
|
-
|
|
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'
|
|
129
|
+
```javascript Claiming Staked Items icon=logos:javascript
|
|
130
|
+
// 假设 'stakeAddress' 和 'revokeTxHash' 来自前面的步骤,
|
|
131
131
|
// 且 'stakerWallet' 是质押者的钱包。
|
|
132
132
|
|
|
133
133
|
async function claimRevokedStake(stakeAddress, revokeTxHash) {
|
|
@@ -138,68 +138,68 @@ 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
|
-
|
|
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
|
-
<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 Slashing a Stake 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
|
```
|
|
196
196
|
|
|
197
197
|
### 返回值
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
此方法返回罚没操作的交易哈希。
|
|
200
200
|
|
|
201
201
|
## 总结
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
现在您已经了解了在 OCAP 区块链上进行质押的完整生命周期:使用 `stake` 创建质押,使用 `revokeStake` 和 `claimStake` 取回资金,以及使用 `slashStake` 惩罚恶意行为者。这一强大的机制是许多去中心化应用的基础。
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
要了解更多关于可以质押的物品的信息,请参阅[管理通证](./how-to-guides-manage-tokens.md)和[管理资产 (NFT)](./how-to-guides-manage-assets.md)指南。
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
# トークンとNFTの転送
|
|
2
2
|
|
|
3
|
-
このガイドでは、OCAP Client
|
|
3
|
+
このガイドでは、OCAP Clientを使用して、アカウント間でファンジブルトークン(ネイティブおよびカスタム)とノンファンジブルトークン(NFTまたはアセット)を転送するためのステップバイステップのウォークスルーを提供します。すべての転送の主要なメソッドは`client.transfer()`です。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
覚えておくべき重要な機能の1つは、新しいアカウントが最初の着信トランザクションを受信したときに、オンチェーンで自動的に作成されることです。つまり、受信者の事前設定なしで、全く新しいアドレスにトークンやアセットを転送できます。
|
|
6
6
|
|
|
7
7
|
## `transfer` メソッド
|
|
8
8
|
|
|
9
|
-
`client.transfer()
|
|
9
|
+
`client.transfer()`メソッドは、アセットやトークンを送信するプロセスを簡素化する多機能なヘルパー関数です。単一の呼び出しで、適切なトランザクション(`transferV2Tx`)を構築、署名し、ブロックチェーンに送信します。
|
|
10
10
|
|
|
11
11
|
### パラメータ
|
|
12
12
|
|
|
13
13
|
<x-field-group>
|
|
14
14
|
<x-field data-name="to" data-type="string" data-required="true">
|
|
15
|
-
<x-field-desc markdown
|
|
15
|
+
<x-field-desc markdown>受信者のアカウントアドレス。有効なDIDアドレスである必要があります。</x-field-desc>
|
|
16
16
|
</x-field>
|
|
17
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
17
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="トランザクションの署名に使用される送信者のウォレットオブジェクト。"></x-field>
|
|
18
18
|
<x-field data-name="token" data-type="number" data-default="0">
|
|
19
|
-
<x-field-desc markdown
|
|
19
|
+
<x-field-desc markdown>転送するチェーンのネイティブトークンの量。クライアントが自動的に正しい小数点以下の単位に変換します。</x-field-desc>
|
|
20
20
|
</x-field>
|
|
21
|
-
<x-field data-name="assets" data-type="string[]" data-default="[]" data-desc="
|
|
21
|
+
<x-field data-name="assets" data-type="string[]" data-default="[]" data-desc="転送するアセットアドレス(NFT)の配列。"></x-field>
|
|
22
22
|
<x-field data-name="tokens" data-type="object[]" data-default="[]">
|
|
23
23
|
<x-field-desc markdown>転送するカスタムファンジブルトークンオブジェクトの配列。</x-field-desc>
|
|
24
24
|
<x-field data-name="address" data-type="string" data-required="true" data-desc="カスタムトークンコントラクトのアドレス。"></x-field>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</x-field>
|
|
27
27
|
<x-field data-name="memo" data-type="string" data-required="false" data-desc="トランザクションに含めるオプションのメッセージまたはメモ。"></x-field>
|
|
28
28
|
<x-field data-name="delegator" data-type="string" data-required="false">
|
|
29
|
-
<x-field-desc markdown>`wallet
|
|
29
|
+
<x-field-desc markdown>`wallet`が別のアカウントの代理として機能している場合、これは委任元アカウントのアドレスである必要があります。詳細については、[権限の委任](./how-to-guides-delegate-permissions.md)ガイドを参照してください。</x-field-desc>
|
|
30
30
|
</x-field>
|
|
31
31
|
</x-field-group>
|
|
32
32
|
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
|
|
41
41
|
### 前提条件
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
開始する前に、以下のものがあることを確認してください:
|
|
44
44
|
|
|
45
|
-
1. `https://beta.abtnetwork.io
|
|
46
|
-
2.
|
|
47
|
-
3. アドレスを取得するための受信者のウォレットオブジェクト(`recipientWallet
|
|
45
|
+
1. `https://beta.abtnetwork.io`のようなチェーンホストに接続された初期化済みの`GraphQLClient`。
|
|
46
|
+
2. 転送とトランザクション手数料をカバーするのに十分なトークンが入金された送信者のウォレットオブジェクト(`senderWallet`)。
|
|
47
|
+
3. アドレスを取得するための受信者のウォレットオブジェクト(`recipientWallet`)。受信者のアカウントはまだオンチェーンに存在している必要はありません。
|
|
48
48
|
|
|
49
|
-
```javascript
|
|
49
|
+
```javascript 基本設定 icon=logos:javascript
|
|
50
50
|
import GraphQLClient from '@ocap/client';
|
|
51
51
|
import { fromRandom } from '@ocap/wallet';
|
|
52
52
|
|
|
@@ -55,13 +55,13 @@ const client = new GraphQLClient({ endpoint: 'https://beta.abtnetwork.io/api' })
|
|
|
55
55
|
|
|
56
56
|
// 2. 送信者と受信者のウォレットを作成
|
|
57
57
|
// 実際のアプリケーションでは、送信者のウォレットはランダムに作成されるのではなく、ロードされます。
|
|
58
|
-
const senderWallet = fromRandom(); //
|
|
58
|
+
const senderWallet = fromRandom(); // このウォレットには資金が入っていると仮定します
|
|
59
59
|
const recipientWallet = fromRandom();
|
|
60
60
|
|
|
61
|
-
console.log(
|
|
62
|
-
console.log(
|
|
61
|
+
console.log(`Sender Address: ${senderWallet.address}`);
|
|
62
|
+
console.log(`Recipient Address: ${recipientWallet.address}`);
|
|
63
63
|
|
|
64
|
-
//
|
|
64
|
+
// この例のために送信者のウォレットに資金を供給するには、フォーセットを使用してください:
|
|
65
65
|
// https://faucet.abtnetwork.io/
|
|
66
66
|
```
|
|
67
67
|
|
|
@@ -69,43 +69,43 @@ console.log(`受信者アドレス: ${recipientWallet.address}`);
|
|
|
69
69
|
|
|
70
70
|
この例では、送信者から受信者に10ネイティブトークンを送信する方法を示します。
|
|
71
71
|
|
|
72
|
-
```javascript
|
|
72
|
+
```javascript ネイティブトークンの転送 icon=logos:javascript
|
|
73
73
|
async function transferNativeTokens() {
|
|
74
74
|
try {
|
|
75
75
|
const hash = await client.transfer({
|
|
76
76
|
to: recipientWallet.address,
|
|
77
77
|
token: 10, // 送信するネイティブトークンの量
|
|
78
78
|
wallet: senderWallet,
|
|
79
|
-
memo: '10
|
|
79
|
+
memo: 'Sending you 10 native tokens!'
|
|
80
80
|
});
|
|
81
|
-
console.log('
|
|
81
|
+
console.log('Native token transfer successful. Tx Hash:', hash);
|
|
82
82
|
} catch (err) {
|
|
83
|
-
console.error('
|
|
83
|
+
console.error('Error transferring tokens:', err);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
transferNativeTokens();
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
### 例2:NFT
|
|
90
|
+
### 例2:NFT(アセット)の転送
|
|
91
91
|
|
|
92
|
-
NFT
|
|
92
|
+
NFTを転送するには、その一意のアセットアドレスが必要です。まず、アセットを作成または取得します([アセット(NFT)の管理](./how-to-guides-manage-assets.md)を参照)。この例では、`senderWallet`がすでにアドレス`zNKj...`を持つNFTを所有していると仮定します。
|
|
93
93
|
|
|
94
|
-
```javascript
|
|
94
|
+
```javascript NFTの転送 icon=logos:javascript
|
|
95
95
|
async function transferNFT() {
|
|
96
|
-
// senderWalletが所有するNFT
|
|
96
|
+
// これがsenderWalletが所有するNFTのアドレスであると仮定します
|
|
97
97
|
const nftAddress = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
|
|
98
98
|
|
|
99
99
|
try {
|
|
100
100
|
const hash = await client.transfer({
|
|
101
101
|
to: recipientWallet.address,
|
|
102
|
-
assets: [nftAddress], //
|
|
102
|
+
assets: [nftAddress], // アセットアドレスの配列
|
|
103
103
|
wallet: senderWallet,
|
|
104
|
-
memo: '
|
|
104
|
+
memo: 'Here is the NFT you wanted.'
|
|
105
105
|
});
|
|
106
|
-
console.log('NFT
|
|
106
|
+
console.log('NFT transfer successful. Tx Hash:', hash);
|
|
107
107
|
} catch (err) {
|
|
108
|
-
console.error('NFT
|
|
108
|
+
console.error('Error transferring NFT:', err);
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -114,11 +114,11 @@ transferNFT();
|
|
|
114
114
|
|
|
115
115
|
### 例3:カスタムトークンの転送
|
|
116
116
|
|
|
117
|
-
この例では、カスタムファンジブルトークンを転送する方法を示します。トークンのコントラクトアドレスが必要です。カスタムトークンの作成については、[トークンの管理](./how-to-guides-manage-tokens.md)
|
|
117
|
+
この例では、カスタムファンジブルトークンを転送する方法を示します。トークンのコントラクトアドレスが必要です。カスタムトークンの作成については、[トークンの管理](./how-to-guides-manage-tokens.md)ガイドを参照してください。
|
|
118
118
|
|
|
119
|
-
```javascript
|
|
119
|
+
```javascript カスタムトークンの転送 icon=logos:javascript
|
|
120
120
|
async function transferCustomToken() {
|
|
121
|
-
// senderWallet
|
|
121
|
+
// これがsenderWalletが所有するカスタムトークンのアドレスであると仮定します
|
|
122
122
|
const customTokenAddress = 'z37bA4x...';
|
|
123
123
|
|
|
124
124
|
try {
|
|
@@ -126,26 +126,26 @@ async function transferCustomToken() {
|
|
|
126
126
|
to: recipientWallet.address,
|
|
127
127
|
wallet: senderWallet,
|
|
128
128
|
tokens: [
|
|
129
|
-
{ address: customTokenAddress, value: 50 } // 50
|
|
129
|
+
{ address: customTokenAddress, value: 50 } // カスタムトークン50単位
|
|
130
130
|
],
|
|
131
|
-
memo: '50
|
|
131
|
+
memo: 'Sending 50 custom tokens.'
|
|
132
132
|
});
|
|
133
|
-
console.log('
|
|
133
|
+
console.log('Custom token transfer successful. Tx Hash:', hash);
|
|
134
134
|
} catch (err) {
|
|
135
|
-
console.error('
|
|
135
|
+
console.error('Error transferring custom token:', err);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
transferCustomToken();
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
### 例4
|
|
142
|
+
### 例4:複合転送
|
|
143
143
|
|
|
144
144
|
ネイティブトークン、カスタムトークン、および複数のNFTをすべて単一のアトミックなトランザクションで送信できます。これは非常に効率的です。
|
|
145
145
|
|
|
146
|
-
```javascript
|
|
146
|
+
```javascript 複合転送 icon=logos:javascript
|
|
147
147
|
async function combinedTransfer() {
|
|
148
|
-
//
|
|
148
|
+
// これらがsenderWalletが所有するアセットとトークンのアドレスであると仮定します
|
|
149
149
|
const nftAddress1 = 'zNKjL4wTmxQPk5nN2ADDPCd58286b2de3f3e';
|
|
150
150
|
const nftAddress2 = 'zNKiabcdeQPk5nN2ADDPCd58286b2defghj';
|
|
151
151
|
const customTokenAddress = 'z37bA4x...'; // カスタムファンジブルトークンのアドレス
|
|
@@ -157,23 +157,23 @@ async function combinedTransfer() {
|
|
|
157
157
|
token: 5, // 5ネイティブトークン
|
|
158
158
|
assets: [nftAddress1, nftAddress2], // 2つのNFTの配列
|
|
159
159
|
tokens: [
|
|
160
|
-
{ address: customTokenAddress, value: 50 } // 50
|
|
160
|
+
{ address: customTokenAddress, value: 50 } // カスタムトークン50単位
|
|
161
161
|
],
|
|
162
|
-
memo: '
|
|
162
|
+
memo: 'Sending a mix of tokens and NFTs.'
|
|
163
163
|
});
|
|
164
|
-
console.log('
|
|
164
|
+
console.log('Combined transfer successful. Tx Hash:', hash);
|
|
165
165
|
} catch (err) {
|
|
166
|
-
console.error('
|
|
166
|
+
console.error('Error with combined transfer:', err);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
combinedTransfer();
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
これらの例に従うことで、アプリケーションでトークンとNFTの転送を簡単に実装できます。転送したいアイテムの作成に関する詳細については、関連ガイドを参照してください。
|
|
174
174
|
|
|
175
175
|
### 参考文献
|
|
176
176
|
|
|
177
|
-
- [
|
|
177
|
+
- [アセット(NFT)の管理方法](./how-to-guides-manage-assets.md)
|
|
178
178
|
- [トークンの管理方法](./how-to-guides-manage-tokens.md)
|
|
179
179
|
- [高レベルAPI](./api-reference-transaction-helpers.md)
|