@turnkey/gas-station 1.0.0 → 3.0.0
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 +23 -25
- package/dist/abi/gas-station.d.ts +10 -56
- package/dist/abi/gas-station.d.ts.map +1 -1
- package/dist/abi/gas-station.js +7 -30
- package/dist/abi/gas-station.js.map +1 -1
- package/dist/abi/gas-station.mjs +7 -30
- package/dist/abi/gas-station.mjs.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/config.mjs +2 -2
- package/dist/config.mjs.map +1 -1
- package/dist/gasStationClient.d.ts +20 -1
- package/dist/gasStationClient.d.ts.map +1 -1
- package/dist/gasStationClient.js +89 -0
- package/dist/gasStationClient.js.map +1 -1
- package/dist/gasStationClient.mjs +89 -0
- package/dist/gasStationClient.mjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/intentBuilder.d.ts +7 -1
- package/dist/intentBuilder.d.ts.map +1 -1
- package/dist/intentBuilder.js +69 -6
- package/dist/intentBuilder.js.map +1 -1
- package/dist/intentBuilder.mjs +69 -6
- package/dist/intentBuilder.mjs.map +1 -1
- package/dist/policyUtils.d.ts +46 -47
- package/dist/policyUtils.d.ts.map +1 -1
- package/dist/policyUtils.js +49 -50
- package/dist/policyUtils.js.map +1 -1
- package/dist/policyUtils.mjs +49 -50
- package/dist/policyUtils.mjs.map +1 -1
- package/package.json +3 -3
package/dist/gasStationClient.js
CHANGED
|
@@ -231,6 +231,95 @@ class GasStationClient {
|
|
|
231
231
|
gasUsed: receipt.gasUsed,
|
|
232
232
|
};
|
|
233
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Sign an approval then execution transaction for a signed intent (paymaster signs, doesn't send)
|
|
236
|
+
* This is useful for testing policies - the paymaster attempts to sign the execution
|
|
237
|
+
* but doesn't actually broadcast it to the network.
|
|
238
|
+
* Call this with a paymaster client to test if the paymaster can sign the execution.
|
|
239
|
+
*/
|
|
240
|
+
async signApproveThenExecution(intent) {
|
|
241
|
+
// Pack the execution data (signature, nonce, deadline, args)
|
|
242
|
+
const packedData = gasStationUtils.packExecutionData({
|
|
243
|
+
signature: intent.signature,
|
|
244
|
+
nonce: intent.nonce,
|
|
245
|
+
deadline: intent.deadline,
|
|
246
|
+
args: intent.callData,
|
|
247
|
+
});
|
|
248
|
+
// Encode the function call data
|
|
249
|
+
const callData = viem.encodeFunctionData({
|
|
250
|
+
abi: gasStation.gasStationAbi,
|
|
251
|
+
functionName: "approveThenExecute",
|
|
252
|
+
args: [
|
|
253
|
+
intent.eoaAddress,
|
|
254
|
+
intent.outputContract,
|
|
255
|
+
intent.ethAmount,
|
|
256
|
+
intent.erc20Address,
|
|
257
|
+
intent.spender,
|
|
258
|
+
intent.approveAmount,
|
|
259
|
+
packedData,
|
|
260
|
+
],
|
|
261
|
+
});
|
|
262
|
+
// Sign the transaction without sending it
|
|
263
|
+
const signedTx = await this.walletClient.signTransaction({
|
|
264
|
+
to: this.executionContract,
|
|
265
|
+
data: callData,
|
|
266
|
+
gas: BigInt(300000),
|
|
267
|
+
type: "eip1559",
|
|
268
|
+
account: this.walletClient.account,
|
|
269
|
+
chain: this.walletClient.chain,
|
|
270
|
+
});
|
|
271
|
+
return signedTx;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Execute an approval then execution through the gas station contract.
|
|
275
|
+
* Atomically approves an ERC20 token and executes a transaction in a single call.
|
|
276
|
+
* Packs the execution data according to the delegate contract's expected format and
|
|
277
|
+
* submits it via the execution contract's approveThenExecute function.
|
|
278
|
+
* Call this with a paymaster client to submit and pay for the transaction.
|
|
279
|
+
*/
|
|
280
|
+
async approveThenExecute(intent) {
|
|
281
|
+
// Pack the execution data (signature, nonce, deadline, args)
|
|
282
|
+
const packedData = gasStationUtils.packExecutionData({
|
|
283
|
+
signature: intent.signature,
|
|
284
|
+
nonce: intent.nonce,
|
|
285
|
+
deadline: intent.deadline,
|
|
286
|
+
args: intent.callData,
|
|
287
|
+
});
|
|
288
|
+
// Call the approveThenExecute function with all parameters
|
|
289
|
+
const txHash = await this.walletClient.sendTransaction({
|
|
290
|
+
to: this.executionContract,
|
|
291
|
+
data: viem.encodeFunctionData({
|
|
292
|
+
abi: gasStation.gasStationAbi,
|
|
293
|
+
functionName: "approveThenExecute",
|
|
294
|
+
args: [
|
|
295
|
+
intent.eoaAddress,
|
|
296
|
+
intent.outputContract,
|
|
297
|
+
intent.ethAmount,
|
|
298
|
+
intent.erc20Address,
|
|
299
|
+
intent.spender,
|
|
300
|
+
intent.approveAmount,
|
|
301
|
+
packedData,
|
|
302
|
+
],
|
|
303
|
+
}),
|
|
304
|
+
gas: BigInt(300000),
|
|
305
|
+
account: this.walletClient.account,
|
|
306
|
+
});
|
|
307
|
+
const receipt = await this.publicClient.waitForTransactionReceipt({
|
|
308
|
+
hash: txHash,
|
|
309
|
+
});
|
|
310
|
+
if (receipt.status !== "success") {
|
|
311
|
+
// Try to get the revert reason if available
|
|
312
|
+
const revertReason = await this.getRevertReason(txHash);
|
|
313
|
+
throw new Error(`Approve then execute failed: ${revertReason || "Transaction reverted"}. ` +
|
|
314
|
+
`Gas used: ${receipt.gasUsed}/${receipt.cumulativeGasUsed}. ` +
|
|
315
|
+
`Transaction hash: ${txHash}`);
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
txHash,
|
|
319
|
+
blockNumber: receipt.blockNumber,
|
|
320
|
+
gasUsed: receipt.gasUsed,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
234
323
|
}
|
|
235
324
|
|
|
236
325
|
exports.GasStationClient = GasStationClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gasStationClient.js","sources":["../src/gasStationClient.ts"],"sourcesContent":[null],"names":["config","createPublicClientForChain","DEFAULT_DELEGATE_CONTRACT","DEFAULT_EXECUTION_CONTRACT","gasStationAbi","IntentBuilder","packExecutionData","encodeFunctionData"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"gasStationClient.js","sources":["../src/gasStationClient.ts"],"sourcesContent":[null],"names":["config","createPublicClientForChain","DEFAULT_DELEGATE_CONTRACT","DEFAULT_EXECUTION_CONTRACT","gasStationAbi","IntentBuilder","packExecutionData","encodeFunctionData"],"mappings":"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"}
|
|
@@ -229,6 +229,95 @@ class GasStationClient {
|
|
|
229
229
|
gasUsed: receipt.gasUsed,
|
|
230
230
|
};
|
|
231
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Sign an approval then execution transaction for a signed intent (paymaster signs, doesn't send)
|
|
234
|
+
* This is useful for testing policies - the paymaster attempts to sign the execution
|
|
235
|
+
* but doesn't actually broadcast it to the network.
|
|
236
|
+
* Call this with a paymaster client to test if the paymaster can sign the execution.
|
|
237
|
+
*/
|
|
238
|
+
async signApproveThenExecution(intent) {
|
|
239
|
+
// Pack the execution data (signature, nonce, deadline, args)
|
|
240
|
+
const packedData = packExecutionData({
|
|
241
|
+
signature: intent.signature,
|
|
242
|
+
nonce: intent.nonce,
|
|
243
|
+
deadline: intent.deadline,
|
|
244
|
+
args: intent.callData,
|
|
245
|
+
});
|
|
246
|
+
// Encode the function call data
|
|
247
|
+
const callData = encodeFunctionData({
|
|
248
|
+
abi: gasStationAbi,
|
|
249
|
+
functionName: "approveThenExecute",
|
|
250
|
+
args: [
|
|
251
|
+
intent.eoaAddress,
|
|
252
|
+
intent.outputContract,
|
|
253
|
+
intent.ethAmount,
|
|
254
|
+
intent.erc20Address,
|
|
255
|
+
intent.spender,
|
|
256
|
+
intent.approveAmount,
|
|
257
|
+
packedData,
|
|
258
|
+
],
|
|
259
|
+
});
|
|
260
|
+
// Sign the transaction without sending it
|
|
261
|
+
const signedTx = await this.walletClient.signTransaction({
|
|
262
|
+
to: this.executionContract,
|
|
263
|
+
data: callData,
|
|
264
|
+
gas: BigInt(300000),
|
|
265
|
+
type: "eip1559",
|
|
266
|
+
account: this.walletClient.account,
|
|
267
|
+
chain: this.walletClient.chain,
|
|
268
|
+
});
|
|
269
|
+
return signedTx;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Execute an approval then execution through the gas station contract.
|
|
273
|
+
* Atomically approves an ERC20 token and executes a transaction in a single call.
|
|
274
|
+
* Packs the execution data according to the delegate contract's expected format and
|
|
275
|
+
* submits it via the execution contract's approveThenExecute function.
|
|
276
|
+
* Call this with a paymaster client to submit and pay for the transaction.
|
|
277
|
+
*/
|
|
278
|
+
async approveThenExecute(intent) {
|
|
279
|
+
// Pack the execution data (signature, nonce, deadline, args)
|
|
280
|
+
const packedData = packExecutionData({
|
|
281
|
+
signature: intent.signature,
|
|
282
|
+
nonce: intent.nonce,
|
|
283
|
+
deadline: intent.deadline,
|
|
284
|
+
args: intent.callData,
|
|
285
|
+
});
|
|
286
|
+
// Call the approveThenExecute function with all parameters
|
|
287
|
+
const txHash = await this.walletClient.sendTransaction({
|
|
288
|
+
to: this.executionContract,
|
|
289
|
+
data: encodeFunctionData({
|
|
290
|
+
abi: gasStationAbi,
|
|
291
|
+
functionName: "approveThenExecute",
|
|
292
|
+
args: [
|
|
293
|
+
intent.eoaAddress,
|
|
294
|
+
intent.outputContract,
|
|
295
|
+
intent.ethAmount,
|
|
296
|
+
intent.erc20Address,
|
|
297
|
+
intent.spender,
|
|
298
|
+
intent.approveAmount,
|
|
299
|
+
packedData,
|
|
300
|
+
],
|
|
301
|
+
}),
|
|
302
|
+
gas: BigInt(300000),
|
|
303
|
+
account: this.walletClient.account,
|
|
304
|
+
});
|
|
305
|
+
const receipt = await this.publicClient.waitForTransactionReceipt({
|
|
306
|
+
hash: txHash,
|
|
307
|
+
});
|
|
308
|
+
if (receipt.status !== "success") {
|
|
309
|
+
// Try to get the revert reason if available
|
|
310
|
+
const revertReason = await this.getRevertReason(txHash);
|
|
311
|
+
throw new Error(`Approve then execute failed: ${revertReason || "Transaction reverted"}. ` +
|
|
312
|
+
`Gas used: ${receipt.gasUsed}/${receipt.cumulativeGasUsed}. ` +
|
|
313
|
+
`Transaction hash: ${txHash}`);
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
txHash,
|
|
317
|
+
blockNumber: receipt.blockNumber,
|
|
318
|
+
gasUsed: receipt.gasUsed,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
232
321
|
}
|
|
233
322
|
|
|
234
323
|
export { GasStationClient };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gasStationClient.mjs","sources":["../src/gasStationClient.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"gasStationClient.mjs","sources":["../src/gasStationClient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { GasStationClient } from "./gasStationClient";
|
|
2
2
|
export { IntentBuilder } from "./intentBuilder";
|
|
3
|
-
export { buildTokenTransfer, buildETHTransfer, buildTokenApproval, buildETHTransferFromEther, buildContractCall, packExecutionData, } from "./gasStationUtils";
|
|
3
|
+
export { buildTokenTransfer, buildETHTransfer, buildTokenApproval, buildETHTransferFromEther, buildContractCall, packExecutionData, ERC20_ABI, } from "./gasStationUtils";
|
|
4
4
|
export type { ExecutionParams } from "./gasStationUtils";
|
|
5
5
|
export { CHAIN_PRESETS, getPreset, createCustomPreset, DEFAULT_EXECUTION_CONTRACT, DEFAULT_DELEGATE_CONTRACT, } from "./config";
|
|
6
6
|
export { buildIntentSigningPolicy, buildPaymasterExecutionPolicy, ensureGasStationInterface, uploadGasStationInterface, getSmartContractInterface, } from "./policyUtils";
|
|
7
|
-
export type { GasStationConfig, ChainPreset, ContractCallParams, ExecutionIntent, } from "./config";
|
|
7
|
+
export type { GasStationConfig, ChainPreset, ContractCallParams, ExecutionIntent, ApprovalExecutionIntent, } from "./config";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EACL,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,uBAAuB,GACxB,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ var policyUtils = require('./policyUtils.js');
|
|
|
10
10
|
|
|
11
11
|
exports.GasStationClient = gasStationClient.GasStationClient;
|
|
12
12
|
exports.IntentBuilder = intentBuilder.IntentBuilder;
|
|
13
|
+
exports.ERC20_ABI = gasStationUtils.ERC20_ABI;
|
|
13
14
|
exports.buildContractCall = gasStationUtils.buildContractCall;
|
|
14
15
|
exports.buildETHTransfer = gasStationUtils.buildETHTransfer;
|
|
15
16
|
exports.buildETHTransferFromEther = gasStationUtils.buildETHTransferFromEther;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { GasStationClient } from './gasStationClient.mjs';
|
|
2
2
|
export { IntentBuilder } from './intentBuilder.mjs';
|
|
3
|
-
export { buildContractCall, buildETHTransfer, buildETHTransferFromEther, buildTokenApproval, buildTokenTransfer, packExecutionData } from './gasStationUtils.mjs';
|
|
3
|
+
export { ERC20_ABI, buildContractCall, buildETHTransfer, buildETHTransferFromEther, buildTokenApproval, buildTokenTransfer, packExecutionData } from './gasStationUtils.mjs';
|
|
4
4
|
export { CHAIN_PRESETS, DEFAULT_DELEGATE_CONTRACT, DEFAULT_EXECUTION_CONTRACT, createCustomPreset, getPreset } from './config.mjs';
|
|
5
5
|
export { buildIntentSigningPolicy, buildPaymasterExecutionPolicy, ensureGasStationInterface, getSmartContractInterface, uploadGasStationInterface } from './policyUtils.mjs';
|
|
6
6
|
//# sourceMappingURL=index.mjs.map
|
package/dist/intentBuilder.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type WalletClient, type Account, type Chain, type Transport, type Hex } from "viem";
|
|
2
|
-
import type { ContractCallParams, ExecutionIntent } from "./config";
|
|
2
|
+
import type { ContractCallParams, ExecutionIntent, ApprovalExecutionIntent } from "./config";
|
|
3
3
|
interface IntentBuilderConfig {
|
|
4
4
|
eoaWalletClient: WalletClient<Transport, Chain, Account>;
|
|
5
5
|
chainId: number;
|
|
@@ -55,6 +55,12 @@ export declare class IntentBuilder {
|
|
|
55
55
|
* Returns a complete ExecutionIntent ready for execution
|
|
56
56
|
*/
|
|
57
57
|
sign(currentNonce: bigint): Promise<ExecutionIntent>;
|
|
58
|
+
/**
|
|
59
|
+
* Signs an approval then execution intent using EIP-712
|
|
60
|
+
* This allows atomic approval of an ERC20 token followed by execution
|
|
61
|
+
* Returns a complete ApprovalExecutionIntent ready for execution
|
|
62
|
+
*/
|
|
63
|
+
signApprovalExecution(currentNonce: bigint, erc20Address: Hex, spender: Hex, approveAmount: bigint): Promise<ApprovalExecutionIntent>;
|
|
58
64
|
static create(config: IntentBuilderConfig): IntentBuilder;
|
|
59
65
|
}
|
|
60
66
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intentBuilder.d.ts","sourceRoot":"","sources":["../src/intentBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"intentBuilder.d.ts","sourceRoot":"","sources":["../src/intentBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAGlB,UAAU,mBAAmB;IAC3B,eAAe,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAK9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKjC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAa9C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASxD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAS5D;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO1C;;;OAGG;IACG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyD1D;;;;OAIG;IACG,qBAAqB,CACzB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,EACZ,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,uBAAuB,CAAC;IAoEnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa;CAG1D"}
|
package/dist/intentBuilder.js
CHANGED
|
@@ -109,28 +109,88 @@ class IntentBuilder {
|
|
|
109
109
|
chainId: this.config.chainId,
|
|
110
110
|
verifyingContract: this.config.eoaAddress,
|
|
111
111
|
};
|
|
112
|
-
//
|
|
112
|
+
// keccak256("Execution(uint128 nonce,uint32 deadline,address to,uint256 value,bytes data)")
|
|
113
113
|
const types = {
|
|
114
114
|
Execution: [
|
|
115
115
|
{ name: "nonce", type: "uint128" },
|
|
116
116
|
{ name: "deadline", type: "uint32" },
|
|
117
|
-
{ name: "
|
|
118
|
-
{ name: "
|
|
119
|
-
{ name: "
|
|
117
|
+
{ name: "to", type: "address" },
|
|
118
|
+
{ name: "value", type: "uint256" },
|
|
119
|
+
{ name: "data", type: "bytes" },
|
|
120
120
|
],
|
|
121
121
|
};
|
|
122
122
|
const message = {
|
|
123
|
+
nonce,
|
|
124
|
+
deadline,
|
|
125
|
+
to: this.outputContract,
|
|
126
|
+
value: this.ethAmount,
|
|
127
|
+
data: this.callData,
|
|
128
|
+
};
|
|
129
|
+
const signature = await this.config.eoaWalletClient.signTypedData({
|
|
130
|
+
account: this.config.eoaWalletClient.account,
|
|
131
|
+
domain,
|
|
132
|
+
types,
|
|
133
|
+
primaryType: "Execution",
|
|
134
|
+
message,
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
123
137
|
nonce,
|
|
124
138
|
deadline,
|
|
125
139
|
outputContract: this.outputContract,
|
|
126
140
|
ethAmount: this.ethAmount,
|
|
127
|
-
|
|
141
|
+
callData: this.callData,
|
|
142
|
+
signature,
|
|
143
|
+
eoaAddress: this.config.eoaAddress,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Signs an approval then execution intent using EIP-712
|
|
148
|
+
* This allows atomic approval of an ERC20 token followed by execution
|
|
149
|
+
* Returns a complete ApprovalExecutionIntent ready for execution
|
|
150
|
+
*/
|
|
151
|
+
async signApprovalExecution(currentNonce, erc20Address, spender, approveAmount) {
|
|
152
|
+
if (!this.outputContract) {
|
|
153
|
+
throw new Error("No target contract set. Use setTarget() or callContract()");
|
|
154
|
+
}
|
|
155
|
+
const nonce = this.nonce ?? currentNonce;
|
|
156
|
+
// Default deadline: 1 hour from now
|
|
157
|
+
const deadline = this.deadline ?? Math.floor(Date.now() / 1000) + 60 * 60;
|
|
158
|
+
// EIP-712 domain and types for approve then execute
|
|
159
|
+
const domain = {
|
|
160
|
+
name: "TKGasDelegate",
|
|
161
|
+
version: "1",
|
|
162
|
+
chainId: this.config.chainId,
|
|
163
|
+
verifyingContract: this.config.eoaAddress,
|
|
164
|
+
};
|
|
165
|
+
// Based on hashApproveThenExecute from the contract
|
|
166
|
+
// keccak256("ApproveThenExecute(uint128 nonce,uint32 deadline,address erc20Contract,address spender,uint256 approveAmount,address to,uint256 value,bytes data)")
|
|
167
|
+
const types = {
|
|
168
|
+
ApproveThenExecute: [
|
|
169
|
+
{ name: "nonce", type: "uint128" },
|
|
170
|
+
{ name: "deadline", type: "uint32" },
|
|
171
|
+
{ name: "erc20Contract", type: "address" },
|
|
172
|
+
{ name: "spender", type: "address" },
|
|
173
|
+
{ name: "approveAmount", type: "uint256" },
|
|
174
|
+
{ name: "to", type: "address" },
|
|
175
|
+
{ name: "value", type: "uint256" },
|
|
176
|
+
{ name: "data", type: "bytes" },
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
const message = {
|
|
180
|
+
nonce,
|
|
181
|
+
deadline,
|
|
182
|
+
erc20Contract: erc20Address,
|
|
183
|
+
spender,
|
|
184
|
+
approveAmount,
|
|
185
|
+
to: this.outputContract,
|
|
186
|
+
value: this.ethAmount,
|
|
187
|
+
data: this.callData,
|
|
128
188
|
};
|
|
129
189
|
const signature = await this.config.eoaWalletClient.signTypedData({
|
|
130
190
|
account: this.config.eoaWalletClient.account,
|
|
131
191
|
domain,
|
|
132
192
|
types,
|
|
133
|
-
primaryType: "
|
|
193
|
+
primaryType: "ApproveThenExecute",
|
|
134
194
|
message,
|
|
135
195
|
});
|
|
136
196
|
return {
|
|
@@ -141,6 +201,9 @@ class IntentBuilder {
|
|
|
141
201
|
callData: this.callData,
|
|
142
202
|
signature,
|
|
143
203
|
eoaAddress: this.config.eoaAddress,
|
|
204
|
+
erc20Address,
|
|
205
|
+
spender,
|
|
206
|
+
approveAmount,
|
|
144
207
|
};
|
|
145
208
|
}
|
|
146
209
|
// Static factory method for quick intent creation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intentBuilder.js","sources":["../src/intentBuilder.ts"],"sourcesContent":[null],"names":["encodeFunctionData","ERC20_ABI"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"intentBuilder.js","sources":["../src/intentBuilder.ts"],"sourcesContent":[null],"names":["encodeFunctionData","ERC20_ABI"],"mappings":"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"}
|
package/dist/intentBuilder.mjs
CHANGED
|
@@ -107,28 +107,88 @@ class IntentBuilder {
|
|
|
107
107
|
chainId: this.config.chainId,
|
|
108
108
|
verifyingContract: this.config.eoaAddress,
|
|
109
109
|
};
|
|
110
|
-
//
|
|
110
|
+
// keccak256("Execution(uint128 nonce,uint32 deadline,address to,uint256 value,bytes data)")
|
|
111
111
|
const types = {
|
|
112
112
|
Execution: [
|
|
113
113
|
{ name: "nonce", type: "uint128" },
|
|
114
114
|
{ name: "deadline", type: "uint32" },
|
|
115
|
-
{ name: "
|
|
116
|
-
{ name: "
|
|
117
|
-
{ name: "
|
|
115
|
+
{ name: "to", type: "address" },
|
|
116
|
+
{ name: "value", type: "uint256" },
|
|
117
|
+
{ name: "data", type: "bytes" },
|
|
118
118
|
],
|
|
119
119
|
};
|
|
120
120
|
const message = {
|
|
121
|
+
nonce,
|
|
122
|
+
deadline,
|
|
123
|
+
to: this.outputContract,
|
|
124
|
+
value: this.ethAmount,
|
|
125
|
+
data: this.callData,
|
|
126
|
+
};
|
|
127
|
+
const signature = await this.config.eoaWalletClient.signTypedData({
|
|
128
|
+
account: this.config.eoaWalletClient.account,
|
|
129
|
+
domain,
|
|
130
|
+
types,
|
|
131
|
+
primaryType: "Execution",
|
|
132
|
+
message,
|
|
133
|
+
});
|
|
134
|
+
return {
|
|
121
135
|
nonce,
|
|
122
136
|
deadline,
|
|
123
137
|
outputContract: this.outputContract,
|
|
124
138
|
ethAmount: this.ethAmount,
|
|
125
|
-
|
|
139
|
+
callData: this.callData,
|
|
140
|
+
signature,
|
|
141
|
+
eoaAddress: this.config.eoaAddress,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Signs an approval then execution intent using EIP-712
|
|
146
|
+
* This allows atomic approval of an ERC20 token followed by execution
|
|
147
|
+
* Returns a complete ApprovalExecutionIntent ready for execution
|
|
148
|
+
*/
|
|
149
|
+
async signApprovalExecution(currentNonce, erc20Address, spender, approveAmount) {
|
|
150
|
+
if (!this.outputContract) {
|
|
151
|
+
throw new Error("No target contract set. Use setTarget() or callContract()");
|
|
152
|
+
}
|
|
153
|
+
const nonce = this.nonce ?? currentNonce;
|
|
154
|
+
// Default deadline: 1 hour from now
|
|
155
|
+
const deadline = this.deadline ?? Math.floor(Date.now() / 1000) + 60 * 60;
|
|
156
|
+
// EIP-712 domain and types for approve then execute
|
|
157
|
+
const domain = {
|
|
158
|
+
name: "TKGasDelegate",
|
|
159
|
+
version: "1",
|
|
160
|
+
chainId: this.config.chainId,
|
|
161
|
+
verifyingContract: this.config.eoaAddress,
|
|
162
|
+
};
|
|
163
|
+
// Based on hashApproveThenExecute from the contract
|
|
164
|
+
// keccak256("ApproveThenExecute(uint128 nonce,uint32 deadline,address erc20Contract,address spender,uint256 approveAmount,address to,uint256 value,bytes data)")
|
|
165
|
+
const types = {
|
|
166
|
+
ApproveThenExecute: [
|
|
167
|
+
{ name: "nonce", type: "uint128" },
|
|
168
|
+
{ name: "deadline", type: "uint32" },
|
|
169
|
+
{ name: "erc20Contract", type: "address" },
|
|
170
|
+
{ name: "spender", type: "address" },
|
|
171
|
+
{ name: "approveAmount", type: "uint256" },
|
|
172
|
+
{ name: "to", type: "address" },
|
|
173
|
+
{ name: "value", type: "uint256" },
|
|
174
|
+
{ name: "data", type: "bytes" },
|
|
175
|
+
],
|
|
176
|
+
};
|
|
177
|
+
const message = {
|
|
178
|
+
nonce,
|
|
179
|
+
deadline,
|
|
180
|
+
erc20Contract: erc20Address,
|
|
181
|
+
spender,
|
|
182
|
+
approveAmount,
|
|
183
|
+
to: this.outputContract,
|
|
184
|
+
value: this.ethAmount,
|
|
185
|
+
data: this.callData,
|
|
126
186
|
};
|
|
127
187
|
const signature = await this.config.eoaWalletClient.signTypedData({
|
|
128
188
|
account: this.config.eoaWalletClient.account,
|
|
129
189
|
domain,
|
|
130
190
|
types,
|
|
131
|
-
primaryType: "
|
|
191
|
+
primaryType: "ApproveThenExecute",
|
|
132
192
|
message,
|
|
133
193
|
});
|
|
134
194
|
return {
|
|
@@ -139,6 +199,9 @@ class IntentBuilder {
|
|
|
139
199
|
callData: this.callData,
|
|
140
200
|
signature,
|
|
141
201
|
eoaAddress: this.config.eoaAddress,
|
|
202
|
+
erc20Address,
|
|
203
|
+
spender,
|
|
204
|
+
approveAmount,
|
|
142
205
|
};
|
|
143
206
|
}
|
|
144
207
|
// Static factory method for quick intent creation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intentBuilder.mjs","sources":["../src/intentBuilder.ts"],"sourcesContent":[null],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"intentBuilder.mjs","sources":["../src/intentBuilder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|