@andrewkimjoseph/celina-sdk 0.6.0 → 0.7.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 +1 -1
- package/build/abis/gooddollar-broker.d.ts +77 -0
- package/build/abis/gooddollar-broker.js +44 -0
- package/build/abis/gooddollar-broker.js.map +1 -0
- package/build/analytics/mcp-tool-events.js +2 -0
- package/build/analytics/mcp-tool-events.js.map +1 -1
- package/build/config/gooddollar.d.ts +12 -0
- package/build/config/gooddollar.js +19 -0
- package/build/config/gooddollar.js.map +1 -1
- package/build/index.d.ts +3 -2
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/services/ens.service.d.ts +1 -1
- package/build/services/ens.service.js +1 -1
- package/build/services/gooddollar.service.d.ts +32 -1
- package/build/services/gooddollar.service.js +214 -4
- package/build/services/gooddollar.service.js.map +1 -1
- package/build/services/transaction.service.d.ts +1 -1
- package/build/services/transaction.service.js +1 -1
- package/build/tools/domains/browser.js +3 -3
- package/build/tools/domains/browser.js.map +1 -1
- package/build/tools/domains/gooddollar.js +31 -1
- package/build/tools/domains/gooddollar.js.map +1 -1
- package/build/tools/schemas/common.d.ts +39 -0
- package/build/tools/schemas/common.js +11 -1
- package/build/tools/schemas/common.js.map +1 -1
- package/build/tools/swap-routing.d.ts +2 -2
- package/build/tools/swap-routing.js +68 -7
- package/build/tools/swap-routing.js.map +1 -1
- package/build/types/prepared.d.ts +1 -1
- package/package.json +1 -1
- package/tests/catalog/domains/defi.ts +135 -0
package/README.md
CHANGED
|
@@ -59,7 +59,7 @@ const celina = createCelinaClient();
|
|
|
59
59
|
await celina.token.getStablecoinBalances("0xYourAddress");
|
|
60
60
|
|
|
61
61
|
const flow = await celina.transaction.prepareSend("0xFrom", "0xTo", "USDm", "10");
|
|
62
|
-
// flow.steps → pass to wagmi
|
|
62
|
+
// flow.steps → pass to wagmi sendTransactionAsync (calldata includes CELINA attribution suffix)
|
|
63
63
|
|
|
64
64
|
// Carbon DeFi (reads + unsigned strategy/trade prep)
|
|
65
65
|
const strategies = await celina.carbon.getStrategies("0xYourAddress");
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** GoodDollar MentoBroker on Celo — reserve swap quotes and execution. */
|
|
2
|
+
export declare const goodDollarBrokerAbi: readonly [{
|
|
3
|
+
readonly type: "function";
|
|
4
|
+
readonly name: "getAmountOut";
|
|
5
|
+
readonly inputs: readonly [{
|
|
6
|
+
readonly name: "exchangeProvider";
|
|
7
|
+
readonly type: "address";
|
|
8
|
+
}, {
|
|
9
|
+
readonly name: "exchangeId";
|
|
10
|
+
readonly type: "bytes32";
|
|
11
|
+
}, {
|
|
12
|
+
readonly name: "tokenIn";
|
|
13
|
+
readonly type: "address";
|
|
14
|
+
}, {
|
|
15
|
+
readonly name: "tokenOut";
|
|
16
|
+
readonly type: "address";
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "amountIn";
|
|
19
|
+
readonly type: "uint256";
|
|
20
|
+
}];
|
|
21
|
+
readonly outputs: readonly [{
|
|
22
|
+
readonly name: "";
|
|
23
|
+
readonly type: "uint256";
|
|
24
|
+
}];
|
|
25
|
+
readonly stateMutability: "view";
|
|
26
|
+
}, {
|
|
27
|
+
readonly type: "function";
|
|
28
|
+
readonly name: "getAmountIn";
|
|
29
|
+
readonly inputs: readonly [{
|
|
30
|
+
readonly name: "exchangeProvider";
|
|
31
|
+
readonly type: "address";
|
|
32
|
+
}, {
|
|
33
|
+
readonly name: "exchangeId";
|
|
34
|
+
readonly type: "bytes32";
|
|
35
|
+
}, {
|
|
36
|
+
readonly name: "tokenIn";
|
|
37
|
+
readonly type: "address";
|
|
38
|
+
}, {
|
|
39
|
+
readonly name: "tokenOut";
|
|
40
|
+
readonly type: "address";
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "amountOut";
|
|
43
|
+
readonly type: "uint256";
|
|
44
|
+
}];
|
|
45
|
+
readonly outputs: readonly [{
|
|
46
|
+
readonly name: "";
|
|
47
|
+
readonly type: "uint256";
|
|
48
|
+
}];
|
|
49
|
+
readonly stateMutability: "view";
|
|
50
|
+
}, {
|
|
51
|
+
readonly type: "function";
|
|
52
|
+
readonly name: "swapIn";
|
|
53
|
+
readonly inputs: readonly [{
|
|
54
|
+
readonly name: "exchangeProvider";
|
|
55
|
+
readonly type: "address";
|
|
56
|
+
}, {
|
|
57
|
+
readonly name: "exchangeId";
|
|
58
|
+
readonly type: "bytes32";
|
|
59
|
+
}, {
|
|
60
|
+
readonly name: "tokenIn";
|
|
61
|
+
readonly type: "address";
|
|
62
|
+
}, {
|
|
63
|
+
readonly name: "tokenOut";
|
|
64
|
+
readonly type: "address";
|
|
65
|
+
}, {
|
|
66
|
+
readonly name: "amountIn";
|
|
67
|
+
readonly type: "uint256";
|
|
68
|
+
}, {
|
|
69
|
+
readonly name: "amountOutMin";
|
|
70
|
+
readonly type: "uint256";
|
|
71
|
+
}];
|
|
72
|
+
readonly outputs: readonly [{
|
|
73
|
+
readonly name: "amountOut";
|
|
74
|
+
readonly type: "uint256";
|
|
75
|
+
}];
|
|
76
|
+
readonly stateMutability: "nonpayable";
|
|
77
|
+
}];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** GoodDollar MentoBroker on Celo — reserve swap quotes and execution. */
|
|
2
|
+
export const goodDollarBrokerAbi = [
|
|
3
|
+
{
|
|
4
|
+
type: "function",
|
|
5
|
+
name: "getAmountOut",
|
|
6
|
+
inputs: [
|
|
7
|
+
{ name: "exchangeProvider", type: "address" },
|
|
8
|
+
{ name: "exchangeId", type: "bytes32" },
|
|
9
|
+
{ name: "tokenIn", type: "address" },
|
|
10
|
+
{ name: "tokenOut", type: "address" },
|
|
11
|
+
{ name: "amountIn", type: "uint256" },
|
|
12
|
+
],
|
|
13
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
14
|
+
stateMutability: "view",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: "function",
|
|
18
|
+
name: "getAmountIn",
|
|
19
|
+
inputs: [
|
|
20
|
+
{ name: "exchangeProvider", type: "address" },
|
|
21
|
+
{ name: "exchangeId", type: "bytes32" },
|
|
22
|
+
{ name: "tokenIn", type: "address" },
|
|
23
|
+
{ name: "tokenOut", type: "address" },
|
|
24
|
+
{ name: "amountOut", type: "uint256" },
|
|
25
|
+
],
|
|
26
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
27
|
+
stateMutability: "view",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
type: "function",
|
|
31
|
+
name: "swapIn",
|
|
32
|
+
inputs: [
|
|
33
|
+
{ name: "exchangeProvider", type: "address" },
|
|
34
|
+
{ name: "exchangeId", type: "bytes32" },
|
|
35
|
+
{ name: "tokenIn", type: "address" },
|
|
36
|
+
{ name: "tokenOut", type: "address" },
|
|
37
|
+
{ name: "amountIn", type: "uint256" },
|
|
38
|
+
{ name: "amountOutMin", type: "uint256" },
|
|
39
|
+
],
|
|
40
|
+
outputs: [{ name: "amountOut", type: "uint256" }],
|
|
41
|
+
stateMutability: "nonpayable",
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
//# sourceMappingURL=gooddollar-broker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gooddollar-broker.js","sourceRoot":"","sources":["../../src/abis/gooddollar-broker.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;SACtC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;SACvC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;SAC1C;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjD,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC"}
|
|
@@ -25,6 +25,8 @@ export const MCP_TOOL_EVENT_BY_SDK_METHOD = {
|
|
|
25
25
|
"contract.callFunction": "call_contract_function",
|
|
26
26
|
"contract.estimateGas": "estimate_contract_gas",
|
|
27
27
|
"ens.resolveEns": "resolve_ens",
|
|
28
|
+
"gooddollar.getReserveQuote.buy": "get_gooddollar_reserve_quote",
|
|
29
|
+
"gooddollar.getReserveQuote.sell": "get_gooddollar_reserve_quote",
|
|
28
30
|
"gooddollar.getUbiClaimEligibility": "get_gooddollar_ubi_entitlement",
|
|
29
31
|
"gooddollar.getWhitelistingInfo": "get_gooddollar_whitelisting_info",
|
|
30
32
|
"governance.getGovernanceProposals": "get_governance_proposals",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,oBAAoB,EAAE,aAAa;IACnC,0BAA0B,EAAE,oBAAoB;IAChD,qBAAqB,EAAE,WAAW;IAClC,qCAAqC,EAAE,WAAW;IAClD,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,oBAAoB,EAAE,qBAAqB;IAC3C,0BAA0B,EAAE,2BAA2B;IACvD,oBAAoB,EAAE,qBAAqB;IAC3C,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,2BAA2B;IACtD,sBAAsB,EAAE,uBAAuB;IAC/C,oBAAoB,EAAE,qBAAqB;IAC3C,sBAAsB,EAAE,wBAAwB;IAChD,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,qBAAqB,EAAE,sBAAsB;IAC7C,yBAAyB,EAAE,0BAA0B;IACrD,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,sBAAsB;IACvD,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,oBAAoB,EAAE,aAAa;IACnC,0BAA0B,EAAE,oBAAoB;IAChD,qBAAqB,EAAE,WAAW;IAClC,qCAAqC,EAAE,WAAW;IAClD,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,oBAAoB,EAAE,qBAAqB;IAC3C,0BAA0B,EAAE,2BAA2B;IACvD,oBAAoB,EAAE,qBAAqB;IAC3C,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,2BAA2B;IACtD,sBAAsB,EAAE,uBAAuB;IAC/C,oBAAoB,EAAE,qBAAqB;IAC3C,sBAAsB,EAAE,wBAAwB;IAChD,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,qBAAqB,EAAE,sBAAsB;IAC7C,yBAAyB,EAAE,0BAA0B;IACrD,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,gCAAgC,EAAE,8BAA8B;IAChE,iCAAiC,EAAE,8BAA8B;IACjE,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,sBAAsB;IACvD,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
|
|
@@ -2,3 +2,15 @@
|
|
|
2
2
|
export declare const GOODDOLLAR_IDENTITY_ADDRESS: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
|
|
3
3
|
/** GoodDollar UBISchemeV2 contract on Celo mainnet. */
|
|
4
4
|
export declare const GOODDOLLAR_UBI_SCHEME_ADDRESS: "0x43d72Ff17701B2DA814620735C39C620Ce0ea4A1";
|
|
5
|
+
/** GoodDollar G$ token on Celo mainnet (SuperGoodDollar). */
|
|
6
|
+
export declare const GOODDOLLAR_TOKEN_ADDRESS: "0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A";
|
|
7
|
+
/** MentoBroker proxy — user-facing entry for G$ reserve swaps on Celo. */
|
|
8
|
+
export declare const GOODDOLLAR_MENTO_BROKER: "0x88de45906D4F5a57315c133620cfa484cB297541";
|
|
9
|
+
/** GoodDollar MentoExchangeProvider on Celo mainnet. */
|
|
10
|
+
export declare const GOODDOLLAR_MENTO_EXCHANGE_PROVIDER: "0x2fFBB49055d487DdBBb0C052Cd7c2a02A7971e41";
|
|
11
|
+
/** Exchange pool id for G$ ↔ USDm (CUSD in GoodProtocol deployment). */
|
|
12
|
+
export declare const GOODDOLLAR_CUSD_EXCHANGE_ID: "0xba77f5c7bb3317643c6d81d1ef3f9913561741d92095f88efa402faf2cbe9124";
|
|
13
|
+
/** Reserve collateral token (USDm / cUSD) for the G$ pool on Celo. */
|
|
14
|
+
export declare const GOODDOLLAR_RESERVE_COLLATERAL: "0x765DE816845861e75A25fCA122bb6898B8B1282a";
|
|
15
|
+
/** Whether both tokens form a supported GoodDollar reserve pair (G$ ↔ USDm). */
|
|
16
|
+
export declare function isGoodDollarUsdReservePair(tokenIn: string, tokenOut: string): boolean;
|
|
@@ -2,4 +2,23 @@
|
|
|
2
2
|
export const GOODDOLLAR_IDENTITY_ADDRESS = "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
|
|
3
3
|
/** GoodDollar UBISchemeV2 contract on Celo mainnet. */
|
|
4
4
|
export const GOODDOLLAR_UBI_SCHEME_ADDRESS = "0x43d72Ff17701B2DA814620735C39C620Ce0ea4A1";
|
|
5
|
+
/** GoodDollar G$ token on Celo mainnet (SuperGoodDollar). */
|
|
6
|
+
export const GOODDOLLAR_TOKEN_ADDRESS = "0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A";
|
|
7
|
+
/** MentoBroker proxy — user-facing entry for G$ reserve swaps on Celo. */
|
|
8
|
+
export const GOODDOLLAR_MENTO_BROKER = "0x88de45906D4F5a57315c133620cfa484cB297541";
|
|
9
|
+
/** GoodDollar MentoExchangeProvider on Celo mainnet. */
|
|
10
|
+
export const GOODDOLLAR_MENTO_EXCHANGE_PROVIDER = "0x2fFBB49055d487DdBBb0C052Cd7c2a02A7971e41";
|
|
11
|
+
/** Exchange pool id for G$ ↔ USDm (CUSD in GoodProtocol deployment). */
|
|
12
|
+
export const GOODDOLLAR_CUSD_EXCHANGE_ID = "0xba77f5c7bb3317643c6d81d1ef3f9913561741d92095f88efa402faf2cbe9124";
|
|
13
|
+
/** Reserve collateral token (USDm / cUSD) for the G$ pool on Celo. */
|
|
14
|
+
export const GOODDOLLAR_RESERVE_COLLATERAL = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
|
|
15
|
+
const GOODDOLLAR_SYMBOLS = new Set(["gooddollar", "g$"]);
|
|
16
|
+
const RESERVE_COLLATERAL_SYMBOLS = new Set(["usdm", "cusd"]);
|
|
17
|
+
/** Whether both tokens form a supported GoodDollar reserve pair (G$ ↔ USDm). */
|
|
18
|
+
export function isGoodDollarUsdReservePair(tokenIn, tokenOut) {
|
|
19
|
+
const a = tokenIn.trim().toLowerCase();
|
|
20
|
+
const b = tokenOut.trim().toLowerCase();
|
|
21
|
+
return ((GOODDOLLAR_SYMBOLS.has(a) && RESERVE_COLLATERAL_SYMBOLS.has(b)) ||
|
|
22
|
+
(GOODDOLLAR_SYMBOLS.has(b) && RESERVE_COLLATERAL_SYMBOLS.has(a)));
|
|
23
|
+
}
|
|
5
24
|
//# sourceMappingURL=gooddollar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gooddollar.js","sourceRoot":"","sources":["../../src/config/gooddollar.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GACtC,4CAAqD,CAAC;AAExD,uDAAuD;AACvD,MAAM,CAAC,MAAM,6BAA6B,GACxC,4CAAqD,CAAC"}
|
|
1
|
+
{"version":3,"file":"gooddollar.js","sourceRoot":"","sources":["../../src/config/gooddollar.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GACtC,4CAAqD,CAAC;AAExD,uDAAuD;AACvD,MAAM,CAAC,MAAM,6BAA6B,GACxC,4CAAqD,CAAC;AAExD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GACnC,4CAAqD,CAAC;AAExD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAClC,4CAAqD,CAAC;AAExD,wDAAwD;AACxD,MAAM,CAAC,MAAM,kCAAkC,GAC7C,4CAAqD,CAAC;AAExD,wEAAwE;AACxE,MAAM,CAAC,MAAM,2BAA2B,GACtC,oEAA6E,CAAC;AAEhF,sEAAsE;AACtE,MAAM,CAAC,MAAM,6BAA6B,GACxC,4CAAqD,CAAC;AAExD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7D,gFAAgF;AAChF,MAAM,UAAU,0BAA0B,CAAC,OAAe,EAAE,QAAgB;IAC1E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,CACL,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export interface CelinaClient {
|
|
|
32
32
|
uniswap: UniswapService;
|
|
33
33
|
/** Aave V3 `prepareSupply` and `prepareWithdraw` flows on Celo. */
|
|
34
34
|
aave: AaveService;
|
|
35
|
-
/** GoodDollar IdentityV4 whitelist
|
|
35
|
+
/** GoodDollar IdentityV4 whitelist, UBI claims, and G$ ↔ USDm reserve swaps. */
|
|
36
36
|
gooddollar: GoodDollarService;
|
|
37
37
|
/** Celo and Ethereum ENS resolution. */
|
|
38
38
|
ens: EnsService;
|
|
@@ -81,7 +81,8 @@ export { AAVE_POOL, AAVE_SUPPORTED_SYMBOLS, resolveAaveAsset, } from "./config/a
|
|
|
81
81
|
export { CHAIN, DEFAULT_RPC_URL } from "./config/chains.js";
|
|
82
82
|
export { appendCelinaCalldataTag, CELINA_DATA_SUFFIX, } from "./config/celina-tag.js";
|
|
83
83
|
export type { AaveAsset } from "./config/aave.js";
|
|
84
|
-
export { GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, } from "./config/gooddollar.js";
|
|
84
|
+
export { GOODDOLLAR_CUSD_EXCHANGE_ID, GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_MENTO_BROKER, GOODDOLLAR_MENTO_EXCHANGE_PROVIDER, GOODDOLLAR_RESERVE_COLLATERAL, GOODDOLLAR_TOKEN_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, isGoodDollarUsdReservePair, } from "./config/gooddollar.js";
|
|
85
|
+
export type { GoodDollarReserveSwapParams } from "./services/gooddollar.service.js";
|
|
85
86
|
export type { CarbonPrepareResult, CarbonRestSuccess, } from "./types/carbon.js";
|
|
86
87
|
export type { CarbonWriteBody } from "./services/carbon.service.js";
|
|
87
88
|
export { CARBON_APP_BASE_URL, CARBON_CHAIN, CELO_CARBON_CONTRACTS, DEFAULT_CARBON_REST_BASE_URL, carbonActivityDeepLink, } from "./config/carbon.js";
|
package/build/index.js
CHANGED
|
@@ -56,7 +56,7 @@ export { serializePreparedFlow } from "./types/prepared.js";
|
|
|
56
56
|
export { AAVE_POOL, AAVE_SUPPORTED_SYMBOLS, resolveAaveAsset, } from "./config/aave.js";
|
|
57
57
|
export { CHAIN, DEFAULT_RPC_URL } from "./config/chains.js";
|
|
58
58
|
export { appendCelinaCalldataTag, CELINA_DATA_SUFFIX, } from "./config/celina-tag.js";
|
|
59
|
-
export { GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, } from "./config/gooddollar.js";
|
|
59
|
+
export { GOODDOLLAR_CUSD_EXCHANGE_ID, GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_MENTO_BROKER, GOODDOLLAR_MENTO_EXCHANGE_PROVIDER, GOODDOLLAR_RESERVE_COLLATERAL, GOODDOLLAR_TOKEN_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, isGoodDollarUsdReservePair, } from "./config/gooddollar.js";
|
|
60
60
|
export { CARBON_APP_BASE_URL, CARBON_CHAIN, CELO_CARBON_CONTRACTS, DEFAULT_CARBON_REST_BASE_URL, carbonActivityDeepLink, } from "./config/carbon.js";
|
|
61
61
|
export { resolveCarbonTokenAddress, normalizeCarbonWriteBody, CARBON_WRITE_TOKEN_FIELDS, } from "./utils/carbon-token.js";
|
|
62
62
|
export { buildCarbonExecutionSteps } from "./utils/carbon-execution.js";
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export declare class EnsService {
|
|
|
17
17
|
constructor(ensClientFactory: EnsClientFactory);
|
|
18
18
|
/**
|
|
19
19
|
* Resolve an ENS name on Celo or Ethereum to an address.
|
|
20
|
-
* @param name - ENS name (e.g. `
|
|
20
|
+
* @param name - ENS name (e.g. `andrewkimjoseph.celo.eth`)
|
|
21
21
|
* @param chain - `"celo"` tries Celo coin type first, then Ethereum; `"ethereum"` uses ETH only
|
|
22
22
|
* @throws When no address record exists for the name
|
|
23
23
|
*/
|
|
@@ -14,7 +14,7 @@ export class EnsService {
|
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Resolve an ENS name on Celo or Ethereum to an address.
|
|
17
|
-
* @param name - ENS name (e.g. `
|
|
17
|
+
* @param name - ENS name (e.g. `andrewkimjoseph.celo.eth`)
|
|
18
18
|
* @param chain - `"celo"` tries Celo coin type first, then Ethereum; `"ethereum"` uses ETH only
|
|
19
19
|
* @throws When no address record exists for the name
|
|
20
20
|
*/
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { CeloClientFactory } from "../clients/celo-client.js";
|
|
2
2
|
import { type SerializedPreparedFlow } from "../types/prepared.js";
|
|
3
|
-
/**
|
|
3
|
+
/** Optional parameters for GoodDollar reserve swap prepares. */
|
|
4
|
+
export interface GoodDollarReserveSwapParams {
|
|
5
|
+
/** Max slippage tolerance in percent (default `0.5`). */
|
|
6
|
+
slippageTolerance?: number;
|
|
7
|
+
/** Address receiving output tokens (default: `from`). */
|
|
8
|
+
recipient?: `0x${string}`;
|
|
9
|
+
}
|
|
10
|
+
/** GoodDollar IdentityV4 whitelist, reverification, daily UBI claim, and reserve swap preparation. */
|
|
4
11
|
export declare class GoodDollarService {
|
|
5
12
|
private readonly clientFactory;
|
|
13
|
+
private readonly tokenService;
|
|
6
14
|
constructor(clientFactory: CeloClientFactory);
|
|
7
15
|
private getPublicClient;
|
|
8
16
|
/**
|
|
@@ -86,6 +94,29 @@ export declare class GoodDollarService {
|
|
|
86
94
|
* Validates whitelist, entitlement, and simulates gas before returning steps.
|
|
87
95
|
*/
|
|
88
96
|
prepareClaimUbi(from: `0x${string}`): Promise<SerializedPreparedFlow>;
|
|
97
|
+
private resolveReservePair;
|
|
98
|
+
private reserveOptions;
|
|
99
|
+
private baseReserveQuoteFields;
|
|
100
|
+
/**
|
|
101
|
+
* Expected GoodDollar reserve output for G$ ↔ USDm — no wallet required.
|
|
102
|
+
*/
|
|
103
|
+
getReserveQuote(tokenIn: string, tokenOut: string, amount: string, from?: `0x${string}`): Promise<{
|
|
104
|
+
protocol: "gooddollar_reserve";
|
|
105
|
+
network: "mainnet";
|
|
106
|
+
tokenIn: string;
|
|
107
|
+
tokenOut: string;
|
|
108
|
+
amountIn: string;
|
|
109
|
+
expectedOut: string;
|
|
110
|
+
routeHops: number;
|
|
111
|
+
broker: "0x88de45906D4F5a57315c133620cfa484cB297541";
|
|
112
|
+
exchangeProvider: "0x2fFBB49055d487DdBBb0C052Cd7c2a02A7971e41";
|
|
113
|
+
exchangeId: "0xba77f5c7bb3317643c6d81d1ef3f9913561741d92095f88efa402faf2cbe9124";
|
|
114
|
+
}>;
|
|
115
|
+
private buildReserveSwap;
|
|
116
|
+
/**
|
|
117
|
+
* Build unsigned GoodDollar reserve swap steps (approve + swapIn when needed).
|
|
118
|
+
*/
|
|
119
|
+
prepareReserveSwap(from: `0x${string}`, tokenIn: string, tokenOut: string, amount: string, params?: GoodDollarReserveSwapParams): Promise<SerializedPreparedFlow>;
|
|
89
120
|
private effectiveAuthCount;
|
|
90
121
|
private fetchReverifyDaysOptions;
|
|
91
122
|
private buildReverificationProgress;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GoodDollar IdentityV4 whitelist
|
|
2
|
+
* GoodDollar IdentityV4 whitelist, reverification reads, UBI claims, and reserve swaps on Celo mainnet.
|
|
3
3
|
*/
|
|
4
|
-
import { concat, encodeFunctionData, formatUnits } from "viem";
|
|
4
|
+
import { concat, encodeFunctionData, erc20Abi, formatUnits, maxUint256, } from "viem";
|
|
5
|
+
import { goodDollarBrokerAbi } from "../abis/gooddollar-broker.js";
|
|
5
6
|
import { goodDollarIdentityAbi } from "../abis/gooddollar-identity.js";
|
|
6
7
|
import { ubiSchemeAbi } from "../abis/ubi-scheme.js";
|
|
7
|
-
import { GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, } from "../config/gooddollar.js";
|
|
8
|
+
import { GOODDOLLAR_CUSD_EXCHANGE_ID, GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_MENTO_BROKER, GOODDOLLAR_MENTO_EXCHANGE_PROVIDER, GOODDOLLAR_RESERVE_COLLATERAL, GOODDOLLAR_TOKEN_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, isGoodDollarUsdReservePair, } from "../config/gooddollar.js";
|
|
8
9
|
import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
|
|
9
10
|
import { serializePreparedFlow, } from "../types/prepared.js";
|
|
11
|
+
import { ALLOWANCE_MAPPING_SLOTS, erc20AllowanceStateOverride, } from "../utils/erc20-allowance-storage.js";
|
|
12
|
+
import { TokenService } from "./token.service.js";
|
|
10
13
|
import { formatUnixDate } from "../utils/format-date.js";
|
|
11
14
|
import { formatDuration } from "../utils/format-duration.js";
|
|
12
15
|
import { formatUnixDateTimeUtc, formatUnixIso, } from "../utils/format-unix-datetime.js";
|
|
@@ -27,11 +30,37 @@ function statusLabel(status) {
|
|
|
27
30
|
function taggedCalldata(data) {
|
|
28
31
|
return concat([data, CELINA_DATA_SUFFIX]);
|
|
29
32
|
}
|
|
30
|
-
|
|
33
|
+
const DEFAULT_RESERVE_SLIPPAGE = 0.5;
|
|
34
|
+
function trimDisplayDecimals(value) {
|
|
35
|
+
const num = Number(value);
|
|
36
|
+
if (!Number.isFinite(num)) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
if (Math.abs(num) >= 1000) {
|
|
40
|
+
return num.toLocaleString(undefined, { maximumFractionDigits: 2 });
|
|
41
|
+
}
|
|
42
|
+
if (Math.abs(num) >= 1) {
|
|
43
|
+
return num.toLocaleString(undefined, { maximumFractionDigits: 4 });
|
|
44
|
+
}
|
|
45
|
+
return num.toLocaleString(undefined, { maximumSignificantDigits: 6 });
|
|
46
|
+
}
|
|
47
|
+
function applySlippage(amountOut, slippagePercent) {
|
|
48
|
+
const bps = BigInt(Math.round(slippagePercent * 100));
|
|
49
|
+
return (amountOut * (10000n - bps)) / 10000n;
|
|
50
|
+
}
|
|
51
|
+
function tokenAddress(token) {
|
|
52
|
+
if (token.address === "native") {
|
|
53
|
+
throw new Error(`${token.symbol} is native CELO; GoodDollar reserve swaps require ERC-20 tokens.`);
|
|
54
|
+
}
|
|
55
|
+
return token.address;
|
|
56
|
+
}
|
|
57
|
+
/** GoodDollar IdentityV4 whitelist, reverification, daily UBI claim, and reserve swap preparation. */
|
|
31
58
|
export class GoodDollarService {
|
|
32
59
|
clientFactory;
|
|
60
|
+
tokenService;
|
|
33
61
|
constructor(clientFactory) {
|
|
34
62
|
this.clientFactory = clientFactory;
|
|
63
|
+
this.tokenService = new TokenService(clientFactory);
|
|
35
64
|
}
|
|
36
65
|
getPublicClient() {
|
|
37
66
|
return this.clientFactory.getClients().public;
|
|
@@ -287,6 +316,187 @@ export class GoodDollarService {
|
|
|
287
316
|
};
|
|
288
317
|
return serializePreparedFlow(flow);
|
|
289
318
|
}
|
|
319
|
+
resolveReservePair(tokenIn, tokenOut) {
|
|
320
|
+
if (!isGoodDollarUsdReservePair(tokenIn, tokenOut)) {
|
|
321
|
+
throw new Error(`No GoodDollar reserve route for ${tokenIn} → ${tokenOut}. Supported: GoodDollar ↔ USDm.`);
|
|
322
|
+
}
|
|
323
|
+
const resolvedIn = this.tokenService.resolveToken(tokenIn);
|
|
324
|
+
const resolvedOut = this.tokenService.resolveToken(tokenOut);
|
|
325
|
+
const tokenInAddr = tokenAddress(resolvedIn);
|
|
326
|
+
const tokenOutAddr = tokenAddress(resolvedOut);
|
|
327
|
+
const gdAddr = GOODDOLLAR_TOKEN_ADDRESS.toLowerCase();
|
|
328
|
+
const collateralAddr = GOODDOLLAR_RESERVE_COLLATERAL.toLowerCase();
|
|
329
|
+
const inLower = tokenInAddr.toLowerCase();
|
|
330
|
+
const outLower = tokenOutAddr.toLowerCase();
|
|
331
|
+
if (!((inLower === gdAddr && outLower === collateralAddr) ||
|
|
332
|
+
(inLower === collateralAddr && outLower === gdAddr))) {
|
|
333
|
+
throw new Error(`No GoodDollar reserve route for ${resolvedIn.symbol} → ${resolvedOut.symbol}.`);
|
|
334
|
+
}
|
|
335
|
+
return { resolvedIn, resolvedOut, tokenInAddr, tokenOutAddr };
|
|
336
|
+
}
|
|
337
|
+
reserveOptions(params) {
|
|
338
|
+
return {
|
|
339
|
+
slippageTolerance: params?.slippageTolerance ?? DEFAULT_RESERVE_SLIPPAGE,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
baseReserveQuoteFields(resolvedIn, resolvedOut, amount, expectedOutWei) {
|
|
343
|
+
return {
|
|
344
|
+
protocol: "gooddollar_reserve",
|
|
345
|
+
network: "mainnet",
|
|
346
|
+
tokenIn: resolvedIn.symbol,
|
|
347
|
+
tokenOut: resolvedOut.symbol,
|
|
348
|
+
amountIn: amount,
|
|
349
|
+
expectedOut: formatUnits(expectedOutWei, resolvedOut.decimals),
|
|
350
|
+
routeHops: 1,
|
|
351
|
+
broker: GOODDOLLAR_MENTO_BROKER,
|
|
352
|
+
exchangeProvider: GOODDOLLAR_MENTO_EXCHANGE_PROVIDER,
|
|
353
|
+
exchangeId: GOODDOLLAR_CUSD_EXCHANGE_ID,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Expected GoodDollar reserve output for G$ ↔ USDm — no wallet required.
|
|
358
|
+
*/
|
|
359
|
+
async getReserveQuote(tokenIn, tokenOut, amount, from) {
|
|
360
|
+
const { public: client } = this.clientFactory.getClients();
|
|
361
|
+
const { resolvedIn, resolvedOut, tokenInAddr, tokenOutAddr } = this.resolveReservePair(tokenIn, tokenOut);
|
|
362
|
+
const amountInWei = this.tokenService.parseAmount(amount, resolvedIn.decimals);
|
|
363
|
+
if (from) {
|
|
364
|
+
await this.tokenService.assertSpendableBalance(from, resolvedIn, amount, {
|
|
365
|
+
spendToken: tokenInAddr,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
const expectedOutWei = await client.readContract({
|
|
369
|
+
address: GOODDOLLAR_MENTO_BROKER,
|
|
370
|
+
abi: goodDollarBrokerAbi,
|
|
371
|
+
functionName: "getAmountOut",
|
|
372
|
+
args: [
|
|
373
|
+
GOODDOLLAR_MENTO_EXCHANGE_PROVIDER,
|
|
374
|
+
GOODDOLLAR_CUSD_EXCHANGE_ID,
|
|
375
|
+
tokenInAddr,
|
|
376
|
+
tokenOutAddr,
|
|
377
|
+
amountInWei,
|
|
378
|
+
],
|
|
379
|
+
});
|
|
380
|
+
return this.baseReserveQuoteFields(resolvedIn, resolvedOut, amount, expectedOutWei);
|
|
381
|
+
}
|
|
382
|
+
async buildReserveSwap(from, tokenIn, tokenOut, amount, params) {
|
|
383
|
+
const { public: client } = this.clientFactory.getClients();
|
|
384
|
+
const { resolvedIn, resolvedOut, tokenInAddr, tokenOutAddr } = this.resolveReservePair(tokenIn, tokenOut);
|
|
385
|
+
const recipient = params?.recipient ?? from;
|
|
386
|
+
const amountInWei = this.tokenService.parseAmount(amount, resolvedIn.decimals);
|
|
387
|
+
const { slippageTolerance } = this.reserveOptions(params);
|
|
388
|
+
await this.tokenService.assertSpendableBalance(from, resolvedIn, amount, {
|
|
389
|
+
spendToken: tokenInAddr,
|
|
390
|
+
});
|
|
391
|
+
const expectedOutWei = await client.readContract({
|
|
392
|
+
address: GOODDOLLAR_MENTO_BROKER,
|
|
393
|
+
abi: goodDollarBrokerAbi,
|
|
394
|
+
functionName: "getAmountOut",
|
|
395
|
+
args: [
|
|
396
|
+
GOODDOLLAR_MENTO_EXCHANGE_PROVIDER,
|
|
397
|
+
GOODDOLLAR_CUSD_EXCHANGE_ID,
|
|
398
|
+
tokenInAddr,
|
|
399
|
+
tokenOutAddr,
|
|
400
|
+
amountInWei,
|
|
401
|
+
],
|
|
402
|
+
});
|
|
403
|
+
const amountOutMin = applySlippage(expectedOutWei, slippageTolerance);
|
|
404
|
+
const swapData = taggedCalldata(encodeFunctionData({
|
|
405
|
+
abi: goodDollarBrokerAbi,
|
|
406
|
+
functionName: "swapIn",
|
|
407
|
+
args: [
|
|
408
|
+
GOODDOLLAR_MENTO_EXCHANGE_PROVIDER,
|
|
409
|
+
GOODDOLLAR_CUSD_EXCHANGE_ID,
|
|
410
|
+
tokenInAddr,
|
|
411
|
+
tokenOutAddr,
|
|
412
|
+
amountInWei,
|
|
413
|
+
amountOutMin,
|
|
414
|
+
],
|
|
415
|
+
}));
|
|
416
|
+
return {
|
|
417
|
+
client,
|
|
418
|
+
from,
|
|
419
|
+
recipient,
|
|
420
|
+
resolvedIn,
|
|
421
|
+
resolvedOut,
|
|
422
|
+
tokenInAddr,
|
|
423
|
+
tokenOutAddr,
|
|
424
|
+
amount,
|
|
425
|
+
amountInWei,
|
|
426
|
+
expectedOutWei,
|
|
427
|
+
amountOutMin,
|
|
428
|
+
swapData,
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Build unsigned GoodDollar reserve swap steps (approve + swapIn when needed).
|
|
433
|
+
*/
|
|
434
|
+
async prepareReserveSwap(from, tokenIn, tokenOut, amount, params) {
|
|
435
|
+
const built = await this.buildReserveSwap(from, tokenIn, tokenOut, amount, params);
|
|
436
|
+
const { client, resolvedIn, resolvedOut, tokenInAddr, amountInWei, expectedOutWei, swapData, recipient, } = built;
|
|
437
|
+
const displayIn = trimDisplayDecimals(built.amount);
|
|
438
|
+
const displayOut = trimDisplayDecimals(formatUnits(expectedOutWei, resolvedOut.decimals));
|
|
439
|
+
const steps = [];
|
|
440
|
+
const allowance = await client.readContract({
|
|
441
|
+
address: tokenInAddr,
|
|
442
|
+
abi: erc20Abi,
|
|
443
|
+
functionName: "allowance",
|
|
444
|
+
args: [from, GOODDOLLAR_MENTO_BROKER],
|
|
445
|
+
});
|
|
446
|
+
if (allowance < amountInWei) {
|
|
447
|
+
steps.push({
|
|
448
|
+
kind: "erc20",
|
|
449
|
+
to: tokenInAddr,
|
|
450
|
+
data: taggedCalldata(encodeFunctionData({
|
|
451
|
+
abi: erc20Abi,
|
|
452
|
+
functionName: "approve",
|
|
453
|
+
args: [GOODDOLLAR_MENTO_BROKER, maxUint256],
|
|
454
|
+
})),
|
|
455
|
+
value: "0",
|
|
456
|
+
description: `Approve ${resolvedIn.symbol} for GoodDollar reserve`,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
steps.push({
|
|
460
|
+
kind: "contract",
|
|
461
|
+
to: GOODDOLLAR_MENTO_BROKER,
|
|
462
|
+
data: swapData,
|
|
463
|
+
value: "0",
|
|
464
|
+
description: `Swap ${displayIn} ${resolvedIn.symbol} → ~${displayOut} ${resolvedOut.symbol} via GoodDollar reserve`,
|
|
465
|
+
});
|
|
466
|
+
const swapEstimateRequest = {
|
|
467
|
+
account: from,
|
|
468
|
+
to: GOODDOLLAR_MENTO_BROKER,
|
|
469
|
+
data: swapData,
|
|
470
|
+
value: 0n,
|
|
471
|
+
};
|
|
472
|
+
if (allowance < amountInWei) {
|
|
473
|
+
for (const mappingSlot of ALLOWANCE_MAPPING_SLOTS) {
|
|
474
|
+
try {
|
|
475
|
+
await client.estimateGas({
|
|
476
|
+
...swapEstimateRequest,
|
|
477
|
+
stateOverride: erc20AllowanceStateOverride(tokenInAddr, from, GOODDOLLAR_MENTO_BROKER, maxUint256, mappingSlot),
|
|
478
|
+
});
|
|
479
|
+
break;
|
|
480
|
+
}
|
|
481
|
+
catch (error) {
|
|
482
|
+
const isLast = mappingSlot === ALLOWANCE_MAPPING_SLOTS.at(-1);
|
|
483
|
+
if (isLast) {
|
|
484
|
+
throw error;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
await client.estimateGas(swapEstimateRequest);
|
|
491
|
+
}
|
|
492
|
+
const flow = {
|
|
493
|
+
network: "mainnet",
|
|
494
|
+
from,
|
|
495
|
+
summary: `GoodDollar reserve: ${displayIn} ${resolvedIn.symbol} → ${displayOut} ${resolvedOut.symbol}${recipient !== from ? ` (recipient ${recipient})` : ""}`,
|
|
496
|
+
steps,
|
|
497
|
+
};
|
|
498
|
+
return serializePreparedFlow(flow);
|
|
499
|
+
}
|
|
290
500
|
effectiveAuthCount(dateAuthenticated, authCount, optionsLength) {
|
|
291
501
|
if (dateAuthenticated < LEGACY_AUTH_CUTOFF) {
|
|
292
502
|
return optionsLength - 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gooddollar.service.js","sourceRoot":"","sources":["../../src/services/gooddollar.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gooddollar.service.js","sourceRoot":"","sources":["../../src/services/gooddollar.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ export declare class TransactionService {
|
|
|
32
32
|
* @param to - Recipient address
|
|
33
33
|
* @param token - Symbol or contract address
|
|
34
34
|
* @param amount - Human-readable amount
|
|
35
|
-
* @returns Single-step `SerializedPreparedFlow` for wagmi `
|
|
35
|
+
* @returns Single-step `SerializedPreparedFlow` for wagmi `sendTransactionAsync`
|
|
36
36
|
*/
|
|
37
37
|
prepareSend(from: `0x${string}`, to: `0x${string}`, token: string, amount: string): Promise<SerializedPreparedFlow>;
|
|
38
38
|
/** Current gas fee data including EIP-1559 fees when supported. */
|
|
@@ -71,7 +71,7 @@ export class TransactionService {
|
|
|
71
71
|
* @param to - Recipient address
|
|
72
72
|
* @param token - Symbol or contract address
|
|
73
73
|
* @param amount - Human-readable amount
|
|
74
|
-
* @returns Single-step `SerializedPreparedFlow` for wagmi `
|
|
74
|
+
* @returns Single-step `SerializedPreparedFlow` for wagmi `sendTransactionAsync`
|
|
75
75
|
*/
|
|
76
76
|
async prepareSend(from, to, token, amount) {
|
|
77
77
|
const resolved = this.tokenService.resolveToken(token);
|
|
@@ -6,7 +6,7 @@ import { resolveWalletFromRuntime } from "../utils/wallet.js";
|
|
|
6
6
|
export const browserToolDefinitions = [
|
|
7
7
|
{
|
|
8
8
|
name: "get_swap_quote",
|
|
9
|
-
description: "Best swap quote on Celo — tries Mento FX and Uniswap v4 in parallel.",
|
|
9
|
+
description: "Best swap quote on Celo — tries Mento FX, GoodDollar reserve (G$ ↔ USDm), and Uniswap v4 in parallel.",
|
|
10
10
|
inputSchema: z.object({
|
|
11
11
|
token_in: z.string(),
|
|
12
12
|
token_out: z.string(),
|
|
@@ -21,9 +21,9 @@ export const browserToolDefinitions = [
|
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
name: "prepare_swap",
|
|
24
|
-
description: "Prepare unsigned swap using the best route (Mento FX or Uniswap v4).",
|
|
24
|
+
description: "Prepare unsigned swap using the best route (Mento FX, GoodDollar reserve, or Uniswap v4).",
|
|
25
25
|
inputSchema: uniswapWalletSchema.extend({
|
|
26
|
-
protocol: z.enum(["mento_fx", "uniswap_v4"]).optional(),
|
|
26
|
+
protocol: z.enum(["mento_fx", "uniswap_v4", "gooddollar_reserve"]).optional(),
|
|
27
27
|
}),
|
|
28
28
|
families: ["prepare"],
|
|
29
29
|
surfaces: ["browser"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/tools/domains/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/tools/domains/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,uGAAuG;QACzG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,wBAAwB,CAC7B,OAAO,CAAC,MAAM,EACd,2BAA2B,CAAC,KAAK,CAAC,QAAkB,CAAC,EACrD,2BAA2B,CAAC,KAAK,CAAC,SAAmB,CAAC,EACtD,KAAK,CAAC,MAAgB,EACtB,IAAI,CACL,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,2FAA2F;QAC7F,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC;YACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC9E,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAA0B;aACvC,CAAC,CAAC;YACH,OAAO,uBAAuB,CAC5B,OAAO,CAAC,MAAM,EACd,MAAM,EACN,2BAA2B,CAAC,KAAK,CAAC,QAAkB,CAAC,EACrD,2BAA2B,CAAC,KAAK,CAAC,SAAmB,CAAC,EACtD,KAAK,CAAC,MAAgB,EACtB;gBACE,SAAS,EAAE,KAAK,CAAC,SAAsC;gBACvD,iBAAiB,EAAE,KAAK,CAAC,kBAAwC;gBACjE,eAAe,EAAE,KAAK,CAAC,gBAAsC;aAC9D,EACD,KAAK,CAAC,QAAoC,CAC3C,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { optionalWalletAddressSchema } from "../schemas/common.js";
|
|
2
|
+
import { goodDollarReserveQuoteSchema, goodDollarReserveWalletSchema, optionalWalletAddressSchema, } from "../schemas/common.js";
|
|
3
|
+
import { normalizeRegistryTokenInput } from "../utils/normalize-token.js";
|
|
3
4
|
import { resolveWalletFromRuntime } from "../utils/wallet.js";
|
|
4
5
|
const readOnly = {
|
|
5
6
|
readOnlyHint: true,
|
|
@@ -69,5 +70,34 @@ export const gooddollarToolDefinitions = [
|
|
|
69
70
|
return runtime.celina.gooddollar.prepareClaimUbi(sender);
|
|
70
71
|
},
|
|
71
72
|
},
|
|
73
|
+
{
|
|
74
|
+
name: "get_gooddollar_reserve_quote",
|
|
75
|
+
description: "GoodDollar reserve quote for G$ ↔ USDm on Celo (MentoBroker bonding curve).",
|
|
76
|
+
inputSchema: goodDollarReserveQuoteSchema,
|
|
77
|
+
families: ["read"],
|
|
78
|
+
mcp: { title: "Get GoodDollar Reserve Quote", annotations: readOnly },
|
|
79
|
+
handler: async (runtime, input) => {
|
|
80
|
+
const from = input.from
|
|
81
|
+
? resolveWalletFromRuntime(runtime, { from: input.from })
|
|
82
|
+
: undefined;
|
|
83
|
+
return runtime.celina.gooddollar.getReserveQuote(normalizeRegistryTokenInput(input.token_in), normalizeRegistryTokenInput(input.token_out), input.amount, from);
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "prepare_gooddollar_reserve_swap",
|
|
88
|
+
description: "Prepare unsigned GoodDollar reserve swap for G$ ↔ USDm. User must sign in wallet.",
|
|
89
|
+
inputSchema: goodDollarReserveWalletSchema,
|
|
90
|
+
families: ["prepare"],
|
|
91
|
+
surfaces: ["browser"],
|
|
92
|
+
handler: async (runtime, input) => {
|
|
93
|
+
const sender = resolveWalletFromRuntime(runtime, {
|
|
94
|
+
from: input.from,
|
|
95
|
+
});
|
|
96
|
+
return runtime.celina.gooddollar.prepareReserveSwap(sender, normalizeRegistryTokenInput(input.token_in), normalizeRegistryTokenInput(input.token_out), input.amount, {
|
|
97
|
+
recipient: input.recipient,
|
|
98
|
+
slippageTolerance: input.slippage_tolerance,
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
},
|
|
72
102
|
];
|
|
73
103
|
//# sourceMappingURL=gooddollar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gooddollar.js","sourceRoot":"","sources":["../../../src/tools/domains/gooddollar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,2BAA2B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"gooddollar.js","sourceRoot":"","sources":["../../../src/tools/domains/gooddollar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,QAAQ,GAAG;IACf,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD;QACE,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,2BAA2B;SACrC,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,WAAW,EAAE,QAAQ,EAAE;QACzE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,OAAO,EAAE,KAAK,CAAC,OAA6B;aAC7C,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;KACF;IACD;QACE,IAAI,EAAE,gCAAgC;QACtC,WAAW,EACT,wFAAwF;QAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,2BAA2B;SACrC,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,WAAW,EAAE,QAAQ,EAAE;QACvE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,OAAO,EAAE,KAAK,CAAC,OAA6B;aAC7C,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;KACF;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,oFAAoF;QACtF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,GAAG,EAAE;YACH,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAC5D;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;KACF;IACD;QACE,IAAI,EAAE,oCAAoC;QAC1C,WAAW,EACT,wEAAwE;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,2BAA2B;SAClC,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAA0B;aACvC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;KACF;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,WAAW,EAAE,QAAQ,EAAE;QACrE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;gBACrB,CAAC,CAAC,wBAAwB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAc,EAAE,CAAC;gBACnE,CAAC,CAAC,SAAS,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAC9C,2BAA2B,CAAC,KAAK,CAAC,QAAkB,CAAC,EACrD,2BAA2B,CAAC,KAAK,CAAC,SAAmB,CAAC,EACtD,KAAK,CAAC,MAAgB,EACtB,IAAI,CACL,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,iCAAiC;QACvC,WAAW,EACT,mFAAmF;QACrF,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAA0B;aACvC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CACjD,MAAM,EACN,2BAA2B,CAAC,KAAK,CAAC,QAAkB,CAAC,EACrD,2BAA2B,CAAC,KAAK,CAAC,SAAmB,CAAC,EACtD,KAAK,CAAC,MAAgB,EACtB;gBACE,SAAS,EAAE,KAAK,CAAC,SAAsC;gBACvD,iBAAiB,EAAE,KAAK,CAAC,kBAAwC;aAClE,CACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
|
|
@@ -108,3 +108,42 @@ export declare const uniswapWalletSchema: z.ZodObject<{
|
|
|
108
108
|
slippage_tolerance?: number | undefined;
|
|
109
109
|
deadline_minutes?: number | undefined;
|
|
110
110
|
}>;
|
|
111
|
+
export declare const goodDollarReserveQuoteSchema: z.ZodObject<{
|
|
112
|
+
token_in: z.ZodString;
|
|
113
|
+
token_out: z.ZodString;
|
|
114
|
+
amount: z.ZodString;
|
|
115
|
+
from: z.ZodOptional<z.ZodString>;
|
|
116
|
+
}, "strip", z.ZodTypeAny, {
|
|
117
|
+
amount: string;
|
|
118
|
+
token_in: string;
|
|
119
|
+
token_out: string;
|
|
120
|
+
from?: string | undefined;
|
|
121
|
+
}, {
|
|
122
|
+
amount: string;
|
|
123
|
+
token_in: string;
|
|
124
|
+
token_out: string;
|
|
125
|
+
from?: string | undefined;
|
|
126
|
+
}>;
|
|
127
|
+
export declare const goodDollarReserveWalletSchema: z.ZodObject<{
|
|
128
|
+
token_in: z.ZodString;
|
|
129
|
+
token_out: z.ZodString;
|
|
130
|
+
amount: z.ZodString;
|
|
131
|
+
from: z.ZodOptional<z.ZodString>;
|
|
132
|
+
} & {
|
|
133
|
+
recipient: z.ZodOptional<z.ZodString>;
|
|
134
|
+
slippage_tolerance: z.ZodOptional<z.ZodNumber>;
|
|
135
|
+
}, "strip", z.ZodTypeAny, {
|
|
136
|
+
amount: string;
|
|
137
|
+
token_in: string;
|
|
138
|
+
token_out: string;
|
|
139
|
+
from?: string | undefined;
|
|
140
|
+
recipient?: string | undefined;
|
|
141
|
+
slippage_tolerance?: number | undefined;
|
|
142
|
+
}, {
|
|
143
|
+
amount: string;
|
|
144
|
+
token_in: string;
|
|
145
|
+
token_out: string;
|
|
146
|
+
from?: string | undefined;
|
|
147
|
+
recipient?: string | undefined;
|
|
148
|
+
slippage_tolerance?: number | undefined;
|
|
149
|
+
}>;
|
|
@@ -21,7 +21,7 @@ export const tokenSymbolSchema = z
|
|
|
21
21
|
export const ensNameSchema = z
|
|
22
22
|
.string()
|
|
23
23
|
.min(3)
|
|
24
|
-
.describe("ENS name, e.g. celina.eth or
|
|
24
|
+
.describe("ENS name, e.g. celina.eth or andrewkimjoseph.celo.eth");
|
|
25
25
|
export const tokenIdSchema = z.string().describe("NFT token ID (decimal string)");
|
|
26
26
|
export const abiSchema = z
|
|
27
27
|
.array(z.record(z.unknown()))
|
|
@@ -78,4 +78,14 @@ export const uniswapWalletSchema = uniswapQuoteSchema.extend({
|
|
|
78
78
|
slippage_tolerance: z.number().min(0).max(20).optional(),
|
|
79
79
|
deadline_minutes: z.number().int().positive().optional(),
|
|
80
80
|
});
|
|
81
|
+
export const goodDollarReserveQuoteSchema = z.object({
|
|
82
|
+
token_in: tokenSymbolSchema.describe("GoodDollar or G$"),
|
|
83
|
+
token_out: tokenSymbolSchema.describe("USDm or cUSD"),
|
|
84
|
+
amount: z.string().describe("Human-readable amount of token_in"),
|
|
85
|
+
from: optionalWalletAddressSchema,
|
|
86
|
+
});
|
|
87
|
+
export const goodDollarReserveWalletSchema = goodDollarReserveQuoteSchema.extend({
|
|
88
|
+
recipient: addressSchema.optional(),
|
|
89
|
+
slippage_tolerance: z.number().min(0).max(20).optional(),
|
|
90
|
+
});
|
|
81
91
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/tools/schemas/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa;KACrD,QAAQ,EAAE;KACV,QAAQ,CACP,0FAA0F,CAC3F,CAAC;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CACP,8EAA8E,CAC/E,CAAC;AAEJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC9B,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;IAC1D,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,EAAE;KACR,QAAQ,CAAC,yDAAyD,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/tools/schemas/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CelinaClient } from "../index.js";
|
|
2
|
-
export type SwapProtocol = "mento_fx" | "uniswap_v4";
|
|
2
|
+
export type SwapProtocol = "mento_fx" | "uniswap_v4" | "gooddollar_reserve";
|
|
3
3
|
export interface SwapQuoteResult {
|
|
4
4
|
protocol: SwapProtocol;
|
|
5
5
|
tokenIn: string;
|
|
@@ -19,6 +19,6 @@ export interface SwapPrepareParams {
|
|
|
19
19
|
slippageTolerance?: number;
|
|
20
20
|
deadlineMinutes?: number;
|
|
21
21
|
}
|
|
22
|
-
/** Quote a swap across Mento FX and Uniswap v4; returns the best
|
|
22
|
+
/** Quote a swap across Mento FX, GoodDollar reserve, and Uniswap v4; returns the best route. */
|
|
23
23
|
export declare function getSwapQuoteWithFallback(celina: CelinaClient, tokenIn: string, tokenOut: string, amount: string, from?: `0x${string}`): Promise<SwapQuoteResult>;
|
|
24
24
|
export declare function prepareSwapWithFallback(celina: CelinaClient, from: `0x${string}`, tokenIn: string, tokenOut: string, amount: string, params?: SwapPrepareParams, protocol?: SwapProtocol): Promise<import("../index.js").SerializedPreparedFlow>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isGoodDollarUsdReservePair } from "../config/gooddollar.js";
|
|
1
2
|
function parseExpectedOut(value) {
|
|
2
3
|
const n = Number(value.replace(/,/g, ""));
|
|
3
4
|
return Number.isFinite(n) ? n : 0;
|
|
@@ -8,12 +9,31 @@ function isMentoRouteError(message) {
|
|
|
8
9
|
function isUniswapRouteError(message) {
|
|
9
10
|
return /no uniswap v4 route|insufficient liquidity in uniswap v4/i.test(message);
|
|
10
11
|
}
|
|
12
|
+
function isGoodDollarReserveRouteError(message) {
|
|
13
|
+
return /no gooddollar reserve route/i.test(message);
|
|
14
|
+
}
|
|
11
15
|
function isInsufficientBalanceError(message) {
|
|
12
16
|
return /insufficient .+ balance/i.test(message);
|
|
13
17
|
}
|
|
14
18
|
function rejectionMessage(reason) {
|
|
15
19
|
return reason instanceof Error ? reason.message : String(reason);
|
|
16
20
|
}
|
|
21
|
+
function filterAlternatives(best, others) {
|
|
22
|
+
if (best.protocol !== "gooddollar_reserve") {
|
|
23
|
+
return others;
|
|
24
|
+
}
|
|
25
|
+
const bestOut = parseExpectedOut(best.expectedOut);
|
|
26
|
+
if (bestOut <= 0) {
|
|
27
|
+
return others;
|
|
28
|
+
}
|
|
29
|
+
return others.filter((alt) => {
|
|
30
|
+
if (alt.protocol !== "uniswap_v4" || alt.error) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
const altOut = parseExpectedOut(alt.expectedOut);
|
|
34
|
+
return altOut >= bestOut * 0.95;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
17
37
|
async function tryMentoQuote(celina, tokenIn, tokenOut, amount, from) {
|
|
18
38
|
const quote = await celina.mentoFx.getFxQuote(tokenIn, tokenOut, amount, from);
|
|
19
39
|
return {
|
|
@@ -38,12 +58,32 @@ async function tryUniswapQuote(celina, tokenIn, tokenOut, amount, from) {
|
|
|
38
58
|
network: quote.network,
|
|
39
59
|
};
|
|
40
60
|
}
|
|
41
|
-
|
|
61
|
+
async function tryGoodDollarReserveQuote(celina, tokenIn, tokenOut, amount, from) {
|
|
62
|
+
const quote = await celina.gooddollar.getReserveQuote(tokenIn, tokenOut, amount, from);
|
|
63
|
+
return {
|
|
64
|
+
protocol: "gooddollar_reserve",
|
|
65
|
+
tokenIn: quote.tokenIn,
|
|
66
|
+
tokenOut: quote.tokenOut,
|
|
67
|
+
amountIn: quote.amountIn,
|
|
68
|
+
expectedOut: quote.expectedOut,
|
|
69
|
+
routeHops: quote.routeHops,
|
|
70
|
+
network: quote.network,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Quote a swap across Mento FX, GoodDollar reserve, and Uniswap v4; returns the best route. */
|
|
42
74
|
export async function getSwapQuoteWithFallback(celina, tokenIn, tokenOut, amount, from) {
|
|
43
|
-
const
|
|
75
|
+
const reserveEligible = isGoodDollarUsdReservePair(tokenIn, tokenOut);
|
|
76
|
+
const quoteTasks = [
|
|
44
77
|
tryMentoQuote(celina, tokenIn, tokenOut, amount, from),
|
|
45
78
|
tryUniswapQuote(celina, tokenIn, tokenOut, amount, from),
|
|
46
|
-
]
|
|
79
|
+
];
|
|
80
|
+
if (reserveEligible) {
|
|
81
|
+
quoteTasks.push(tryGoodDollarReserveQuote(celina, tokenIn, tokenOut, amount, from));
|
|
82
|
+
}
|
|
83
|
+
const results = await Promise.allSettled(quoteTasks);
|
|
84
|
+
const mentoResult = results[0];
|
|
85
|
+
const uniswapResult = results[1];
|
|
86
|
+
const reserveResult = reserveEligible ? results[2] : undefined;
|
|
47
87
|
const successes = [];
|
|
48
88
|
const alternatives = [];
|
|
49
89
|
if (mentoResult.status === "fulfilled") {
|
|
@@ -64,22 +104,37 @@ export async function getSwapQuoteWithFallback(celina, tokenIn, tokenOut, amount
|
|
|
64
104
|
alternatives.push({ protocol: "uniswap_v4", expectedOut: "0", error: message });
|
|
65
105
|
}
|
|
66
106
|
}
|
|
107
|
+
if (reserveResult) {
|
|
108
|
+
if (reserveResult.status === "fulfilled") {
|
|
109
|
+
successes.push(reserveResult.value);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const message = rejectionMessage(reserveResult.reason);
|
|
113
|
+
if (!isGoodDollarReserveRouteError(message)) {
|
|
114
|
+
alternatives.push({
|
|
115
|
+
protocol: "gooddollar_reserve",
|
|
116
|
+
expectedOut: "0",
|
|
117
|
+
error: message,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
67
122
|
if (successes.length === 0) {
|
|
68
|
-
const failures =
|
|
123
|
+
const failures = results
|
|
69
124
|
.filter((result) => result.status === "rejected")
|
|
70
125
|
.map((result) => rejectionMessage(result.reason));
|
|
71
126
|
const balanceError = failures.find(isInsufficientBalanceError);
|
|
72
127
|
if (balanceError) {
|
|
73
128
|
throw new Error(balanceError);
|
|
74
129
|
}
|
|
75
|
-
throw new Error(`No swap route for ${tokenIn} → ${tokenOut} via Mento FX or Uniswap v4.`);
|
|
130
|
+
throw new Error(`No swap route for ${tokenIn} → ${tokenOut} via Mento FX, GoodDollar reserve, or Uniswap v4.`);
|
|
76
131
|
}
|
|
77
132
|
successes.sort((a, b) => parseExpectedOut(b.expectedOut) - parseExpectedOut(a.expectedOut));
|
|
78
133
|
const best = successes[0];
|
|
79
|
-
const otherProtocols = successes.slice(1).map((q) => ({
|
|
134
|
+
const otherProtocols = filterAlternatives(best, successes.slice(1).map((q) => ({
|
|
80
135
|
protocol: q.protocol,
|
|
81
136
|
expectedOut: q.expectedOut,
|
|
82
|
-
}));
|
|
137
|
+
})));
|
|
83
138
|
return {
|
|
84
139
|
...best,
|
|
85
140
|
alternatives: otherProtocols.length > 0 ? otherProtocols : alternatives,
|
|
@@ -96,6 +151,12 @@ export async function prepareSwapWithFallback(celina, from, tokenIn, tokenOut, a
|
|
|
96
151
|
deadlineMinutes: params?.deadlineMinutes,
|
|
97
152
|
});
|
|
98
153
|
}
|
|
154
|
+
if (chosen === "gooddollar_reserve") {
|
|
155
|
+
return celina.gooddollar.prepareReserveSwap(from, tokenIn, tokenOut, amount, {
|
|
156
|
+
recipient: params?.recipient,
|
|
157
|
+
slippageTolerance: params?.slippageTolerance,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
99
160
|
return celina.uniswap.prepareSwap(from, tokenIn, tokenOut, amount, {
|
|
100
161
|
recipient: params?.recipient,
|
|
101
162
|
slippageTolerance: params?.slippageTolerance,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap-routing.js","sourceRoot":"","sources":["../../src/tools/swap-routing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swap-routing.js","sourceRoot":"","sources":["../../src/tools/swap-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export interface PreparedFlow {
|
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* JSON-safe prepared flow returned by prepare* tools and chat APIs.
|
|
21
|
-
* Consumers (celina-agent TxConfirmCard, wagmi) iterate steps and call sendTransaction.
|
|
21
|
+
* Consumers (celina-agent TxConfirmCard, wagmi) iterate steps and call sendTransactionAsync (wagmi) or walletClient.sendTransaction (viem).
|
|
22
22
|
*/
|
|
23
23
|
export interface SerializedPreparedFlow extends Omit<PreparedFlow, "steps"> {
|
|
24
24
|
steps: PreparedTx[];
|
package/package.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { OperationSpec } from "../types.js";
|
|
2
2
|
import { assertHasKeys } from "../../helpers/assert.js";
|
|
3
|
+
import { getSwapQuoteWithFallback } from "../../../src/tools/swap-routing.js";
|
|
4
|
+
import { GOODDOLLAR_MENTO_BROKER } from "../../../src/config/gooddollar.js";
|
|
3
5
|
|
|
4
6
|
function fromAddress(fx: Parameters<OperationSpec["assert"]>[1]): `0x${string}` {
|
|
5
7
|
return fx.signerAddress ?? fx.wallet;
|
|
@@ -310,4 +312,137 @@ export const gooddollarOperations: OperationSpec[] = [
|
|
|
310
312
|
assertHasKeys(result, ["hash"]);
|
|
311
313
|
},
|
|
312
314
|
},
|
|
315
|
+
{
|
|
316
|
+
id: "gooddollar.getReserveQuote.sell",
|
|
317
|
+
domain: "gooddollar",
|
|
318
|
+
layer: "read",
|
|
319
|
+
sdk: {
|
|
320
|
+
invoke: (client) =>
|
|
321
|
+
client.gooddollar.getReserveQuote("GoodDollar", "USDm", "1000"),
|
|
322
|
+
},
|
|
323
|
+
mcp: {
|
|
324
|
+
tool: "get_gooddollar_reserve_quote",
|
|
325
|
+
arguments: () => ({
|
|
326
|
+
token_in: "GoodDollar",
|
|
327
|
+
token_out: "USDm",
|
|
328
|
+
amount: "1000",
|
|
329
|
+
}),
|
|
330
|
+
},
|
|
331
|
+
assert: (result) => {
|
|
332
|
+
const quote = result as { protocol?: string; expectedOut?: string };
|
|
333
|
+
if (quote.protocol !== "gooddollar_reserve") {
|
|
334
|
+
throw new Error(`Expected gooddollar_reserve, got ${quote.protocol}`);
|
|
335
|
+
}
|
|
336
|
+
if (parseExpectedOut(quote.expectedOut) <= 0) {
|
|
337
|
+
throw new Error("Expected positive reserve output for G$ → USDm");
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
id: "gooddollar.getReserveQuote.buy",
|
|
343
|
+
domain: "gooddollar",
|
|
344
|
+
layer: "read",
|
|
345
|
+
sdk: {
|
|
346
|
+
invoke: (client) =>
|
|
347
|
+
client.gooddollar.getReserveQuote("USDm", "GoodDollar", "100"),
|
|
348
|
+
},
|
|
349
|
+
mcp: {
|
|
350
|
+
tool: "get_gooddollar_reserve_quote",
|
|
351
|
+
arguments: () => ({
|
|
352
|
+
token_in: "USDm",
|
|
353
|
+
token_out: "GoodDollar",
|
|
354
|
+
amount: "100",
|
|
355
|
+
}),
|
|
356
|
+
},
|
|
357
|
+
assert: (result) => {
|
|
358
|
+
const quote = result as { protocol?: string; expectedOut?: string };
|
|
359
|
+
if (quote.protocol !== "gooddollar_reserve") {
|
|
360
|
+
throw new Error(`Expected gooddollar_reserve, got ${quote.protocol}`);
|
|
361
|
+
}
|
|
362
|
+
if (parseExpectedOut(quote.expectedOut) <= 1000) {
|
|
363
|
+
throw new Error("Expected reserve to return substantially more G$ than Uniswap");
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
id: "swap.getSwapQuoteWithFallback.gdUsd",
|
|
369
|
+
domain: "swap",
|
|
370
|
+
layer: "read",
|
|
371
|
+
sdk: {
|
|
372
|
+
invoke: (client) =>
|
|
373
|
+
getSwapQuoteWithFallback(client, "GoodDollar", "USDm", "1000"),
|
|
374
|
+
},
|
|
375
|
+
assert: (result) => {
|
|
376
|
+
const quote = result as { protocol?: string };
|
|
377
|
+
if (quote.protocol !== "gooddollar_reserve") {
|
|
378
|
+
throw new Error(`Expected gooddollar_reserve, got ${quote.protocol}`);
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
id: "swap.getSwapQuoteWithFallback.usdGd",
|
|
384
|
+
domain: "swap",
|
|
385
|
+
layer: "read",
|
|
386
|
+
sdk: {
|
|
387
|
+
invoke: (client) =>
|
|
388
|
+
getSwapQuoteWithFallback(client, "USDm", "GoodDollar", "100"),
|
|
389
|
+
},
|
|
390
|
+
assert: (result) => {
|
|
391
|
+
const quote = result as { protocol?: string };
|
|
392
|
+
if (quote.protocol !== "gooddollar_reserve") {
|
|
393
|
+
throw new Error(`Expected gooddollar_reserve, got ${quote.protocol}`);
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
id: "gooddollar.prepareReserveSwap.sell",
|
|
399
|
+
domain: "gooddollar",
|
|
400
|
+
layer: "prepare",
|
|
401
|
+
requiresEnv: ["CELO_PRIVATE_KEY"],
|
|
402
|
+
sdk: {
|
|
403
|
+
invoke: (client, fx) =>
|
|
404
|
+
client.gooddollar.prepareReserveSwap(
|
|
405
|
+
fromAddress(fx),
|
|
406
|
+
"GoodDollar",
|
|
407
|
+
"USDm",
|
|
408
|
+
"1000",
|
|
409
|
+
),
|
|
410
|
+
},
|
|
411
|
+
assert: (result) => {
|
|
412
|
+
const flow = result as { steps?: Array<{ to?: string }> };
|
|
413
|
+
assertHasKeys(result, ["from", "steps"]);
|
|
414
|
+
const last = flow.steps?.at(-1);
|
|
415
|
+
if (last?.to?.toLowerCase() !== GOODDOLLAR_MENTO_BROKER.toLowerCase()) {
|
|
416
|
+
throw new Error("Expected final reserve swap step to target MentoBroker");
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
id: "gooddollar.prepareReserveSwap.buy",
|
|
422
|
+
domain: "gooddollar",
|
|
423
|
+
layer: "prepare",
|
|
424
|
+
requiresEnv: ["CELO_PRIVATE_KEY"],
|
|
425
|
+
sdk: {
|
|
426
|
+
invoke: (client, fx) =>
|
|
427
|
+
client.gooddollar.prepareReserveSwap(
|
|
428
|
+
fromAddress(fx),
|
|
429
|
+
"USDm",
|
|
430
|
+
"GoodDollar",
|
|
431
|
+
"10",
|
|
432
|
+
),
|
|
433
|
+
},
|
|
434
|
+
assert: (result) => {
|
|
435
|
+
const flow = result as { steps?: Array<{ to?: string }> };
|
|
436
|
+
assertHasKeys(result, ["from", "steps"]);
|
|
437
|
+
const last = flow.steps?.at(-1);
|
|
438
|
+
if (last?.to?.toLowerCase() !== GOODDOLLAR_MENTO_BROKER.toLowerCase()) {
|
|
439
|
+
throw new Error("Expected final reserve swap step to target MentoBroker");
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
},
|
|
313
443
|
];
|
|
444
|
+
|
|
445
|
+
function parseExpectedOut(value: string | undefined): number {
|
|
446
|
+
const n = Number(String(value ?? "").replace(/,/g, ""));
|
|
447
|
+
return Number.isFinite(n) ? n : 0;
|
|
448
|
+
}
|