Skip to content

Commit 613ea2a

Browse files
committed
Add script for calculating withdraw
1 parent 09f5b3c commit 613ea2a

File tree

4 files changed

+63
-4
lines changed

4 files changed

+63
-4
lines changed

pondo-bot/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"buildLedger": "node ./dist/buildLedger.js",
2828
"runOracleApproval": "yarn build:dev && node ./dist/runOracleApproval.js",
2929
"compareProgramChanges": "yarn build:dev && node ./dist/compareProgramChanges.js",
30-
"runUpdateOracleTimestamp": "yarn build:dev && node ./dist/runUpdateOracleTimestamp.js"
30+
"runUpdateOracleTimestamp": "yarn build:dev && node ./dist/runUpdateOracleTimestamp.js",
31+
"calculateGDPWithdraw": "node ./dist/calculateGDPWithdraw.js"
3132
},
3233
"repository": {
3334
"type": "git",

pondo-bot/src/aleo/client.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@ export async function getMTSPBalance(
8383
tokenId: string,
8484
authorized: boolean = false
8585
): Promise<bigint> {
86-
const MTSP_PROGRAM = pondoPrograms.find((program) =>
87-
program.includes('token_registry')
88-
);
86+
const MTSP_PROGRAM = process.env.network === "TestnetV0" ? "multi_token_support_programv1.aleo" : "token_registry.aleo";
8987
const tokenOwnerString = `{ account: ${publicKey}, token_id: ${tokenId} }`;
9088
const tokenOwnerHash = Aleo.Plaintext.fromString(
9189
NETWORK,
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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);

pondo-bot/webpack.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ const testConfig = {
160160
path.resolve(__dirname, 'src') + '/tests/cases/pondoToken.test.ts',
161161
grantDisbursementTest:
162162
path.resolve(__dirname, 'src') + '/tests/cases/grantDisbursement.test.ts',
163+
calculateGDPWithdraw:
164+
path.resolve(__dirname, 'src') + '/tests/scripts/calculateGDPWithdraw.ts',
163165
snapshotRpcDb:
164166
path.resolve(__dirname, 'src') + '/tests/scripts/snapshotRpcDb.ts',
165167
swapRpcDb: path.resolve(__dirname, 'src') + '/tests/scripts/swapRpcDb.ts',

0 commit comments

Comments
 (0)