@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,43 +1,43 @@
|
|
|
1
|
-
# 低レベルAPI
|
|
1
|
+
# 低レベル API
|
|
2
2
|
|
|
3
|
-
低レベルAPI
|
|
3
|
+
低レベル API は、トランザクションのライフサイクル全体にわたるきめ細やかな制御を提供します。[高レベル API](./api-reference-transaction-helpers.md) が詳細を抽象化するのとは異なり、これらのメソッドを使用すると、トランザクションを手動で構築、エンコード、署名、送信できます。これは、ブロードキャストされる前に異なる関係者がトランザクションに署名する必要があるマルチシグネチャワークフローなどの高度なシナリオに最適です。
|
|
4
4
|
|
|
5
|
-
このAPIは、トランザクションライフサイクルの各段階に対応する4
|
|
5
|
+
この API は、トランザクションライフサイクルの各段階に対応する4つの主要なメソッドグループに整理されています。
|
|
6
6
|
|
|
7
|
-
1. **エンコード**:
|
|
7
|
+
1. **エンコード**: トランザクションを準備し、バイナリバッファにシリアル化します。
|
|
8
8
|
2. **署名**: エンコードされたトランザクションにデジタル署名を追加します。
|
|
9
|
-
3.
|
|
9
|
+
3. **マルチ署名**: トランザクションに複数のデジタル署名を追加します。
|
|
10
10
|
4. **送信**: 署名されたトランザクションをブロックチェーンにブロードキャストします。
|
|
11
11
|
|
|
12
12
|
## トランザクションのエンコード
|
|
13
13
|
|
|
14
|
-
エンコードは、トランザクションを作成する最初のステップです。`encode[Type]Tx
|
|
14
|
+
エンコードは、トランザクションを作成する最初のステップです。`encode[Type]Tx` メソッドは、コアトランザクションデータ (`itx`) を受け取り、それを標準的なトランザクション構造でラップし、`chainId` や `nonce` などの必要な詳細を追加します。結果として、人間が読める形式のトランザクションオブジェクトと、署名準備ができたバイナリバッファが生成されます。
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
チェーンでサポートされているすべてのトランザクションタイプに対して `encode` メソッドが存在します。`client.getTxEncodeMethods()` を呼び出すことで、全リストを取得できます。
|
|
17
17
|
|
|
18
18
|
### `encode[Type]Tx(payload)`
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
トランザクションを署名せずにエンコードします。
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
**パラメータ**
|
|
23
23
|
|
|
24
24
|
<x-field-group>
|
|
25
25
|
<x-field data-name="tx" data-type="object" data-required="true">
|
|
26
26
|
<x-field-desc markdown>トランザクションデータオブジェクト。</x-field-desc>
|
|
27
27
|
<x-field data-name="itx" data-type="object" data-required="true" data-desc="トランザクションタイプに固有の内部トランザクションオブジェクト。"></x-field>
|
|
28
|
-
<x-field data-name="from" data-type="string" data-required="false" data-desc="
|
|
29
|
-
<x-field data-name="nonce" data-type="number" data-required="false" data-desc="
|
|
30
|
-
<x-field data-name="chainId" data-type="string" data-required="false" data-desc="チェーンID
|
|
28
|
+
<x-field data-name="from" data-type="string" data-required="false" data-desc="送信者のアドレス。指定されていない場合は、ウォレットから派生します。"></x-field>
|
|
29
|
+
<x-field data-name="nonce" data-type="number" data-required="false" data-desc="トランザクションのナンス。設定されていない場合は、`Date.now()` がデフォルト値となります。"></x-field>
|
|
30
|
+
<x-field data-name="chainId" data-type="string" data-required="false" data-desc="チェーン ID。指定されていない場合は、接続されたノードから取得されます。"></x-field>
|
|
31
31
|
</x-field>
|
|
32
32
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="送信者のアドレスと公開鍵を派生させるために使用されるウォレットオブジェクト。"></x-field>
|
|
33
|
-
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="
|
|
33
|
+
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="該当する場合、権限を委任しているアカウントのアドレス。"></x-field>
|
|
34
34
|
</x-field-group>
|
|
35
35
|
|
|
36
36
|
**戻り値**
|
|
37
37
|
|
|
38
|
-
<x-field data-name="Promise<object>" data-type="Promise<object>" data-desc="エンコードされたトランザクションを含むオブジェクトに解決されるPromise。">
|
|
38
|
+
<x-field data-name="Promise<object>" data-type="Promise<object>" data-desc="エンコードされたトランザクションを含むオブジェクトに解決される Promise。">
|
|
39
39
|
<x-field data-name="object" data-type="object" data-desc="人間が読める形式のトランザクションオブジェクト。"></x-field>
|
|
40
|
-
<x-field data-name="buffer" data-type="Buffer" data-desc="
|
|
40
|
+
<x-field data-name="buffer" data-type="Buffer" data-desc="署名準備ができた、シリアル化されたトランザクションのバイナリバッファ。"></x-field>
|
|
41
41
|
</x-field>
|
|
42
42
|
|
|
43
43
|
**例**
|
|
@@ -57,32 +57,32 @@ const { object, buffer } = await encodeTransferV2Tx({
|
|
|
57
57
|
wallet: senderWallet,
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
console.log('
|
|
61
|
-
console.log('
|
|
60
|
+
console.log('Encoded TX Object:', object);
|
|
61
|
+
console.log('Buffer to Sign:', buffer.toString('hex'));
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
##
|
|
64
|
+
## トランザクションへの署名
|
|
65
65
|
|
|
66
|
-
`sign[Type]Tx
|
|
66
|
+
`sign[Type]Tx` メソッドは、エンコードステップにデジタル署名を追加することで、そのステップを基盤としています。これらのメソッドはトランザクションをエンコードし、提供されたウォレットを使用して結果のバイナリバッファに署名します。
|
|
67
67
|
|
|
68
|
-
`client.getTxSignMethods()
|
|
68
|
+
`client.getTxSignMethods()` を呼び出すことで、利用可能な署名メソッドの全リストを取得できます。
|
|
69
69
|
|
|
70
70
|
### `sign[Type]Tx(payload)`
|
|
71
71
|
|
|
72
72
|
トランザクションをエンコードし、署名します。
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
**パラメータ**
|
|
75
75
|
|
|
76
76
|
<x-field-group>
|
|
77
77
|
<x-field data-name="tx" data-type="object" data-required="true" data-desc="トランザクションデータオブジェクト。エンコード用と同じです。"></x-field>
|
|
78
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
78
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="トランザクションへの署名に使用されるウォレット。"></x-field>
|
|
79
79
|
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="該当する場合、デリゲータのアドレス。"></x-field>
|
|
80
|
-
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="
|
|
80
|
+
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="出力のオプションのエンコーディング ('base16', 'hex', 'base58', 'base64')。省略された場合、トランザクションオブジェクトを返します。"></x-field>
|
|
81
81
|
</x-field-group>
|
|
82
82
|
|
|
83
83
|
**戻り値**
|
|
84
84
|
|
|
85
|
-
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="
|
|
85
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="署名されたトランザクションオブジェクト、または `encoding` が指定されている場合はエンコードされた文字列に解決される Promise。"></x-field>
|
|
86
86
|
|
|
87
87
|
**例**
|
|
88
88
|
|
|
@@ -101,32 +101,32 @@ const signedTx = await signTransferV2Tx({
|
|
|
101
101
|
wallet: senderWallet,
|
|
102
102
|
});
|
|
103
103
|
|
|
104
|
-
console.log('
|
|
104
|
+
console.log('Signed TX:', signedTx);
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
## トランザクションの送信
|
|
108
108
|
|
|
109
|
-
`send[Type]Tx
|
|
109
|
+
`send[Type]Tx` メソッドは、トランザクションをブロックチェーンにブロードキャストする役割を担います。これらのメソッドは、署名されていないトランザクションとウォレットが提供された場合に署名ステップを暗黙的に実行することも、すでに署名されたトランザクションを送信することもできます。
|
|
110
110
|
|
|
111
|
-
`client.getTxSendMethods()
|
|
111
|
+
送信メソッドの全リストは `client.getTxSendMethods()` を介して利用できます。
|
|
112
112
|
|
|
113
113
|
### `send[Type]Tx(payload)`
|
|
114
114
|
|
|
115
115
|
トランザクションに署名し(必要な場合)、チェーンに送信します。
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
**パラメータ**
|
|
118
118
|
|
|
119
119
|
<x-field-group>
|
|
120
120
|
<x-field data-name="tx" data-type="object" data-required="true" data-desc="トランザクションオブジェクト。署名済みでも未署名でもかまいません。"></x-field>
|
|
121
121
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="トランザクションに署名するためのウォレット。トランザクションが事前に署名されていても、送信者を特定するために必要です。"></x-field>
|
|
122
|
-
<x-field data-name="signature" data-type="string" data-required="false" data-desc="
|
|
122
|
+
<x-field data-name="signature" data-type="string" data-required="false" data-desc="トランザクションの事前に計算された署名。指定された場合、ウォレットは再署名に使用されません。"></x-field>
|
|
123
123
|
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="該当する場合、デリゲータのアドレス。"></x-field>
|
|
124
124
|
<x-field data-name="commit" data-type="boolean" data-default="false" data-required="false" data-desc="解決する前に、トランザクションがブロックにコミットされるのを待つかどうか。"></x-field>
|
|
125
125
|
</x-field-group>
|
|
126
126
|
|
|
127
127
|
**戻り値**
|
|
128
128
|
|
|
129
|
-
<x-field data-name="Promise<string>" data-type="Promise<string>" data-desc="トランザクションハッシュに解決されるPromise。"></x-field>
|
|
129
|
+
<x-field data-name="Promise<string>" data-type="Promise<string>" data-desc="トランザクションハッシュに解決される Promise。"></x-field>
|
|
130
130
|
|
|
131
131
|
**例:自動署名**
|
|
132
132
|
|
|
@@ -135,7 +135,7 @@ const { sendTransferV2Tx } = client;
|
|
|
135
135
|
const senderWallet = fromRandom();
|
|
136
136
|
const receiverAddress = 'z1...';
|
|
137
137
|
|
|
138
|
-
// クライアントは送信前にsenderWalletを使用してこのトランザクションに署名します。
|
|
138
|
+
// クライアントは送信前に senderWallet を使用してこのトランザクションに署名します。
|
|
139
139
|
const txHash = await sendTransferV2Tx({
|
|
140
140
|
tx: {
|
|
141
141
|
itx: {
|
|
@@ -146,13 +146,13 @@ const txHash = await sendTransferV2Tx({
|
|
|
146
146
|
wallet: senderWallet,
|
|
147
147
|
});
|
|
148
148
|
|
|
149
|
-
console.log('
|
|
149
|
+
console.log('Transaction sent with hash:', txHash);
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
**例:署名済みトランザクションの送信**
|
|
153
153
|
|
|
154
154
|
```javascript TransferV2Tx icon=logos:javascript
|
|
155
|
-
// signedTxはsign[Type]Txの例からのものと仮定します
|
|
155
|
+
// signedTx は sign[Type]Tx の例からのものと仮定します
|
|
156
156
|
const { sendTransferV2Tx } = client;
|
|
157
157
|
|
|
158
158
|
const txHash = await sendTransferV2Tx({
|
|
@@ -160,49 +160,49 @@ const txHash = await sendTransferV2Tx({
|
|
|
160
160
|
wallet: senderWallet,
|
|
161
161
|
});
|
|
162
162
|
|
|
163
|
-
console.log('
|
|
163
|
+
console.log('Pre-signed transaction sent with hash:', txHash);
|
|
164
164
|
```
|
|
165
165
|
|
|
166
166
|
## マルチシグネチャトランザクション
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
アトミックスワップのように複数の署名を必要とするワークフローでは、`multiSign[Type]Tx` メソッドが使用されます。このプロセスでは、まず一方の当事者が(標準の `sign[Type]Tx` メソッドを使用して)トランザクションに署名し、後続の当事者が対応する `multiSign[Type]Tx` メソッドを使用して自身の署名を追加します。
|
|
169
169
|
|
|
170
|
-
`client.getTxMultiSignMethods()
|
|
170
|
+
`client.getTxMultiSignMethods()` を介して、複数の署名をサポートするトランザクションのリストを取得できます。
|
|
171
171
|
|
|
172
172
|
### `multiSign[Type]Tx(payload)`
|
|
173
173
|
|
|
174
174
|
すでに1つ以上の署名があるトランザクションに署名を追加します。
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
**パラメータ**
|
|
177
177
|
|
|
178
178
|
<x-field-group>
|
|
179
|
-
<x-field data-name="tx" data-type="object" data-required="true" data-desc="
|
|
179
|
+
<x-field data-name="tx" data-type="object" data-required="true" data-desc="トランザクションオブジェクト。少なくとも1つの署名がすでに含まれている必要があります。"></x-field>
|
|
180
180
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="現在の署名者のウォレット。"></x-field>
|
|
181
181
|
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="該当する場合、現在の署名者のデリゲータのアドレス。"></x-field>
|
|
182
182
|
<x-field data-name="data" data-type="any" data-required="false" data-desc="署名に含めるオプションのデータ。"></x-field>
|
|
183
|
-
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="
|
|
183
|
+
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="出力のオプションのエンコーディング ('base16', 'hex', 'base58', 'base64')。"></x-field>
|
|
184
184
|
</x-field-group>
|
|
185
185
|
|
|
186
186
|
**戻り値**
|
|
187
187
|
|
|
188
|
-
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="新しい署名が追加されたトランザクションオブジェクトに解決されるPromise。"></x-field>
|
|
188
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="新しい署名が追加されたトランザクションオブジェクトに解決される Promise。"></x-field>
|
|
189
189
|
|
|
190
190
|
**例:アトミックスワップ (`ExchangeV2Tx`)**
|
|
191
191
|
|
|
192
192
|
```javascript ExchangeV2Tx icon=logos:javascript
|
|
193
|
-
// 2
|
|
193
|
+
// 2者のウォレット
|
|
194
194
|
const aliceWallet = fromRandom();
|
|
195
195
|
const bobWallet = fromRandom();
|
|
196
196
|
|
|
197
|
-
// 1.
|
|
197
|
+
// 1. アリスが最初の交換トランザクションを準備し、署名します
|
|
198
198
|
const exchangeTx = {
|
|
199
199
|
itx: {
|
|
200
200
|
to: bobWallet.address,
|
|
201
201
|
sender: {
|
|
202
|
-
value: await client.fromTokenToUnit(10), //
|
|
202
|
+
value: await client.fromTokenToUnit(10), // アリスは10トークンを提供します
|
|
203
203
|
},
|
|
204
204
|
receiver: {
|
|
205
|
-
value: await client.fromTokenToUnit(5), //
|
|
205
|
+
value: await client.fromTokenToUnit(5), // アリスは5トークンを要求します
|
|
206
206
|
},
|
|
207
207
|
},
|
|
208
208
|
};
|
|
@@ -212,17 +212,17 @@ const signedByAlice = await client.signExchangeV2Tx({
|
|
|
212
212
|
wallet: aliceWallet,
|
|
213
213
|
});
|
|
214
214
|
|
|
215
|
-
// 2.
|
|
215
|
+
// 2. アリスは `signedByAlice` をボブに送信します。ボブは自身の署名を追加します。
|
|
216
216
|
const signedByBoth = await client.multiSignExchangeV2Tx({
|
|
217
217
|
tx: signedByAlice,
|
|
218
218
|
wallet: bobWallet,
|
|
219
219
|
});
|
|
220
220
|
|
|
221
|
-
// 3.
|
|
221
|
+
// 3. ボブは `signedByBoth` をアリスに返送します。アリスが最終的なトランザクションを送信します。
|
|
222
222
|
const txHash = await client.sendExchangeV2Tx({
|
|
223
223
|
tx: signedByBoth,
|
|
224
|
-
wallet: aliceWallet, //
|
|
224
|
+
wallet: aliceWallet, // 送信者のウォレットが提出に使用されます
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
-
console.log('
|
|
227
|
+
console.log('Atomic swap transaction sent:', txHash);
|
|
228
228
|
```
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
# 低階 API
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
低階 API 提供了對整個交易生命週期的細粒度控制。與抽象化細節的[高階 API](./api-reference-transaction-helpers.md)不同,這些方法允許您手動建構、編碼、簽署和傳送交易。這對於進階情境非常理想,例如多重簽署工作流程,其中不同方需要在交易廣播前簽署交易。
|
|
4
4
|
|
|
5
5
|
此 API 分為四個主要的方法群組,每個群組對應交易生命週期中的一個階段:
|
|
6
6
|
|
|
7
7
|
1. **編碼**:準備一筆交易並將其序列化為二進位緩衝區。
|
|
8
|
-
2.
|
|
9
|
-
3.
|
|
10
|
-
4.
|
|
8
|
+
2. **簽署**:為已編碼的交易新增數位簽名。
|
|
9
|
+
3. **多重簽署**:為一筆交易新增多個數位簽名。
|
|
10
|
+
4. **傳送**:將已簽署的交易廣播到區塊鏈。
|
|
11
11
|
|
|
12
12
|
## 編碼交易
|
|
13
13
|
|
|
14
|
-
編碼是建立交易的第一步。`encode[Type]Tx` 方法會接收核心交易資料(`itx
|
|
14
|
+
編碼是建立交易的第一步。`encode[Type]Tx` 方法會接收核心交易資料(`itx`)並將其包裝在標準交易結構中,新增如 `chainId` 和 `nonce` 等必要細節。結果是一個可供人類讀取的交易物件和一個準備好簽署的二進位緩衝區。
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
鏈上支援的每種交易類型都有一個對應的 `encode` 方法。您可以透過呼叫 `client.getTxEncodeMethods()` 來獲取完整列表。
|
|
17
17
|
|
|
18
18
|
### `encode[Type]Tx(payload)`
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
編碼一筆交易但不進行簽署。
|
|
21
21
|
|
|
22
22
|
**參數**
|
|
23
23
|
|
|
@@ -25,19 +25,19 @@ The Low-level API 提供了對整個交易生命週期的精細控制。與將
|
|
|
25
25
|
<x-field data-name="tx" data-type="object" data-required="true">
|
|
26
26
|
<x-field-desc markdown>交易資料物件。</x-field-desc>
|
|
27
27
|
<x-field data-name="itx" data-type="object" data-required="true" data-desc="特定於交易類型的內部交易物件。"></x-field>
|
|
28
|
-
<x-field data-name="from" data-type="string" data-required="false" data-desc="
|
|
29
|
-
<x-field data-name="nonce" data-type="number" data-required="false" data-desc="交易 nonce
|
|
30
|
-
<x-field data-name="chainId" data-type="string" data-required="false" data-desc="鏈 ID
|
|
28
|
+
<x-field data-name="from" data-type="string" data-required="false" data-desc="傳送者地址。若未提供,則從錢包推導得出。"></x-field>
|
|
29
|
+
<x-field data-name="nonce" data-type="number" data-required="false" data-desc="交易 nonce。若未設定,預設為 `Date.now()`。"></x-field>
|
|
30
|
+
<x-field data-name="chainId" data-type="string" data-required="false" data-desc="鏈 ID。若未提供,則從連接的節點獲取。"></x-field>
|
|
31
31
|
</x-field>
|
|
32
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
33
|
-
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="
|
|
32
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="用於推導傳送者地址和公鑰的錢包物件。"></x-field>
|
|
33
|
+
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="委派權限的帳戶地址(如果適用)。"></x-field>
|
|
34
34
|
</x-field-group>
|
|
35
35
|
|
|
36
36
|
**回傳值**
|
|
37
37
|
|
|
38
|
-
<x-field data-name="Promise<object>" data-type="Promise<object>" data-desc="
|
|
39
|
-
<x-field data-name="object" data-type="object" data-desc="
|
|
40
|
-
<x-field data-name="buffer" data-type="Buffer" data-desc="
|
|
38
|
+
<x-field data-name="Promise<object>" data-type="Promise<object>" data-desc="一個 promise,其解析為包含已編碼交易的物件。">
|
|
39
|
+
<x-field data-name="object" data-type="object" data-desc="可供人類讀取的交易物件。"></x-field>
|
|
40
|
+
<x-field data-name="buffer" data-type="Buffer" data-desc="已序列化的交易二進位緩衝區,可供簽署。"></x-field>
|
|
41
41
|
</x-field>
|
|
42
42
|
|
|
43
43
|
**範例**
|
|
@@ -57,15 +57,15 @@ const { object, buffer } = await encodeTransferV2Tx({
|
|
|
57
57
|
wallet: senderWallet,
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
console.log('
|
|
61
|
-
console.log('
|
|
60
|
+
console.log('Encoded TX Object:', object);
|
|
61
|
+
console.log('Buffer to Sign:', buffer.toString('hex'));
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
## 簽署交易
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
`sign[Type]Tx` 方法建立在編碼步驟之上,增加了數位簽名。這些方法會編碼交易,然後使用提供的錢包來簽署產生的二進位緩衝區。
|
|
67
67
|
|
|
68
|
-
您可以透過呼叫 `client.getTxSignMethods()`
|
|
68
|
+
您可以透過呼叫 `client.getTxSignMethods()` 來獲取所有可用的簽署方法完整列表。
|
|
69
69
|
|
|
70
70
|
### `sign[Type]Tx(payload)`
|
|
71
71
|
|
|
@@ -76,13 +76,13 @@ The `sign[Type]Tx` 方法建立在編碼步驟之上,透過新增數位簽章
|
|
|
76
76
|
<x-field-group>
|
|
77
77
|
<x-field data-name="tx" data-type="object" data-required="true" data-desc="交易資料物件,與編碼時相同。"></x-field>
|
|
78
78
|
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="用於簽署交易的錢包。"></x-field>
|
|
79
|
-
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="
|
|
80
|
-
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="輸出的可選編碼('base16'、'hex'、'base58'、'base64'
|
|
79
|
+
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="委派者地址(如果適用)。"></x-field>
|
|
80
|
+
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="輸出的可選編碼('base16'、'hex'、'base58'、'base64')。若省略,則回傳交易物件。"></x-field>
|
|
81
81
|
</x-field-group>
|
|
82
82
|
|
|
83
83
|
**回傳值**
|
|
84
84
|
|
|
85
|
-
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="
|
|
85
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="一個 promise,其解析為已簽署的交易物件,或在指定 `encoding` 時解析為編碼後的字串。"></x-field>
|
|
86
86
|
|
|
87
87
|
**範例**
|
|
88
88
|
|
|
@@ -101,27 +101,27 @@ const signedTx = await signTransferV2Tx({
|
|
|
101
101
|
wallet: senderWallet,
|
|
102
102
|
});
|
|
103
103
|
|
|
104
|
-
console.log('
|
|
104
|
+
console.log('Signed TX:', signedTx);
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
##
|
|
107
|
+
## 傳送交易
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
`send[Type]Tx` 方法負責將交易廣播到區塊鏈。如果提供的是未簽署的交易和一個錢包,這些方法可以隱式地執行簽署步驟;或者它們也可以傳送一個已經簽署過的交易。
|
|
110
110
|
|
|
111
|
-
可透過 `client.getTxSendMethods()`
|
|
111
|
+
可透過 `client.getTxSendMethods()` 獲取傳送方法的完整列表。
|
|
112
112
|
|
|
113
113
|
### `send[Type]Tx(payload)`
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
簽署(如有必要)並將交易傳送到鏈上。
|
|
116
116
|
|
|
117
117
|
**參數**
|
|
118
118
|
|
|
119
119
|
<x-field-group>
|
|
120
120
|
<x-field data-name="tx" data-type="object" data-required="true" data-desc="交易物件。可以是已簽署或未簽署的。"></x-field>
|
|
121
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
122
|
-
<x-field data-name="signature" data-type="string" data-required="false" data-desc="
|
|
123
|
-
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="
|
|
124
|
-
<x-field data-name="commit" data-type="boolean" data-default="false" data-required="false" data-desc="
|
|
121
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="用於簽署交易的錢包。即使交易已預先簽署,仍需此錢包來識別傳送者。"></x-field>
|
|
122
|
+
<x-field data-name="signature" data-type="string" data-required="false" data-desc="交易的預先計算簽名。若提供此簽名,將不會再次使用錢包進行簽署。"></x-field>
|
|
123
|
+
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="委派者地址(如果適用)。"></x-field>
|
|
124
|
+
<x-field data-name="commit" data-type="boolean" data-default="false" data-required="false" data-desc="是否等待交易被提交到區塊後才完成 promise。"></x-field>
|
|
125
125
|
</x-field-group>
|
|
126
126
|
|
|
127
127
|
**回傳值**
|
|
@@ -135,7 +135,7 @@ const { sendTransferV2Tx } = client;
|
|
|
135
135
|
const senderWallet = fromRandom();
|
|
136
136
|
const receiverAddress = 'z1...';
|
|
137
137
|
|
|
138
|
-
//
|
|
138
|
+
// 客戶端將在傳送前使用 senderWallet 簽署此交易。
|
|
139
139
|
const txHash = await sendTransferV2Tx({
|
|
140
140
|
tx: {
|
|
141
141
|
itx: {
|
|
@@ -146,10 +146,10 @@ const txHash = await sendTransferV2Tx({
|
|
|
146
146
|
wallet: senderWallet,
|
|
147
147
|
});
|
|
148
148
|
|
|
149
|
-
console.log('
|
|
149
|
+
console.log('Transaction sent with hash:', txHash);
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
**範例:傳送預先簽署的交易**
|
|
153
153
|
|
|
154
154
|
```javascript TransferV2Tx icon=logos:javascript
|
|
155
155
|
// 假設 signedTx 來自 sign[Type]Tx 範例
|
|
@@ -160,32 +160,32 @@ const txHash = await sendTransferV2Tx({
|
|
|
160
160
|
wallet: senderWallet,
|
|
161
161
|
});
|
|
162
162
|
|
|
163
|
-
console.log('
|
|
163
|
+
console.log('Pre-signed transaction sent with hash:', txHash);
|
|
164
164
|
```
|
|
165
165
|
|
|
166
|
-
##
|
|
166
|
+
## 多重簽署交易
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
對於需要多個簽名(如原子交換)的工作流程,會使用 `multiSign[Type]Tx` 方法。此過程涉及一方先簽署交易(使用標準的 `sign[Type]Tx` 方法),然後後續的參與方使用對應的 `multiSign[Type]Tx` 方法新增他們的簽名。
|
|
169
169
|
|
|
170
|
-
您可以透過 `client.getTxMultiSignMethods()`
|
|
170
|
+
您可以透過 `client.getTxMultiSignMethods()` 獲取支援多重簽名的交易列表。
|
|
171
171
|
|
|
172
172
|
### `multiSign[Type]Tx(payload)`
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
為一個已經有一個或多個簽名的交易新增一個簽名。
|
|
175
175
|
|
|
176
176
|
**參數**
|
|
177
177
|
|
|
178
178
|
<x-field-group>
|
|
179
|
-
<x-field data-name="tx" data-type="object" data-required="true" data-desc="
|
|
180
|
-
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="
|
|
181
|
-
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="
|
|
182
|
-
<x-field data-name="data" data-type="any" data-required="false" data-desc="
|
|
179
|
+
<x-field data-name="tx" data-type="object" data-required="true" data-desc="交易物件,應已包含至少一個簽名。"></x-field>
|
|
180
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="當前簽署者的錢包。"></x-field>
|
|
181
|
+
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="當前簽署者的委派者地址(如果適用)。"></x-field>
|
|
182
|
+
<x-field data-name="data" data-type="any" data-required="false" data-desc="可隨簽名包含的選用資料。"></x-field>
|
|
183
183
|
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="輸出的可選編碼('base16'、'hex'、'base58'、'base64')。"></x-field>
|
|
184
184
|
</x-field-group>
|
|
185
185
|
|
|
186
186
|
**回傳值**
|
|
187
187
|
|
|
188
|
-
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="
|
|
188
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="一個 promise,其解析為已新增新簽名的交易物件。"></x-field>
|
|
189
189
|
|
|
190
190
|
**範例:原子交換 (`ExchangeV2Tx`)**
|
|
191
191
|
|
|
@@ -212,17 +212,17 @@ const signedByAlice = await client.signExchangeV2Tx({
|
|
|
212
212
|
wallet: aliceWallet,
|
|
213
213
|
});
|
|
214
214
|
|
|
215
|
-
// 2. Alice 將 `signedByAlice`
|
|
215
|
+
// 2. Alice 將 `signedByAlice` 傳送給 Bob。Bob 加入他的簽名。
|
|
216
216
|
const signedByBoth = await client.multiSignExchangeV2Tx({
|
|
217
217
|
tx: signedByAlice,
|
|
218
218
|
wallet: bobWallet,
|
|
219
219
|
});
|
|
220
220
|
|
|
221
|
-
// 3. Bob 將 `signedByBoth`
|
|
221
|
+
// 3. Bob 將 `signedByBoth` 傳回給 Alice。Alice 傳送最終的交易。
|
|
222
222
|
const txHash = await client.sendExchangeV2Tx({
|
|
223
223
|
tx: signedByBoth,
|
|
224
|
-
wallet: aliceWallet, //
|
|
224
|
+
wallet: aliceWallet, // 使用傳送者錢包來提交
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
-
console.log('
|
|
227
|
+
console.log('Atomic swap transaction sent:', txHash);
|
|
228
228
|
```
|