@ocap/client 1.25.3 → 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 (92) hide show
  1. package/README.md +76 -80
  2. package/dist/report.html +1 -1
  3. package/docs/_sidebar.md +22 -0
  4. package/docs/api-reference-client-methods.ja.md +229 -0
  5. package/docs/api-reference-client-methods.md +229 -0
  6. package/docs/api-reference-client-methods.zh-TW.md +229 -0
  7. package/docs/api-reference-client-methods.zh.md +229 -0
  8. package/docs/api-reference-data-types.ja.md +482 -0
  9. package/docs/api-reference-data-types.md +482 -0
  10. package/docs/api-reference-data-types.zh-TW.md +482 -0
  11. package/docs/api-reference-data-types.zh.md +482 -0
  12. package/docs/api-reference-low-level-api.ja.md +228 -0
  13. package/docs/api-reference-low-level-api.md +228 -0
  14. package/docs/api-reference-low-level-api.zh-TW.md +228 -0
  15. package/docs/api-reference-low-level-api.zh.md +228 -0
  16. package/docs/api-reference-query-mutation-methods.ja.md +814 -0
  17. package/docs/api-reference-query-mutation-methods.md +814 -0
  18. package/docs/api-reference-query-mutation-methods.zh-TW.md +814 -0
  19. package/docs/api-reference-query-mutation-methods.zh.md +814 -0
  20. package/docs/api-reference-transaction-helpers.ja.md +649 -0
  21. package/docs/api-reference-transaction-helpers.md +649 -0
  22. package/docs/api-reference-transaction-helpers.zh-TW.md +649 -0
  23. package/docs/api-reference-transaction-helpers.zh.md +649 -0
  24. package/docs/api-reference.ja.md +23 -0
  25. package/docs/api-reference.md +23 -0
  26. package/docs/api-reference.zh-TW.md +23 -0
  27. package/docs/api-reference.zh.md +23 -0
  28. package/docs/core-concepts-client-architecture.ja.md +102 -0
  29. package/docs/core-concepts-client-architecture.md +102 -0
  30. package/docs/core-concepts-client-architecture.zh-TW.md +102 -0
  31. package/docs/core-concepts-client-architecture.zh.md +102 -0
  32. package/docs/core-concepts-event-subscriptions.ja.md +123 -0
  33. package/docs/core-concepts-event-subscriptions.md +123 -0
  34. package/docs/core-concepts-event-subscriptions.zh-TW.md +123 -0
  35. package/docs/core-concepts-event-subscriptions.zh.md +123 -0
  36. package/docs/core-concepts-gas-payment.ja.md +111 -0
  37. package/docs/core-concepts-gas-payment.md +111 -0
  38. package/docs/core-concepts-gas-payment.zh-TW.md +111 -0
  39. package/docs/core-concepts-gas-payment.zh.md +111 -0
  40. package/docs/core-concepts-transaction-lifecycle.ja.md +183 -0
  41. package/docs/core-concepts-transaction-lifecycle.md +183 -0
  42. package/docs/core-concepts-transaction-lifecycle.zh-TW.md +183 -0
  43. package/docs/core-concepts-transaction-lifecycle.zh.md +183 -0
  44. package/docs/core-concepts.ja.md +22 -0
  45. package/docs/core-concepts.md +22 -0
  46. package/docs/core-concepts.zh-TW.md +22 -0
  47. package/docs/core-concepts.zh.md +22 -0
  48. package/docs/getting-started-basic-usage.ja.md +87 -0
  49. package/docs/getting-started-basic-usage.md +87 -0
  50. package/docs/getting-started-basic-usage.zh-TW.md +87 -0
  51. package/docs/getting-started-basic-usage.zh.md +87 -0
  52. package/docs/getting-started-installation.ja.md +60 -0
  53. package/docs/getting-started-installation.md +60 -0
  54. package/docs/getting-started-installation.zh-TW.md +60 -0
  55. package/docs/getting-started-installation.zh.md +60 -0
  56. package/docs/getting-started.ja.md +16 -0
  57. package/docs/getting-started.md +16 -0
  58. package/docs/getting-started.zh-TW.md +16 -0
  59. package/docs/getting-started.zh.md +17 -0
  60. package/docs/how-to-guides-delegate-permissions.ja.md +167 -0
  61. package/docs/how-to-guides-delegate-permissions.md +167 -0
  62. package/docs/how-to-guides-delegate-permissions.zh-TW.md +167 -0
  63. package/docs/how-to-guides-delegate-permissions.zh.md +166 -0
  64. package/docs/how-to-guides-manage-accounts.ja.md +73 -0
  65. package/docs/how-to-guides-manage-accounts.md +73 -0
  66. package/docs/how-to-guides-manage-accounts.zh-TW.md +73 -0
  67. package/docs/how-to-guides-manage-accounts.zh.md +73 -0
  68. package/docs/how-to-guides-manage-assets.ja.md +255 -0
  69. package/docs/how-to-guides-manage-assets.md +255 -0
  70. package/docs/how-to-guides-manage-assets.zh-TW.md +255 -0
  71. package/docs/how-to-guides-manage-assets.zh.md +255 -0
  72. package/docs/how-to-guides-manage-tokens.ja.md +179 -0
  73. package/docs/how-to-guides-manage-tokens.md +179 -0
  74. package/docs/how-to-guides-manage-tokens.zh-TW.md +179 -0
  75. package/docs/how-to-guides-manage-tokens.zh.md +179 -0
  76. package/docs/how-to-guides-stake-tokens-and-assets.ja.md +205 -0
  77. package/docs/how-to-guides-stake-tokens-and-assets.md +205 -0
  78. package/docs/how-to-guides-stake-tokens-and-assets.zh-TW.md +205 -0
  79. package/docs/how-to-guides-stake-tokens-and-assets.zh.md +205 -0
  80. package/docs/how-to-guides-transfer-tokens-and-nfts.ja.md +179 -0
  81. package/docs/how-to-guides-transfer-tokens-and-nfts.md +179 -0
  82. package/docs/how-to-guides-transfer-tokens-and-nfts.zh-TW.md +179 -0
  83. package/docs/how-to-guides-transfer-tokens-and-nfts.zh.md +179 -0
  84. package/docs/how-to-guides.ja.md +27 -0
  85. package/docs/how-to-guides.md +27 -0
  86. package/docs/how-to-guides.zh-TW.md +27 -0
  87. package/docs/how-to-guides.zh.md +27 -0
  88. package/docs/overview.ja.md +70 -0
  89. package/docs/overview.md +70 -0
  90. package/docs/overview.zh-TW.md +70 -0
  91. package/docs/overview.zh.md +70 -0
  92. 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
+ # Low-level API
2
+
3
+ The Low-level API provides granular control over the entire transaction lifecycle. Unlike the [High-level API](./api-reference-transaction-helpers.md) which abstracts away the details, these methods allow you to manually construct, encode, sign, and send transactions. This is ideal for advanced scenarios, such as multi-signature workflows where different parties need to sign a transaction before it's broadcasted.
4
+
5
+ This API is organized into four main groups of methods, each corresponding to a stage in the transaction lifecycle:
6
+
7
+ 1. **Encode**: Prepare a transaction and serialize it into a binary buffer.
8
+ 2. **Sign**: Add a digital signature to an encoded transaction.
9
+ 3. **Multi-sign**: Add multiple digital signatures to a transaction.
10
+ 4. **Send**: Broadcast a signed transaction to the blockchain.
11
+
12
+ ## Encoding Transactions
13
+
14
+ Encoding is the first step in creating a transaction. The `encode[Type]Tx` methods take the core transaction data (`itx`) and wrap it in a standard transaction structure, adding necessary details like the `chainId` and `nonce`. The result is a human-readable transaction object and a binary buffer ready for signing.
15
+
16
+ There is an `encode` method for every transaction type supported by the chain. You can get a full list by calling `client.getTxEncodeMethods()`.
17
+
18
+ ### `encode[Type]Tx(payload)`
19
+
20
+ Encodes a transaction without signing it.
21
+
22
+ **Parameters**
23
+
24
+ <x-field-group>
25
+ <x-field data-name="tx" data-type="object" data-required="true">
26
+ <x-field-desc markdown>The transaction data object.</x-field-desc>
27
+ <x-field data-name="itx" data-type="object" data-required="true" data-desc="The inner transaction object specific to the transaction type."></x-field>
28
+ <x-field data-name="from" data-type="string" data-required="false" data-desc="Sender's address. If not provided, it's derived from the wallet."></x-field>
29
+ <x-field data-name="nonce" data-type="number" data-required="false" data-desc="Transaction nonce. Defaults to `Date.now()` if not set."></x-field>
30
+ <x-field data-name="chainId" data-type="string" data-required="false" data-desc="The chain ID. Fetched from the connected node if not provided."></x-field>
31
+ </x-field>
32
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="The wallet object used to derive the sender's address and public key."></x-field>
33
+ <x-field data-name="delegator" data-type="string" data-required="false" data-desc="The address of the account delegating permissions, if applicable."></x-field>
34
+ </x-field-group>
35
+
36
+ **Returns**
37
+
38
+ <x-field data-name="Promise<object>" data-type="Promise<object>" data-desc="A promise that resolves to an object containing the encoded transaction.">
39
+ <x-field data-name="object" data-type="object" data-desc="The human-readable transaction object."></x-field>
40
+ <x-field data-name="buffer" data-type="Buffer" data-desc="The serialized transaction binary buffer, ready for signing."></x-field>
41
+ </x-field>
42
+
43
+ **Example**
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), // Transfer 10 native tokens
55
+ },
56
+ },
57
+ wallet: senderWallet,
58
+ });
59
+
60
+ console.log('Encoded TX Object:', object);
61
+ console.log('Buffer to Sign:', buffer.toString('hex'));
62
+ ```
63
+
64
+ ## Signing Transactions
65
+
66
+ The `sign[Type]Tx` methods build on the encoding step by adding a digital signature. These methods encode the transaction and then use the provided wallet to sign the resulting binary buffer.
67
+
68
+ You can get a full list of available signing methods by calling `client.getTxSignMethods()`.
69
+
70
+ ### `sign[Type]Tx(payload)`
71
+
72
+ Encodes and signs a transaction.
73
+
74
+ **Parameters**
75
+
76
+ <x-field-group>
77
+ <x-field data-name="tx" data-type="object" data-required="true" data-desc="The transaction data object, same as for encoding."></x-field>
78
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="The wallet used to sign the transaction."></x-field>
79
+ <x-field data-name="delegator" data-type="string" data-required="false" data-desc="The address of the delegator, if applicable."></x-field>
80
+ <x-field data-name="encoding" data-type="string" data-required="false" data-desc="Optional encoding for the output ('base16', 'hex', 'base58', 'base64'). If omitted, returns the transaction object."></x-field>
81
+ </x-field-group>
82
+
83
+ **Returns**
84
+
85
+ <x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="A promise that resolves to the signed transaction object, or an encoded string if `encoding` is specified."></x-field>
86
+
87
+ **Example**
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('Signed TX:', signedTx);
105
+ ```
106
+
107
+ ## Sending Transactions
108
+
109
+ The `send[Type]Tx` methods are responsible for broadcasting a transaction to the blockchain. These methods can perform the signing step implicitly if an unsigned transaction and a wallet are provided, or they can send a transaction that has already been signed.
110
+
111
+ A full list of send methods is available via `client.getTxSendMethods()`.
112
+
113
+ ### `send[Type]Tx(payload)`
114
+
115
+ Signs (if necessary) and sends a transaction to the chain.
116
+
117
+ **Parameters**
118
+
119
+ <x-field-group>
120
+ <x-field data-name="tx" data-type="object" data-required="true" data-desc="The transaction object. Can be signed or unsigned."></x-field>
121
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="The wallet to sign the transaction. Still required for identifying the sender even if the transaction is pre-signed."></x-field>
122
+ <x-field data-name="signature" data-type="string" data-required="false" data-desc="A pre-computed signature for the transaction. If provided, the wallet will not be used to sign again."></x-field>
123
+ <x-field data-name="delegator" data-type="string" data-required="false" data-desc="The address of the delegator, if applicable."></x-field>
124
+ <x-field data-name="commit" data-type="boolean" data-default="false" data-required="false" data-desc="Whether to wait for the transaction to be committed to a block before resolving."></x-field>
125
+ </x-field-group>
126
+
127
+ **Returns**
128
+
129
+ <x-field data-name="Promise<string>" data-type="Promise<string>" data-desc="A promise that resolves to the transaction hash."></x-field>
130
+
131
+ **Example: Auto-Signing**
132
+
133
+ ```javascript TransferV2Tx icon=logos:javascript
134
+ const { sendTransferV2Tx } = client;
135
+ const senderWallet = fromRandom();
136
+ const receiverAddress = 'z1...';
137
+
138
+ // The client will sign this transaction using senderWallet before sending.
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('Transaction sent with hash:', txHash);
150
+ ```
151
+
152
+ **Example: Sending a Pre-Signed Transaction**
153
+
154
+ ```javascript TransferV2Tx icon=logos:javascript
155
+ // Assume signedTx is from the sign[Type]Tx example
156
+ const { sendTransferV2Tx } = client;
157
+
158
+ const txHash = await sendTransferV2Tx({
159
+ tx: signedTx, // Pass the entire signed transaction object
160
+ wallet: senderWallet,
161
+ });
162
+
163
+ console.log('Pre-signed transaction sent with hash:', txHash);
164
+ ```
165
+
166
+ ## Multi-Signature Transactions
167
+
168
+ For workflows requiring multiple signatures (like an atomic swap), the `multiSign[Type]Tx` methods are used. The process involves one party signing the transaction first (using a standard `sign[Type]Tx` method), and subsequent parties adding their signatures using the corresponding `multiSign[Type]Tx` method.
169
+
170
+ You can get a list of transactions that support multiple signatures via `client.getTxMultiSignMethods()`.
171
+
172
+ ### `multiSign[Type]Tx(payload)`
173
+
174
+ Adds a signature to a transaction that already has one or more signatures.
175
+
176
+ **Parameters**
177
+
178
+ <x-field-group>
179
+ <x-field data-name="tx" data-type="object" data-required="true" data-desc="The transaction object, which should already contain at least one signature."></x-field>
180
+ <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="The wallet of the current signer."></x-field>
181
+ <x-field data-name="delegator" data-type="string" data-required="false" data-desc="The address of the delegator for the current signer, if applicable."></x-field>
182
+ <x-field data-name="data" data-type="any" data-required="false" data-desc="Optional data to include with the signature."></x-field>
183
+ <x-field data-name="encoding" data-type="string" data-required="false" data-desc="Optional encoding for the output ('base16', 'hex', 'base58', 'base64')."></x-field>
184
+ </x-field-group>
185
+
186
+ **Returns**
187
+
188
+ <x-field data-name="Promise<object|string>" data-type="Promise<object|string>" data-desc="A promise that resolves to the transaction object with the new signature added."></x-field>
189
+
190
+ **Example: Atomic Swap (`ExchangeV2Tx`)**
191
+
192
+ ```javascript ExchangeV2Tx icon=logos:javascript
193
+ // Wallets for two parties
194
+ const aliceWallet = fromRandom();
195
+ const bobWallet = fromRandom();
196
+
197
+ // 1. Alice prepares and signs the initial exchange transaction
198
+ const exchangeTx = {
199
+ itx: {
200
+ to: bobWallet.address,
201
+ sender: {
202
+ value: await client.fromTokenToUnit(10), // Alice offers 10 tokens
203
+ },
204
+ receiver: {
205
+ value: await client.fromTokenToUnit(5), // Alice demands 5 tokens
206
+ },
207
+ },
208
+ };
209
+
210
+ const signedByAlice = await client.signExchangeV2Tx({
211
+ tx: exchangeTx,
212
+ wallet: aliceWallet,
213
+ });
214
+
215
+ // 2. Alice sends `signedByAlice` to Bob. Bob adds his signature.
216
+ const signedByBoth = await client.multiSignExchangeV2Tx({
217
+ tx: signedByAlice,
218
+ wallet: bobWallet,
219
+ });
220
+
221
+ // 3. Bob sends `signedByBoth` back to Alice. Alice sends the final transaction.
222
+ const txHash = await client.sendExchangeV2Tx({
223
+ tx: signedByBoth,
224
+ wallet: aliceWallet, // The sender wallet is used to submit
225
+ });
226
+
227
+ console.log('Atomic swap transaction sent:', txHash);
228
+ ```