@andrewkimjoseph/celina-sdk 0.1.0 → 0.2.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 +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 +102 -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 +41 -0
- package/build/services/nft.service.js +194 -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 -1
- package/build/services/token.service.js.map +1 -1
- package/build/services/transaction.service.d.ts +37 -0
- package/build/services/transaction.service.js +69 -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/package.json +1 -1
|
@@ -1,4 +1,8 @@
|
|
|
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";
|
|
3
7
|
import { serializePreparedFlow, } from "../types/prepared.js";
|
|
4
8
|
import { TokenService } from "./token.service.js";
|
|
@@ -12,6 +16,7 @@ export class TransactionService {
|
|
|
12
16
|
this.clientFactory = clientFactory;
|
|
13
17
|
this.tokenService = new TokenService(clientFactory);
|
|
14
18
|
}
|
|
19
|
+
/** Simulate gas for a CELO or ERC-20 transfer from `from`. */
|
|
15
20
|
async estimateSend(from, to, token, amount) {
|
|
16
21
|
const { public: client } = this.clientFactory.getClients();
|
|
17
22
|
const resolved = this.tokenService.resolveToken(token);
|
|
@@ -48,6 +53,10 @@ export class TransactionService {
|
|
|
48
53
|
gas: gas.toString(),
|
|
49
54
|
};
|
|
50
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Build an unsigned send flow (native CELO or ERC-20 transfer).
|
|
58
|
+
* Returns `SerializedPreparedFlow` for wagmi `sendTransaction`.
|
|
59
|
+
*/
|
|
51
60
|
async prepareSend(from, to, token, amount) {
|
|
52
61
|
const resolved = this.tokenService.resolveToken(token);
|
|
53
62
|
if (resolved.address === "native") {
|
|
@@ -89,5 +98,64 @@ export class TransactionService {
|
|
|
89
98
|
};
|
|
90
99
|
return serializePreparedFlow(flow);
|
|
91
100
|
}
|
|
101
|
+
/** Current gas fee data including EIP-1559 fees when supported. */
|
|
102
|
+
async getGasFeeData() {
|
|
103
|
+
const { public: client } = this.clientFactory.getClients();
|
|
104
|
+
const [block, gasPrice] = await Promise.all([
|
|
105
|
+
client.getBlock({ blockTag: "latest" }),
|
|
106
|
+
client.getGasPrice(),
|
|
107
|
+
]);
|
|
108
|
+
const baseFeePerGas = block.baseFeePerGas;
|
|
109
|
+
if (baseFeePerGas) {
|
|
110
|
+
const maxPriorityFeePerGas = parseGwei("2");
|
|
111
|
+
const maxFeePerGas = baseFeePerGas * 2n + maxPriorityFeePerGas;
|
|
112
|
+
return {
|
|
113
|
+
network: "mainnet",
|
|
114
|
+
baseFeePerGas: baseFeePerGas.toString(),
|
|
115
|
+
maxFeePerGas: maxFeePerGas.toString(),
|
|
116
|
+
maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),
|
|
117
|
+
gasPrice: gasPrice.toString(),
|
|
118
|
+
eip1559: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
network: "mainnet",
|
|
123
|
+
baseFeePerGas: "0",
|
|
124
|
+
maxFeePerGas: gasPrice.toString(),
|
|
125
|
+
maxPriorityFeePerGas: "0",
|
|
126
|
+
gasPrice: gasPrice.toString(),
|
|
127
|
+
eip1559: false,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/** Generic transaction gas estimate (not token-transfer specific). */
|
|
131
|
+
async estimateTransaction(params) {
|
|
132
|
+
const { public: client } = this.clientFactory.getClients();
|
|
133
|
+
const value = params.value ? BigInt(params.value) : 0n;
|
|
134
|
+
const data = params.data ?? "0x";
|
|
135
|
+
const [gasLimit, feeData] = await Promise.all([
|
|
136
|
+
client.estimateGas({
|
|
137
|
+
account: params.from,
|
|
138
|
+
to: params.to,
|
|
139
|
+
value,
|
|
140
|
+
data,
|
|
141
|
+
}),
|
|
142
|
+
this.getGasFeeData(),
|
|
143
|
+
]);
|
|
144
|
+
const maxFee = BigInt(feeData.maxFeePerGas);
|
|
145
|
+
const estimatedCost = gasLimit * maxFee;
|
|
146
|
+
const estimatedCostCelo = Number(estimatedCost) / 1e18;
|
|
147
|
+
return {
|
|
148
|
+
network: "mainnet",
|
|
149
|
+
from: params.from,
|
|
150
|
+
to: params.to,
|
|
151
|
+
gasLimit: gasLimit.toString(),
|
|
152
|
+
gasPrice: feeData.gasPrice,
|
|
153
|
+
maxFeePerGas: feeData.maxFeePerGas,
|
|
154
|
+
maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
|
|
155
|
+
estimatedCost: estimatedCost.toString(),
|
|
156
|
+
estimatedCostFormatted: `${estimatedCostCelo} CELO`,
|
|
157
|
+
isEip1559: feeData.eip1559,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
92
160
|
}
|
|
93
161
|
//# 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"}
|