Skip to content

Commit 52d9f33

Browse files
Adds New Kgen fee contracts (#4562)
* Adds Kgen native token revenue event * addd new kgen revenue contracts * fix issue * Revert "package-lock.json" --------- Co-authored-by: YogeshIndigg <[email protected]>
1 parent 16fc93d commit 52d9f33

File tree

1 file changed

+91
-43
lines changed

1 file changed

+91
-43
lines changed

fees/kgen.ts

Lines changed: 91 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,62 @@ interface DepositFungible {
1515
type: string;
1616
}
1717

18-
const config: Record<string, string> = {
19-
[CHAIN.APTOS]: "0x5a96fab415f43721a44c5a761ecfcccc3dae9c21f34313f0e594b49d8d4564f4",
20-
[CHAIN.POLYGON]: "0x9Df4C994d8d8c440d87da8BA94D355BB85706f51",
21-
}
18+
const aptosConfig = {
19+
contracts: [
20+
"0x5a96fab415f43721a44c5a761ecfcccc3dae9c21f34313f0e594b49d8d4564f4",
21+
"0x61b28909165252d7d21dbcb16572eaf13a660ad3d6d9884358894e0ea88d1e1f"
22+
]
23+
};
24+
25+
const polygonConfig = {
26+
contracts: [
27+
{
28+
address: "0x9Df4C994d8d8c440d87da8BA94D355BB85706f51",
29+
events: [
30+
{
31+
abi: "event ItemSoldV1(uint256 tokenId, uint256 quantity, uint256 totalPrice)",
32+
amountField: "totalPrice"
33+
}
34+
]
35+
},
36+
{
37+
address: "0x1Fcfa7866Eb4361E322aFbcBcB426B27a29d90Bd",
38+
events: [
39+
{
40+
abi: "event OrderPlaced(string orderId, string dpId, string productId, string purchaseUtr, string purchaseDate, uint256 quantity, uint256 amount, address customer)",
41+
amountField: "amount"
42+
},
43+
// Add more events for this contract here
44+
]
45+
},
46+
// Add more contracts here
47+
]
48+
};
2249

23-
const POLYGON_USDT_ADDRESS = ADDRESSES.polygon.USDT
24-
const ItemSoldEvent = "event ItemSoldV1(uint256 tokenId, uint256 quantity, uint256 totalPrice)";
25-
const PAGE_SIZE = 100;
26-
const APT_DECIMALS = 1e8;
50+
const POLYGON_USDT_ADDRESS = ADDRESSES.polygon.USDT;
51+
const APTOS_USDT_ADDRESS = ADDRESSES.aptos.USDC
52+
const PAGE_SIZE = 100;
53+
const APT_DECIMALS = 1e8;
54+
const USDC_DECIMALS = 1e6;
2755
const toUnixTime = (timestamp: string): number =>
2856
Math.floor(Number(timestamp) / 1e6);
2957

3058
const version2tsCache: Record<string, number> = {};
59+
3160
async function versionToTimestamp(version: string): Promise<number> {
3261
if (version2tsCache[version] !== undefined) return version2tsCache[version];
3362
const block = await fetchURL(`${APTOS_RPC}/v1/blocks/by_version/${version}`);
3463
const ts = block?.block_timestamp ? toUnixTime(block.block_timestamp) : 0;
3564
version2tsCache[version] = ts;
3665
return ts;
3766
}
67+
3868
async function getEventData(
3969
resource: any,
4070
fromTimestamp: number,
4171
toTimestamp: number,
42-
chain: string,
43-
eventKeys: string[] = ["deposit_fungible", "deposit_native"],
72+
contractAddress: string,
73+
eventKeys: string[] = ["deposit_fungible", "deposit_native", "order_placed"],
4474
): Promise<DepositFungible[]> {
4575

4676
const collected: DepositFungible[] = [];
@@ -55,14 +85,16 @@ async function getEventData(
5585

5686
for (let seq = totalEvents - 1; seq >= 0; seq -= PAGE_SIZE) {
5787
const batchStart = Math.max(seq - PAGE_SIZE + 1, 0);
58-
const url = `${APTOS_RPC}/v1/accounts/${config[chain]}/events/${creationNum}?start=${batchStart}&limit=${PAGE_SIZE}`;
88+
89+
const url = `${APTOS_RPC}/v1/accounts/${contractAddress}/events/${creationNum}?start=${batchStart}&limit=${PAGE_SIZE}`;
90+
5991
const events: any[] = await fetchURL(url);
6092
if (!events?.length) break;
6193

6294
for (const e of events.reverse()) {
6395
const ts = await versionToTimestamp(e.version);
64-
if (ts > toTimestamp) continue;
65-
if (ts < fromTimestamp) break;
96+
if (ts > toTimestamp) continue;
97+
if (ts < fromTimestamp) break;
6698

6799
collected.push({
68100
amount: e.data.amount,
@@ -82,22 +114,30 @@ async function getEventData(
82114

83115
const fetchAptosRevenue: FetchV2 = async (options: FetchOptions) => {
84116
const dailyFees = options.createBalances();
85-
const resources = await getResources(config[options.chain]);
86-
87-
const revHolders = resources.filter((resource) =>
88-
resource.type.includes("RevenueContractV2::RevenueEventHolder")
89-
|| resource.type.includes("RevenueContractV2::RevenueEventHolderV1"));
90-
91-
const eventArrays = await Promise.all(
92-
revHolders.map((r) =>
93-
getEventData(r, options.fromTimestamp, options.toTimestamp, options.chain))
94-
);
95-
96-
for (const event of eventArrays.flat()) {
97-
if (event.token) {
98-
dailyFees.add(event.token, event.amount);
99-
} else {
100-
dailyFees.addCGToken("aptos", Number(event.amount) / APT_DECIMALS);
117+
118+
for (const contractAddress of aptosConfig.contracts) {
119+
const resources = await getResources(contractAddress);
120+
121+
const revHolders = resources.filter((resource) =>
122+
resource.type.includes("RevenueContractV2::RevenueEventHolder")
123+
|| resource.type.includes("RevenueContractV2::RevenueEventHolderV1")
124+
|| resource.type.includes("order_management_v1::B2bRevenueEventHolder")
125+
);
126+
127+
const eventArrays = await Promise.all(
128+
revHolders.map((r) =>
129+
getEventData(r, options.fromTimestamp, options.toTimestamp, contractAddress)
130+
)
131+
);
132+
for (const event of eventArrays.flat()) {
133+
if (event.token) {
134+
dailyFees.add(event.token, event.amount);
135+
} else if (event.type = "0x61b28909165252d7d21dbcb16572eaf13a660ad3d6d9884358894e0ea88d1e1f::order_management_v1::OrderPlacedEvent") {
136+
dailyFees.addUSDValue(Number(event.amount) / USDC_DECIMALS);
137+
}
138+
else {
139+
dailyFees.addCGToken("aptos", Number(event.amount) / APT_DECIMALS);
140+
}
101141
}
102142
}
103143

@@ -109,20 +149,28 @@ const fetchAptosRevenue: FetchV2 = async (options: FetchOptions) => {
109149
};
110150

111151
const fetchPolygonRevenue: FetchV2 = async (options: FetchOptions) => {
112-
const logs: any[] = await options.getLogs({
113-
target: config[options.chain],
114-
eventAbi: ItemSoldEvent,
115-
});
116-
117-
const dailyFees = options.createBalances()
152+
const dailyFees = options.createBalances();
118153

119-
for (const log of logs) {
120-
const amount = Number(log.totalPrice);
121-
if (!isNaN(amount)) {
122-
dailyFees.add(POLYGON_USDT_ADDRESS, amount);
154+
for (const contract of polygonConfig.contracts) {
155+
for (const event of contract.events) {
156+
const logs: any[] = await options.getLogs({
157+
target: contract.address,
158+
eventAbi: event.abi,
159+
});
160+
for (const log of logs) {
161+
let amount: number = 0;
162+
if (log.totalPrice) {
163+
amount = Number(log.totalPrice);
164+
}
165+
else {
166+
amount = Number(log.amount);
167+
}
168+
if (!isNaN(amount)) {
169+
dailyFees.add(POLYGON_USDT_ADDRESS, amount);
170+
}
171+
}
123172
}
124173
}
125-
126174
return {
127175
dailyFees,
128176
dailyRevenue: dailyFees,
@@ -142,7 +190,8 @@ const adapter: SimpleAdapter = {
142190
adapter: {
143191
[CHAIN.APTOS]: {
144192
fetch: fetchAptosRevenue,
145-
start: "2025-06-02",
193+
start: "2025-06-02",
194+
146195
},
147196
[CHAIN.POLYGON]: {
148197
fetch: fetchPolygonRevenue,
@@ -151,5 +200,4 @@ const adapter: SimpleAdapter = {
151200
},
152201
};
153202

154-
export default adapter;
155-
203+
export default adapter;

0 commit comments

Comments
 (0)