()
| 42 | // Initialize Firebase |
| 43 | |
| 44 | async 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 | }); |
no test coverage detected