@ocap/client 1.25.6 → 1.26.1
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 +16 -16
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# アセット(NFT)の管理
|
|
2
2
|
|
|
3
|
-
このガイドでは、OCAP
|
|
3
|
+
このガイドでは、OCAP クライアントを使用して、アセットとしても知られる非代替性トークン(NFT)のライフサイクル全体を管理するための包括的なウォークスルーを提供します。新しいアセットをゼロから作成し、そのプロパティを更新し、標準化されたミントのためのアセットファクトリーを設立し、そのファクトリーから新しいアセットを取得する方法を学びます。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 新しいアセットの作成
|
|
6
6
|
|
|
7
|
-
`createAsset`
|
|
7
|
+
`createAsset` メソッドを使用して、ブロックチェーン上にユニークでスタンドアロンなアセットを作成できます。各アセットには、その初期プロパティから派生したユニークなオンチェーンアドレスが割り当てられます。
|
|
8
8
|
|
|
9
9
|
```javascript icon=logos:javascript
|
|
10
10
|
const { wallet } = getWallet(); // ユーザーのウォレットオブジェクト
|
|
@@ -25,11 +25,11 @@ async function createNewAsset() {
|
|
|
25
25
|
wallet: wallet,
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
console.log(
|
|
29
|
-
console.log(
|
|
28
|
+
console.log(`アセット作成トランザクションが送信されました: ${hash}`);
|
|
29
|
+
console.log(`新しいアセットのアドレス: ${address}`);
|
|
30
30
|
return address;
|
|
31
31
|
} catch (error) {
|
|
32
|
-
console.error('
|
|
32
|
+
console.error('アセットの作成中にエラーが発生しました:', error);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -39,34 +39,34 @@ createNewAsset();
|
|
|
39
39
|
### パラメータ
|
|
40
40
|
|
|
41
41
|
<x-field-group>
|
|
42
|
-
<x-field data-name="moniker" data-type="string" data-required="true" data-desc="
|
|
43
|
-
<x-field data-name="parent" data-type="string" data-default="''" data-required="false" data-desc="
|
|
44
|
-
<x-field data-name="data" data-type="object" data-required="true" data-desc="
|
|
45
|
-
<x-field data-name="readonly" data-type="boolean" data-default="false" data-required="false" data-desc="true
|
|
46
|
-
<x-field data-name="transferrable" data-type="boolean" data-default="true" data-required="false" data-desc="true
|
|
47
|
-
<x-field data-name="ttl" data-type="number" data-default="0" data-required="false" data-desc="
|
|
48
|
-
<x-field data-name="display" data-type="object" data-required="false" data-desc="
|
|
49
|
-
<x-field data-name="endpoint" data-type="object" data-required="false" data-desc="
|
|
50
|
-
<x-field data-name="tags" data-type="string[]" data-default="[]" data-required="false" data-desc="
|
|
51
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
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
52
|
<x-field data-name="delegator" data-type="string" data-default="''" data-required="false" data-desc="委任によってこのトランザクションを承認したアカウントのアドレス。"></x-field>
|
|
53
53
|
</x-field-group>
|
|
54
54
|
|
|
55
55
|
### 戻り値
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
トランザクションハッシュと新しいアセットのオンチェーンアドレスを含む配列に解決される `Promise`。
|
|
58
58
|
|
|
59
|
-
<x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[
|
|
59
|
+
<x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[transactionHash, assetAddress]"></x-field>
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## 既存アセットの更新
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
アセットが `readonly: false` で作成された場合、`updateAsset` メソッドを使用してその `moniker` と `data` フィールドを変更できます。アセットは、そのユニークなアドレスによって識別されます。
|
|
66
66
|
|
|
67
67
|
```javascript icon=logos:javascript
|
|
68
68
|
const { wallet } = getWallet(); // ユーザーのウォレットオブジェクト
|
|
69
|
-
const assetAddress = 'z362...'; //
|
|
69
|
+
const assetAddress = 'z362...'; // 更新するアセットのアドレス
|
|
70
70
|
|
|
71
71
|
async function updateExistingAsset() {
|
|
72
72
|
try {
|
|
@@ -83,9 +83,9 @@ async function updateExistingAsset() {
|
|
|
83
83
|
wallet: wallet,
|
|
84
84
|
});
|
|
85
85
|
|
|
86
|
-
console.log(
|
|
86
|
+
console.log(`アセット更新トランザクションが送信されました: ${hash}`);
|
|
87
87
|
} catch (error) {
|
|
88
|
-
console.error('
|
|
88
|
+
console.error('アセットの更新中にエラーが発生しました:', error);
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -95,23 +95,23 @@ updateExistingAsset();
|
|
|
95
95
|
### パラメータ
|
|
96
96
|
|
|
97
97
|
<x-field-group>
|
|
98
|
-
<x-field data-name="address" data-type="string" data-required="true" data-desc="
|
|
99
|
-
<x-field data-name="moniker" data-type="string" data-required="true" data-desc="
|
|
100
|
-
<x-field data-name="data" data-type="object" data-required="true" data-desc="
|
|
101
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
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
102
|
</x-field-group>
|
|
103
103
|
|
|
104
104
|
### 戻り値
|
|
105
105
|
|
|
106
106
|
トランザクションハッシュに解決される `Promise`。
|
|
107
107
|
|
|
108
|
-
<x-field data-name="response" data-type="Promise<string>" data-desc="
|
|
108
|
+
<x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>
|
|
109
109
|
|
|
110
110
|
---
|
|
111
111
|
|
|
112
|
-
##
|
|
112
|
+
## アセットファクトリーの作成
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
アセットファクトリーは、複数の類似したアセットを作成するためのテンプレートです。新しいアセットをミントするための構造、ルール、ロジックを定義し、それぞれを個別に作成するよりも効率的です。これは、イベントチケット、証明書、コレクティブルの発行などのユースケースに最適です。
|
|
115
115
|
|
|
116
116
|
```javascript icon=logos:javascript
|
|
117
117
|
const { wallet } = getWallet(); // ファクトリー所有者のウォレット
|
|
@@ -121,7 +121,7 @@ const factoryDefinition = {
|
|
|
121
121
|
description: 'Mints tickets for the 2024 Tech Conference.',
|
|
122
122
|
limit: 1000, // 最大1000枚のチケットがミント可能
|
|
123
123
|
input: {
|
|
124
|
-
//
|
|
124
|
+
// アセットのミントに必要なデータを定義
|
|
125
125
|
type: 'object',
|
|
126
126
|
properties: {
|
|
127
127
|
attendeeName: { type: 'string' },
|
|
@@ -129,7 +129,7 @@ const factoryDefinition = {
|
|
|
129
129
|
},
|
|
130
130
|
},
|
|
131
131
|
output: {
|
|
132
|
-
//
|
|
132
|
+
// ミントされるアセットの構造を定義
|
|
133
133
|
moniker: 'Ticket for {{attendeeName}}',
|
|
134
134
|
description: '{{ticketType}} admission for the 2024 Tech Conference.',
|
|
135
135
|
transferrable: false, // チケットは譲渡不可
|
|
@@ -144,10 +144,10 @@ async function createFactory() {
|
|
|
144
144
|
wallet: wallet,
|
|
145
145
|
});
|
|
146
146
|
|
|
147
|
-
console.log(
|
|
148
|
-
console.log(
|
|
147
|
+
console.log(`ファクトリー作成トランザクションが送信されました: ${hash}`);
|
|
148
|
+
console.log(`新しいファクトリーのアドレス: ${factoryAddress}`);
|
|
149
149
|
} catch (error) {
|
|
150
|
-
console.error('
|
|
150
|
+
console.error('アセットファクトリーの作成中にエラーが発生しました:', error);
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
|
|
@@ -160,12 +160,12 @@ createFactory();
|
|
|
160
160
|
<x-field data-name="factory" data-type="object" data-required="true" data-desc="ファクトリーのプロパティとミントロジックを定義するオブジェクト。">
|
|
161
161
|
<x-field data-name="name" data-type="string" data-required="true" data-desc="ファクトリーの名前。"></x-field>
|
|
162
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="
|
|
163
|
+
<x-field data-name="limit" data-type="number" data-default="0" data-required="false" data-desc="このファクトリーからミントできるアセットの最大数。0は無制限を意味します。"></x-field>
|
|
164
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="
|
|
166
|
-
<x-field data-name="output" data-type="object" data-required="true" data-desc="
|
|
167
|
-
<x-field data-name="hooks" data-type="object[]" data-required="false" data-desc="
|
|
168
|
-
<x-field data-name="data" data-type="object" data-required="false" data-desc="
|
|
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
169
|
</x-field>
|
|
170
170
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="ファクトリー所有者のウォレットオブジェクト。"></x-field>
|
|
171
171
|
</x-field-group>
|
|
@@ -175,24 +175,24 @@ createFactory();
|
|
|
175
175
|
|
|
176
176
|
トランザクションハッシュと新しいファクトリーのオンチェーンアドレスを含む配列に解決される `Promise`。
|
|
177
177
|
|
|
178
|
-
<x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[
|
|
178
|
+
<x-field data-name="response" data-type="Promise<[string, string]>" data-desc="[transactionHash, factoryAddress]"></x-field>
|
|
179
179
|
|
|
180
180
|
---
|
|
181
181
|
|
|
182
|
-
##
|
|
182
|
+
## ファクトリーからのアセットの取得
|
|
183
183
|
|
|
184
|
-
|
|
184
|
+
ファクトリーからアセットを取得するのは2段階のプロセスです。まず、ミントデータを準備し、これにより作成されるアセットをプレビューできます。次に、トランザクションをブロックチェーンに送信して、アセットを正式に取得します。
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
この分離は、アプリケーションがユーザーに最終的なトランザクションに署名して送信する前に何を受け取るかを表示できるため便利です。
|
|
187
187
|
|
|
188
|
-
### ステップ1
|
|
188
|
+
### ステップ1:アセットデータの準備
|
|
189
189
|
|
|
190
|
-
`preMintAsset`
|
|
190
|
+
`preMintAsset` メソッドは、ファクトリーアドレスとユーザーが提供した入力値を受け取り、最終的なアセットデータを生成します。これはオフチェーンで行われ、トランザクションは不要です。
|
|
191
191
|
|
|
192
192
|
```javascript icon=logos:javascript
|
|
193
|
-
const factoryAddress = 'z2...'; //
|
|
194
|
-
const { wallet: issuerWallet } = getIssuerWallet(); //
|
|
195
|
-
const { wallet: userWallet } = getUserWallet(); //
|
|
193
|
+
const factoryAddress = 'z2...'; // 以前に作成されたファクトリーのアドレス
|
|
194
|
+
const { wallet: issuerWallet } = getIssuerWallet(); // ファクトリーの所有者または信頼された発行者
|
|
195
|
+
const { wallet: userWallet } = getUserWallet(); // 新しいアセットを所有するユーザー
|
|
196
196
|
|
|
197
197
|
async function prepareAssetForMinting() {
|
|
198
198
|
try {
|
|
@@ -206,34 +206,34 @@ async function prepareAssetForMinting() {
|
|
|
206
206
|
wallet: issuerWallet,
|
|
207
207
|
});
|
|
208
208
|
|
|
209
|
-
console.log('
|
|
209
|
+
console.log('ミント用のアセットデータを準備しました:', mintingData);
|
|
210
210
|
return mintingData;
|
|
211
211
|
} catch (error) {
|
|
212
|
-
console.error('
|
|
212
|
+
console.error('アセットの準備中にエラーが発生しました:', error);
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
```
|
|
216
216
|
|
|
217
217
|
### ステップ2:トランザクションの送信
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
ミントデータが準備されると、ユーザー(将来のアセット所有者)が `acquireAsset` トランザクションに署名して送信します。`preMintAsset` からの `itx` オブジェクトがペイロードとして使用されます。
|
|
220
220
|
|
|
221
221
|
```javascript icon=logos:javascript
|
|
222
222
|
async function acquireNewAsset() {
|
|
223
|
-
// まず、ステップ1
|
|
223
|
+
// まず、ステップ1からミントデータを取得します
|
|
224
224
|
const itx = await prepareAssetForMinting();
|
|
225
225
|
if (!itx) return;
|
|
226
226
|
|
|
227
227
|
try {
|
|
228
228
|
const hash = await client.acquireAsset({
|
|
229
229
|
itx: itx,
|
|
230
|
-
wallet: userWallet, //
|
|
230
|
+
wallet: userWallet, // ユーザーのウォレットがトランザクションに署名します
|
|
231
231
|
});
|
|
232
232
|
|
|
233
|
-
console.log(
|
|
234
|
-
console.log(
|
|
233
|
+
console.log(`アセット取得トランザクションが送信されました: ${hash}`);
|
|
234
|
+
console.log(`新しいアセットは次のアドレスで利用可能になります: ${itx.address}`);
|
|
235
235
|
} catch (error) {
|
|
236
|
-
console.error('
|
|
236
|
+
console.error('アセットの取得中にエラーが発生しました:', error);
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
|
|
@@ -244,7 +244,7 @@ acquireNewAsset();
|
|
|
244
244
|
|
|
245
245
|
<x-field-group>
|
|
246
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="
|
|
247
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="アセットを取得するユーザーのウォレット。"></x-field>
|
|
248
248
|
<x-field data-name="delegator" data-type="string" data-default="''" data-required="false" data-desc="委任によってこのトランザクションを承認したアカウントのアドレス。"></x-field>
|
|
249
249
|
</x-field-group>
|
|
250
250
|
|
|
@@ -252,4 +252,81 @@ acquireNewAsset();
|
|
|
252
252
|
|
|
253
253
|
`acquireAsset` 操作のトランザクションハッシュに解決される `Promise`。
|
|
254
254
|
|
|
255
|
-
<x-field data-name="response" data-type="Promise<string>" data-desc="
|
|
255
|
+
<x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## ファクトリーからのアセットのミント
|
|
260
|
+
|
|
261
|
+
ユーザー主導の `acquireAsset` フローに加えて、承認された発行者(ファクトリー所有者や信頼された発行者など)がアセットをミントし、ユーザーのアカウントに直接送信できます。このプロセスでも `preMintAsset` を使用してデータを準備しますが、最終的なトランザクションは発行者によって署名された `mintAsset` です。
|
|
262
|
+
|
|
263
|
+
このフローは、エアドロップ、証明書の授与、または受け取るユーザーが最終的なトランザクションを開始する必要がない場合に便利です。
|
|
264
|
+
|
|
265
|
+
### ステップ1:アセットデータの準備
|
|
266
|
+
|
|
267
|
+
このステップは取得フローと同じです。発行者は `preMintAsset` を呼び出して、トランザクションペイロード(`itx`)をオフチェーンで生成します。
|
|
268
|
+
|
|
269
|
+
```javascript icon=logos:javascript
|
|
270
|
+
const factoryAddress = 'z2...'; // ファクトリーのアドレス
|
|
271
|
+
const { wallet: issuerWallet } = getIssuerWallet(); // ファクトリーの所有者または信頼された発行者
|
|
272
|
+
const userAddress = 'z1...'; // アセットを受け取るユーザーのアドレス
|
|
273
|
+
|
|
274
|
+
async function prepareAssetForMinting() {
|
|
275
|
+
try {
|
|
276
|
+
const mintingData = await client.preMintAsset({
|
|
277
|
+
factory: factoryAddress,
|
|
278
|
+
inputs: {
|
|
279
|
+
attendeeName: 'Jane Smith',
|
|
280
|
+
ticketType: 'General',
|
|
281
|
+
},
|
|
282
|
+
owner: userAddress,
|
|
283
|
+
wallet: issuerWallet, // ここでは発行者のウォレットが使用されます
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
console.log('ミント用のアセットデータを準備しました:', mintingData);
|
|
287
|
+
return mintingData;
|
|
288
|
+
} catch (error) {
|
|
289
|
+
console.error('アセットの準備中にエラーが発生しました:', error);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### ステップ2:ミントトランザクションの送信
|
|
295
|
+
|
|
296
|
+
発行者は準備された `itx` オブジェクトを使用して `mintAsset` を呼び出します。トランザクションは発行者のウォレットで署名され、新しく作成されたアセットは前のステップで指定された所有者に割り当てられます。
|
|
297
|
+
|
|
298
|
+
```javascript icon=logos:javascript
|
|
299
|
+
async function mintNewAsset() {
|
|
300
|
+
// まず、ステップ1からミントデータを取得します
|
|
301
|
+
const itx = await prepareAssetForMinting();
|
|
302
|
+
if (!itx) return;
|
|
303
|
+
|
|
304
|
+
try {
|
|
305
|
+
// 発行者のウォレットがトランザクションに署名します
|
|
306
|
+
const hash = await client.mintAsset({
|
|
307
|
+
itx: itx,
|
|
308
|
+
wallet: issuerWallet,
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
console.log(`アセットミントトランザクションが送信されました: ${hash}`);
|
|
312
|
+
console.log(`${userAddress} 向けの新しいアセットは次のアドレスで利用可能になります: ${itx.address}`);
|
|
313
|
+
} catch (error) {
|
|
314
|
+
console.error('アセットのミント中にエラーが発生しました:', error);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
mintNewAsset();
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### `mintAsset` のパラメータ
|
|
322
|
+
|
|
323
|
+
<x-field-group>
|
|
324
|
+
<x-field data-name="itx" data-type="object" data-required="true" data-desc="`preMintAsset` メソッドから返される内部トランザクションオブジェクト。"></x-field>
|
|
325
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="アセットをミントする発行者のウォレット。"></x-field>
|
|
326
|
+
</x-field-group>
|
|
327
|
+
|
|
328
|
+
### 戻り値
|
|
329
|
+
|
|
330
|
+
`mintAsset` 操作のトランザクションハッシュに解決される `Promise`。
|
|
331
|
+
|
|
332
|
+
<x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>
|
|
@@ -252,4 +252,81 @@ acquireNewAsset();
|
|
|
252
252
|
|
|
253
253
|
A `Promise` that resolves to the transaction hash for the `acquireAsset` operation.
|
|
254
254
|
|
|
255
|
+
<x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Mint an Asset from a Factory
|
|
260
|
+
|
|
261
|
+
In addition to the user-led `acquireAsset` flow, an authorized issuer (such as the factory owner or a trusted issuer) can mint an asset and send it directly to a user's account. This process also uses `preMintAsset` to prepare the data, but the final transaction is `mintAsset`, signed by the issuer.
|
|
262
|
+
|
|
263
|
+
This flow is useful for scenarios like airdrops, awarding certificates, or any case where the receiving user does not need to initiate the final transaction.
|
|
264
|
+
|
|
265
|
+
### Step 1: Prepare the Asset Data
|
|
266
|
+
|
|
267
|
+
This step is identical to the acquisition flow. The issuer calls `preMintAsset` to generate the transaction payload (`itx`) off-chain.
|
|
268
|
+
|
|
269
|
+
```javascript icon=logos:javascript
|
|
270
|
+
const factoryAddress = 'z2...'; // Address of the factory
|
|
271
|
+
const { wallet: issuerWallet } = getIssuerWallet(); // The factory owner or a trusted issuer
|
|
272
|
+
const userAddress = 'z1...'; // The address of the user who will receive the asset
|
|
273
|
+
|
|
274
|
+
async function prepareAssetForMinting() {
|
|
275
|
+
try {
|
|
276
|
+
const mintingData = await client.preMintAsset({
|
|
277
|
+
factory: factoryAddress,
|
|
278
|
+
inputs: {
|
|
279
|
+
attendeeName: 'Jane Smith',
|
|
280
|
+
ticketType: 'General',
|
|
281
|
+
},
|
|
282
|
+
owner: userAddress,
|
|
283
|
+
wallet: issuerWallet, // Issuer's wallet is used here
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
console.log('Prepared asset data for minting:', mintingData);
|
|
287
|
+
return mintingData;
|
|
288
|
+
} catch (error) {
|
|
289
|
+
console.error('Error preparing asset:', error);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Step 2: Send the Mint Transaction
|
|
295
|
+
|
|
296
|
+
The issuer uses the prepared `itx` object to call `mintAsset`. The transaction is signed with the issuer's wallet, and the newly created asset is assigned to the owner specified in the previous step.
|
|
297
|
+
|
|
298
|
+
```javascript icon=logos:javascript
|
|
299
|
+
async function mintNewAsset() {
|
|
300
|
+
// First, get the minting data from Step 1
|
|
301
|
+
const itx = await prepareAssetForMinting();
|
|
302
|
+
if (!itx) return;
|
|
303
|
+
|
|
304
|
+
try {
|
|
305
|
+
// The issuer's wallet signs the transaction
|
|
306
|
+
const hash = await client.mintAsset({
|
|
307
|
+
itx: itx,
|
|
308
|
+
wallet: issuerWallet,
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
console.log(`Asset minting transaction sent: ${hash}`);
|
|
312
|
+
console.log(`New asset for ${userAddress} will be available at address: ${itx.address}`);
|
|
313
|
+
} catch (error) {
|
|
314
|
+
console.error('Error minting asset:', error);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
mintNewAsset();
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Parameters for `mintAsset`
|
|
322
|
+
|
|
323
|
+
<x-field-group>
|
|
324
|
+
<x-field data-name="itx" data-type="object" data-required="true" data-desc="The inner transaction object returned from the `preMintAsset` method."></x-field>
|
|
325
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="The wallet of the issuer who is minting the asset."></x-field>
|
|
326
|
+
</x-field-group>
|
|
327
|
+
|
|
328
|
+
### Returns
|
|
329
|
+
|
|
330
|
+
A `Promise` that resolves to the transaction hash for the `mintAsset` operation.
|
|
331
|
+
|
|
255
332
|
<x-field data-name="response" data-type="Promise<string>" data-desc="transactionHash"></x-field>
|