@ocap/client 1.25.4 → 1.25.5

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,36 +1,36 @@
1
1
  # 管理账户
2
2
 
3
- 在由 OCAP 驱动的区块链上,账户本质上是与一个地址关联的状态,由一对加密密钥(公钥和私钥)控制。一个需要理解的关键概念是,账户是隐式创建的。一旦账户收到第一笔入账交易(例如代币或资产转移),它就正式在链上存在了。没有显式的 `createAccount` 交易。
3
+ 在由 OCAP 支持的区块链上,账户本质上是一个与地址关联的状态,由一对加密密钥(公钥和私钥)控制。一个关键概念是,账户是隐式创建的。一旦账户收到第一笔入账交易(例如代币或资产转移),它就正式在链上存在了。没有显式的 `createAccount` 交易。
4
4
 
5
- 本指南专注于一个关键的账户管理操作:将账户迁移到一组新的密钥。这是一项重要的安全功能,允许您在不更改账户地址、余额或资产的情况下,更改账户的所有权。
5
+ 本指南重点介绍一项关键的账户管理操作:将账户迁移到一组新密钥。这是一项至关重要的安全功能,允许您在不更改账户地址、余额或资产的情况下,变更账户的所有权。
6
6
 
7
7
  ## 将账户迁移至新密钥
8
8
 
9
- `migrateAccount` 函数允许您将一个现有的账户地址与一个新的公钥关联起来。这在以下几种场景中非常有用:
9
+ `migrateAccount` 函数允许您将现有账户地址与新公钥关联。这在以下几种场景中非常有用:
10
10
 
11
11
  - **密钥泄露**:如果您怀疑自己的私钥已被泄露,可以将账户迁移到一个新的、安全的密钥对,以防止未经授权的访问。
12
- - **升级安全性**:您可能希望从旧的密钥类型迁移到更新、更安全的密钥类型。
12
+ - **安全升级**:您可能希望从旧类型的密钥迁移到更新、更安全的密钥。
13
13
 
14
- 此操作有效地转移了账户的控制权,同时保留了其在区块链上的历史和状态。
14
+ 此操作可有效转移账户的控制权,同时保留其在区块链上的历史和状态。
15
15
 
16
16
  ### 参数
17
17
 
18
18
  <x-field-group>
19
19
  <x-field data-name="from" data-type="WalletObject" data-required="true">
20
- <x-field-desc markdown>代表正在被迁移的当前账户的钱包对象。该钱包必须签署交易以证明所有权。</x-field-desc>
20
+ <x-field-desc markdown>代表当前正在迁移的账户的钱包对象。该钱包必须对交易进行签名以证明所有权。</x-field-desc>
21
21
  </x-field>
22
22
  <x-field data-name="to" data-type="WalletObject" data-required="true">
23
- <x-field-desc markdown>控制权将转移至的新钱包对象。来自此钱包的公钥将成为该账户地址的新权限所有者。</x-field-desc>
23
+ <x-field-desc markdown>将控制权转移至的新钱包对象。此钱包的公钥将成为该账户地址的新授权方。</x-field-desc>
24
24
  </x-field>
25
25
  </x-field-group>
26
26
 
27
27
  ### 返回值
28
28
 
29
- `migrateAccount` 方法返回一个 Promise,该 Promise 会解析为交易哈希字符串。
29
+ `migrateAccount` 方法返回一个 Promise,该 Promise 会解析为交易哈希(字符串类型)。
30
30
 
31
31
  ### 示例
32
32
 
33
- 以下是如何将账户从一个旧钱包迁移到一个新钱包的示例。
33
+ 以下是如何将账户从旧钱包迁移到新钱包的示例。
34
34
 
35
35
  ```javascript Migrating an Account icon=logos:javascript
36
36
  import Client from '@ocap/client';
@@ -38,10 +38,10 @@ import { fromRandom } from '@ocap/wallet';
38
38
 
39
39
  const client = new Client('https://beta.abtnetwork.io/api');
40
40
 
41
- // 假设 oldWallet 是当前账户授权的钱包
41
+ // 假设 oldWallet 是当前账户的授权钱包
42
42
  const oldWallet = fromRandom();
43
43
 
44
- // 创建一个带有新密钥集的新钱包
44
+ // 创建一个带有一组新密钥的新钱包
45
45
  const newWallet = fromRandom();
46
46
 
47
47
  async function migrate() {
@@ -56,9 +56,9 @@ async function migrate() {
56
56
  to: newWallet,
57
57
  });
58
58
 
59
- console.log('账户迁移交易已成功发送!');
59
+ console.log('账户迁移交易发送成功!');
60
60
  console.log('交易哈希:', hash);
61
- console.log(`在 https://beta.abtnetwork.io/explorer/txs/${hash} 查看交易`);
61
+ console.log(`查看交易: https://beta.abtnetwork.io/explorer/txs/${hash}`);
62
62
 
63
63
  } catch (err) {
64
64
  console.error('迁移账户时出错:', err);
@@ -70,4 +70,4 @@ migrate();
70
70
 
71
71
  ---
72
72
 
73
- 现在您已经了解了如何通过迁移密钥来保护您的账户,您可能想学习如何在不共享主密钥的情况下,向其他账户授予有限的权限。更多详情请参阅[委托权限](./how-to-guides-delegate-permissions.md)指南。
73
+ 现在您已了解如何通过迁移密钥来保护您的账户,您可能想学习如何在不共享主密钥的情况下,向其他账户授予有限的权限。详情请参阅[委托权限](./how-to-guides-delegate-permissions.md)指南。
@@ -0,0 +1,255 @@
1
+ # 資産 (NFT) の管理
2
+
3
+ このガイドでは、OCAP Client を使用して、資産としても知られる非代替性トークン(NFT)のライフサイクル全体を管理するための包括的なウォークスルーを提供します。新しい資産をゼロから作成し、そのプロパティを更新し、標準化されたミントのための資産ファクトリーを設立し、そのファクトリーから新しい資産を取得する方法を学びます。
4
+
5
+ ## 新しい資産の作成
6
+
7
+ `createAsset` メソッドを使用して、ブロックチェーン上にユニークでスタンドアロンな資産を作成できます。各資産には、その初期プロパティから導出されたユニークなオンチェーンアドレスが割り当てられます。
8
+
9
+ ```javascript icon=logos:javascript
10
+ const { wallet } = getWallet(); // ユーザーのウォレットオブジェクト
11
+
12
+ async function createNewAsset() {
13
+ try {
14
+ const [hash, address] = await client.createAsset({
15
+ moniker: 'My Unique Digital Artwork',
16
+ data: {
17
+ typeUrl: 'json',
18
+ value: {
19
+ description: 'A one-of-a-kind piece created by Artist X.',
20
+ imageUrl: 'https://example.com/path/to/image.png',
21
+ },
22
+ },
23
+ readonly: true,
24
+ transferrable: true,
25
+ wallet: wallet,
26
+ });
27
+
28
+ console.log(`Asset creation transaction sent: ${hash}`);
29
+ console.log(`New asset address: ${address}`);
30
+ return address;
31
+ } catch (error) {
32
+ console.error('Error creating asset:', error);
33
+ }
34
+ }
35
+
36
+ createNewAsset();
37
+ ```
38
+
39
+ ### パラメータ
40
+
41
+ <x-field-group>
42
+ <x-field data-name="moniker" data-type="string" data-required="true" data-desc="資産の名前。"></x-field>
43
+ <x-field data-name="parent" data-type="string" data-default="''" data-required="false" data-desc="親資産のアドレス(もしあれば)。"></x-field>
44
+ <x-field data-name="data" data-type="object" data-required="true" data-desc="資産のデータペイロード。typeUrl と value を含む必要があります。"></x-field>
45
+ <x-field data-name="readonly" data-type="boolean" data-default="false" data-required="false" data-desc="true の場合、資産は作成後に更新できません。"></x-field>
46
+ <x-field data-name="transferrable" data-type="boolean" data-default="true" data-required="false" data-desc="true の場合、資産は別のアカウントに譲渡できます。"></x-field>
47
+ <x-field data-name="ttl" data-type="number" data-default="0" data-required="false" data-desc="資産の初回消費後の生存時間(秒単位)。"></x-field>
48
+ <x-field data-name="display" data-type="object" data-required="false" data-desc="資産の表示情報を含むオブジェクト。"></x-field>
49
+ <x-field data-name="endpoint" data-type="object" data-required="false" data-desc="資産のエンドポイント詳細を含むオブジェクト。"></x-field>
50
+ <x-field data-name="tags" data-type="string[]" data-default="[]" data-required="false" data-desc="資産を分類するための文字列の配列。"></x-field>
51
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="資産の初期所有者のウォレットオブジェクト。"></x-field>
52
+ <x-field data-name="delegator" data-type="string" data-default="''" data-required="false" data-desc="委任によってこのトランザクションを承認したアカウントのアドレス。"></x-field>
53
+ </x-field-group>
54
+
55
+ ### 戻り値
56
+
57
+ トランザクションハッシュと新しい資産のオンチェーンアドレスを含む配列に解決される `Promise`。
58
+
59
+ <x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[トランザクションハッシュ, 資産アドレス]"></x-field>
60
+
61
+ ---
62
+
63
+ ## 既存の資産の更新
64
+
65
+ 資産が `readonly: false` で作成された場合、`updateAsset` メソッドを使用してその `moniker` および `data` フィールドを変更できます。資産はそのユニークなアドレスによって識別されます。
66
+
67
+ ```javascript icon=logos:javascript
68
+ const { wallet } = getWallet(); // ユーザーのウォレットオブジェクト
69
+ const assetAddress = 'z362...'; // 更新する資産のアドレス
70
+
71
+ async function updateExistingAsset() {
72
+ try {
73
+ const hash = await client.updateAsset({
74
+ address: assetAddress,
75
+ moniker: 'My Updated Digital Artwork',
76
+ data: {
77
+ typeUrl: 'json',
78
+ value: {
79
+ description: 'An updated description for my unique piece.',
80
+ imageUrl: 'https://example.com/path/to/new_image.png',
81
+ },
82
+ },
83
+ wallet: wallet,
84
+ });
85
+
86
+ console.log(`Asset update transaction sent: ${hash}`);
87
+ } catch (error) {
88
+ console.error('Error updating asset:', error);
89
+ }
90
+ }
91
+
92
+ updateExistingAsset();
93
+ ```
94
+
95
+ ### パラメータ
96
+
97
+ <x-field-group>
98
+ <x-field data-name="address" data-type="string" data-required="true" data-desc="更新する資産のオンチェーンアドレス。"></x-field>
99
+ <x-field data-name="moniker" data-type="string" data-required="true" data-desc="資産の新しい名前。"></x-field>
100
+ <x-field data-name="data" data-type="object" data-required="true" data-desc="資産の更新されたデータペイロード。"></x-field>
101
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="現在の資産所有者のウォレットオブジェクト。"></x-field>
102
+ </x-field-group>
103
+
104
+ ### 戻り値
105
+
106
+ トランザクションハッシュに解決される `Promise`。
107
+
108
+ <x-field data-name="response" data-type="Promise<string>" data-desc="トランザクションハッシュ"></x-field>
109
+
110
+ ---
111
+
112
+ ## 資産ファクトリーの作成
113
+
114
+ 資産ファクトリーは、複数の類似した資産を作成するためのテンプレートです。新しい資産をミントするための構造、ルール、ロジックを定義し、それぞれを個別に作成するよりも効率的です。これは、イベントチケット、証明書、または収集品の発行などのユースケースに最適です。
115
+
116
+ ```javascript icon=logos:javascript
117
+ const { wallet } = getWallet(); // ファクトリー所有者のウォレット
118
+
119
+ const factoryDefinition = {
120
+ name: 'Conference Ticket Factory',
121
+ description: 'Mints tickets for the 2024 Tech Conference.',
122
+ limit: 1000, // 最大1000枚のチケットがミント可能
123
+ input: {
124
+ // 資産をミントするために必要なデータを定義
125
+ type: 'object',
126
+ properties: {
127
+ attendeeName: { type: 'string' },
128
+ ticketType: { type: 'string', enum: ['General', 'VIP'] },
129
+ },
130
+ },
131
+ output: {
132
+ // ミントされる資産の構造を定義
133
+ moniker: 'Ticket for {{attendeeName}}',
134
+ description: '{{ticketType}} admission for the 2024 Tech Conference.',
135
+ transferrable: false, // チケットは譲渡不可
136
+ },
137
+ hooks: [],
138
+ };
139
+
140
+ async function createFactory() {
141
+ try {
142
+ const [hash, factoryAddress] = await client.createAssetFactory({
143
+ factory: factoryDefinition,
144
+ wallet: wallet,
145
+ });
146
+
147
+ console.log(`Factory creation transaction sent: ${hash}`);
148
+ console.log(`New factory address: ${factoryAddress}`);
149
+ } catch (error) {
150
+ console.error('Error creating asset factory:', error);
151
+ }
152
+ }
153
+
154
+ createFactory();
155
+ ```
156
+
157
+ ### パラメータ
158
+
159
+ <x-field-group>
160
+ <x-field data-name="factory" data-type="object" data-required="true" data-desc="ファクトリーのプロパティとミントロジックを定義するオブジェクト。">
161
+ <x-field data-name="name" data-type="string" data-required="true" data-desc="ファクトリーの名前。"></x-field>
162
+ <x-field data-name="description" data-type="string" data-required="true" data-desc="ファクトリーの目的の説明。"></x-field>
163
+ <x-field data-name="limit" data-type="number" data-default="0" data-required="false" data-desc="このファクトリーからミントできる資産の最大数。0は無制限を意味します。"></x-field>
164
+ <x-field data-name="trustedIssuers" data-type="string[]" data-required="false" data-desc="このファクトリーからのミントを許可されたアカウントアドレスのリスト。"></x-field>
165
+ <x-field data-name="input" data-type="object" data-required="true" data-desc="資産をミントするために必要な入力データを定義します。"></x-field>
166
+ <x-field data-name="output" data-type="object" data-required="true" data-desc="ミントされる資産の構造とプロパティを定義します。"></x-field>
167
+ <x-field data-name="hooks" data-type="object[]" data-required="false" data-desc="ミントプロセス中に実行されるフックのリスト。"></x-field>
168
+ <x-field data-name="data" data-type="object" data-required="false" data-desc="ファクトリーと共に保存する追加の任意データ。"></x-field>
169
+ </x-field>
170
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ファクトリー所有者のウォレットオブジェクト。"></x-field>
171
+ </x-field-group>
172
+
173
+
174
+ ### 戻り値
175
+
176
+ トランザクションハッシュと新しいファクトリーのオンチェーンアドレスを含む配列に解決される `Promise`。
177
+
178
+ <x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[トランザクションハッシュ, ファクトリーアドレス]"></x-field>
179
+
180
+ ---
181
+
182
+ ## ファクトリーからの資産の取得
183
+
184
+ ファクトリーから資産を取得するのは2段階のプロセスです。まず、ミントデータを準備し、これにより作成される資産をプレビューできます。次に、トランザクションをブロックチェーンに送信して、公式に資産を取得します。
185
+
186
+ この分離は、ユーザーが最終的なトランザクションに署名して送信する前に、受け取るものをアプリケーションが表示できるため便利です。
187
+
188
+ ### ステップ1:資産データの準備
189
+
190
+ `preMintAsset` メソッドは、ファクトリーアドレスとユーザーが提供した入力を使用して、最終的な資産データを生成します。これはオフチェーンで行われ、トランザクションは不要です。
191
+
192
+ ```javascript icon=logos:javascript
193
+ const factoryAddress = 'z2...'; // 以前作成されたファクトリーのアドレス
194
+ const { wallet: issuerWallet } = getIssuerWallet(); // ファクトリー所有者または信頼された発行者
195
+ const { wallet: userWallet } = getUserWallet(); // 新しい資産を所有するユーザー
196
+
197
+ async function prepareAssetForMinting() {
198
+ try {
199
+ const mintingData = await client.preMintAsset({
200
+ factory: factoryAddress,
201
+ inputs: {
202
+ attendeeName: 'John Doe',
203
+ ticketType: 'VIP',
204
+ },
205
+ owner: userWallet.address,
206
+ wallet: issuerWallet,
207
+ });
208
+
209
+ console.log('Prepared asset data for minting:', mintingData);
210
+ return mintingData;
211
+ } catch (error) {
212
+ console.error('Error preparing asset:', error);
213
+ }
214
+ }
215
+ ```
216
+
217
+ ### ステップ2:トランザクションの送信
218
+
219
+ ミントデータが準備されると、ユーザー(将来の資産所有者)が `acquireAsset` トランザクションに署名して送信します。`preMintAsset` からの `itx` オブジェクトがペイロードとして使用されます。
220
+
221
+ ```javascript icon=logos:javascript
222
+ async function acquireNewAsset() {
223
+ // まず、ステップ1からミントデータを取得
224
+ const itx = await prepareAssetForMinting();
225
+ if (!itx) return;
226
+
227
+ try {
228
+ const hash = await client.acquireAsset({
229
+ itx: itx,
230
+ wallet: userWallet, // ユーザーのウォレットがトランザクションに署名
231
+ });
232
+
233
+ console.log(`Asset acquisition transaction sent: ${hash}`);
234
+ console.log(`New asset will be available at address: ${itx.address}`);
235
+ } catch (error) {
236
+ console.error('Error acquiring asset:', error);
237
+ }
238
+ }
239
+
240
+ acquireNewAsset();
241
+ ```
242
+
243
+ ### `acquireAsset` のパラメータ
244
+
245
+ <x-field-group>
246
+ <x-field data-name="itx" data-type="object" data-required="true" data-desc="`preMintAsset` メソッドから返される内部トランザクションオブジェクト。"></x-field>
247
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="資産を取得するユーザーのウォレット。"></x-field>
248
+ <x-field data-name="delegator" data-type="string" data-default="''" data-required="false" data-desc="委任によってこのトランザクションを承認したアカウントのアドレス。"></x-field>
249
+ </x-field-group>
250
+
251
+ ### 戻り値
252
+
253
+ `acquireAsset` 操作のトランザクションハッシュに解決される `Promise`。
254
+
255
+ <x-field data-name="response" data-type="Promise<string>" data-desc="トランザクションハッシュ"></x-field>
@@ -0,0 +1,255 @@
1
+ # 管理資產 (NFT)
2
+
3
+ 本指南提供了使用 OCAP Client 管理非同質化代幣 (NFT)(也稱為資產)整個生命週期的完整演練。您將學習如何從頭開始創建新資產、更新其屬性、建立資產工廠以進行標準化鑄造,以及從該工廠獲取新資產。
4
+
5
+ ## 創建新資產
6
+
7
+ 您可以使用 `createAsset` 方法在區塊鏈上創建一個獨一無二的獨立資產。每個資產都會被分配一個根據其初始屬性派生而來的唯一鏈上地址。
8
+
9
+ ```javascript icon=logos:javascript
10
+ const { wallet } = getWallet(); // 使用者的錢包物件
11
+
12
+ async function createNewAsset() {
13
+ try {
14
+ const [hash, address] = await client.createAsset({
15
+ moniker: '我的獨特數位藝術品',
16
+ data: {
17
+ typeUrl: 'json',
18
+ value: {
19
+ description: '由藝術家 X 創作的獨一無二的作品。',
20
+ imageUrl: 'https://example.com/path/to/image.png',
21
+ },
22
+ },
23
+ readonly: true,
24
+ transferrable: true,
25
+ wallet: wallet,
26
+ });
27
+
28
+ console.log(`資產創建交易已發送:${hash}`);
29
+ console.log(`新資產地址:${address}`);
30
+ return address;
31
+ } catch (error) {
32
+ console.error('創建資產時出錯:', error);
33
+ }
34
+ }
35
+
36
+ createNewAsset();
37
+ ```
38
+
39
+ ### 參數
40
+
41
+ <x-field-group>
42
+ <x-field data-name="moniker" data-type="string" data-required="true" data-desc="資產的名稱。"></x-field>
43
+ <x-field data-name="parent" data-type="string" data-default="''" data-required="false" data-desc="父資產的地址(如果有的話)。"></x-field>
44
+ <x-field data-name="data" data-type="object" data-required="true" data-desc="資產的資料負載,必須包含 typeUrl 和 value。"></x-field>
45
+ <x-field data-name="readonly" data-type="boolean" data-default="false" data-required="false" data-desc="若為 true,則資產在創建後無法更新。"></x-field>
46
+ <x-field data-name="transferrable" data-type="boolean" data-default="true" data-required="false" data-desc="若為 true,則資產可以轉移到另一個帳戶。"></x-field>
47
+ <x-field data-name="ttl" data-type="number" data-default="0" data-required="false" data-desc="資產首次消費後的存活時間(以秒為單位)。"></x-field>
48
+ <x-field data-name="display" data-type="object" data-required="false" data-desc="包含資產顯示資訊的物件。"></x-field>
49
+ <x-field data-name="endpoint" data-type="object" data-required="false" data-desc="包含資產端點詳細資訊的物件。"></x-field>
50
+ <x-field data-name="tags" data-type="string[]" data-default="[]" data-required="false" data-desc="用於對資產進行分類的字串陣列。"></x-field>
51
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="資產初始擁有者的錢包物件。"></x-field>
52
+ <x-field data-name="delegator" data-type="string" data-default="''" data-required="false" data-desc="透過委託授權此交易的帳戶地址。"></x-field>
53
+ </x-field-group>
54
+
55
+ ### 返回值
56
+
57
+ 一個 `Promise`,會解析為一個包含交易雜湊值和新資產鏈上地址的陣列。
58
+
59
+ <x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[transactionHash, assetAddress]"></x-field>
60
+
61
+ ---
62
+
63
+ ## 更新現有資產
64
+
65
+ 如果資產在創建時設定了 `readonly: false`,您可以使用 `updateAsset` 方法修改其 `moniker` 和 `data` 欄位。資產透過其唯一地址進行標識。
66
+
67
+ ```javascript icon=logos:javascript
68
+ const { wallet } = getWallet(); // 使用者的錢包物件
69
+ const assetAddress = 'z362...'; // 要更新的資產地址
70
+
71
+ async function updateExistingAsset() {
72
+ try {
73
+ const hash = await client.updateAsset({
74
+ address: assetAddress,
75
+ moniker: '我更新後的數位藝術品',
76
+ data: {
77
+ typeUrl: 'json',
78
+ value: {
79
+ description: '我的獨特作品的更新描述。',
80
+ imageUrl: 'https://example.com/path/to/new_image.png',
81
+ },
82
+ },
83
+ wallet: wallet,
84
+ });
85
+
86
+ console.log(`資產更新交易已發送:${hash}`);
87
+ } catch (error) {
88
+ console.error('更新資產時出錯:', error);
89
+ }
90
+ }
91
+
92
+ updateExistingAsset();
93
+ ```
94
+
95
+ ### 參數
96
+
97
+ <x-field-group>
98
+ <x-field data-name="address" data-type="string" data-required="true" data-desc="要更新的資產的鏈上地址。"></x-field>
99
+ <x-field data-name="moniker" data-type="string" data-required="true" data-desc="資產的新名稱。"></x-field>
100
+ <x-field data-name="data" data-type="object" data-required="true" data-desc="資產的更新資料負載。"></x-field>
101
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="當前資產擁有者的錢包物件。"></x-field>
102
+ </x-field-group>
103
+
104
+ ### 返回值
105
+
106
+ 一個 `Promise`,會解析為交易雜湊值。
107
+
108
+ <x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>
109
+
110
+ ---
111
+
112
+ ## 創建資產工廠
113
+
114
+ 資產工廠是用於創建多個相似資產的範本。它定義了鑄造新資產的結構、規則和邏輯,這比單獨創建每個資產更有效率。這非常適合用於發行活動門票、證書或收藏品等用例。
115
+
116
+ ```javascript icon=logos:javascript
117
+ const { wallet } = getWallet(); // 工廠擁有者的錢包
118
+
119
+ const factoryDefinition = {
120
+ name: '會議門票工廠',
121
+ description: '為 2024 年技術大會鑄造門票。',
122
+ limit: 1000, // 最多可鑄造 1000 張門票
123
+ input: {
124
+ // 定義鑄造資產所需的資料
125
+ type: 'object',
126
+ properties: {
127
+ attendeeName: { type: 'string' },
128
+ ticketType: { type: 'string', enum: ['General', 'VIP'] },
129
+ },
130
+ },
131
+ output: {
132
+ // 定義鑄造資產的結構
133
+ moniker: '{{attendeeName}} 的門票',
134
+ description: '2024 年技術大會的 {{ticketType}} 入場券。',
135
+ transferrable: false, // 門票不可轉讓
136
+ },
137
+ hooks: [],
138
+ };
139
+
140
+ async function createFactory() {
141
+ try {
142
+ const [hash, factoryAddress] = await client.createAssetFactory({
143
+ factory: factoryDefinition,
144
+ wallet: wallet,
145
+ });
146
+
147
+ console.log(`工廠創建交易已發送:${hash}`);
148
+ console.log(`新工廠地址:${factoryAddress}`);
149
+ } catch (error) {
150
+ console.error('創建資產工廠時出錯:', error);
151
+ }
152
+ }
153
+
154
+ createFactory();
155
+ ```
156
+
157
+ ### 參數
158
+
159
+ <x-field-group>
160
+ <x-field data-name="factory" data-type="object" data-required="true" data-desc="一個定義工廠屬性和鑄造邏輯的物件。">
161
+ <x-field data-name="name" data-type="string" data-required="true" data-desc="工廠的名稱。"></x-field>
162
+ <x-field data-name="description" data-type="string" data-required="true" data-desc="工廠用途的描述。"></x-field>
163
+ <x-field data-name="limit" data-type="number" data-default="0" data-required="false" data-desc="可以從此工廠鑄造的最大資產數量。0 表示無限制。"></x-field>
164
+ <x-field data-name="trustedIssuers" data-type="string[]" data-required="false" data-desc="授權從此工廠鑄造的帳戶地址列表。"></x-field>
165
+ <x-field data-name="input" data-type="object" data-required="true" data-desc="定義鑄造資產所需的輸入資料。"></x-field>
166
+ <x-field data-name="output" data-type="object" data-required="true" data-desc="定義將被鑄造的資產的結構和屬性。"></x-field>
167
+ <x-field data-name="hooks" data-type="object[]" data-required="false" data-desc="在鑄造過程中要執行的一系列掛鉤 (hooks)。"></x-field>
168
+ <x-field data-name="data" data-type="object" data-required="false" data-desc="與工廠一起儲存的額外任意資料。"></x-field>
169
+ </x-field>
170
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="工廠擁有者的錢包物件。"></x-field>
171
+ </x-field-group>
172
+
173
+
174
+ ### 返回值
175
+
176
+ 一個 `Promise`,會解析為一個包含交易雜湊值和新工廠鏈上地址的陣列。
177
+
178
+ <x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[transactionHash, factoryAddress]"></x-field>
179
+
180
+ ---
181
+
182
+ ## 從工廠獲取資產
183
+
184
+ 從工廠獲取資產是一個兩步驟的過程。首先,您需要準備鑄造資料,這讓您可以預覽將要創建的資產。其次,您將交易提交到區塊鏈以正式獲取資產。
185
+
186
+ 這種分離很有用,因為它允許應用程式在使用者簽署並提交最終交易之前,向他們展示即將收到的內容。
187
+
188
+ ### 步驟 1:準備資產資料
189
+
190
+ `preMintAsset` 方法接收工廠地址和使用者提供的輸入,以生成最終的資產資料。此過程在鏈下進行,不需要交易。
191
+
192
+ ```javascript icon=logos:javascript
193
+ const factoryAddress = 'z2...'; // 先前創建的工廠地址
194
+ const { wallet: issuerWallet } = getIssuerWallet(); // 工廠擁有者或受信任的發行者
195
+ const { wallet: userWallet } = getUserWallet(); // 將擁有新資產的使用者
196
+
197
+ async function prepareAssetForMinting() {
198
+ try {
199
+ const mintingData = await client.preMintAsset({
200
+ factory: factoryAddress,
201
+ inputs: {
202
+ attendeeName: 'John Doe',
203
+ ticketType: 'VIP',
204
+ },
205
+ owner: userWallet.address,
206
+ wallet: issuerWallet,
207
+ });
208
+
209
+ console.log('準備好用於鑄造的資產資料:', mintingData);
210
+ return mintingData;
211
+ } catch (error) {
212
+ console.error('準備資產時出錯:', error);
213
+ }
214
+ }
215
+ ```
216
+
217
+ ### 步驟 2:發送交易
218
+
219
+ 一旦鑄造資料準備就緒,使用者(即未來的資產擁有者)便簽署並發送 `acquireAsset` 交易。來自 `preMintAsset` 的 `itx` 物件將被用作負載。
220
+
221
+ ```javascript icon=logos:javascript
222
+ async function acquireNewAsset() {
223
+ // 首先,從步驟 1 獲取鑄造資料
224
+ const itx = await prepareAssetForMinting();
225
+ if (!itx) return;
226
+
227
+ try {
228
+ const hash = await client.acquireAsset({
229
+ itx: itx,
230
+ wallet: userWallet, // 使用者的錢包簽署此交易
231
+ });
232
+
233
+ console.log(`資產獲取交易已發送:${hash}`);
234
+ console.log(`新資產將可在以下地址取得:${itx.address}`);
235
+ } catch (error) {
236
+ console.error('獲取資產時出錯:', error);
237
+ }
238
+ }
239
+
240
+ acquireNewAsset();
241
+ ```
242
+
243
+ ### `acquireAsset` 的參數
244
+
245
+ <x-field-group>
246
+ <x-field data-name="itx" data-type="object" data-required="true" data-desc="從 `preMintAsset` 方法返回的內部交易物件。"></x-field>
247
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="正在獲取資產的使用者的錢包。"></x-field>
248
+ <x-field data-name="delegator" data-type="string" data-default="''" data-required="false" data-desc="透過委託授權此交易的帳戶地址。"></x-field>
249
+ </x-field-group>
250
+
251
+ ### 返回值
252
+
253
+ 一個 `Promise`,會解析為 `acquireAsset` 操作的交易雜湊值。
254
+
255
+ <x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>