MCPcopy Create free account
hub / github.com/Modulus-Labs/RockyBot / handler

Function handler

FirebaseScripts/scripts/read_events.ts:44–127  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

42// Initialize Firebase
43
44async function handler() {
45 const provider = new ethers.providers.AlchemyProvider("mainnet", "-HC6HC2R9crhQe3tcu4h4Qq2nYfCRc9t");
46 const RfB = RockafellerBotL1__factory.connect(L1_CONTRACT_ADDR, provider);
47 const url = "https://min-api.cryptocompare.com/data/price?fsym=WETH&tsyms=USDC";
48
49 const apiCall = await axios({
50 method:'get',
51 url
52 })
53 const exchangeRate = new BigFloat(apiCall.data.USDC);
54
55 const app = initializeApp(firebaseConfig);
56 const db = getFirestore(app);
57 var promises: Array<Promise<any>> = new Array<Promise<any>>()
58
59 //get rocky trades
60 {
61 console.log("getting trades!");
62 const trades = await RfB.queryFilter(RfB.filters.executedTrade());
63 const tradeDocuments: [RockyTradesDocument, Date][] = await Promise.all(trades.map(async (trade) => {
64
65 var amountToken = new BigFloat(trade.args.amount.toString())
66 if(trade.args.instruction == 0) var amountUSD = amountToken.div(10**6);
67 else var amountUSD = amountToken.div(new BigFloat(10).pow(18)).mul(exchangeRate);
68
69 var blockTimestamp = new Date((await trade.getBlock()).timestamp*1000);
70 return [{
71 action_type: trade.args.instruction == 0 ? "BUY" : "SELL",
72 amount: amountUSD.toString(),
73 timestamp: new Timestamp(Math.ceil(blockTimestamp.getTime()/1000), 0) as Timestamp_Fake
74 }, blockTimestamp]
75 }));
76 console.log("writing trades!");
77 tradeDocuments.forEach((tradeDocument) => {
78 promises.push(db.collection("rocky_trades").doc(tradeDocument[1].getTime().toString()).set(tradeDocument[0]));
79 });
80 console.log("done with trades");
81 }
82
83 //get rocky donations
84 {
85 console.log("getting donations!");
86 const donations = await RfB.queryFilter(RfB.filters.receivedFunds());
87 const donationDocuments: [RockyDonationsDocument, Date][] = await Promise.all(donations.map(async (trade) => {
88 var ens = await provider.lookupAddress(trade.args.sender);
89 var blockTimestamp = new Date((await trade.getBlock()).timestamp*1000);
90 return [{
91 amount: trade.args.amount.toString(),
92 contributor_address: ens ?? trade.args.sender,
93 timestamp: new Timestamp(Math.ceil(blockTimestamp.getTime()/1000), 0) as Timestamp_Fake,
94 token: trade.args.tokenType == 0 ? "USDC" : "WETH"
95 }, blockTimestamp]
96 }));
97 console.log("writing donations!");
98 console.log(donationDocuments.length);
99 donationDocuments.forEach((donationDocument) => {
100 promises.push(db.collection("rocky_donations").doc(donationDocument[1].getTime().toString()).set(donationDocument[0]));
101 });

Callers 1

read_events.tsFile · 0.70

Calls 4

currentAmountUSDCMethod · 0.80
currentAmountWEthMethod · 0.80
connectMethod · 0.65
queryFilterMethod · 0.65

Tested by

no test coverage detected