@andrewkimjoseph/celina 0.2.15 → 0.2.17
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 +2 -2
- package/assets/logo.png +0 -0
- package/build/abis/aave-pool.d.ts +37 -0
- package/build/abis/aave-pool.js +26 -0
- package/build/abis/aave-pool.js.map +1 -0
- package/build/config/celina-tag.d.ts +1 -0
- package/build/config/celina-tag.js +3 -0
- package/build/config/celina-tag.js.map +1 -0
- package/build/services/aave.service.d.ts +4 -3
- package/build/services/aave.service.js +84 -62
- package/build/services/aave.service.js.map +1 -1
- package/build/services/mento-fx.service.d.ts +2 -1
- package/build/services/mento-fx.service.js +69 -22
- package/build/services/mento-fx.service.js.map +1 -1
- package/build/services/transaction.service.js +7 -7
- package/build/services/transaction.service.js.map +1 -1
- package/package.json +1 -2
- package/build/clients/aave-client.d.ts +0 -2
- package/build/clients/aave-client.js +0 -3
- package/build/clients/aave-client.js.map +0 -1
- package/build/clients/aave-send.d.ts +0 -7
- package/build/clients/aave-send.js +0 -49
- package/build/clients/aave-send.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/andrewkimjoseph/celina/main/assets/logo.png" alt="Celina logo — yellow C with profile silhouette on
|
|
2
|
+
<img src="https://raw.githubusercontent.com/andrewkimjoseph/celina/main/assets/logo.png" alt="Celina logo — yellow C with profile silhouette on black" width="160" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<h1 align="center">Celina — Celo MCP Server</h1>
|
|
@@ -55,7 +55,7 @@ openssl rsa -pubout -in private.pem -out public.pem
|
|
|
55
55
|
2. Render Dashboard → **New → Blueprint** → connect the repo
|
|
56
56
|
3. Set `WALLET_ENCRYPTION_PRIVATE_KEY` in the Render Environment tab (paste contents of `private.pem`)
|
|
57
57
|
4. (Optional) Add a custom domain in Render and set `ALLOWED_HOSTS` to that hostname (comma-separated if multiple)
|
|
58
|
-
5. Your MCP endpoint will be at
|
|
58
|
+
5. Your MCP endpoint will be at your Render URL + `/mcp`
|
|
59
59
|
|
|
60
60
|
> **Note:** Free Render services spin down after ~15 minutes of inactivity. Cold starts can take 30–60 seconds and may cause MCP client timeouts. Use a Starter plan for always-on hosting.
|
|
61
61
|
|
package/assets/logo.png
CHANGED
|
Binary file
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const aavePoolAbi: readonly [{
|
|
2
|
+
readonly type: "function";
|
|
3
|
+
readonly name: "supply";
|
|
4
|
+
readonly inputs: readonly [{
|
|
5
|
+
readonly name: "asset";
|
|
6
|
+
readonly type: "address";
|
|
7
|
+
}, {
|
|
8
|
+
readonly name: "amount";
|
|
9
|
+
readonly type: "uint256";
|
|
10
|
+
}, {
|
|
11
|
+
readonly name: "onBehalfOf";
|
|
12
|
+
readonly type: "address";
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "referralCode";
|
|
15
|
+
readonly type: "uint16";
|
|
16
|
+
}];
|
|
17
|
+
readonly outputs: readonly [];
|
|
18
|
+
readonly stateMutability: "nonpayable";
|
|
19
|
+
}, {
|
|
20
|
+
readonly type: "function";
|
|
21
|
+
readonly name: "withdraw";
|
|
22
|
+
readonly inputs: readonly [{
|
|
23
|
+
readonly name: "asset";
|
|
24
|
+
readonly type: "address";
|
|
25
|
+
}, {
|
|
26
|
+
readonly name: "amount";
|
|
27
|
+
readonly type: "uint256";
|
|
28
|
+
}, {
|
|
29
|
+
readonly name: "to";
|
|
30
|
+
readonly type: "address";
|
|
31
|
+
}];
|
|
32
|
+
readonly outputs: readonly [{
|
|
33
|
+
readonly name: "";
|
|
34
|
+
readonly type: "uint256";
|
|
35
|
+
}];
|
|
36
|
+
readonly stateMutability: "nonpayable";
|
|
37
|
+
}];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const aavePoolAbi = [
|
|
2
|
+
{
|
|
3
|
+
type: "function",
|
|
4
|
+
name: "supply",
|
|
5
|
+
inputs: [
|
|
6
|
+
{ name: "asset", type: "address" },
|
|
7
|
+
{ name: "amount", type: "uint256" },
|
|
8
|
+
{ name: "onBehalfOf", type: "address" },
|
|
9
|
+
{ name: "referralCode", type: "uint16" },
|
|
10
|
+
],
|
|
11
|
+
outputs: [],
|
|
12
|
+
stateMutability: "nonpayable",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: "function",
|
|
16
|
+
name: "withdraw",
|
|
17
|
+
inputs: [
|
|
18
|
+
{ name: "asset", type: "address" },
|
|
19
|
+
{ name: "amount", type: "uint256" },
|
|
20
|
+
{ name: "to", type: "address" },
|
|
21
|
+
],
|
|
22
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
23
|
+
stateMutability: "nonpayable",
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
//# sourceMappingURL=aave-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aave-pool.js","sourceRoot":"","sources":["../../src/abis/aave-pool.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzC;QACD,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;SAChC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CELINA_DATA_SUFFIX: `0x${string}`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"celina-tag.js","sourceRoot":"","sources":["../../src/config/celina-tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -4,15 +4,16 @@ export declare class AaveService {
|
|
|
4
4
|
private readonly tokenService;
|
|
5
5
|
constructor(clientFactory: CeloClientFactory);
|
|
6
6
|
private resolveClients;
|
|
7
|
-
private
|
|
7
|
+
private requireWallet;
|
|
8
8
|
private assertUsdtBalance;
|
|
9
9
|
private assertSuppliedBalance;
|
|
10
|
+
private ensureUsdtAllowance;
|
|
10
11
|
supplyUsdt(amount: string, encryptedPrivateKey?: string): Promise<{
|
|
11
12
|
from: `0x${string}`;
|
|
12
13
|
amount: string;
|
|
13
14
|
token: string;
|
|
14
15
|
market: "0x3E59A31363E2ad014dcbc521c4a0d5757d9f3402";
|
|
15
|
-
hash:
|
|
16
|
+
hash: `0x${string}`;
|
|
16
17
|
approvalHash: `0x${string}` | undefined;
|
|
17
18
|
operation: string;
|
|
18
19
|
}>;
|
|
@@ -21,7 +22,7 @@ export declare class AaveService {
|
|
|
21
22
|
amount: string;
|
|
22
23
|
token: string;
|
|
23
24
|
market: "0x3E59A31363E2ad014dcbc521c4a0d5757d9f3402";
|
|
24
|
-
hash:
|
|
25
|
+
hash: `0x${string}`;
|
|
25
26
|
operation: string;
|
|
26
27
|
withdrawMax: boolean;
|
|
27
28
|
}>;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { supply, withdraw } from "@aave/client/actions";
|
|
2
|
-
import { bigDecimal, chainId, evmAddress } from "@aave/types";
|
|
3
1
|
import { erc20Abi } from "viem";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { aavePoolAbi } from "../abis/aave-pool.js";
|
|
3
|
+
import { AAVE_POOL, AAVE_USDT, AAVE_USDT_A_TOKEN } from "../config/aave.js";
|
|
4
|
+
import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
|
|
7
5
|
import { decryptPrivateKey } from "../crypto/wallet-key-crypto.js";
|
|
8
6
|
import { TokenService } from "./token.service.js";
|
|
9
7
|
export class AaveService {
|
|
@@ -24,12 +22,20 @@ export class AaveService {
|
|
|
24
22
|
}
|
|
25
23
|
return clients;
|
|
26
24
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
throw new Error(
|
|
25
|
+
requireWallet(clients) {
|
|
26
|
+
const { public: publicClient, wallet, accountAddress: from } = clients;
|
|
27
|
+
if (!wallet || !from) {
|
|
28
|
+
throw new Error("Wallet client unavailable. Provide encryptedPrivateKey or set CELO_PRIVATE_KEY.");
|
|
29
|
+
}
|
|
30
|
+
const account = wallet.account;
|
|
31
|
+
if (!account) {
|
|
32
|
+
throw new Error("Wallet account unavailable.");
|
|
31
33
|
}
|
|
32
|
-
|
|
34
|
+
const chain = publicClient.chain;
|
|
35
|
+
if (!chain) {
|
|
36
|
+
throw new Error("Chain configuration missing.");
|
|
37
|
+
}
|
|
38
|
+
return { publicClient, wallet, from, account, chain };
|
|
33
39
|
}
|
|
34
40
|
async assertUsdtBalance(publicClient, owner, amount) {
|
|
35
41
|
const usdt = this.tokenService.resolveToken("USDT");
|
|
@@ -57,85 +63,101 @@ export class AaveService {
|
|
|
57
63
|
throw new Error(`Insufficient Aave USDT supply balance. Required ${amount} USDT, available ${balance.toString()} raw aToken units.`);
|
|
58
64
|
}
|
|
59
65
|
}
|
|
60
|
-
async
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
async ensureUsdtAllowance(publicClient, wallet, from, account, chain, amountWei) {
|
|
67
|
+
const allowance = await publicClient.readContract({
|
|
68
|
+
address: AAVE_USDT,
|
|
69
|
+
abi: erc20Abi,
|
|
70
|
+
functionName: "allowance",
|
|
71
|
+
args: [from, AAVE_POOL],
|
|
72
|
+
});
|
|
73
|
+
if (allowance >= amountWei) {
|
|
74
|
+
return undefined;
|
|
64
75
|
}
|
|
65
|
-
await
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
},
|
|
74
|
-
sender: evmAddress(from),
|
|
75
|
-
chainId: chainId(AAVE_CHAIN_ID),
|
|
76
|
+
const approvalHash = await wallet.writeContract({
|
|
77
|
+
chain,
|
|
78
|
+
account,
|
|
79
|
+
address: AAVE_USDT,
|
|
80
|
+
abi: erc20Abi,
|
|
81
|
+
functionName: "approve",
|
|
82
|
+
args: [AAVE_POOL, amountWei],
|
|
83
|
+
dataSuffix: CELINA_DATA_SUFFIX,
|
|
76
84
|
});
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash: approvalHash });
|
|
86
|
+
if (receipt.status === "reverted") {
|
|
87
|
+
throw new Error(`USDT approval reverted: ${approvalHash}`);
|
|
79
88
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
89
|
+
return approvalHash;
|
|
90
|
+
}
|
|
91
|
+
async supplyUsdt(amount, encryptedPrivateKey) {
|
|
92
|
+
const clients = this.resolveClients(encryptedPrivateKey);
|
|
93
|
+
const { publicClient, wallet, from, account, chain } = this.requireWallet(clients);
|
|
94
|
+
await this.assertUsdtBalance(publicClient, from, amount);
|
|
95
|
+
const usdt = this.tokenService.resolveToken("USDT");
|
|
96
|
+
const amountWei = this.tokenService.parseAmount(amount, usdt.decimals);
|
|
97
|
+
const approvalHash = await this.ensureUsdtAllowance(publicClient, wallet, from, account, chain, amountWei);
|
|
98
|
+
const hash = await wallet.writeContract({
|
|
99
|
+
chain,
|
|
100
|
+
account,
|
|
101
|
+
address: AAVE_POOL,
|
|
102
|
+
abi: aavePoolAbi,
|
|
103
|
+
functionName: "supply",
|
|
104
|
+
args: [AAVE_USDT, amountWei, from, 0],
|
|
105
|
+
dataSuffix: CELINA_DATA_SUFFIX,
|
|
106
|
+
});
|
|
107
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
108
|
+
if (receipt.status === "reverted") {
|
|
109
|
+
throw new Error(`Aave supply reverted: ${hash}`);
|
|
84
110
|
}
|
|
85
111
|
return {
|
|
86
112
|
from,
|
|
87
113
|
amount,
|
|
88
114
|
token: "USDT",
|
|
89
115
|
market: AAVE_POOL,
|
|
90
|
-
hash
|
|
116
|
+
hash,
|
|
91
117
|
approvalHash,
|
|
92
118
|
operation: "SUPPLY",
|
|
93
119
|
};
|
|
94
120
|
}
|
|
95
121
|
async withdrawUsdt(amount, encryptedPrivateKey, withdrawMax) {
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
throw new Error("Wallet client unavailable. Provide encryptedPrivateKey or set CELO_PRIVATE_KEY.");
|
|
99
|
-
}
|
|
122
|
+
const clients = this.resolveClients(encryptedPrivateKey);
|
|
123
|
+
const { publicClient, wallet, from, account, chain } = this.requireWallet(clients);
|
|
100
124
|
if (!withdrawMax && !amount) {
|
|
101
125
|
throw new Error("Provide amount or set withdrawMax to true.");
|
|
102
126
|
}
|
|
103
127
|
if (!withdrawMax && amount) {
|
|
104
128
|
await this.assertSuppliedBalance(publicClient, from, amount);
|
|
105
129
|
}
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
const planResult = await withdraw(aaveClient, {
|
|
120
|
-
market: evmAddress(AAVE_POOL),
|
|
121
|
-
amount: withdrawAmount,
|
|
122
|
-
sender: evmAddress(from),
|
|
123
|
-
chainId: chainId(AAVE_CHAIN_ID),
|
|
124
|
-
});
|
|
125
|
-
if (planResult.isErr()) {
|
|
126
|
-
this.formatAaveError(planResult.error);
|
|
130
|
+
const usdt = this.tokenService.resolveToken("USDT");
|
|
131
|
+
const amountWei = withdrawMax
|
|
132
|
+
? await publicClient.readContract({
|
|
133
|
+
address: AAVE_USDT_A_TOKEN,
|
|
134
|
+
abi: erc20Abi,
|
|
135
|
+
functionName: "balanceOf",
|
|
136
|
+
args: [from],
|
|
137
|
+
})
|
|
138
|
+
: this.tokenService.parseAmount(amount, usdt.decimals);
|
|
139
|
+
if (amountWei === 0n) {
|
|
140
|
+
throw new Error("No supplied USDT balance to withdraw.");
|
|
127
141
|
}
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
142
|
+
const hash = await wallet.writeContract({
|
|
143
|
+
chain,
|
|
144
|
+
account,
|
|
145
|
+
address: AAVE_POOL,
|
|
146
|
+
abi: aavePoolAbi,
|
|
147
|
+
functionName: "withdraw",
|
|
148
|
+
args: [AAVE_USDT, amountWei, from],
|
|
149
|
+
dataSuffix: CELINA_DATA_SUFFIX,
|
|
150
|
+
});
|
|
151
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
152
|
+
if (receipt.status === "reverted") {
|
|
153
|
+
throw new Error(`Aave withdraw reverted: ${hash}`);
|
|
132
154
|
}
|
|
133
155
|
return {
|
|
134
156
|
from,
|
|
135
157
|
amount: withdrawMax ? "max" : amount,
|
|
136
158
|
token: "USDT",
|
|
137
159
|
market: AAVE_POOL,
|
|
138
|
-
hash
|
|
160
|
+
hash,
|
|
139
161
|
operation: "WITHDRAW",
|
|
140
162
|
withdrawMax: Boolean(withdrawMax),
|
|
141
163
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aave.service.js","sourceRoot":"","sources":["../../src/services/aave.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"aave.service.js","sourceRoot":"","sources":["../../src/services/aave.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,9 @@ export declare class MentoFxService {
|
|
|
14
14
|
private resolveMentoPair;
|
|
15
15
|
private fxOptions;
|
|
16
16
|
private formatFxError;
|
|
17
|
-
private
|
|
17
|
+
private toSendParams;
|
|
18
18
|
private estimateCallGas;
|
|
19
|
+
private executeCall;
|
|
19
20
|
private baseQuoteFields;
|
|
20
21
|
getFxQuote(tokenIn: string, tokenOut: string, amount: string): Promise<{
|
|
21
22
|
protocol: "mento_fx";
|
|
@@ -1,10 +1,33 @@
|
|
|
1
|
+
import { concat, decodeFunctionData, erc20Abi, formatUnits } from "viem";
|
|
1
2
|
import { ChainId, deadlineFromMinutes, Mento, RouteNotFoundError, FXMarketClosedError, } from "../clients/mento-sdk.js";
|
|
2
|
-
import {
|
|
3
|
+
import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
|
|
3
4
|
import { toMentoTokenAddress } from "../config/chains.js";
|
|
4
5
|
import { decryptPrivateKey } from "../crypto/wallet-key-crypto.js";
|
|
5
6
|
import { TokenService } from "./token.service.js";
|
|
6
7
|
const DEFAULT_SLIPPAGE = 0.5;
|
|
7
8
|
const DEFAULT_DEADLINE_MINUTES = 5;
|
|
9
|
+
function parseErc20Approve(params) {
|
|
10
|
+
try {
|
|
11
|
+
const decoded = decodeFunctionData({
|
|
12
|
+
abi: erc20Abi,
|
|
13
|
+
data: params.data,
|
|
14
|
+
});
|
|
15
|
+
if (decoded.functionName !== "approve") {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
token: params.to,
|
|
20
|
+
spender: decoded.args[0],
|
|
21
|
+
amount: decoded.args[1],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function taggedCalldata(data) {
|
|
29
|
+
return concat([data, CELINA_DATA_SUFFIX]);
|
|
30
|
+
}
|
|
8
31
|
export class MentoFxService {
|
|
9
32
|
clientFactory;
|
|
10
33
|
tokenService;
|
|
@@ -57,20 +80,60 @@ export class MentoFxService {
|
|
|
57
80
|
}
|
|
58
81
|
throw error instanceof Error ? error : new Error(String(error));
|
|
59
82
|
}
|
|
60
|
-
|
|
83
|
+
toSendParams(params) {
|
|
61
84
|
return {
|
|
62
85
|
to: params.to,
|
|
63
|
-
data: params.data,
|
|
86
|
+
data: taggedCalldata(params.data),
|
|
64
87
|
value: BigInt(params.value),
|
|
65
88
|
};
|
|
66
89
|
}
|
|
67
90
|
async estimateCallGas(client, from, params) {
|
|
91
|
+
const approve = parseErc20Approve(params);
|
|
92
|
+
if (approve) {
|
|
93
|
+
const gas = await client.estimateContractGas({
|
|
94
|
+
account: from,
|
|
95
|
+
address: approve.token,
|
|
96
|
+
abi: erc20Abi,
|
|
97
|
+
functionName: "approve",
|
|
98
|
+
args: [approve.spender, approve.amount],
|
|
99
|
+
});
|
|
100
|
+
return gas.toString();
|
|
101
|
+
}
|
|
68
102
|
const gas = await client.estimateGas({
|
|
69
103
|
account: from,
|
|
70
|
-
|
|
104
|
+
to: params.to,
|
|
105
|
+
data: params.data,
|
|
106
|
+
value: BigInt(params.value),
|
|
71
107
|
});
|
|
72
108
|
return gas.toString();
|
|
73
109
|
}
|
|
110
|
+
async executeCall(wallet, publicClient, params) {
|
|
111
|
+
const account = wallet.account;
|
|
112
|
+
if (!account) {
|
|
113
|
+
throw new Error("Wallet account unavailable.");
|
|
114
|
+
}
|
|
115
|
+
const chain = publicClient.chain;
|
|
116
|
+
if (!chain) {
|
|
117
|
+
throw new Error("Chain configuration missing.");
|
|
118
|
+
}
|
|
119
|
+
const approve = parseErc20Approve(params);
|
|
120
|
+
if (approve) {
|
|
121
|
+
return wallet.writeContract({
|
|
122
|
+
chain,
|
|
123
|
+
account,
|
|
124
|
+
address: approve.token,
|
|
125
|
+
abi: erc20Abi,
|
|
126
|
+
functionName: "approve",
|
|
127
|
+
args: [approve.spender, approve.amount],
|
|
128
|
+
dataSuffix: CELINA_DATA_SUFFIX,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return wallet.sendTransaction({
|
|
132
|
+
chain,
|
|
133
|
+
account,
|
|
134
|
+
...this.toSendParams(params),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
74
137
|
baseQuoteFields(resolvedIn, resolvedOut, amount, expectedOutWei, routeHops) {
|
|
75
138
|
return {
|
|
76
139
|
protocol: "mento_fx",
|
|
@@ -138,14 +201,6 @@ export class MentoFxService {
|
|
|
138
201
|
if (!wallet || !from) {
|
|
139
202
|
throw new Error("Wallet client unavailable. Provide encryptedPrivateKey or set CELO_PRIVATE_KEY.");
|
|
140
203
|
}
|
|
141
|
-
const account = wallet.account;
|
|
142
|
-
if (!account) {
|
|
143
|
-
throw new Error("Wallet account unavailable.");
|
|
144
|
-
}
|
|
145
|
-
const chain = client.chain;
|
|
146
|
-
if (!chain) {
|
|
147
|
-
throw new Error("Chain configuration missing");
|
|
148
|
-
}
|
|
149
204
|
const { resolvedIn, resolvedOut, mentoIn, mentoOut } = this.resolveMentoPair(tokenIn, tokenOut);
|
|
150
205
|
const recipient = params?.recipient ?? from;
|
|
151
206
|
const amountInWei = this.tokenService.parseAmount(amount, resolvedIn.decimals);
|
|
@@ -155,18 +210,10 @@ export class MentoFxService {
|
|
|
155
210
|
const { approval, swap } = await mento.swap.buildSwapTransaction(mentoIn, mentoOut, amountInWei, recipient, from, { slippageTolerance, deadline });
|
|
156
211
|
let approvalHash;
|
|
157
212
|
if (approval) {
|
|
158
|
-
approvalHash = await
|
|
159
|
-
chain,
|
|
160
|
-
account,
|
|
161
|
-
...this.toGasParams(approval),
|
|
162
|
-
});
|
|
213
|
+
approvalHash = await this.executeCall(wallet, client, approval);
|
|
163
214
|
await client.waitForTransactionReceipt({ hash: approvalHash });
|
|
164
215
|
}
|
|
165
|
-
const hash = await wallet.
|
|
166
|
-
chain,
|
|
167
|
-
account,
|
|
168
|
-
...this.toGasParams(swap.params),
|
|
169
|
-
});
|
|
216
|
+
const hash = await this.executeCall(wallet, client, swap.params);
|
|
170
217
|
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
171
218
|
return {
|
|
172
219
|
...this.baseQuoteFields(resolvedIn, resolvedOut, amount, swap.expectedAmountOut, swap.route.path.length),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mento-fx.service.js","sourceRoot":"","sources":["../../src/services/mento-fx.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,KAAK,EACL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"mento-fx.service.js","sourceRoot":"","sources":["../../src/services/mento-fx.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { erc20Abi, parseEther } from "viem";
|
|
2
|
+
import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
|
|
2
3
|
import { decryptPrivateKey } from "../crypto/wallet-key-crypto.js";
|
|
3
4
|
import { TokenService } from "./token.service.js";
|
|
4
5
|
export class TransactionService {
|
|
@@ -42,16 +43,13 @@ export class TransactionService {
|
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
45
|
const tokenAmount = this.tokenService.parseAmount(amount, resolved.decimals);
|
|
45
|
-
const
|
|
46
|
+
const gas = await client.estimateContractGas({
|
|
47
|
+
account: from,
|
|
48
|
+
address: resolved.address,
|
|
46
49
|
abi: erc20Abi,
|
|
47
50
|
functionName: "transfer",
|
|
48
51
|
args: [to, tokenAmount],
|
|
49
52
|
});
|
|
50
|
-
const gas = await client.estimateGas({
|
|
51
|
-
account: from,
|
|
52
|
-
to: resolved.address,
|
|
53
|
-
data,
|
|
54
|
-
});
|
|
55
53
|
return {
|
|
56
54
|
network: "mainnet",
|
|
57
55
|
from,
|
|
@@ -81,6 +79,7 @@ export class TransactionService {
|
|
|
81
79
|
account,
|
|
82
80
|
to,
|
|
83
81
|
value: parseEther(amount),
|
|
82
|
+
data: CELINA_DATA_SUFFIX,
|
|
84
83
|
});
|
|
85
84
|
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
86
85
|
return {
|
|
@@ -101,6 +100,7 @@ export class TransactionService {
|
|
|
101
100
|
abi: erc20Abi,
|
|
102
101
|
functionName: "transfer",
|
|
103
102
|
args: [to, tokenAmount],
|
|
103
|
+
dataSuffix: CELINA_DATA_SUFFIX,
|
|
104
104
|
});
|
|
105
105
|
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
106
106
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,kBAAkB;IAGA;IAFZ,YAAY,CAAe;IAE5C,YAA6B,aAAgC;QAAhC,kBAAa,GAAb,aAAa,CAAmB;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc,CAAC,mBAA4B;QACjD,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,2IAA2I,CAC5I,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,EAAiB,EACjB,KAAa,EACb,MAAc,EACd,mBAA4B;QAE5B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAClE,mBAAmB,CACpB,CAAC;QAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;gBACnC,OAAO,EAAE,IAAI;gBACb,EAAE;gBACF,KAAK;aACN,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,IAAI;gBACJ,EAAE;gBACF,KAAK,EAAE,QAAQ,CAAC,MAAM;gBACtB,MAAM;gBACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;aACpB,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;YAC3C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC;SACxB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,IAAI;YACJ,EAAE;YACF,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,MAAM;YACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,EAAiB,EACjB,KAAa,EACb,MAAc,EACd,mBAA4B;QAE5B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAC1E,mBAAmB,CACpB,CAAC;QAEF,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;gBACxC,KAAK;gBACL,OAAO;gBACP,EAAE;gBACF,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;gBACzB,IAAI,EAAE,kBAAkB;aACzB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,IAAI;gBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI;gBACJ,EAAE;gBACF,KAAK,EAAE,QAAQ,CAAC,MAAM;gBACtB,MAAM;aACP,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACtC,KAAK;YACL,OAAO;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC;YACvB,UAAU,EAAE,kBAAkB;SAC/B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI;YACJ,EAAE;YACF,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewkimjoseph/celina",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17",
|
|
4
4
|
"description": "Celina — MCP server for Celo mainnet. Balances, transfers, and chain reads for LLM agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|
|
@@ -41,7 +41,6 @@
|
|
|
41
41
|
"author": "Andrew Kim Joseph",
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@aave/client": "^0.9.3",
|
|
45
44
|
"@mento-protocol/mento-sdk": "^3.2.8",
|
|
46
45
|
"@modelcontextprotocol/sdk": "^1.22.0",
|
|
47
46
|
"dotenv": "^17.4.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aave-client.js","sourceRoot":"","sources":["../../src/clients/aave-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { TransactionExecutionResult } from "@aave/client";
|
|
2
|
-
import type { ExecutionPlan } from "@aave/graphql";
|
|
3
|
-
import type { PublicClient, WalletClient } from "viem";
|
|
4
|
-
export declare function sendExecutionPlan(wallet: WalletClient, publicClient: PublicClient, plan: ExecutionPlan): Promise<{
|
|
5
|
-
result: TransactionExecutionResult;
|
|
6
|
-
approvalHash?: `0x${string}`;
|
|
7
|
-
}>;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { txHash } from "@aave/types";
|
|
2
|
-
function toTxParams(request) {
|
|
3
|
-
return {
|
|
4
|
-
to: request.to,
|
|
5
|
-
data: request.data,
|
|
6
|
-
value: BigInt(request.value),
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
async function sendTransactionRequest(wallet, publicClient, request) {
|
|
10
|
-
const account = wallet.account;
|
|
11
|
-
if (!account) {
|
|
12
|
-
throw new Error("Wallet account unavailable.");
|
|
13
|
-
}
|
|
14
|
-
const chain = publicClient.chain;
|
|
15
|
-
if (!chain) {
|
|
16
|
-
throw new Error("Chain configuration missing.");
|
|
17
|
-
}
|
|
18
|
-
const hash = await wallet.sendTransaction({
|
|
19
|
-
chain,
|
|
20
|
-
account,
|
|
21
|
-
...toTxParams(request),
|
|
22
|
-
});
|
|
23
|
-
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
24
|
-
if (receipt.status === "reverted") {
|
|
25
|
-
throw new Error(`Transaction reverted: ${hash}`);
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
txHash: txHash(hash),
|
|
29
|
-
operation: request.operation ?? null,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export async function sendExecutionPlan(wallet, publicClient, plan) {
|
|
33
|
-
switch (plan.__typename) {
|
|
34
|
-
case "InsufficientBalanceError":
|
|
35
|
-
throw new Error(`Insufficient balance: required ${plan.required.value}, available ${plan.available.value}.`);
|
|
36
|
-
case "TransactionRequest": {
|
|
37
|
-
const result = await sendTransactionRequest(wallet, publicClient, plan);
|
|
38
|
-
return { result };
|
|
39
|
-
}
|
|
40
|
-
case "ApprovalRequired": {
|
|
41
|
-
const approval = await sendTransactionRequest(wallet, publicClient, plan.approval);
|
|
42
|
-
const result = await sendTransactionRequest(wallet, publicClient, plan.originalTransaction);
|
|
43
|
-
return { result, approvalHash: approval.txHash };
|
|
44
|
-
}
|
|
45
|
-
default:
|
|
46
|
-
throw new Error(`Unknown execution plan: ${plan.__typename}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=aave-send.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aave-send.js","sourceRoot":"","sources":["../../src/clients/aave-send.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,SAAS,UAAU,CAAC,OAA2B;IAC7C,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAmB;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAqB;QACnC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAoB,EACpB,YAA0B,EAC1B,OAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;QACxC,KAAK;QACL,OAAO;QACP,GAAG,UAAU,CAAC,OAAO,CAAC;KACvB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAoB,EACpB,YAA0B,EAC1B,IAAmB;IAEnB,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,KAAK,0BAA0B;YAC7B,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,CAAC,QAAQ,CAAC,KAAK,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAC5F,CAAC;QACJ,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;YACxE,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,MAAM,EACN,YAAY,EACZ,IAAI,CAAC,QAAQ,CACd,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,MAAM,EACN,YAAY,EACZ,IAAI,CAAC,mBAAmB,CACzB,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAuB,EAAE,CAAC;QACpE,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CACb,2BAA4B,IAA+B,CAAC,UAAU,EAAE,CACzE,CAAC;IACN,CAAC;AACH,CAAC"}
|