@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.
- package/dist/report.html +1 -1
- package/docs/api-reference-client-methods.ja.md +229 -0
- package/docs/api-reference-client-methods.zh-TW.md +229 -0
- package/docs/api-reference-client-methods.zh.md +27 -27
- package/docs/api-reference-data-types.ja.md +482 -0
- package/docs/api-reference-data-types.zh-TW.md +482 -0
- package/docs/api-reference-data-types.zh.md +14 -14
- package/docs/api-reference-low-level-api.ja.md +228 -0
- package/docs/api-reference-low-level-api.zh-TW.md +228 -0
- package/docs/api-reference-low-level-api.zh.md +39 -39
- package/docs/api-reference-query-mutation-methods.ja.md +814 -0
- package/docs/api-reference-query-mutation-methods.zh-TW.md +814 -0
- package/docs/api-reference-query-mutation-methods.zh.md +158 -158
- package/docs/api-reference-transaction-helpers.ja.md +649 -0
- package/docs/api-reference-transaction-helpers.zh-TW.md +649 -0
- package/docs/api-reference-transaction-helpers.zh.md +112 -112
- package/docs/api-reference.ja.md +23 -0
- package/docs/api-reference.zh-TW.md +23 -0
- package/docs/api-reference.zh.md +6 -6
- package/docs/core-concepts-client-architecture.ja.md +102 -0
- package/docs/core-concepts-client-architecture.zh-TW.md +102 -0
- package/docs/core-concepts-client-architecture.zh.md +21 -21
- package/docs/core-concepts-event-subscriptions.ja.md +123 -0
- package/docs/core-concepts-event-subscriptions.zh-TW.md +123 -0
- package/docs/core-concepts-event-subscriptions.zh.md +22 -22
- package/docs/core-concepts-gas-payment.ja.md +111 -0
- package/docs/core-concepts-gas-payment.zh-TW.md +111 -0
- package/docs/core-concepts-gas-payment.zh.md +30 -30
- package/docs/core-concepts-transaction-lifecycle.ja.md +183 -0
- package/docs/core-concepts-transaction-lifecycle.zh-TW.md +183 -0
- package/docs/core-concepts-transaction-lifecycle.zh.md +51 -51
- package/docs/core-concepts.ja.md +22 -0
- package/docs/core-concepts.zh-TW.md +22 -0
- package/docs/core-concepts.zh.md +6 -6
- package/docs/getting-started-basic-usage.ja.md +87 -0
- package/docs/getting-started-basic-usage.zh-TW.md +87 -0
- package/docs/getting-started-basic-usage.zh.md +17 -17
- package/docs/getting-started-installation.ja.md +60 -0
- package/docs/getting-started-installation.zh-TW.md +60 -0
- package/docs/getting-started-installation.zh.md +14 -14
- package/docs/getting-started.ja.md +16 -0
- package/docs/getting-started.zh-TW.md +16 -0
- package/docs/getting-started.zh.md +6 -5
- package/docs/how-to-guides-delegate-permissions.ja.md +167 -0
- package/docs/how-to-guides-delegate-permissions.zh-TW.md +167 -0
- package/docs/how-to-guides-delegate-permissions.zh.md +27 -28
- package/docs/how-to-guides-manage-accounts.ja.md +73 -0
- package/docs/how-to-guides-manage-accounts.zh-TW.md +73 -0
- package/docs/how-to-guides-manage-accounts.zh.md +14 -14
- package/docs/how-to-guides-manage-assets.ja.md +255 -0
- package/docs/how-to-guides-manage-assets.zh-TW.md +255 -0
- package/docs/how-to-guides-manage-assets.zh.md +60 -60
- package/docs/how-to-guides-manage-tokens.ja.md +179 -0
- package/docs/how-to-guides-manage-tokens.zh-TW.md +179 -0
- package/docs/how-to-guides-manage-tokens.zh.md +52 -52
- package/docs/how-to-guides-stake-tokens-and-assets.ja.md +205 -0
- package/docs/how-to-guides-stake-tokens-and-assets.zh-TW.md +205 -0
- package/docs/how-to-guides-stake-tokens-and-assets.zh.md +44 -44
- package/docs/how-to-guides-transfer-tokens-and-nfts.ja.md +179 -0
- package/docs/how-to-guides-transfer-tokens-and-nfts.zh-TW.md +179 -0
- package/docs/how-to-guides-transfer-tokens-and-nfts.zh.md +47 -47
- package/docs/how-to-guides.ja.md +27 -0
- package/docs/how-to-guides.zh-TW.md +27 -0
- package/docs/how-to-guides.zh.md +11 -11
- package/docs/overview.ja.md +70 -0
- package/docs/overview.zh-TW.md +70 -0
- package/docs/overview.zh.md +8 -8
- package/package.json +14 -14
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# 低レベルAPI
|
|
2
|
+
|
|
3
|
+
低レベルAPIは、トランザクションのライフサイクル全体にわたって詳細な制御を提供します。[高レベルAPI](./api-reference-transaction-helpers.md)が詳細を抽象化するのとは異なり、これらのメソッドを使用すると、手動でトランザクションを構築、エンコード、署名、送信できます。これは、トランザクションがブロードキャストされる前に複数の当事者が署名する必要があるマルチシグネチャワークフローなど、高度なシナリオに最適です。
|
|
4
|
+
|
|
5
|
+
このAPIは、トランザクションライフサイクルの各段階に対応する4つの主要なメソッドグループに分かれています。
|
|
6
|
+
|
|
7
|
+
1. **エンコード**: トランザクションを準備し、バイナリバッファにシリアライズします。
|
|
8
|
+
2. **署名**: エンコードされたトランザクションにデジタル署名を追加します。
|
|
9
|
+
3. **マルチシグ**: トランザクションに複数のデジタル署名を追加します。
|
|
10
|
+
4. **送信**: 署名されたトランザクションをブロックチェーンにブロードキャストします。
|
|
11
|
+
|
|
12
|
+
## トランザクションのエンコード
|
|
13
|
+
|
|
14
|
+
エンコードは、トランザクションを作成する最初のステップです。`encode[Type]Tx`メソッドは、コアトランザクションデータ(`itx`)を標準のトランザクション構造でラップし、`chainId`や`nonce`などの必要な詳細を追加します。結果として、人間が読める形式のトランザクションオブジェクトと、署名可能なバイナリバッファが生成されます。
|
|
15
|
+
|
|
16
|
+
チェーンでサポートされているすべてのトランザクションタイプに対応する`encode`メソッドが存在します。`client.getTxEncodeMethods()`を呼び出すことで、全リストを取得できます。
|
|
17
|
+
|
|
18
|
+
### `encode[Type]Tx(payload)`
|
|
19
|
+
|
|
20
|
+
トランザクションに署名せずにエンコードします。
|
|
21
|
+
|
|
22
|
+
**パラメーター**
|
|
23
|
+
|
|
24
|
+
<x-field-group>
|
|
25
|
+
<x-field data-name="tx" data-type="object" data-required="true">
|
|
26
|
+
<x-field-desc markdown>トランザクションデータオブジェクト。</x-field-desc>
|
|
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="送信者のアドレス。指定しない場合、ウォレットから派生します。"></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
|
+
</x-field>
|
|
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
|
+
</x-field-group>
|
|
35
|
+
|
|
36
|
+
**戻り値**
|
|
37
|
+
|
|
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
|
+
</x-field>
|
|
42
|
+
|
|
43
|
+
**例**
|
|
44
|
+
|
|
45
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
46
|
+
const { encodeTransferV2Tx } = client;
|
|
47
|
+
const senderWallet = fromRandom();
|
|
48
|
+
const receiverAddress = 'z1...';
|
|
49
|
+
|
|
50
|
+
const { object, buffer } = await encodeTransferV2Tx({
|
|
51
|
+
tx: {
|
|
52
|
+
itx: {
|
|
53
|
+
to: receiverAddress,
|
|
54
|
+
value: await client.fromTokenToUnit(10), // 10 ネイティブトークンを転送
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
wallet: senderWallet,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
console.log('エンコードされたTXオブジェクト:', object);
|
|
61
|
+
console.log('署名するバッファ:', buffer.toString('hex'));
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## トランザクションの署名
|
|
65
|
+
|
|
66
|
+
`sign[Type]Tx`メソッドは、エンコードのステップにデジタル署名の追加を加えて構築されます。これらのメソッドはトランザクションをエンコードし、提供されたウォレットを使用して生成されたバイナリバッファに署名します。
|
|
67
|
+
|
|
68
|
+
`client.getTxSignMethods()`を呼び出すことで、利用可能な署名メソッドの全リストを取得できます。
|
|
69
|
+
|
|
70
|
+
### `sign[Type]Tx(payload)`
|
|
71
|
+
|
|
72
|
+
トランザクションをエンコードし、署名します。
|
|
73
|
+
|
|
74
|
+
**パラメーター**
|
|
75
|
+
|
|
76
|
+
<x-field-group>
|
|
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="トランザクションの署名に使用されるウォレット。"></x-field>
|
|
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
|
+
</x-field-group>
|
|
82
|
+
|
|
83
|
+
**戻り値**
|
|
84
|
+
|
|
85
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="署名されたトランザクションオブジェクト、または`encoding`が指定されている場合はエンコードされた文字列に解決されるPromise。"></x-field>
|
|
86
|
+
|
|
87
|
+
**例**
|
|
88
|
+
|
|
89
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
90
|
+
const { signTransferV2Tx } = client;
|
|
91
|
+
const senderWallet = fromRandom();
|
|
92
|
+
const receiverAddress = 'z1...';
|
|
93
|
+
|
|
94
|
+
const signedTx = await signTransferV2Tx({
|
|
95
|
+
tx: {
|
|
96
|
+
itx: {
|
|
97
|
+
to: receiverAddress,
|
|
98
|
+
value: await client.fromTokenToUnit(10),
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
wallet: senderWallet,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
console.log('署名済みTX:', signedTx);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## トランザクションの送信
|
|
108
|
+
|
|
109
|
+
`send[Type]Tx`メソッドは、トランザクションをブロックチェーンにブロードキャストする役割を担います。これらのメソッドは、署名されていないトランザクションとウォレットが提供された場合に暗黙的に署名を行うか、すでに署名済みのトランザクションを送信することができます。
|
|
110
|
+
|
|
111
|
+
`client.getTxSendMethods()`を介して送信メソッドの全リストが利用可能です。
|
|
112
|
+
|
|
113
|
+
### `send[Type]Tx(payload)`
|
|
114
|
+
|
|
115
|
+
トランザクションに署名し(必要な場合)、チェーンに送信します。
|
|
116
|
+
|
|
117
|
+
**パラメーター**
|
|
118
|
+
|
|
119
|
+
<x-field-group>
|
|
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="トランザクションに署名するためのウォレット。トランザクションが事前に署名されていても、送信者を特定するために必要です。"></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="解決する前に、トランザクションがブロックにコミットされるのを待つかどうか。"></x-field>
|
|
125
|
+
</x-field-group>
|
|
126
|
+
|
|
127
|
+
**戻り値**
|
|
128
|
+
|
|
129
|
+
<x-field data-name="Promise<string>" data-type="Promise<string>" data-desc="トランザクションハッシュに解決されるPromise。"></x-field>
|
|
130
|
+
|
|
131
|
+
**例:自動署名**
|
|
132
|
+
|
|
133
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
134
|
+
const { sendTransferV2Tx } = client;
|
|
135
|
+
const senderWallet = fromRandom();
|
|
136
|
+
const receiverAddress = 'z1...';
|
|
137
|
+
|
|
138
|
+
// クライアントは送信前にsenderWalletを使用してこのトランザクションに署名します。
|
|
139
|
+
const txHash = await sendTransferV2Tx({
|
|
140
|
+
tx: {
|
|
141
|
+
itx: {
|
|
142
|
+
to: receiverAddress,
|
|
143
|
+
value: await client.fromTokenToUnit(10),
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
wallet: senderWallet,
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
console.log('トランザクションがハッシュで送信されました:', txHash);
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**例:事前署名済みトランザクションの送信**
|
|
153
|
+
|
|
154
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
155
|
+
// signedTxはsign[Type]Txの例からのものと仮定します
|
|
156
|
+
const { sendTransferV2Tx } = client;
|
|
157
|
+
|
|
158
|
+
const txHash = await sendTransferV2Tx({
|
|
159
|
+
tx: signedTx, // 署名済みのトランザクションオブジェクト全体を渡します
|
|
160
|
+
wallet: senderWallet,
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
console.log('事前署名されたトランザクションがハッシュで送信されました:', txHash);
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## マルチシグネチャトランザクション
|
|
167
|
+
|
|
168
|
+
複数の署名が必要なワークフロー(アトミックスワップなど)では、`multiSign[Type]Tx`メソッドを使用します。このプロセスでは、まず一方の当事者が(標準の`sign[Type]Tx`メソッドを使用して)トランザクションに署名し、続いて他の当事者が対応する`multiSign[Type]Tx`メソッドを使用して署名を追加します。
|
|
169
|
+
|
|
170
|
+
`client.getTxMultiSignMethods()`を介して、複数の署名をサポートするトランザクションのリストを取得できます。
|
|
171
|
+
|
|
172
|
+
### `multiSign[Type]Tx(payload)`
|
|
173
|
+
|
|
174
|
+
すでに1つ以上の署名があるトランザクションに署名を追加します。
|
|
175
|
+
|
|
176
|
+
**パラメーター**
|
|
177
|
+
|
|
178
|
+
<x-field-group>
|
|
179
|
+
<x-field data-name="tx" data-type="object" data-required="true" data-desc="トランザクションオブジェクト。すでに少なくとも1つの署名が含まれている必要があります。"></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
|
+
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="出力のオプションのエンコーディング('base16'、'hex'、'base58'、'base64')。"></x-field>
|
|
184
|
+
</x-field-group>
|
|
185
|
+
|
|
186
|
+
**戻り値**
|
|
187
|
+
|
|
188
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="新しい署名が追加されたトランザクションオブジェクトに解決されるPromise。"></x-field>
|
|
189
|
+
|
|
190
|
+
**例:アトミックスワップ (`ExchangeV2Tx`)**
|
|
191
|
+
|
|
192
|
+
```javascript ExchangeV2Tx icon=logos:javascript
|
|
193
|
+
// 2つの当事者のウォレット
|
|
194
|
+
const aliceWallet = fromRandom();
|
|
195
|
+
const bobWallet = fromRandom();
|
|
196
|
+
|
|
197
|
+
// 1. Aliceが最初の交換トランザクションを準備し、署名します
|
|
198
|
+
const exchangeTx = {
|
|
199
|
+
itx: {
|
|
200
|
+
to: bobWallet.address,
|
|
201
|
+
sender: {
|
|
202
|
+
value: await client.fromTokenToUnit(10), // Aliceは10トークンを提供します
|
|
203
|
+
},
|
|
204
|
+
receiver: {
|
|
205
|
+
value: await client.fromTokenToUnit(5), // Aliceは5トークンを要求します
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const signedByAlice = await client.signExchangeV2Tx({
|
|
211
|
+
tx: exchangeTx,
|
|
212
|
+
wallet: aliceWallet,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// 2. Aliceは`signedByAlice`をBobに送信します。Bobは自分の署名を追加します。
|
|
216
|
+
const signedByBoth = await client.multiSignExchangeV2Tx({
|
|
217
|
+
tx: signedByAlice,
|
|
218
|
+
wallet: bobWallet,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// 3. Bobは`signedByBoth`をAliceに送り返します。Aliceが最終的なトランザクションを送信します。
|
|
222
|
+
const txHash = await client.sendExchangeV2Tx({
|
|
223
|
+
tx: signedByBoth,
|
|
224
|
+
wallet: aliceWallet, // 送信者のウォレットが送信に使用されます
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
console.log('アトミックスワップトランザクションが送信されました:', txHash);
|
|
228
|
+
```
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# 低階 API
|
|
2
|
+
|
|
3
|
+
The Low-level API 提供了對整個交易生命週期的精細控制。與將細節抽象化的 [高階 API](./api-reference-transaction-helpers.md) 不同,這些方法允許您手動建構、編碼、簽署和發送交易。這對於進階場景非常理想,例如多重簽名工作流程,其中不同方需要在廣播交易之前簽署交易。
|
|
4
|
+
|
|
5
|
+
此 API 分為四個主要的方法群組,每個群組對應交易生命週期中的一個階段:
|
|
6
|
+
|
|
7
|
+
1. **編碼**:準備一筆交易並將其序列化為二進位緩衝區。
|
|
8
|
+
2. **簽署**:為已編碼的交易新增數位簽章。
|
|
9
|
+
3. **多重簽署**:為一筆交易新增多個數位簽章。
|
|
10
|
+
4. **發送**:將已簽署的交易廣播到區塊鏈。
|
|
11
|
+
|
|
12
|
+
## 編碼交易
|
|
13
|
+
|
|
14
|
+
編碼是建立交易的第一步。`encode[Type]Tx` 方法會接收核心交易資料(`itx`)並將其包裝在標準交易結構中,新增必要的細節,如 `chainId` 和 `nonce`。結果是一個可讀的交易物件和一個準備好簽署的二進位緩衝區。
|
|
15
|
+
|
|
16
|
+
鏈支援的每種交易類型都有一個 `encode` 方法。您可以透過呼叫 `client.getTxEncodeMethods()` 來取得完整列表。
|
|
17
|
+
|
|
18
|
+
### `encode[Type]Tx(payload)`
|
|
19
|
+
|
|
20
|
+
編碼一筆交易而不進行簽署。
|
|
21
|
+
|
|
22
|
+
**參數**
|
|
23
|
+
|
|
24
|
+
<x-field-group>
|
|
25
|
+
<x-field data-name="tx" data-type="object" data-required="true">
|
|
26
|
+
<x-field-desc markdown>交易資料物件。</x-field-desc>
|
|
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="發送者地址。如果未提供,則從錢包中衍生。"></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
|
+
</x-field>
|
|
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
|
+
</x-field-group>
|
|
35
|
+
|
|
36
|
+
**回傳值**
|
|
37
|
+
|
|
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
|
+
</x-field>
|
|
42
|
+
|
|
43
|
+
**範例**
|
|
44
|
+
|
|
45
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
46
|
+
const { encodeTransferV2Tx } = client;
|
|
47
|
+
const senderWallet = fromRandom();
|
|
48
|
+
const receiverAddress = 'z1...';
|
|
49
|
+
|
|
50
|
+
const { object, buffer } = await encodeTransferV2Tx({
|
|
51
|
+
tx: {
|
|
52
|
+
itx: {
|
|
53
|
+
to: receiverAddress,
|
|
54
|
+
value: await client.fromTokenToUnit(10), // 轉移 10 個原生代幣
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
wallet: senderWallet,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
console.log('已編碼的交易物件:', object);
|
|
61
|
+
console.log('待簽署的緩衝區:', buffer.toString('hex'));
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 簽署交易
|
|
65
|
+
|
|
66
|
+
The `sign[Type]Tx` 方法建立在編碼步驟之上,透過新增數位簽章。這些方法會編碼交易,然後使用提供的錢包來簽署產生的二進位緩衝區。
|
|
67
|
+
|
|
68
|
+
您可以透過呼叫 `client.getTxSignMethods()` 來取得所有可用的簽署方法列表。
|
|
69
|
+
|
|
70
|
+
### `sign[Type]Tx(payload)`
|
|
71
|
+
|
|
72
|
+
編碼並簽署一筆交易。
|
|
73
|
+
|
|
74
|
+
**參數**
|
|
75
|
+
|
|
76
|
+
<x-field-group>
|
|
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="用於簽署交易的錢包。"></x-field>
|
|
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
|
+
</x-field-group>
|
|
82
|
+
|
|
83
|
+
**回傳值**
|
|
84
|
+
|
|
85
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="一個解析為已簽署交易物件的 promise,如果指定了 `encoding`,則為編碼後的字串。"></x-field>
|
|
86
|
+
|
|
87
|
+
**範例**
|
|
88
|
+
|
|
89
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
90
|
+
const { signTransferV2Tx } = client;
|
|
91
|
+
const senderWallet = fromRandom();
|
|
92
|
+
const receiverAddress = 'z1...';
|
|
93
|
+
|
|
94
|
+
const signedTx = await signTransferV2Tx({
|
|
95
|
+
tx: {
|
|
96
|
+
itx: {
|
|
97
|
+
to: receiverAddress,
|
|
98
|
+
value: await client.fromTokenToUnit(10),
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
wallet: senderWallet,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
console.log('已簽署的交易:', signedTx);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 發送交易
|
|
108
|
+
|
|
109
|
+
The `send[Type]Tx` 方法負責將交易廣播到區塊鏈。如果提供了未簽署的交易和錢包,這些方法可以隱式地執行簽署步驟,或者它們可以發送已經簽署的交易。
|
|
110
|
+
|
|
111
|
+
可透過 `client.getTxSendMethods()` 取得完整的發送方法列表。
|
|
112
|
+
|
|
113
|
+
### `send[Type]Tx(payload)`
|
|
114
|
+
|
|
115
|
+
簽署(如果需要)並將交易發送到鏈上。
|
|
116
|
+
|
|
117
|
+
**參數**
|
|
118
|
+
|
|
119
|
+
<x-field-group>
|
|
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="用於簽署交易的錢包。即使交易已預先簽署,仍需要此錢包來識別發送者。"></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="是否在解析前回傳,等待交易被提交到區塊中。"></x-field>
|
|
125
|
+
</x-field-group>
|
|
126
|
+
|
|
127
|
+
**回傳值**
|
|
128
|
+
|
|
129
|
+
<x-field data-name="Promise<string>" data-type="Promise<string>" data-desc="一個解析為交易雜湊值的 promise。"></x-field>
|
|
130
|
+
|
|
131
|
+
**範例:自動簽署**
|
|
132
|
+
|
|
133
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
134
|
+
const { sendTransferV2Tx } = client;
|
|
135
|
+
const senderWallet = fromRandom();
|
|
136
|
+
const receiverAddress = 'z1...';
|
|
137
|
+
|
|
138
|
+
// 客戶端將在發送前使用 senderWallet 簽署此交易。
|
|
139
|
+
const txHash = await sendTransferV2Tx({
|
|
140
|
+
tx: {
|
|
141
|
+
itx: {
|
|
142
|
+
to: receiverAddress,
|
|
143
|
+
value: await client.fromTokenToUnit(10),
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
wallet: senderWallet,
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
console.log('已發送交易,雜湊值為:', txHash);
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**範例:發送預先簽署的交易**
|
|
153
|
+
|
|
154
|
+
```javascript TransferV2Tx icon=logos:javascript
|
|
155
|
+
// 假設 signedTx 來自 sign[Type]Tx 範例
|
|
156
|
+
const { sendTransferV2Tx } = client;
|
|
157
|
+
|
|
158
|
+
const txHash = await sendTransferV2Tx({
|
|
159
|
+
tx: signedTx, // 傳入整個已簽署的交易物件
|
|
160
|
+
wallet: senderWallet,
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
console.log('已發送預先簽署的交易,雜湊值為:', txHash);
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## 多重簽章交易
|
|
167
|
+
|
|
168
|
+
對於需要多個簽章的工作流程(例如原子交換),會使用 `multiSign[Type]Tx` 方法。該過程涉及一方首先簽署交易(使用標準的 `sign[Type]Tx` 方法),然後後續各方使用相應的 `multiSign[Type]Tx` 方法新增其簽章。
|
|
169
|
+
|
|
170
|
+
您可以透過 `client.getTxMultiSignMethods()` 取得支援多重簽章的交易列表。
|
|
171
|
+
|
|
172
|
+
### `multiSign[Type]Tx(payload)`
|
|
173
|
+
|
|
174
|
+
為一個已有一或多個簽章的交易新增一個簽章。
|
|
175
|
+
|
|
176
|
+
**參數**
|
|
177
|
+
|
|
178
|
+
<x-field-group>
|
|
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
|
+
<x-field data-name="encoding" data-type="string" data-required="false" data-desc="輸出的可選編碼('base16'、'hex'、'base58'、'base64')。"></x-field>
|
|
184
|
+
</x-field-group>
|
|
185
|
+
|
|
186
|
+
**回傳值**
|
|
187
|
+
|
|
188
|
+
<x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="一個解析為新增了新簽章的交易物件的 promise。"></x-field>
|
|
189
|
+
|
|
190
|
+
**範例:原子交換 (`ExchangeV2Tx`)**
|
|
191
|
+
|
|
192
|
+
```javascript ExchangeV2Tx icon=logos:javascript
|
|
193
|
+
// 兩方的錢包
|
|
194
|
+
const aliceWallet = fromRandom();
|
|
195
|
+
const bobWallet = fromRandom();
|
|
196
|
+
|
|
197
|
+
// 1. Alice 準備並簽署初始交換交易
|
|
198
|
+
const exchangeTx = {
|
|
199
|
+
itx: {
|
|
200
|
+
to: bobWallet.address,
|
|
201
|
+
sender: {
|
|
202
|
+
value: await client.fromTokenToUnit(10), // Alice 提供 10 個代幣
|
|
203
|
+
},
|
|
204
|
+
receiver: {
|
|
205
|
+
value: await client.fromTokenToUnit(5), // Alice 要求 5 個代幣
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const signedByAlice = await client.signExchangeV2Tx({
|
|
211
|
+
tx: exchangeTx,
|
|
212
|
+
wallet: aliceWallet,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// 2. Alice 將 `signedByAlice` 發送給 Bob。Bob 新增他的簽章。
|
|
216
|
+
const signedByBoth = await client.multiSignExchangeV2Tx({
|
|
217
|
+
tx: signedByAlice,
|
|
218
|
+
wallet: bobWallet,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// 3. Bob 將 `signedByBoth` 發回給 Alice。Alice 發送最終交易。
|
|
222
|
+
const txHash = await client.sendExchangeV2Tx({
|
|
223
|
+
tx: signedByBoth,
|
|
224
|
+
wallet: aliceWallet, // 使用發送者錢包提交
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
console.log('原子交換交易已發送:', txHash);
|
|
228
|
+
```
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 低级 API
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
低级 API 提供了对整个交易生命周期的精细控制。与抽象掉细节的 [高级 API](./api-reference-transaction-helpers.md) 不同,这些方法允许你手动构建、编码、签名和发送交易。这对于高级场景非常理想,例如多重签名工作流,其中不同方需要在交易广播前对其进行签名。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
该 API 分为四个主要的方法组,每个方法组对应交易生命周期的一个阶段:
|
|
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` 方法接收核心交易数据 (`itx`)
|
|
14
|
+
编码是创建交易的第一步。`encode[Type]Tx` 方法接收核心交易数据 (`itx`),并将其包装在标准交易结构中,添加 `chainId` 和 `nonce` 等必要信息。结果是一个人类可读的交易对象和一个可供签名的二进制缓冲区。
|
|
15
15
|
|
|
16
|
-
链支持的每种交易类型都有一个 `encode`
|
|
16
|
+
链支持的每种交易类型都有一个 `encode` 方法。你可以通过调用 `client.getTxEncodeMethods()` 获取完整列表。
|
|
17
17
|
|
|
18
18
|
### `encode[Type]Tx(payload)`
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
编码一笔交易,但不进行签名。
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
**Parameters**
|
|
23
23
|
|
|
24
24
|
<x-field-group>
|
|
25
25
|
<x-field data-name="tx" data-type="object" data-required="true">
|
|
@@ -30,12 +30,12 @@
|
|
|
30
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
|
+
**Returns**
|
|
37
37
|
|
|
38
|
-
<x-field data-name="Promise<object>" data-type="Promise<object>" data-desc="
|
|
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
40
|
<x-field data-name="buffer" data-type="Buffer" data-desc="序列化后的交易二进制缓冲区,可供签名。"></x-field>
|
|
41
41
|
</x-field>
|
|
@@ -65,24 +65,24 @@ console.log('待签名的缓冲区:', buffer.toString('hex'));
|
|
|
65
65
|
|
|
66
66
|
`sign[Type]Tx` 方法在编码步骤的基础上添加了数字签名。这些方法会对交易进行编码,然后使用提供的钱包对生成的二进制缓冲区进行签名。
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
你可以通过调用 `client.getTxSignMethods()` 获取所有可用的签名方法列表。
|
|
69
69
|
|
|
70
70
|
### `sign[Type]Tx(payload)`
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
编码并签名一笔交易。
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
**Parameters**
|
|
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="
|
|
79
|
-
<x-field data-name="delegator" data-type="string" data-required="false" data-desc="
|
|
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="委托人地址(如果适用)。"></x-field>
|
|
80
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
|
+
**Returns**
|
|
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
|
|
|
@@ -106,27 +106,27 @@ console.log('已签名的交易:', signedTx);
|
|
|
106
106
|
|
|
107
107
|
## 发送交易
|
|
108
108
|
|
|
109
|
-
`send[Type]Tx`
|
|
109
|
+
`send[Type]Tx` 方法负责将交易广播到区块链。如果提供了未签名的交易和钱包,这些方法可以隐式执行签名步骤,或者它们也可以发送已经签名的交易。
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
可以通过 `client.getTxSendMethods()` 获取完整的发送方法列表。
|
|
112
112
|
|
|
113
113
|
### `send[Type]Tx(payload)`
|
|
114
114
|
|
|
115
115
|
签名(如果需要)并将交易发送到链上。
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
**Parameters**
|
|
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="
|
|
121
|
+
<x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="用于签名交易的钱包。即使交易已预签名,仍需此钱包来识别发送方。"></x-field>
|
|
122
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="
|
|
124
|
-
<x-field data-name="commit" data-type="boolean" data-default="false" data-required="false" data-desc="
|
|
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="是否在解析前等待交易被提交到区块。"></x-field>
|
|
125
125
|
</x-field-group>
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
**Returns**
|
|
128
128
|
|
|
129
|
-
<x-field data-name="Promise<string>" data-type="Promise<string>" data-desc="
|
|
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: {
|
|
@@ -156,7 +156,7 @@ console.log('交易已发送,哈希值为:', txHash);
|
|
|
156
156
|
const { sendTransferV2Tx } = client;
|
|
157
157
|
|
|
158
158
|
const txHash = await sendTransferV2Tx({
|
|
159
|
-
tx: signedTx, //
|
|
159
|
+
tx: signedTx, // 传入整个已签名的交易对象
|
|
160
160
|
wallet: senderWallet,
|
|
161
161
|
});
|
|
162
162
|
|
|
@@ -165,32 +165,32 @@ console.log('预签名交易已发送,哈希值为:', txHash);
|
|
|
165
165
|
|
|
166
166
|
## 多重签名交易
|
|
167
167
|
|
|
168
|
-
对于需要多个签名(如原子交换)的工作流,使用 `multiSign[Type]Tx`
|
|
168
|
+
对于需要多个签名(如原子交换)的工作流,使用 `multiSign[Type]Tx` 方法。该过程涉及一方首先签名交易(使用标准的 `sign[Type]Tx` 方法),然后后续各方使用相应的 `multiSign[Type]Tx` 方法添加他们的签名。
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
你可以通过 `client.getTxMultiSignMethods()` 获取支持多重签名的交易列表。
|
|
171
171
|
|
|
172
172
|
### `multiSign[Type]Tx(payload)`
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
向已有一个或多个签名的交易添加一个签名。
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
**Parameters**
|
|
177
177
|
|
|
178
178
|
<x-field-group>
|
|
179
179
|
<x-field data-name="tx" data-type="object" data-required="true" data-desc="交易对象,应已包含至少一个签名。"></x-field>
|
|
180
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="
|
|
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
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
|
+
**Returns**
|
|
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
|
|
|
192
192
|
```javascript ExchangeV2Tx icon=logos:javascript
|
|
193
|
-
//
|
|
193
|
+
// 双方的钱包
|
|
194
194
|
const aliceWallet = fromRandom();
|
|
195
195
|
const bobWallet = fromRandom();
|
|
196
196
|
|
|
@@ -221,7 +221,7 @@ const signedByBoth = await client.multiSignExchangeV2Tx({
|
|
|
221
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
227
|
console.log('原子交换交易已发送:', txHash);
|