Skip to content

Commit

Permalink
[Tooling] Alloyx rebalancing script (#320)
Browse files Browse the repository at this point in the history
  • Loading branch information
crypto-vincent authored Dec 31, 2023
1 parent d18894d commit afcd43c
Show file tree
Hide file tree
Showing 6 changed files with 175 additions and 8 deletions.
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"@project-serum/anchor": "0.26.0",
"@solana/spl-token": "0.3.7",
"@solana/web3.js": "1.73.0",
"@uxd-protocol/uxd-client": "9.0.0-rc2"
"@uxd-protocol/uxd-client": "9.0.0-rc6"
},
"devDependencies": {
"@types/bn.js": "^5.1.1",
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
167 changes: 167 additions & 0 deletions scripts/trigger_rebalance_alloyx.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
import {
AlloyxVaultDepository,
UXDClient,
nativeToUi,
} from '@uxd-protocol/uxd-client';
import { Transaction, ComputeBudgetProgram } from '@solana/web3.js';
import { web3 } from '@project-serum/anchor';
import {
createCredixLpDepositoryMainnet,
createIdentityDepositoryMainnet,
createMercurialVaultDepositoryMainnet,
createAlloyxVaultDepositoryMainnet,
getConnectionMainnet,
payer,
TXN_OPTS,
createControllerMainnet,
uxdProgramIdMainnet,
} from './common';

async function main() {
console.log();
console.log('------------------------------ ------------------------------');
console.log('------------------------ PREPARATION ------------------------');
console.log('------------------------------ ------------------------------');
console.log();

const controller = createControllerMainnet();
const identityDepository = createIdentityDepositoryMainnet();
const mercurialVaultDepository =
await createMercurialVaultDepositoryMainnet();
const credixLpDepository = await createCredixLpDepositoryMainnet();
const alloyxVaultDepository = await createAlloyxVaultDepositoryMainnet();

controller.info();
identityDepository.info();
mercurialVaultDepository.info();
credixLpDepository.info();
alloyxVaultDepository.info();

const alloyxVaultDepositoryAccount =
await alloyxVaultDepository.getOnchainAccount(
getConnectionMainnet(),
TXN_OPTS
);

const profitsBeneficiaryCollateral =
alloyxVaultDepositoryAccount.profitsBeneficiaryCollateral;
console.log(
'profitsBeneficiaryCollateral',
profitsBeneficiaryCollateral.toBase58()
);

const uxdClient = new UXDClient(uxdProgramIdMainnet);

console.log();
console.log('------------------------------ ------------------------------');
console.log('---------------------- ALLOYX REBALANCE ---------------------');
console.log('------------------------------ ------------------------------');
console.log();

const rebalanceInstruction =
uxdClient.createRebalanceAlloyxVaultDepositoryInstruction(
controller,
identityDepository,
mercurialVaultDepository,
credixLpDepository,
alloyxVaultDepository,
payer.publicKey,
profitsBeneficiaryCollateral,
TXN_OPTS
);
const rebalanceCreateTransaction = new Transaction();
rebalanceCreateTransaction.add(rebalanceInstruction);
rebalanceCreateTransaction.add(
ComputeBudgetProgram.setComputeUnitLimit({
units: 400_000,
})
);
rebalanceCreateTransaction.feePayer = payer.publicKey;

try {
const rebalanceResult = await web3.sendAndConfirmTransaction(
getConnectionMainnet(),
rebalanceCreateTransaction,
[payer],
TXN_OPTS
);
console.log('rebalanceResult', rebalanceResult);
} catch (rebalanceError) {
console.log('rebalanceError', rebalanceError);
}

console.log();
console.log('------------------------------ ------------------------------');
console.log('------------------- LATEST ON-CHAIN STATE -------------------');
console.log('------------------------------ ------------------------------');
console.log();

const alloyxProgram = AlloyxVaultDepository.getAlloyxProgram(
getConnectionMainnet(),
alloyxVaultDepository.alloyxProgramId
);

const alloyxVaultInfo = await AlloyxVaultDepository.getAlloyxVaultInfoAccount(
alloyxProgram,
alloyxVaultDepository.alloyxVaultInfo
);
console.log('> alloyxVaultInfo');
console.log(
'alloyxVaultInfo.walletDeskUsdcValue',
nativeToUi(
alloyxVaultInfo.walletDeskUsdcValue,
alloyxVaultDepository.collateralDecimals
)
);
console.log();

const alloyxVaultPass = await AlloyxVaultDepository.getAlloyxVaultPassAccount(
alloyxProgram,
alloyxVaultDepository.alloyxVaultPass
);
console.log('> alloyxVaultPass');
console.log('alloyxVaultPass.investor', alloyxVaultPass.investor.toBase58());
console.log();

const alloyxVaultMint = await getConnectionMainnet().getTokenSupply(
alloyxVaultInfo.alloyxMint
);
console.log('> alloyxVaultMint');
console.log('alloyxVaultMint.supply', alloyxVaultMint.value.uiAmount);
console.log();

const alloyxVaultCollateral =
await getConnectionMainnet().getTokenAccountBalance(
alloyxVaultDepository.alloyxVaultCollateral
);
console.log('> alloyxVaultCollateral');
console.log(
'alloyxVaultCollateral.amount',
alloyxVaultCollateral.value.uiAmount
);
console.log();

const depositoryCollateralAccount =
await getConnectionMainnet().getTokenAccountBalance(
alloyxVaultDepository.depositoryCollateral
);
console.log('> depositoryCollateral');
console.log(
'depositoryCollateral.amount',
depositoryCollateralAccount.value.uiAmount
);
console.log();

const depositorySharesAccount =
await getConnectionMainnet().getTokenAccountBalance(
alloyxVaultDepository.depositoryShares
);
console.log('> depositoryShares');
console.log(
'depositoryShares.amount',
depositorySharesAccount.value.uiAmount
);
console.log();
}

main();

0 comments on commit afcd43c

Please sign in to comment.