@altiuslabs/tx-sdk 0.1.22 → 0.1.23
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/package.json +1 -1
- package/src/transaction.js +22 -6
package/package.json
CHANGED
package/src/transaction.js
CHANGED
|
@@ -25,8 +25,8 @@ export class TxBuilder {
|
|
|
25
25
|
this._max_fee_per_gas = 0;
|
|
26
26
|
this._max_fee_per_gas_usd_attodollars = 40000000000n; // $0.04/gas default
|
|
27
27
|
this._fee_token = null;
|
|
28
|
-
this._fee_payer =
|
|
29
|
-
this._fee_payer_signature =
|
|
28
|
+
this._fee_payer = null;
|
|
29
|
+
this._fee_payer_signature = null;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -158,6 +158,9 @@ export class TxBuilder {
|
|
|
158
158
|
if (this._nonce === null) throw new Error('nonce is required');
|
|
159
159
|
if (!this._fee_token) throw new Error('fee_token is required');
|
|
160
160
|
|
|
161
|
+
// Default fee_payer to zero address (sender-pays)
|
|
162
|
+
const fee_payer = this._fee_payer || '0x0000000000000000000000000000000000000000';
|
|
163
|
+
|
|
161
164
|
return {
|
|
162
165
|
chain_id: this._chain_id,
|
|
163
166
|
nonce: this._nonce,
|
|
@@ -169,7 +172,7 @@ export class TxBuilder {
|
|
|
169
172
|
max_fee_per_gas: this._max_fee_per_gas,
|
|
170
173
|
max_fee_per_gas_usd_attodollars: this._max_fee_per_gas_usd_attodollars,
|
|
171
174
|
fee_token: this._fee_token,
|
|
172
|
-
fee_payer
|
|
175
|
+
fee_payer,
|
|
173
176
|
fee_payer_signature: this._fee_payer_signature,
|
|
174
177
|
};
|
|
175
178
|
}
|
|
@@ -220,8 +223,20 @@ export class TxBuilder {
|
|
|
220
223
|
|
|
221
224
|
const tx = this.build();
|
|
222
225
|
|
|
223
|
-
// Use sender as fee_payer if not specified
|
|
224
|
-
const feePayer = tx.fee_payer ||
|
|
226
|
+
// Use sender as fee_payer if not specified (null means use sender)
|
|
227
|
+
const feePayer = tx.fee_payer === '0x0000000000000000000000000000000000000000' || !tx.fee_payer
|
|
228
|
+
? wallet.address
|
|
229
|
+
: tx.fee_payer;
|
|
230
|
+
|
|
231
|
+
// Auto-generate fee_payer_signature if not set and fee_payer equals sender
|
|
232
|
+
let feePayerSignature = tx.fee_payer_signature;
|
|
233
|
+
if (!feePayerSignature && feePayer.toLowerCase() === wallet.address.toLowerCase()) {
|
|
234
|
+
// Compute fee_payer signature hash using sender as the sender
|
|
235
|
+
const feePayerSigHash = fee_payer_signature_hash(tx, wallet.address);
|
|
236
|
+
const feePayerSig = await wallet.sign_hash(feePayerSigHash);
|
|
237
|
+
// Format: 0x + v (1 byte) + r (32 bytes) + s (32 bytes)
|
|
238
|
+
feePayerSignature = '0x' + feePayerSig.v.toString(16).padStart(2, '0') + feePayerSig.r.slice(2) + feePayerSig.s.slice(2);
|
|
239
|
+
}
|
|
225
240
|
|
|
226
241
|
// Convert r, s to 32-byte buffers
|
|
227
242
|
const rBuffer = Buffer.from(sig.r.slice(2), 'hex');
|
|
@@ -248,7 +263,7 @@ export class TxBuilder {
|
|
|
248
263
|
Buffer.from(tx.fee_token.slice(2), 'hex'), // fee_token as buffer
|
|
249
264
|
Buffer.from(feePayer.slice(2), 'hex'), // fee_payer as buffer
|
|
250
265
|
BigInt(tx.max_fee_per_gas_usd_attodollars),
|
|
251
|
-
Buffer.from(
|
|
266
|
+
Buffer.from(feePayerSignature?.slice(2) || '', 'hex') || Buffer.alloc(0),
|
|
252
267
|
// Signature: y_parity, r, s - RLP encoded as part of the list
|
|
253
268
|
BigInt(y_parity),
|
|
254
269
|
Buffer.from(sig.r.slice(2), 'hex'), // r as 32-byte buffer
|
|
@@ -265,6 +280,7 @@ export class TxBuilder {
|
|
|
265
280
|
return {
|
|
266
281
|
...tx,
|
|
267
282
|
fee_payer: feePayer,
|
|
283
|
+
fee_payer_signature: feePayerSignature,
|
|
268
284
|
v: y_parity,
|
|
269
285
|
r: sig.r,
|
|
270
286
|
s: sig.s,
|