@andrewkimjoseph/celina-sdk 0.1.0 → 0.2.1
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 +56 -3
- package/build/abis/accounts.d.ts +13 -0
- package/build/abis/accounts.js +10 -0
- package/build/abis/accounts.js.map +1 -0
- package/build/abis/election.d.ts +124 -0
- package/build/abis/election.js +88 -0
- package/build/abis/election.js.map +1 -0
- package/build/abis/governance.d.ts +86 -0
- package/build/abis/governance.js +68 -0
- package/build/abis/governance.js.map +1 -0
- package/build/abis/locked-gold.d.ts +10 -0
- package/build/abis/locked-gold.js +10 -0
- package/build/abis/locked-gold.js.map +1 -0
- package/build/abis/nft.d.ts +107 -0
- package/build/abis/nft.js +75 -0
- package/build/abis/nft.js.map +1 -0
- package/build/abis/validators-minimal.d.ts +65 -0
- package/build/abis/validators-minimal.js +39 -0
- package/build/abis/validators-minimal.js.map +1 -0
- package/build/config/celo-core-contracts.d.ts +8 -0
- package/build/config/celo-core-contracts.js +9 -0
- package/build/config/celo-core-contracts.js.map +1 -0
- package/build/config/chains.js +4 -0
- package/build/config/chains.js.map +1 -1
- package/build/index.d.ts +28 -0
- package/build/index.js +18 -0
- package/build/index.js.map +1 -1
- package/build/services/aave.service.d.ts +8 -0
- package/build/services/aave.service.js +9 -0
- package/build/services/aave.service.js.map +1 -1
- package/build/services/blockchain.service.d.ts +14 -3
- package/build/services/blockchain.service.js +42 -14
- package/build/services/blockchain.service.js.map +1 -1
- package/build/services/contract.service.d.ts +52 -0
- package/build/services/contract.service.js +98 -0
- package/build/services/contract.service.js.map +1 -0
- package/build/services/ens.service.d.ts +2 -0
- package/build/services/ens.service.js +2 -0
- package/build/services/ens.service.js.map +1 -1
- package/build/services/gooddollar.service.d.ts +1 -0
- package/build/services/gooddollar.service.js +1 -0
- package/build/services/gooddollar.service.js.map +1 -1
- package/build/services/governance.service.d.ts +78 -0
- package/build/services/governance.service.js +241 -0
- package/build/services/governance.service.js.map +1 -0
- package/build/services/mento-fx.service.d.ts +6 -0
- package/build/services/mento-fx.service.js +10 -0
- package/build/services/mento-fx.service.js.map +1 -1
- package/build/services/nft.service.d.ts +42 -0
- package/build/services/nft.service.js +203 -0
- package/build/services/nft.service.js.map +1 -0
- package/build/services/staking.service.d.ts +109 -0
- package/build/services/staking.service.js +410 -0
- package/build/services/staking.service.js.map +1 -0
- package/build/services/token.service.d.ts +14 -0
- package/build/services/token.service.js +51 -0
- package/build/services/token.service.js.map +1 -1
- package/build/services/transaction.service.d.ts +37 -0
- package/build/services/transaction.service.js +78 -1
- package/build/services/transaction.service.js.map +1 -1
- package/build/types/prepared.d.ts +7 -1
- package/build/types/prepared.js +1 -0
- package/build/types/prepared.js.map +1 -1
- package/build/utils/celo-format.d.ts +3 -0
- package/build/utils/celo-format.js +14 -0
- package/build/utils/celo-format.js.map +1 -0
- package/build/utils/normalize-address.d.ts +2 -0
- package/build/utils/normalize-address.js +11 -0
- package/build/utils/normalize-address.js.map +1 -0
- package/package.json +5 -2
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Token sends: estimateSend simulates gas; prepareSend builds unsigned tx steps.
|
|
3
|
+
* Calldata is tagged with CELINA_DATA_SUFFIX for on-chain attribution.
|
|
4
|
+
*/
|
|
5
|
+
import { concat, encodeFunctionData, erc20Abi, parseEther, parseGwei, } from "viem";
|
|
2
6
|
import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
|
|
7
|
+
import { normalizeAddress } from "../utils/normalize-address.js";
|
|
3
8
|
import { serializePreparedFlow, } from "../types/prepared.js";
|
|
4
9
|
import { TokenService } from "./token.service.js";
|
|
5
10
|
function taggedCalldata(data) {
|
|
@@ -12,6 +17,7 @@ export class TransactionService {
|
|
|
12
17
|
this.clientFactory = clientFactory;
|
|
13
18
|
this.tokenService = new TokenService(clientFactory);
|
|
14
19
|
}
|
|
20
|
+
/** Simulate gas for a CELO or ERC-20 transfer from `from`. */
|
|
15
21
|
async estimateSend(from, to, token, amount) {
|
|
16
22
|
const { public: client } = this.clientFactory.getClients();
|
|
17
23
|
const resolved = this.tokenService.resolveToken(token);
|
|
@@ -48,6 +54,10 @@ export class TransactionService {
|
|
|
48
54
|
gas: gas.toString(),
|
|
49
55
|
};
|
|
50
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Build an unsigned send flow (native CELO or ERC-20 transfer).
|
|
59
|
+
* Returns `SerializedPreparedFlow` for wagmi `sendTransaction`.
|
|
60
|
+
*/
|
|
51
61
|
async prepareSend(from, to, token, amount) {
|
|
52
62
|
const resolved = this.tokenService.resolveToken(token);
|
|
53
63
|
if (resolved.address === "native") {
|
|
@@ -89,5 +99,72 @@ export class TransactionService {
|
|
|
89
99
|
};
|
|
90
100
|
return serializePreparedFlow(flow);
|
|
91
101
|
}
|
|
102
|
+
/** Current gas fee data including EIP-1559 fees when supported. */
|
|
103
|
+
async getGasFeeData() {
|
|
104
|
+
const { public: client } = this.clientFactory.getClients();
|
|
105
|
+
const [block, gasPrice] = await Promise.all([
|
|
106
|
+
client.getBlock({ blockTag: "latest" }),
|
|
107
|
+
client.getGasPrice(),
|
|
108
|
+
]);
|
|
109
|
+
const baseFeePerGas = block.baseFeePerGas;
|
|
110
|
+
if (baseFeePerGas) {
|
|
111
|
+
const maxPriorityFeePerGas = parseGwei("2");
|
|
112
|
+
const maxFeePerGas = baseFeePerGas * 2n + maxPriorityFeePerGas;
|
|
113
|
+
return {
|
|
114
|
+
network: "mainnet",
|
|
115
|
+
baseFeePerGas: baseFeePerGas.toString(),
|
|
116
|
+
maxFeePerGas: maxFeePerGas.toString(),
|
|
117
|
+
maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),
|
|
118
|
+
gasPrice: gasPrice.toString(),
|
|
119
|
+
eip1559: true,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
network: "mainnet",
|
|
124
|
+
baseFeePerGas: "0",
|
|
125
|
+
maxFeePerGas: gasPrice.toString(),
|
|
126
|
+
maxPriorityFeePerGas: "0",
|
|
127
|
+
gasPrice: gasPrice.toString(),
|
|
128
|
+
eip1559: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/** Generic transaction gas estimate (not token-transfer specific). */
|
|
132
|
+
async estimateTransaction(params) {
|
|
133
|
+
const from = normalizeAddress(params.from, "from address");
|
|
134
|
+
const to = normalizeAddress(params.to, "to address");
|
|
135
|
+
const { public: client } = this.clientFactory.getClients();
|
|
136
|
+
const value = params.value ? BigInt(params.value) : 0n;
|
|
137
|
+
const data = params.data ?? "0x";
|
|
138
|
+
let gasLimit;
|
|
139
|
+
try {
|
|
140
|
+
gasLimit = await client.estimateGas({
|
|
141
|
+
account: from,
|
|
142
|
+
to,
|
|
143
|
+
value,
|
|
144
|
+
data,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
149
|
+
throw new Error(`Transaction gas estimation failed: ${message}. ` +
|
|
150
|
+
"Ensure from/to addresses differ for empty transfers, or provide valid calldata.");
|
|
151
|
+
}
|
|
152
|
+
const feeData = await this.getGasFeeData();
|
|
153
|
+
const maxFee = BigInt(feeData.maxFeePerGas);
|
|
154
|
+
const estimatedCost = gasLimit * maxFee;
|
|
155
|
+
const estimatedCostCelo = Number(estimatedCost) / 1e18;
|
|
156
|
+
return {
|
|
157
|
+
network: "mainnet",
|
|
158
|
+
from,
|
|
159
|
+
to,
|
|
160
|
+
gasLimit: gasLimit.toString(),
|
|
161
|
+
gasPrice: feeData.gasPrice,
|
|
162
|
+
maxFeePerGas: feeData.maxFeePerGas,
|
|
163
|
+
maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
|
|
164
|
+
estimatedCost: estimatedCost.toString(),
|
|
165
|
+
estimatedCostFormatted: `${estimatedCostCelo} CELO`,
|
|
166
|
+
isEip1559: feeData.eip1559,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
92
169
|
}
|
|
93
170
|
//# sourceMappingURL=transaction.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type PreparedTxKind = "native" | "erc20" | "contract";
|
|
2
|
+
/** Single unsigned transaction step in a prepared flow. */
|
|
2
3
|
export interface PreparedTx {
|
|
3
4
|
kind: PreparedTxKind;
|
|
4
5
|
to: `0x${string}`;
|
|
@@ -7,15 +8,20 @@ export interface PreparedTx {
|
|
|
7
8
|
value?: string;
|
|
8
9
|
description: string;
|
|
9
10
|
}
|
|
11
|
+
/** In-memory prepared flow before JSON serialization. */
|
|
10
12
|
export interface PreparedFlow {
|
|
11
13
|
steps: PreparedTx[];
|
|
12
14
|
summary: string;
|
|
13
15
|
network: "mainnet";
|
|
14
16
|
from: `0x${string}`;
|
|
15
17
|
}
|
|
16
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* JSON-safe prepared flow returned by prepare* tools and chat APIs.
|
|
20
|
+
* Consumers (celina-agent TxConfirmCard, wagmi) iterate steps and call sendTransaction.
|
|
21
|
+
*/
|
|
17
22
|
export interface SerializedPreparedFlow extends Omit<PreparedFlow, "steps"> {
|
|
18
23
|
steps: PreparedTx[];
|
|
19
24
|
preparedFlow: true;
|
|
20
25
|
}
|
|
26
|
+
/** Marks a prepared flow as JSON-safe for API and chat tool responses. */
|
|
21
27
|
export declare function serializePreparedFlow(flow: PreparedFlow): SerializedPreparedFlow;
|
package/build/types/prepared.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared.js","sourceRoot":"","sources":["../../src/types/prepared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepared.js","sourceRoot":"","sources":["../../src/types/prepared.ts"],"names":[],"mappings":"AA6BA,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB,CAAC,IAAkB;IACtD,OAAO;QACL,GAAG,IAAI;QACP,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,IAAI;YACP,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;SAC9B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { formatUnits } from "viem";
|
|
2
|
+
export function formatCeloAmount(wei) {
|
|
3
|
+
return `${formatUnits(wei, 18)} CELO`;
|
|
4
|
+
}
|
|
5
|
+
export function formatAddress(address) {
|
|
6
|
+
if (address.length < 10)
|
|
7
|
+
return address;
|
|
8
|
+
return `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
9
|
+
}
|
|
10
|
+
export function formatScorePercentage(score) {
|
|
11
|
+
const value = typeof score === "bigint" ? Number(score) : score;
|
|
12
|
+
return `${(value / 100).toFixed(2)}%`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=celo-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"celo-format.js","sourceRoot":"","sources":["../../src/utils/celo-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getAddress } from "viem";
|
|
2
|
+
/** Normalize a hex address to EIP-55 checksum form. */
|
|
3
|
+
export function normalizeAddress(address, label = "address") {
|
|
4
|
+
try {
|
|
5
|
+
return getAddress(address);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
throw new Error(`Invalid ${label}: ${address}`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=normalize-address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-address.js","sourceRoot":"","sources":["../../src/utils/normalize-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,uDAAuD;AACvD,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,KAAK,GAAG,SAAS;IAEjB,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewkimjoseph/celina-sdk",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Celina SDK — Celo mainnet reads and unsigned transaction preparation for frontend apps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "rm -rf build && tsc",
|
|
23
23
|
"dev": "tsc --watch",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:unit": "vitest run --config vitest.unit.config.ts",
|
|
24
26
|
"prepublishOnly": "npm run build",
|
|
25
27
|
"prepare": "npm run build"
|
|
26
28
|
},
|
|
@@ -58,6 +60,7 @@
|
|
|
58
60
|
},
|
|
59
61
|
"devDependencies": {
|
|
60
62
|
"@types/node": "^22.0.0",
|
|
61
|
-
"typescript": "^5.8.2"
|
|
63
|
+
"typescript": "^5.8.2",
|
|
64
|
+
"vitest": "^3.2.4"
|
|
62
65
|
}
|
|
63
66
|
}
|