@ael-protocol/sdk 0.1.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 +252 -0
- package/dist/abi.d.ts +287 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +188 -0
- package/dist/abi.js.map +1 -0
- package/dist/ael.d.ts +65 -0
- package/dist/ael.d.ts.map +1 -0
- package/dist/ael.js +274 -0
- package/dist/ael.js.map +1 -0
- package/dist/constants.d.ts +41 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +50 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
package/dist/abi.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QUOTER_ABI = exports.ERC20_ABI = exports.ROUTER_ABI = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* AEL Router ABI
|
|
6
|
+
*/
|
|
7
|
+
exports.ROUTER_ABI = [
|
|
8
|
+
// Events
|
|
9
|
+
{
|
|
10
|
+
type: 'event',
|
|
11
|
+
name: 'IntentSubmitted',
|
|
12
|
+
inputs: [
|
|
13
|
+
{ name: 'intentHash', type: 'bytes32', indexed: true },
|
|
14
|
+
{ name: 'agent', type: 'address', indexed: true },
|
|
15
|
+
{ name: 'tokenIn', type: 'address', indexed: false },
|
|
16
|
+
{ name: 'tokenOut', type: 'address', indexed: false },
|
|
17
|
+
{ name: 'amountIn', type: 'uint256', indexed: false },
|
|
18
|
+
{ name: 'minAmountOut', type: 'uint256', indexed: false },
|
|
19
|
+
{ name: 'deadline', type: 'uint256', indexed: false },
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'event',
|
|
24
|
+
name: 'IntentSettled',
|
|
25
|
+
inputs: [
|
|
26
|
+
{ name: 'intentHash', type: 'bytes32', indexed: true },
|
|
27
|
+
{ name: 'solver', type: 'address', indexed: true },
|
|
28
|
+
{ name: 'amountOut', type: 'uint256', indexed: false },
|
|
29
|
+
{ name: 'fee', type: 'uint256', indexed: false },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
type: 'event',
|
|
34
|
+
name: 'IntentCancelled',
|
|
35
|
+
inputs: [
|
|
36
|
+
{ name: 'intentHash', type: 'bytes32', indexed: true },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'event',
|
|
41
|
+
name: 'IntentExpired',
|
|
42
|
+
inputs: [
|
|
43
|
+
{ name: 'intentHash', type: 'bytes32', indexed: true },
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
// Functions
|
|
47
|
+
{
|
|
48
|
+
type: 'function',
|
|
49
|
+
name: 'submitIntent',
|
|
50
|
+
inputs: [
|
|
51
|
+
{
|
|
52
|
+
name: 'intent',
|
|
53
|
+
type: 'tuple',
|
|
54
|
+
components: [
|
|
55
|
+
{ name: 'agent', type: 'address' },
|
|
56
|
+
{ name: 'tokenIn', type: 'address' },
|
|
57
|
+
{ name: 'tokenOut', type: 'address' },
|
|
58
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
59
|
+
{ name: 'minAmountOut', type: 'uint256' },
|
|
60
|
+
{ name: 'deadline', type: 'uint256' },
|
|
61
|
+
{ name: 'nonce', type: 'uint256' },
|
|
62
|
+
{ name: 'signature', type: 'bytes' },
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
outputs: [{ name: 'intentHash', type: 'bytes32' }],
|
|
67
|
+
stateMutability: 'payable',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: 'function',
|
|
71
|
+
name: 'cancelIntent',
|
|
72
|
+
inputs: [{ name: 'intentHash', type: 'bytes32' }],
|
|
73
|
+
outputs: [],
|
|
74
|
+
stateMutability: 'nonpayable',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'function',
|
|
78
|
+
name: 'getIntentStatus',
|
|
79
|
+
inputs: [{ name: 'intentHash', type: 'bytes32' }],
|
|
80
|
+
outputs: [{ name: '', type: 'uint8' }],
|
|
81
|
+
stateMutability: 'view',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'function',
|
|
85
|
+
name: 'getNonce',
|
|
86
|
+
inputs: [{ name: 'agent', type: 'address' }],
|
|
87
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
88
|
+
stateMutability: 'view',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'function',
|
|
92
|
+
name: 'domainSeparator',
|
|
93
|
+
inputs: [],
|
|
94
|
+
outputs: [{ name: '', type: 'bytes32' }],
|
|
95
|
+
stateMutability: 'view',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'function',
|
|
99
|
+
name: 'intents',
|
|
100
|
+
inputs: [{ name: 'intentHash', type: 'bytes32' }],
|
|
101
|
+
outputs: [
|
|
102
|
+
{ name: 'agent', type: 'address' },
|
|
103
|
+
{ name: 'tokenIn', type: 'address' },
|
|
104
|
+
{ name: 'tokenOut', type: 'address' },
|
|
105
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
106
|
+
{ name: 'minAmountOut', type: 'uint256' },
|
|
107
|
+
{ name: 'deadline', type: 'uint256' },
|
|
108
|
+
{ name: 'status', type: 'uint8' },
|
|
109
|
+
],
|
|
110
|
+
stateMutability: 'view',
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
/**
|
|
114
|
+
* ERC20 ABI
|
|
115
|
+
*/
|
|
116
|
+
exports.ERC20_ABI = [
|
|
117
|
+
{
|
|
118
|
+
type: 'function',
|
|
119
|
+
name: 'approve',
|
|
120
|
+
inputs: [
|
|
121
|
+
{ name: 'spender', type: 'address' },
|
|
122
|
+
{ name: 'amount', type: 'uint256' },
|
|
123
|
+
],
|
|
124
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
125
|
+
stateMutability: 'nonpayable',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'function',
|
|
129
|
+
name: 'allowance',
|
|
130
|
+
inputs: [
|
|
131
|
+
{ name: 'owner', type: 'address' },
|
|
132
|
+
{ name: 'spender', type: 'address' },
|
|
133
|
+
],
|
|
134
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
135
|
+
stateMutability: 'view',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'function',
|
|
139
|
+
name: 'balanceOf',
|
|
140
|
+
inputs: [{ name: 'account', type: 'address' }],
|
|
141
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
142
|
+
stateMutability: 'view',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'function',
|
|
146
|
+
name: 'decimals',
|
|
147
|
+
inputs: [],
|
|
148
|
+
outputs: [{ name: '', type: 'uint8' }],
|
|
149
|
+
stateMutability: 'view',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'function',
|
|
153
|
+
name: 'symbol',
|
|
154
|
+
inputs: [],
|
|
155
|
+
outputs: [{ name: '', type: 'string' }],
|
|
156
|
+
stateMutability: 'view',
|
|
157
|
+
},
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* Uniswap V3 Quoter ABI
|
|
161
|
+
*/
|
|
162
|
+
exports.QUOTER_ABI = [
|
|
163
|
+
{
|
|
164
|
+
type: 'function',
|
|
165
|
+
name: 'quoteExactInputSingle',
|
|
166
|
+
inputs: [
|
|
167
|
+
{
|
|
168
|
+
name: 'params',
|
|
169
|
+
type: 'tuple',
|
|
170
|
+
components: [
|
|
171
|
+
{ name: 'tokenIn', type: 'address' },
|
|
172
|
+
{ name: 'tokenOut', type: 'address' },
|
|
173
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
174
|
+
{ name: 'fee', type: 'uint24' },
|
|
175
|
+
{ name: 'sqrtPriceLimitX96', type: 'uint160' },
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
outputs: [
|
|
180
|
+
{ name: 'amountOut', type: 'uint256' },
|
|
181
|
+
{ name: 'sqrtPriceX96After', type: 'uint160' },
|
|
182
|
+
{ name: 'initializedTicksCrossed', type: 'uint32' },
|
|
183
|
+
{ name: 'gasEstimate', type: 'uint256' },
|
|
184
|
+
],
|
|
185
|
+
stateMutability: 'nonpayable',
|
|
186
|
+
},
|
|
187
|
+
];
|
|
188
|
+
//# sourceMappingURL=abi.js.map
|
package/dist/abi.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"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"}
|
package/dist/ael.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type Address, type Hash } from 'viem';
|
|
2
|
+
import type { AELConfig, SwapParams, SwapResult, IntentDetails, QuoteResult } from './types';
|
|
3
|
+
import { IntentStatus } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* AEL SDK 主类
|
|
6
|
+
* 提供 AI Agent 交易执行能力
|
|
7
|
+
*/
|
|
8
|
+
export declare class AEL {
|
|
9
|
+
private publicClient;
|
|
10
|
+
private walletClient;
|
|
11
|
+
private account;
|
|
12
|
+
private agentAddress;
|
|
13
|
+
private routerAddress;
|
|
14
|
+
private chain;
|
|
15
|
+
/**
|
|
16
|
+
* 创建 AEL 实例
|
|
17
|
+
*/
|
|
18
|
+
constructor(config: AELConfig);
|
|
19
|
+
/**
|
|
20
|
+
* 获取 Agent 地址
|
|
21
|
+
*/
|
|
22
|
+
get address(): Address;
|
|
23
|
+
/**
|
|
24
|
+
* 执行 Swap
|
|
25
|
+
* 构造意图 → EIP-712 签名 → 授权 → 提交
|
|
26
|
+
*/
|
|
27
|
+
swap(params: SwapParams): Promise<SwapResult>;
|
|
28
|
+
/**
|
|
29
|
+
* 获取报价 (通过 Uniswap V3)
|
|
30
|
+
*/
|
|
31
|
+
quote(tokenIn: Address, tokenOut: Address, amountIn: bigint): Promise<QuoteResult | null>;
|
|
32
|
+
/**
|
|
33
|
+
* 获取意图状态
|
|
34
|
+
*/
|
|
35
|
+
getStatus(intentHash: Hash): Promise<IntentStatus>;
|
|
36
|
+
/**
|
|
37
|
+
* 获取意图详情
|
|
38
|
+
*/
|
|
39
|
+
getIntent(intentHash: Hash): Promise<IntentDetails>;
|
|
40
|
+
/**
|
|
41
|
+
* 取消意图
|
|
42
|
+
*/
|
|
43
|
+
cancel(intentHash: Hash): Promise<Hash>;
|
|
44
|
+
/**
|
|
45
|
+
* 等待意图结算
|
|
46
|
+
*/
|
|
47
|
+
waitForSettlement(intentHash: Hash, timeoutMs?: number): Promise<IntentStatus>;
|
|
48
|
+
/**
|
|
49
|
+
* 获取当前 nonce
|
|
50
|
+
*/
|
|
51
|
+
private getNonce;
|
|
52
|
+
/**
|
|
53
|
+
* EIP-712 签名
|
|
54
|
+
*/
|
|
55
|
+
private signIntent;
|
|
56
|
+
/**
|
|
57
|
+
* 确保代币授权
|
|
58
|
+
*/
|
|
59
|
+
private ensureApproval;
|
|
60
|
+
/**
|
|
61
|
+
* 从日志中提取 intentHash
|
|
62
|
+
*/
|
|
63
|
+
private extractIntentHash;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=ael.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ael.d.ts","sourceRoot":"","sources":["../src/ael.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,OAAO,EACZ,KAAK,IAAI,EAEV,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAsBvC;;;GAGG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,KAAK,CAAQ;IAErB;;OAEG;gBACS,MAAM,EAAE,SAAS;IAkB7B;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAoDnD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAqC/F;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAUxD;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAmBzD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAkB3F;;OAEG;YACW,QAAQ;IAStB;;OAEG;YACW,UAAU;IA4CxB;;OAEG;YACW,cAAc;IAqB5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAS1B"}
|
package/dist/ael.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AEL = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const accounts_1 = require("viem/accounts");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
const abi_1 = require("./abi");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
// EIP-712 类型哈希
|
|
10
|
+
const INTENT_TYPEHASH = (0, viem_1.keccak256)((0, viem_1.encodePacked)(['string'], ['AgentIntent(address agent,address tokenIn,address tokenOut,uint256 amountIn,uint256 minAmountOut,uint256 deadline,uint256 nonce)']));
|
|
11
|
+
/**
|
|
12
|
+
* 获取对应链的 Quoter 地址
|
|
13
|
+
*/
|
|
14
|
+
function getQuoterAddress(chain) {
|
|
15
|
+
if (chain.id === constants_1.CHAIN_IDS.BASE_MAINNET) {
|
|
16
|
+
return constants_1.BASE_MAINNET.UNISWAP_QUOTER_V2;
|
|
17
|
+
}
|
|
18
|
+
return constants_1.BASE_SEPOLIA.UNISWAP_QUOTER_V2;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* AEL SDK 主类
|
|
22
|
+
* 提供 AI Agent 交易执行能力
|
|
23
|
+
*/
|
|
24
|
+
class AEL {
|
|
25
|
+
publicClient;
|
|
26
|
+
walletClient;
|
|
27
|
+
account;
|
|
28
|
+
agentAddress;
|
|
29
|
+
routerAddress;
|
|
30
|
+
chain;
|
|
31
|
+
/**
|
|
32
|
+
* 创建 AEL 实例
|
|
33
|
+
*/
|
|
34
|
+
constructor(config) {
|
|
35
|
+
this.account = (0, accounts_1.privateKeyToAccount)(config.privateKey);
|
|
36
|
+
this.agentAddress = this.account.address;
|
|
37
|
+
this.routerAddress = config.routerAddress;
|
|
38
|
+
this.chain = config.chain;
|
|
39
|
+
this.publicClient = (0, viem_1.createPublicClient)({
|
|
40
|
+
chain: config.chain,
|
|
41
|
+
transport: (0, viem_1.http)(config.rpcUrl),
|
|
42
|
+
});
|
|
43
|
+
this.walletClient = (0, viem_1.createWalletClient)({
|
|
44
|
+
account: this.account,
|
|
45
|
+
chain: config.chain,
|
|
46
|
+
transport: (0, viem_1.http)(config.rpcUrl),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 获取 Agent 地址
|
|
51
|
+
*/
|
|
52
|
+
get address() {
|
|
53
|
+
return this.agentAddress;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 执行 Swap
|
|
57
|
+
* 构造意图 → EIP-712 签名 → 授权 → 提交
|
|
58
|
+
*/
|
|
59
|
+
async swap(params) {
|
|
60
|
+
const { tokenIn, tokenOut, amountIn, minAmountOut } = params;
|
|
61
|
+
const deadline = params.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 3600); // 默认 1 小时
|
|
62
|
+
// 1. 获取 nonce
|
|
63
|
+
const nonce = await this.getNonce();
|
|
64
|
+
// 2. 构造意图
|
|
65
|
+
const intent = {
|
|
66
|
+
agent: this.agentAddress,
|
|
67
|
+
tokenIn,
|
|
68
|
+
tokenOut,
|
|
69
|
+
amountIn,
|
|
70
|
+
minAmountOut,
|
|
71
|
+
deadline,
|
|
72
|
+
nonce,
|
|
73
|
+
signature: '0x',
|
|
74
|
+
};
|
|
75
|
+
// 3. 签名
|
|
76
|
+
intent.signature = await this.signIntent(intent);
|
|
77
|
+
// 4. 授权 tokenIn (如果是 ERC20)
|
|
78
|
+
if (tokenIn !== '0x0000000000000000000000000000000000000000') {
|
|
79
|
+
await this.ensureApproval(tokenIn, amountIn);
|
|
80
|
+
}
|
|
81
|
+
// 5. 提交意图
|
|
82
|
+
const isETH = tokenIn === '0x0000000000000000000000000000000000000000';
|
|
83
|
+
const txHash = await this.walletClient.writeContract({
|
|
84
|
+
chain: this.chain,
|
|
85
|
+
account: this.account,
|
|
86
|
+
address: this.routerAddress,
|
|
87
|
+
abi: abi_1.ROUTER_ABI,
|
|
88
|
+
functionName: 'submitIntent',
|
|
89
|
+
args: [intent],
|
|
90
|
+
value: isETH ? amountIn : 0n,
|
|
91
|
+
});
|
|
92
|
+
// 6. 等待确认并获取 intentHash
|
|
93
|
+
const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
94
|
+
// 从事件中提取 intentHash
|
|
95
|
+
const intentHash = this.extractIntentHash(receipt.logs);
|
|
96
|
+
return {
|
|
97
|
+
intentHash,
|
|
98
|
+
txHash,
|
|
99
|
+
status: types_1.IntentStatus.Pending,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 获取报价 (通过 Uniswap V3)
|
|
104
|
+
*/
|
|
105
|
+
async quote(tokenIn, tokenOut, amountIn) {
|
|
106
|
+
const feeTiers = [500, 3000, 10000];
|
|
107
|
+
let bestQuote = null;
|
|
108
|
+
const quoterAddress = getQuoterAddress(this.chain);
|
|
109
|
+
for (const fee of feeTiers) {
|
|
110
|
+
try {
|
|
111
|
+
const result = await this.publicClient.simulateContract({
|
|
112
|
+
address: quoterAddress,
|
|
113
|
+
abi: abi_1.QUOTER_ABI,
|
|
114
|
+
functionName: 'quoteExactInputSingle',
|
|
115
|
+
args: [{
|
|
116
|
+
tokenIn,
|
|
117
|
+
tokenOut,
|
|
118
|
+
amountIn,
|
|
119
|
+
fee,
|
|
120
|
+
sqrtPriceLimitX96: 0n,
|
|
121
|
+
}],
|
|
122
|
+
});
|
|
123
|
+
const amountOut = result.result[0];
|
|
124
|
+
if (!bestQuote || amountOut > bestQuote.amountOut) {
|
|
125
|
+
bestQuote = {
|
|
126
|
+
amountOut,
|
|
127
|
+
priceImpact: 0,
|
|
128
|
+
fee,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// 该费用等级无报价
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return bestQuote;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 获取意图状态
|
|
140
|
+
*/
|
|
141
|
+
async getStatus(intentHash) {
|
|
142
|
+
const status = await this.publicClient.readContract({
|
|
143
|
+
address: this.routerAddress,
|
|
144
|
+
abi: abi_1.ROUTER_ABI,
|
|
145
|
+
functionName: 'getIntentStatus',
|
|
146
|
+
args: [intentHash],
|
|
147
|
+
});
|
|
148
|
+
return status;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 获取意图详情
|
|
152
|
+
*/
|
|
153
|
+
async getIntent(intentHash) {
|
|
154
|
+
const result = await this.publicClient.readContract({
|
|
155
|
+
address: this.routerAddress,
|
|
156
|
+
abi: abi_1.ROUTER_ABI,
|
|
157
|
+
functionName: 'intents',
|
|
158
|
+
args: [intentHash],
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
agent: result[0],
|
|
162
|
+
tokenIn: result[1],
|
|
163
|
+
tokenOut: result[2],
|
|
164
|
+
amountIn: result[3],
|
|
165
|
+
minAmountOut: result[4],
|
|
166
|
+
deadline: result[5],
|
|
167
|
+
status: result[6],
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 取消意图
|
|
172
|
+
*/
|
|
173
|
+
async cancel(intentHash) {
|
|
174
|
+
const txHash = await this.walletClient.writeContract({
|
|
175
|
+
chain: this.chain,
|
|
176
|
+
account: this.account,
|
|
177
|
+
address: this.routerAddress,
|
|
178
|
+
abi: abi_1.ROUTER_ABI,
|
|
179
|
+
functionName: 'cancelIntent',
|
|
180
|
+
args: [intentHash],
|
|
181
|
+
});
|
|
182
|
+
await this.publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
183
|
+
return txHash;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* 等待意图结算
|
|
187
|
+
*/
|
|
188
|
+
async waitForSettlement(intentHash, timeoutMs = 60000) {
|
|
189
|
+
const startTime = Date.now();
|
|
190
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
191
|
+
const status = await this.getStatus(intentHash);
|
|
192
|
+
if (status !== types_1.IntentStatus.Pending) {
|
|
193
|
+
return status;
|
|
194
|
+
}
|
|
195
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
196
|
+
}
|
|
197
|
+
throw new Error('等待结算超时');
|
|
198
|
+
}
|
|
199
|
+
// ============ 私有方法 ============
|
|
200
|
+
/**
|
|
201
|
+
* 获取当前 nonce
|
|
202
|
+
*/
|
|
203
|
+
async getNonce() {
|
|
204
|
+
return await this.publicClient.readContract({
|
|
205
|
+
address: this.routerAddress,
|
|
206
|
+
abi: abi_1.ROUTER_ABI,
|
|
207
|
+
functionName: 'getNonce',
|
|
208
|
+
args: [this.agentAddress],
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* EIP-712 签名
|
|
213
|
+
*/
|
|
214
|
+
async signIntent(intent) {
|
|
215
|
+
// 获取 domain separator
|
|
216
|
+
const domainSeparator = await this.publicClient.readContract({
|
|
217
|
+
address: this.routerAddress,
|
|
218
|
+
abi: abi_1.ROUTER_ABI,
|
|
219
|
+
functionName: 'domainSeparator',
|
|
220
|
+
});
|
|
221
|
+
// 构造 struct hash
|
|
222
|
+
const structHash = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('bytes32, address, address, address, uint256, uint256, uint256, uint256'), [
|
|
223
|
+
INTENT_TYPEHASH,
|
|
224
|
+
intent.agent,
|
|
225
|
+
intent.tokenIn,
|
|
226
|
+
intent.tokenOut,
|
|
227
|
+
intent.amountIn,
|
|
228
|
+
intent.minAmountOut,
|
|
229
|
+
intent.deadline,
|
|
230
|
+
intent.nonce,
|
|
231
|
+
]));
|
|
232
|
+
// 构造 EIP-712 digest
|
|
233
|
+
const digest = (0, viem_1.keccak256)((0, viem_1.encodePacked)(['string', 'bytes32', 'bytes32'], ['\x19\x01', domainSeparator, structHash]));
|
|
234
|
+
// 使用 account.sign 直接签名哈希(不添加 EIP-191 前缀)
|
|
235
|
+
const signature = await this.account.sign({ hash: digest });
|
|
236
|
+
return signature;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* 确保代币授权
|
|
240
|
+
*/
|
|
241
|
+
async ensureApproval(token, amount) {
|
|
242
|
+
const allowance = await this.publicClient.readContract({
|
|
243
|
+
address: token,
|
|
244
|
+
abi: abi_1.ERC20_ABI,
|
|
245
|
+
functionName: 'allowance',
|
|
246
|
+
args: [this.agentAddress, this.routerAddress],
|
|
247
|
+
});
|
|
248
|
+
if (allowance < amount) {
|
|
249
|
+
const txHash = await this.walletClient.writeContract({
|
|
250
|
+
chain: this.chain,
|
|
251
|
+
account: this.account,
|
|
252
|
+
address: token,
|
|
253
|
+
abi: abi_1.ERC20_ABI,
|
|
254
|
+
functionName: 'approve',
|
|
255
|
+
args: [this.routerAddress, 2n ** 256n - 1n],
|
|
256
|
+
});
|
|
257
|
+
await this.publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* 从日志中提取 intentHash
|
|
262
|
+
*/
|
|
263
|
+
extractIntentHash(logs) {
|
|
264
|
+
for (const log of logs) {
|
|
265
|
+
if (log.topics.length > 1) {
|
|
266
|
+
// IntentSubmitted 事件的第一个 indexed 参数是 intentHash
|
|
267
|
+
return log.topics[1];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
throw new Error('未找到 IntentSubmitted 事件');
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
exports.AEL = AEL;
|
|
274
|
+
//# sourceMappingURL=ael.js.map
|
package/dist/ael.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ael.js","sourceRoot":"","sources":["../src/ael.ts"],"names":[],"mappings":";;;AAAA,+BAac;AACd,4CAA4E;AAE5E,mCAAuC;AACvC,+BAA0D;AAC1D,2CAAoE;AAEpE,eAAe;AACf,MAAM,eAAe,GAAG,IAAA,gBAAS,EAC/B,IAAA,mBAAY,EACV,CAAC,QAAQ,CAAC,EACV,CAAC,kIAAkI,CAAC,CACrI,CACF,CAAC;AAEF;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAY;IACpC,IAAI,KAAK,CAAC,EAAE,KAAK,qBAAS,CAAC,YAAY,EAAE,CAAC;QACxC,OAAO,wBAAY,CAAC,iBAAiB,CAAC;IACxC,CAAC;IACD,OAAO,wBAAY,CAAC,iBAAiB,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAa,GAAG;IACN,YAAY,CAAe;IAC3B,YAAY,CAAe;IAC3B,OAAO,CAAoB;IAC3B,YAAY,CAAU;IACtB,aAAa,CAAU;IACvB,KAAK,CAAQ;IAErB;;OAEG;IACH,YAAY,MAAiB;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAA,8BAAmB,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE1B,IAAI,CAAC,YAAY,GAAG,IAAA,yBAAkB,EAAC;YACrC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,IAAA,WAAI,EAAC,MAAM,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAA,yBAAkB,EAAC;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,IAAA,WAAI,EAAC,MAAM,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,MAAkB;QAC3B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU;QAE5F,cAAc;QACd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,UAAU;QACV,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,QAAQ;YACR,KAAK;YACL,SAAS,EAAE,IAAqB;SACjC,CAAC;QAEF,QAAQ;QACR,MAAM,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEjD,4BAA4B;QAC5B,IAAI,OAAO,KAAK,4CAA4C,EAAE,CAAC;YAC7D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,UAAU;QACV,MAAM,KAAK,GAAG,OAAO,KAAK,4CAA4C,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YACnD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,GAAG,EAAE,gBAAU;YACf,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SAC7B,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpF,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO;YACL,UAAU;YACV,MAAM;YACN,MAAM,EAAE,oBAAY,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,QAAiB,EAAE,QAAgB;QAC/D,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;QAC7C,IAAI,SAAS,GAAuB,IAAI,CAAC;QACzC,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBACtD,OAAO,EAAE,aAAa;oBACtB,GAAG,EAAE,gBAAU;oBACf,YAAY,EAAE,uBAAuB;oBACrC,IAAI,EAAE,CAAC;4BACL,OAAO;4BACP,QAAQ;4BACR,QAAQ;4BACR,GAAG;4BACH,iBAAiB,EAAE,EAAE;yBACtB,CAAC;iBACH,CAAC,CAAC;gBAEH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEnC,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;oBAClD,SAAS,GAAG;wBACV,SAAS;wBACT,WAAW,EAAE,CAAC;wBACd,GAAG;qBACJ,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAgB;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAClD,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,GAAG,EAAE,gBAAU;YACf,YAAY,EAAE,iBAAiB;YAC/B,IAAI,EAAE,CAAC,UAAU,CAAC;SACnB,CAAC,CAAC;QACH,OAAO,MAAsB,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAgB;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAClD,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,GAAG,EAAE,gBAAU;YACf,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,UAAU,CAAC;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAClB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACnB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;YACvB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAiB;SAClC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,UAAgB;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YACnD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,GAAG,EAAE,gBAAU;YACf,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,CAAC,UAAU,CAAC;SACnB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,UAAgB,EAAE,YAAoB,KAAK;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEhD,IAAI,MAAM,KAAK,oBAAY,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,iCAAiC;IAEjC;;OAEG;IACK,KAAK,CAAC,QAAQ;QACpB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,GAAG,EAAE,gBAAU;YACf,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,MAQxB;QACC,sBAAsB;QACtB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC3D,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,GAAG,EAAE,gBAAU;YACf,YAAY,EAAE,iBAAiB;SAChC,CAAC,CAAC;QAEH,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAA,gBAAS,EAC1B,IAAA,0BAAmB,EACjB,IAAA,yBAAkB,EAAC,wEAAwE,CAAC,EAC5F;YACE,eAAe;YACf,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,YAAY;YACnB,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,KAAK;SACb,CACF,CACF,CAAC;QAEF,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAA,gBAAS,EACtB,IAAA,mBAAY,EAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAC1F,CAAC;QAEF,yCAAyC;QACzC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAE5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,KAAc,EAAE,MAAc;QACzD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACrD,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,eAAS;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;SAC9C,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;gBACnD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,eAAS;gBACd,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;aAC5C,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAA8C;QACtE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,gDAAgD;gBAChD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAS,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;CACF;AA5SD,kBA4SC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
/**
|
|
3
|
+
* Base Sepolia 地址
|
|
4
|
+
*/
|
|
5
|
+
export declare const BASE_SEPOLIA: {
|
|
6
|
+
UNISWAP_QUOTER_V2: Address;
|
|
7
|
+
UNISWAP_SWAP_ROUTER: Address;
|
|
8
|
+
WETH: Address;
|
|
9
|
+
USDC: Address;
|
|
10
|
+
AEL_ROUTER: Address;
|
|
11
|
+
AEL_SOLVER_REGISTRY: Address;
|
|
12
|
+
AEL_FEE_VAULT: Address;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Base Mainnet 地址
|
|
16
|
+
*/
|
|
17
|
+
export declare const BASE_MAINNET: {
|
|
18
|
+
UNISWAP_QUOTER_V2: Address;
|
|
19
|
+
UNISWAP_SWAP_ROUTER: Address;
|
|
20
|
+
AERODROME_ROUTER: Address;
|
|
21
|
+
AERODROME_FACTORY: Address;
|
|
22
|
+
WETH: Address;
|
|
23
|
+
USDC: Address;
|
|
24
|
+
USDbC: Address;
|
|
25
|
+
AERO: Address;
|
|
26
|
+
AEL_ROUTER: Address;
|
|
27
|
+
AEL_SOLVER_REGISTRY: Address;
|
|
28
|
+
AEL_FEE_VAULT: Address;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* ETH 零地址 (用于表示原生 ETH)
|
|
32
|
+
*/
|
|
33
|
+
export declare const ETH_ADDRESS: Address;
|
|
34
|
+
/**
|
|
35
|
+
* Chain IDs
|
|
36
|
+
*/
|
|
37
|
+
export declare const CHAIN_IDS: {
|
|
38
|
+
readonly BASE_MAINNET: 8453;
|
|
39
|
+
readonly BASE_SEPOLIA: 84532;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,YAAY;uBAE4C,OAAO;yBACL,OAAO;UAEtB,OAAO;UACP,OAAO;gBAED,OAAO;yBACE,OAAO;mBACb,OAAO;CACvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY;uBAE4C,OAAO;yBACL,OAAO;sBAEV,OAAO;uBACN,OAAO;UAEpB,OAAO;UACP,OAAO;WACN,OAAO;UACR,OAAO;gBAED,OAAO;yBACE,OAAO;mBACb,OAAO;CACvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAmD,OAAO,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,SAAS;;;CAGZ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CHAIN_IDS = exports.ETH_ADDRESS = exports.BASE_MAINNET = exports.BASE_SEPOLIA = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base Sepolia 地址
|
|
6
|
+
*/
|
|
7
|
+
exports.BASE_SEPOLIA = {
|
|
8
|
+
// Uniswap V3
|
|
9
|
+
UNISWAP_QUOTER_V2: '0xC5290058841028F1614F3A6F0F5816cAd0df5E27',
|
|
10
|
+
UNISWAP_SWAP_ROUTER: '0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4',
|
|
11
|
+
// 代币
|
|
12
|
+
WETH: '0x4200000000000000000000000000000000000006',
|
|
13
|
+
USDC: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
|
|
14
|
+
// AEL Contracts
|
|
15
|
+
AEL_ROUTER: '0x83A260939cF1326E9aa94eF6c814F2Fd876535e8',
|
|
16
|
+
AEL_SOLVER_REGISTRY: '0xC69A90904B44297af5fC7C554d7ca37612Ef01B3',
|
|
17
|
+
AEL_FEE_VAULT: '0xAec32AbD0233a124B7D0A17055fB40a50442E088',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Base Mainnet 地址
|
|
21
|
+
*/
|
|
22
|
+
exports.BASE_MAINNET = {
|
|
23
|
+
// Uniswap V3
|
|
24
|
+
UNISWAP_QUOTER_V2: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',
|
|
25
|
+
UNISWAP_SWAP_ROUTER: '0x2626664c2603336E57B271c5C0b26F421741e481',
|
|
26
|
+
// Aerodrome
|
|
27
|
+
AERODROME_ROUTER: '0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43',
|
|
28
|
+
AERODROME_FACTORY: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da',
|
|
29
|
+
// 代币
|
|
30
|
+
WETH: '0x4200000000000000000000000000000000000006',
|
|
31
|
+
USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // Native USDC
|
|
32
|
+
USDbC: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', // Bridged USDC
|
|
33
|
+
AERO: '0x940181a94A35A4569E4529A3CDfB74e38FD98631',
|
|
34
|
+
// AEL Contracts
|
|
35
|
+
AEL_ROUTER: '0x85977BD37d8100F81566A1c6815047f5557bCDCB',
|
|
36
|
+
AEL_SOLVER_REGISTRY: '0xd14D394631C32Ea35fFF8407157C6867bCc8E946',
|
|
37
|
+
AEL_FEE_VAULT: '0xF8E3646b03a83465D6DAE65edbF380C77feb5DE0',
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* ETH 零地址 (用于表示原生 ETH)
|
|
41
|
+
*/
|
|
42
|
+
exports.ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
43
|
+
/**
|
|
44
|
+
* Chain IDs
|
|
45
|
+
*/
|
|
46
|
+
exports.CHAIN_IDS = {
|
|
47
|
+
BASE_MAINNET: 8453,
|
|
48
|
+
BASE_SEPOLIA: 84532,
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,aAAa;IACb,iBAAiB,EAAE,4CAAuD;IAC1E,mBAAmB,EAAE,4CAAuD;IAC5E,KAAK;IACL,IAAI,EAAE,4CAAuD;IAC7D,IAAI,EAAE,4CAAuD;IAC7D,gBAAgB;IAChB,UAAU,EAAE,4CAAuD;IACnE,mBAAmB,EAAE,4CAAuD;IAC5E,aAAa,EAAE,4CAAuD;CACvE,CAAC;AAEF;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,aAAa;IACb,iBAAiB,EAAE,4CAAuD;IAC1E,mBAAmB,EAAE,4CAAuD;IAC5E,YAAY;IACZ,gBAAgB,EAAE,4CAAuD;IACzE,iBAAiB,EAAE,4CAAuD;IAC1E,KAAK;IACL,IAAI,EAAE,4CAAuD;IAC7D,IAAI,EAAE,4CAAuD,EAAE,cAAc;IAC7E,KAAK,EAAE,4CAAuD,EAAE,eAAe;IAC/E,IAAI,EAAE,4CAAuD;IAC7D,gBAAgB;IAChB,UAAU,EAAE,4CAAuD;IACnE,mBAAmB,EAAE,4CAAuD;IAC5E,aAAa,EAAE,4CAAuD;CACvE,CAAC;AAEF;;GAEG;AACU,QAAA,WAAW,GAAG,4CAAuD,CAAC;AAEnF;;GAEG;AACU,QAAA,SAAS,GAAG;IACvB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,KAAK;CACX,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AEL } from './ael';
|
|
2
|
+
export { IntentStatus } from './types';
|
|
3
|
+
export type { AELConfig, SwapParams, SwapResult, QuoteResult, IntentDetails } from './types';
|
|
4
|
+
export { ROUTER_ABI, ERC20_ABI, QUOTER_ABI } from './abi';
|
|
5
|
+
export { BASE_SEPOLIA, BASE_MAINNET, ETH_ADDRESS, CHAIN_IDS } from './constants';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|