@andrewkimjoseph/celina-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -0
  3. package/build/abis/aave-pool.d.ts +37 -0
  4. package/build/abis/aave-pool.js +26 -0
  5. package/build/abis/aave-pool.js.map +1 -0
  6. package/build/abis/gooddollar-identity.d.ts +61 -0
  7. package/build/abis/gooddollar-identity.js +38 -0
  8. package/build/abis/gooddollar-identity.js.map +1 -0
  9. package/build/clients/celo-client.d.ts +11 -0
  10. package/build/clients/celo-client.js +23 -0
  11. package/build/clients/celo-client.js.map +1 -0
  12. package/build/clients/ens-client.d.ts +10 -0
  13. package/build/clients/ens-client.js +23 -0
  14. package/build/clients/ens-client.js.map +1 -0
  15. package/build/clients/mento-sdk.d.ts +2 -0
  16. package/build/clients/mento-sdk.js +9 -0
  17. package/build/clients/mento-sdk.js.map +1 -0
  18. package/build/config/aave.d.ts +11 -0
  19. package/build/config/aave.js +55 -0
  20. package/build/config/aave.js.map +1 -0
  21. package/build/config/celina-tag.d.ts +1 -0
  22. package/build/config/celina-tag.js +3 -0
  23. package/build/config/celina-tag.js.map +1 -0
  24. package/build/config/chains.d.ts +935 -0
  25. package/build/config/chains.js +251 -0
  26. package/build/config/chains.js.map +1 -0
  27. package/build/config/gooddollar.d.ts +1 -0
  28. package/build/config/gooddollar.js +2 -0
  29. package/build/config/gooddollar.js.map +1 -0
  30. package/build/config/sdk-config.d.ts +6 -0
  31. package/build/config/sdk-config.js +8 -0
  32. package/build/config/sdk-config.js.map +1 -0
  33. package/build/index.d.ts +26 -0
  34. package/build/index.js +28 -0
  35. package/build/index.js.map +1 -0
  36. package/build/services/aave.service.d.ts +13 -0
  37. package/build/services/aave.service.js +144 -0
  38. package/build/services/aave.service.js.map +1 -0
  39. package/build/services/account.service.d.ts +13 -0
  40. package/build/services/account.service.js +23 -0
  41. package/build/services/account.service.js.map +1 -0
  42. package/build/services/blockchain.service.d.ts +40 -0
  43. package/build/services/blockchain.service.js +81 -0
  44. package/build/services/blockchain.service.js.map +1 -0
  45. package/build/services/ens.service.d.ts +30 -0
  46. package/build/services/ens.service.js +78 -0
  47. package/build/services/ens.service.js.map +1 -0
  48. package/build/services/gooddollar.service.d.ts +38 -0
  49. package/build/services/gooddollar.service.js +127 -0
  50. package/build/services/gooddollar.service.js.map +1 -0
  51. package/build/services/mento-fx.service.d.ts +48 -0
  52. package/build/services/mento-fx.service.js +234 -0
  53. package/build/services/mento-fx.service.js.map +1 -0
  54. package/build/services/token.service.d.ts +54 -0
  55. package/build/services/token.service.js +147 -0
  56. package/build/services/token.service.js.map +1 -0
  57. package/build/services/transaction.service.d.ts +16 -0
  58. package/build/services/transaction.service.js +93 -0
  59. package/build/services/transaction.service.js.map +1 -0
  60. package/build/types/prepared.d.ts +21 -0
  61. package/build/types/prepared.js +11 -0
  62. package/build/types/prepared.js.map +1 -0
  63. package/build/utils/erc20-allowance-storage.d.ts +7 -0
  64. package/build/utils/erc20-allowance-storage.js +44 -0
  65. package/build/utils/erc20-allowance-storage.js.map +1 -0
  66. package/build/utils/format-date.d.ts +1 -0
  67. package/build/utils/format-date.js +12 -0
  68. package/build/utils/format-date.js.map +1 -0
  69. package/package.json +63 -0
@@ -0,0 +1,251 @@
1
+ import { celo } from "viem/chains";
2
+ export const CHAIN = celo;
3
+ export const DEFAULT_RPC_URL = "https://forno.celo.org";
4
+ /** Mento collateral address for native CELO (used by @mento-protocol/mento-sdk). */
5
+ export const MENTO_CELO_ADDRESS = "0x471EcE3750Da237f93B8E339c536989b8978a438";
6
+ export const KNOWN_TOKENS = [
7
+ {
8
+ symbol: "CELO",
9
+ address: "native",
10
+ decimals: 18,
11
+ },
12
+ {
13
+ symbol: "USDm",
14
+ aliases: ["cUSD"],
15
+ address: "0x765de816845861e75a25fca122bb6898b8b1282a",
16
+ issuer: "Mento",
17
+ useCase: "US Dollar-pegged stablecoin (Mento Dollar)",
18
+ decimals: 18,
19
+ },
20
+ {
21
+ symbol: "EURm",
22
+ aliases: ["cEUR"],
23
+ address: "0xd8763cba276a3738e6de85b4b3bf5fded6d6ca73",
24
+ issuer: "Mento",
25
+ useCase: "Euro-pegged stablecoin (Mento Euro)",
26
+ decimals: 18,
27
+ },
28
+ {
29
+ symbol: "BRLm",
30
+ address: "0xe8537a3d056da446677b9e9d6c5db704eaab4787",
31
+ issuer: "Mento",
32
+ useCase: "Brazilian Real-pegged stablecoin",
33
+ decimals: 18,
34
+ },
35
+ {
36
+ symbol: "XOFm",
37
+ address: "0x73F93dcc49cB8A239e2032663e9475dd5ef29A08",
38
+ issuer: "Mento",
39
+ useCase: "CFA Franc-pegged stablecoin",
40
+ decimals: 18,
41
+ },
42
+ {
43
+ symbol: "KESm",
44
+ address: "0x456a3D042C0DbD3db53D5489e98dFb038553B0d0",
45
+ issuer: "Mento",
46
+ useCase: "Kenyan Shilling-pegged stablecoin",
47
+ decimals: 18,
48
+ },
49
+ {
50
+ symbol: "PHPm",
51
+ address: "0x105d4A9306D2E55a71d2Eb95B81553AE1dC20d7B",
52
+ issuer: "Mento",
53
+ useCase: "Philippine Peso-pegged stablecoin",
54
+ decimals: 18,
55
+ },
56
+ {
57
+ symbol: "COPm",
58
+ address: "0x8a567e2ae79ca692bd748ab832081c45de4041ea",
59
+ issuer: "Mento",
60
+ useCase: "Colombian Peso-pegged stablecoin",
61
+ decimals: 18,
62
+ },
63
+ {
64
+ symbol: "GBPm",
65
+ address: "0xCCF663b1fF11028f0b19058d0f7B674004a40746",
66
+ issuer: "Mento",
67
+ useCase: "British Pound-pegged stablecoin",
68
+ decimals: 18,
69
+ },
70
+ {
71
+ symbol: "CADm",
72
+ address: "0xff4Ab19391af240c311c54200a492233052B6325",
73
+ issuer: "Mento",
74
+ useCase: "Canadian Dollar-pegged stablecoin",
75
+ decimals: 18,
76
+ },
77
+ {
78
+ symbol: "AUDm",
79
+ address: "0x7175504C455076F15c04A2F90a8e352281F492F9",
80
+ issuer: "Mento",
81
+ useCase: "Australian Dollar-pegged stablecoin",
82
+ decimals: 18,
83
+ },
84
+ {
85
+ symbol: "ZARm",
86
+ address: "0x4c35853A3B4e647fD266f4de678dCc8fEC410BF6",
87
+ issuer: "Mento",
88
+ useCase: "South African Rand-pegged stablecoin",
89
+ decimals: 18,
90
+ },
91
+ {
92
+ symbol: "GHSm",
93
+ address: "0xfAeA5F3404bbA20D3cc2f8C4B0A888F55a3c7313",
94
+ issuer: "Mento",
95
+ useCase: "Ghanaian Cedi-pegged stablecoin",
96
+ decimals: 18,
97
+ },
98
+ {
99
+ symbol: "NGNm",
100
+ address: "0xE2702Bd97ee33c88c8f6f92DA3B733608aa76F71",
101
+ issuer: "Mento",
102
+ useCase: "Nigerian Naira-pegged stablecoin",
103
+ decimals: 18,
104
+ },
105
+ {
106
+ symbol: "JPYm",
107
+ address: "0xc45eCF20f3CD864B32D9794d6f76814aE8892e20",
108
+ issuer: "Mento",
109
+ useCase: "Japanese Yen-pegged stablecoin",
110
+ decimals: 18,
111
+ },
112
+ {
113
+ symbol: "CHFm",
114
+ address: "0xb55a79F398E759E43C95b979163f30eC87Ee131D",
115
+ issuer: "Mento",
116
+ useCase: "Swiss Franc-pegged stablecoin",
117
+ decimals: 18,
118
+ },
119
+ {
120
+ symbol: "USDT",
121
+ address: "0x48065fbbe25f71c9282ddf5e1cd6d6a887483d5e",
122
+ issuer: "Tether",
123
+ useCase: "Popular stablecoin on multiple blockchains",
124
+ decimals: 6,
125
+ },
126
+ {
127
+ symbol: "USDC",
128
+ address: "0xceba9300f2b948710d2653dd7b07f33a8b32118c",
129
+ issuer: "Circle",
130
+ useCase: "Widely used stablecoin with high liquidity",
131
+ decimals: 6,
132
+ },
133
+ {
134
+ symbol: "WETH",
135
+ address: "0xD221812de1BD094f35587EE8E174B07B6167D9Af",
136
+ issuer: "Wrapped Ether",
137
+ useCase: "Bridged ETH on Celo",
138
+ decimals: 18,
139
+ },
140
+ {
141
+ symbol: "vEUR",
142
+ address: "0x9346f43c1588b6df1d52bdd6bf846064f92d9cba",
143
+ issuer: "VNX",
144
+ useCase: "Euro-pegged stablecoin",
145
+ decimals: 18,
146
+ },
147
+ {
148
+ symbol: "vGBP",
149
+ address: "0x7ae4265ecfc1f31bc0e112dfcfe3d78e01f4bb7f",
150
+ issuer: "VNX",
151
+ useCase: "British Pound-pegged stablecoin",
152
+ decimals: 18,
153
+ },
154
+ {
155
+ symbol: "vCHF",
156
+ address: "0xc5ebea9984c485ec5d58ca5a2d376620d93af871",
157
+ issuer: "VNX",
158
+ useCase: "Swiss Franc-pegged stablecoin",
159
+ decimals: 18,
160
+ },
161
+ {
162
+ symbol: "USDM",
163
+ address: "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C",
164
+ issuer: "Mountain Protocol",
165
+ useCase: "Yield-bearing stablecoin",
166
+ decimals: 18,
167
+ },
168
+ {
169
+ symbol: "USDA",
170
+ address: "0x0000206329b97DB379d5E1Bf586BbDB969C63274",
171
+ issuer: "Angle",
172
+ useCase: "Yield-bearing USD stablecoin",
173
+ decimals: 18,
174
+ },
175
+ {
176
+ symbol: "EURA",
177
+ address: "0xC16B81Af351BA9e64C1a069E3Ab18c244A1E3049",
178
+ issuer: "Angle",
179
+ useCase: "Yield-bearing Euro stablecoin",
180
+ decimals: 18,
181
+ },
182
+ {
183
+ symbol: "USDGLO",
184
+ address: "0x4f604735c1cf31399c6e711d5962b2b3e0225ad3",
185
+ issuer: "Glo Foundation",
186
+ useCase: "Impact-driven stablecoin supporting global causes",
187
+ decimals: 18,
188
+ },
189
+ {
190
+ symbol: "BRLA",
191
+ address: "0xfecb3f7c54e2caae9dc6ac9060a822d47e053760",
192
+ issuer: "BRLA Digital",
193
+ useCase: "Brazil-based stablecoin",
194
+ decimals: 18,
195
+ },
196
+ {
197
+ symbol: "COPM",
198
+ address: "0xC92E8Fc2947E32F2B574CCA9F2F12097A71d5606",
199
+ issuer: "Minteo",
200
+ useCase: "Fiat-backed Colombian Peso stablecoin",
201
+ decimals: 18,
202
+ },
203
+ {
204
+ symbol: "GoodDollar",
205
+ aliases: ["G$"],
206
+ address: "0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A",
207
+ issuer: "GoodDollar",
208
+ useCase: "UBI-focused stablecoin for financial inclusion",
209
+ decimals: 18,
210
+ },
211
+ ];
212
+ export const STABLECOINS = KNOWN_TOKENS.filter((token) => token.address !== "native" &&
213
+ token.issuer !== undefined &&
214
+ token.useCase !== undefined);
215
+ export const KNOWN_TOKEN_SYMBOLS = KNOWN_TOKENS.flatMap((token) => [
216
+ token.symbol,
217
+ ...(token.aliases ?? []),
218
+ ]).sort();
219
+ function tokenMatchesInput(token, normalized, upper) {
220
+ if (token.symbol === normalized || token.symbol.toUpperCase() === upper) {
221
+ return true;
222
+ }
223
+ return (token.aliases?.some((alias) => alias === normalized || alias.toUpperCase() === upper) ?? false);
224
+ }
225
+ export function findKnownToken(token) {
226
+ const normalized = token.trim();
227
+ const upper = normalized.toUpperCase();
228
+ return KNOWN_TOKENS.find((entry) => tokenMatchesInput(entry, normalized, upper) ||
229
+ (upper === "NATIVE" && entry.address === "native"));
230
+ }
231
+ export function toMentoTokenAddress(address) {
232
+ if (address === "native") {
233
+ return MENTO_CELO_ADDRESS;
234
+ }
235
+ return address;
236
+ }
237
+ export function resolveStablecoins(symbols) {
238
+ if (!symbols?.length) {
239
+ return STABLECOINS;
240
+ }
241
+ const wanted = symbols.map((symbol) => symbol.trim());
242
+ const matched = STABLECOINS.filter((coin) => wanted.some((input) => {
243
+ const upper = input.toUpperCase();
244
+ return tokenMatchesInput(coin, input, upper);
245
+ }));
246
+ if (matched.length === 0) {
247
+ throw new Error(`No matching stablecoins. Available: ${STABLECOINS.map((coin) => coin.symbol).join(", ")}`);
248
+ }
249
+ return matched;
250
+ }
251
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../src/config/chains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const GOODDOLLAR_IDENTITY_ADDRESS: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
@@ -0,0 +1,2 @@
1
+ export const GOODDOLLAR_IDENTITY_ADDRESS = "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
2
+ //# sourceMappingURL=gooddollar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooddollar.js","sourceRoot":"","sources":["../../src/config/gooddollar.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GACtC,4CAAqD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface SdkConfig {
2
+ rpcUrl: string;
3
+ ethRpcUrl?: string;
4
+ }
5
+ export declare const DEFAULT_RPC_URL = "https://forno.celo.org";
6
+ export declare function resolveSdkConfig(opts?: Partial<SdkConfig>): SdkConfig;
@@ -0,0 +1,8 @@
1
+ export const DEFAULT_RPC_URL = "https://forno.celo.org";
2
+ export function resolveSdkConfig(opts) {
3
+ return {
4
+ rpcUrl: opts?.rpcUrl ?? DEFAULT_RPC_URL,
5
+ ethRpcUrl: opts?.ethRpcUrl,
6
+ };
7
+ }
8
+ //# sourceMappingURL=sdk-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-config.js","sourceRoot":"","sources":["../../src/config/sdk-config.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACxD,OAAO;QACL,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,eAAe;QACvC,SAAS,EAAE,IAAI,EAAE,SAAS;KAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type SdkConfig } from "./config/sdk-config.js";
2
+ import { AccountService } from "./services/account.service.js";
3
+ import { AaveService } from "./services/aave.service.js";
4
+ import { BlockchainService } from "./services/blockchain.service.js";
5
+ import { EnsService } from "./services/ens.service.js";
6
+ import { GoodDollarService } from "./services/gooddollar.service.js";
7
+ import { MentoFxService } from "./services/mento-fx.service.js";
8
+ import { TokenService } from "./services/token.service.js";
9
+ import { TransactionService } from "./services/transaction.service.js";
10
+ export type CelinaClientOptions = Partial<SdkConfig>;
11
+ export interface CelinaClient {
12
+ blockchain: BlockchainService;
13
+ account: AccountService;
14
+ token: TokenService;
15
+ transaction: TransactionService;
16
+ mentoFx: MentoFxService;
17
+ aave: AaveService;
18
+ gooddollar: GoodDollarService;
19
+ ens: EnsService;
20
+ }
21
+ export declare function createCelinaClient(opts?: CelinaClientOptions): CelinaClient;
22
+ export type { PreparedFlow, PreparedTx, PreparedTxKind, SerializedPreparedFlow, } from "./types/prepared.js";
23
+ export { serializePreparedFlow } from "./types/prepared.js";
24
+ export type { SdkConfig } from "./config/sdk-config.js";
25
+ export type { ResolvedToken } from "./services/token.service.js";
26
+ export type { MentoFxParams } from "./services/mento-fx.service.js";
package/build/index.js ADDED
@@ -0,0 +1,28 @@
1
+ import { CeloClientFactory } from "./clients/celo-client.js";
2
+ import { EnsClientFactory } from "./clients/ens-client.js";
3
+ import { resolveSdkConfig } from "./config/sdk-config.js";
4
+ import { AccountService } from "./services/account.service.js";
5
+ import { AaveService } from "./services/aave.service.js";
6
+ import { BlockchainService } from "./services/blockchain.service.js";
7
+ import { EnsService } from "./services/ens.service.js";
8
+ import { GoodDollarService } from "./services/gooddollar.service.js";
9
+ import { MentoFxService } from "./services/mento-fx.service.js";
10
+ import { TokenService } from "./services/token.service.js";
11
+ import { TransactionService } from "./services/transaction.service.js";
12
+ export function createCelinaClient(opts) {
13
+ const config = resolveSdkConfig(opts);
14
+ const clientFactory = new CeloClientFactory(config);
15
+ const ensClientFactory = new EnsClientFactory(config);
16
+ return {
17
+ blockchain: new BlockchainService(clientFactory),
18
+ account: new AccountService(clientFactory),
19
+ token: new TokenService(clientFactory),
20
+ transaction: new TransactionService(clientFactory),
21
+ mentoFx: new MentoFxService(clientFactory),
22
+ aave: new AaveService(clientFactory),
23
+ gooddollar: new GoodDollarService(clientFactory),
24
+ ens: new EnsService(ensClientFactory),
25
+ };
26
+ }
27
+ export { serializePreparedFlow } from "./types/prepared.js";
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAevE,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEtD,OAAO;QACL,UAAU,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC;QAChD,OAAO,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC;QAC1C,KAAK,EAAE,IAAI,YAAY,CAAC,aAAa,CAAC;QACtC,WAAW,EAAE,IAAI,kBAAkB,CAAC,aAAa,CAAC;QAClD,OAAO,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC;QAC1C,IAAI,EAAE,IAAI,WAAW,CAAC,aAAa,CAAC;QACpC,UAAU,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC;QAChD,GAAG,EAAE,IAAI,UAAU,CAAC,gBAAgB,CAAC;KACtC,CAAC;AACJ,CAAC;AAQD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CeloClientFactory } from "../clients/celo-client.js";
2
+ import { type SerializedPreparedFlow } from "../types/prepared.js";
3
+ export declare class AaveService {
4
+ private readonly clientFactory;
5
+ private readonly tokenService;
6
+ constructor(clientFactory: CeloClientFactory);
7
+ private getPublicClient;
8
+ private assertUnderlyingBalance;
9
+ private assertATokenBalance;
10
+ private needsApproval;
11
+ prepareSupply(from: `0x${string}`, token: string, amount: string): Promise<SerializedPreparedFlow>;
12
+ prepareWithdraw(from: `0x${string}`, token: string, amount: string | undefined, withdrawMax?: boolean): Promise<SerializedPreparedFlow>;
13
+ }
@@ -0,0 +1,144 @@
1
+ import { concat, encodeFunctionData, erc20Abi } from "viem";
2
+ import { aavePoolAbi } from "../abis/aave-pool.js";
3
+ import { AAVE_POOL, resolveAaveAsset, } from "../config/aave.js";
4
+ import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
5
+ import { serializePreparedFlow, } from "../types/prepared.js";
6
+ import { TokenService } from "./token.service.js";
7
+ function taggedCalldata(data) {
8
+ return concat([data, CELINA_DATA_SUFFIX]);
9
+ }
10
+ export class AaveService {
11
+ clientFactory;
12
+ tokenService;
13
+ constructor(clientFactory) {
14
+ this.clientFactory = clientFactory;
15
+ this.tokenService = new TokenService(clientFactory);
16
+ }
17
+ getPublicClient() {
18
+ return this.clientFactory.getClients().public;
19
+ }
20
+ async assertUnderlyingBalance(asset, publicClient, owner, amount) {
21
+ const token = this.tokenService.resolveToken(asset.symbol);
22
+ const required = this.tokenService.parseAmount(amount, token.decimals);
23
+ const balance = await publicClient.readContract({
24
+ address: asset.underlying,
25
+ abi: erc20Abi,
26
+ functionName: "balanceOf",
27
+ args: [owner],
28
+ });
29
+ if (balance < required) {
30
+ const celoHint = asset.symbol === "CELO"
31
+ ? " Aave requires wrapped CELO (ERC-20), not native CELO."
32
+ : "";
33
+ throw new Error(`Insufficient ${asset.symbol} balance. Required ${amount} ${asset.symbol}, available ${balance.toString()} raw units.${celoHint}`);
34
+ }
35
+ }
36
+ async assertATokenBalance(asset, publicClient, owner, amount) {
37
+ const token = this.tokenService.resolveToken(asset.symbol);
38
+ const required = this.tokenService.parseAmount(amount, token.decimals);
39
+ const balance = await publicClient.readContract({
40
+ address: asset.aToken,
41
+ abi: erc20Abi,
42
+ functionName: "balanceOf",
43
+ args: [owner],
44
+ });
45
+ if (balance < required) {
46
+ throw new Error(`Insufficient Aave ${asset.symbol} supply balance. Required ${amount} ${asset.symbol}, available ${balance.toString()} raw aToken units.`);
47
+ }
48
+ }
49
+ async needsApproval(underlying, from, amountWei) {
50
+ const publicClient = this.getPublicClient();
51
+ const allowance = await publicClient.readContract({
52
+ address: underlying,
53
+ abi: erc20Abi,
54
+ functionName: "allowance",
55
+ args: [from, AAVE_POOL],
56
+ });
57
+ return allowance < amountWei;
58
+ }
59
+ async prepareSupply(from, token, amount) {
60
+ const asset = resolveAaveAsset(token);
61
+ const publicClient = this.getPublicClient();
62
+ await this.assertUnderlyingBalance(asset, publicClient, from, amount);
63
+ const resolved = this.tokenService.resolveToken(asset.symbol);
64
+ const amountWei = this.tokenService.parseAmount(amount, resolved.decimals);
65
+ const steps = [];
66
+ if (await this.needsApproval(asset.underlying, from, amountWei)) {
67
+ const approveData = taggedCalldata(encodeFunctionData({
68
+ abi: erc20Abi,
69
+ functionName: "approve",
70
+ args: [AAVE_POOL, amountWei],
71
+ }));
72
+ steps.push({
73
+ kind: "erc20",
74
+ to: asset.underlying,
75
+ data: approveData,
76
+ value: "0",
77
+ description: `Approve ${amount} ${asset.symbol} for Aave`,
78
+ });
79
+ }
80
+ const supplyData = taggedCalldata(encodeFunctionData({
81
+ abi: aavePoolAbi,
82
+ functionName: "supply",
83
+ args: [asset.underlying, amountWei, from, 0],
84
+ }));
85
+ steps.push({
86
+ kind: "contract",
87
+ to: AAVE_POOL,
88
+ data: supplyData,
89
+ value: "0",
90
+ description: `Supply ${amount} ${asset.symbol} to Aave V3`,
91
+ });
92
+ const flow = {
93
+ network: "mainnet",
94
+ from,
95
+ summary: `Supply ${amount} ${asset.symbol} to Aave V3 on Celo`,
96
+ steps,
97
+ };
98
+ return serializePreparedFlow(flow);
99
+ }
100
+ async prepareWithdraw(from, token, amount, withdrawMax) {
101
+ const asset = resolveAaveAsset(token);
102
+ const publicClient = this.getPublicClient();
103
+ if (!withdrawMax && !amount) {
104
+ throw new Error("Provide amount or set withdrawMax to true.");
105
+ }
106
+ if (!withdrawMax && amount) {
107
+ await this.assertATokenBalance(asset, publicClient, from, amount);
108
+ }
109
+ const resolved = this.tokenService.resolveToken(asset.symbol);
110
+ const amountWei = withdrawMax
111
+ ? await publicClient.readContract({
112
+ address: asset.aToken,
113
+ abi: erc20Abi,
114
+ functionName: "balanceOf",
115
+ args: [from],
116
+ })
117
+ : this.tokenService.parseAmount(amount, resolved.decimals);
118
+ if (amountWei === 0n) {
119
+ throw new Error(`No supplied ${asset.symbol} balance to withdraw.`);
120
+ }
121
+ const withdrawData = taggedCalldata(encodeFunctionData({
122
+ abi: aavePoolAbi,
123
+ functionName: "withdraw",
124
+ args: [asset.underlying, amountWei, from],
125
+ }));
126
+ const amountLabel = withdrawMax ? "max" : amount;
127
+ const flow = {
128
+ network: "mainnet",
129
+ from,
130
+ summary: `Withdraw ${amountLabel} ${asset.symbol} from Aave V3 on Celo`,
131
+ steps: [
132
+ {
133
+ kind: "contract",
134
+ to: AAVE_POOL,
135
+ data: withdrawData,
136
+ value: "0",
137
+ description: `Withdraw ${amountLabel} ${asset.symbol} from Aave`,
138
+ },
139
+ ],
140
+ };
141
+ return serializePreparedFlow(flow);
142
+ }
143
+ }
144
+ //# sourceMappingURL=aave.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aave.service.js","sourceRoot":"","sources":["../../src/services/aave.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CeloClientFactory } from "../clients/celo-client.js";
2
+ export declare class AccountService {
3
+ private readonly clientFactory;
4
+ constructor(clientFactory: CeloClientFactory);
5
+ getAccount(address: `0x${string}`): Promise<{
6
+ address: `0x${string}`;
7
+ network: string;
8
+ balanceWei: string;
9
+ balanceCelo: number;
10
+ nonce: number;
11
+ isContract: boolean;
12
+ }>;
13
+ }
@@ -0,0 +1,23 @@
1
+ export class AccountService {
2
+ clientFactory;
3
+ constructor(clientFactory) {
4
+ this.clientFactory = clientFactory;
5
+ }
6
+ async getAccount(address) {
7
+ const { public: client } = this.clientFactory.getClients();
8
+ const [balance, nonce, bytecode] = await Promise.all([
9
+ client.getBalance({ address }),
10
+ client.getTransactionCount({ address }),
11
+ client.getCode({ address }),
12
+ ]);
13
+ return {
14
+ address,
15
+ network: "mainnet",
16
+ balanceWei: balance.toString(),
17
+ balanceCelo: Number(balance) / 1e18,
18
+ nonce,
19
+ isContract: bytecode !== undefined && bytecode !== "0x",
20
+ };
21
+ }
22
+ }
23
+ //# sourceMappingURL=account.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.service.js","sourceRoot":"","sources":["../../src/services/account.service.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,aAAgC;QAAhC,kBAAa,GAAb,aAAa,CAAmB;IAAG,CAAC;IAEjE,KAAK,CAAC,UAAU,CAAC,OAAsB;QACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QAC3D,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;SAC5B,CAAC,CAAC;QAEH,OAAO;YACL,OAAO;YACP,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;YACnC,KAAK;YACL,UAAU,EAAE,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;SACxD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import type { CeloClientFactory } from "../clients/celo-client.js";
2
+ export declare class BlockchainService {
3
+ private readonly clientFactory;
4
+ constructor(clientFactory: CeloClientFactory);
5
+ getNetworkStatus(): Promise<{
6
+ network: string;
7
+ chainId: number;
8
+ blockNumber: string;
9
+ gasPriceWei: string;
10
+ }>;
11
+ getBlock(blockId: number | string | "latest" | "pending"): Promise<{
12
+ number: string | undefined;
13
+ hash: `0x${string}` | null;
14
+ timestamp: string;
15
+ parentHash: `0x${string}`;
16
+ gasUsed: string;
17
+ gasLimit: string;
18
+ miner: `0x${string}`;
19
+ transactionCount: number;
20
+ }>;
21
+ getLatestBlocks(count?: number): Promise<{
22
+ number: string;
23
+ hash: `0x${string}`;
24
+ timestamp: string;
25
+ transactionCount: number;
26
+ }[]>;
27
+ getTransaction(hash: `0x${string}`): Promise<{
28
+ hash: `0x${string}`;
29
+ from: `0x${string}`;
30
+ to: `0x${string}` | null;
31
+ value: string;
32
+ nonce: number;
33
+ gas: string;
34
+ gasPrice: string | undefined;
35
+ input: `0x${string}`;
36
+ blockNumber: string;
37
+ status: "success" | "reverted";
38
+ gasUsed: string;
39
+ }>;
40
+ }