|
| 1 | +import assert from "node:assert"; |
| 2 | +import * as Aleo from '@demox-labs/aleo-sdk'; |
| 3 | +import { getMappingValue, getMTSPBalance, getProgram } from "../../aleo/client" |
| 4 | +import { formatAleoString } from "../../util"; |
| 5 | + |
| 6 | +const [grant_num, programId] = process.argv.slice(2); |
| 7 | +assert(grant_num, "grant_num is required"); |
| 8 | +assert(programId, "programId is required"); |
| 9 | +const network = process.env.NETWORK || "TestnetV0"; |
| 10 | +assert(network === "MainnetV0" || network === "TestnetV0", "env.network must be MainnetV0 or TestnetV0"); |
| 11 | +const rpcUrl = process.env.RPC_URL || "http://localhost:3030"; |
| 12 | +assert(rpcUrl, "env.RPC_URL is required"); |
| 13 | +assert(rpcUrl === "https://testnetbeta.aleorpc.com" || rpcUrl === "https://mainnet.aleorpc.com", "env.RPC_URL must be https://testnetbeta.aleorpc.com or https://mainnetbeta.aleorpc.com"); |
| 14 | +let tokenRegistryProgramId = "token_registry.aleo"; |
| 15 | +let pondoProtocolProgramId = "pondo_protocol.aleo"; |
| 16 | +if (network === "TestnetV0") { |
| 17 | + tokenRegistryProgramId = "multi_token_support_programv1.aleo"; |
| 18 | + pondoProtocolProgramId = "pondo_core_protocolv1.aleo"; |
| 19 | +} |
| 20 | +const paleoTokenId = "1751493913335802797273486270793650302076377624243810059080883537084141842600field"; |
| 21 | +const pondoProgram = await getProgram(pondoProtocolProgramId); |
| 22 | +const pondoProgramAddress = Aleo.Program.fromString(network, pondoProgram).toAddress(); |
| 23 | + |
| 24 | +function convertToNumber(value: string) { |
| 25 | + return parseInt(value.substring(0, value.indexOf("u"))); |
| 26 | +} |
| 27 | + |
| 28 | +async function calculateGDPWithdraw( |
| 29 | + grant_num: number, |
| 30 | + programId: string |
| 31 | +) { |
| 32 | + let grant = await getMappingValue(`${grant_num}u8`, programId, "grants"); |
| 33 | + let formattedGrantJson = JSON.parse(formatAleoString(grant)); |
| 34 | + console.log("grant", formattedGrantJson); |
| 35 | + let registeredPaleo = await getMappingValue(paleoTokenId, tokenRegistryProgramId, "registered_tokens"); |
| 36 | + let formattedRegisteredPaleo = JSON.parse(formatAleoString(registeredPaleo)); |
| 37 | + let mintedPaleou64 = formattedRegisteredPaleo.supply as string; |
| 38 | + let mintedPaleo = convertToNumber(mintedPaleou64); |
| 39 | + let paleoCommissionu64 = await getMappingValue("0u8", pondoProtocolProgramId, "owed_commission"); |
| 40 | + let paleoCommission = convertToNumber(paleoCommissionu64); |
| 41 | + let totalPaleoPool = mintedPaleo + paleoCommission; |
| 42 | + let delegated_creditsu64 = await getMappingValue("0u8", pondoProtocolProgramId, "balances"); |
| 43 | + let delegatedCredits = convertToNumber(delegated_creditsu64); |
| 44 | + let core_protocol_account = await getMappingValue(pondoProgramAddress, "credits.aleo", "account"); |
| 45 | + let coreProtocolAccount = convertToNumber(core_protocol_account); |
| 46 | + let reserved_for_withdrawal = await getMappingValue("2u8", pondoProtocolProgramId, "balances"); |
| 47 | + let reservedForWithdrawal = convertToNumber(reserved_for_withdrawal); |
| 48 | + let totalCreditsPool = delegatedCredits + coreProtocolAccount - reservedForWithdrawal; |
| 49 | + let grantee_credits_balance = formattedGrantJson.credits_amount; |
| 50 | + let granteeCreditsBalance = convertToNumber(grantee_credits_balance); |
| 51 | + let grantee_paleo_balance = formattedGrantJson.paleo_amount; |
| 52 | + let granteePaleoBalance = convertToNumber(grantee_paleo_balance); |
| 53 | + |
| 54 | + let maxWithdrawablePaleo = granteePaleoBalance - (granteeCreditsBalance * totalPaleoPool / totalCreditsPool); |
| 55 | + console.log("maxWithdrawablePaleo", maxWithdrawablePaleo); |
| 56 | +} |
| 57 | + |
| 58 | +calculateGDPWithdraw(parseInt(grant_num), programId); |
0 commit comments