Skip to content

Commit

Permalink
refactor added uxdClient fct
Browse files Browse the repository at this point in the history
  • Loading branch information
sjillen committed Dec 10, 2021
1 parent d79dd21 commit bc4e7f0
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 354 deletions.
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@
]
},
"dependencies": {
"@blockworks-foundation/mango-client": "^3.2.2",
"@blockworks-foundation/mango-client": "^3.2.15",
"@project-serum/anchor": "^0.19.0",
"@solana/spl-token": "^0.1.8",
"@solana/web3.js": "1.31.0",
"@emotion/react": "^11.1.5",
"@emotion/styled": "^11.3.0",
"@headlessui/react": "^1.0.0",
"@heroicons/react": "^1.0.1",
"@project-serum/anchor": "^0.18.2",
"@project-serum/borsh": "^0.2.2",
"@project-serum/common": "^0.0.1-beta.3",
"@project-serum/sol-wallet-adapter": "^0.2.0",
"@solana/spl-token": "^0.1.3",
"@solana/web3.js": "^1.30.2",
"@tippyjs/react": "^4.2.5",
"@uxdprotocol/uxd-client": "^2.46.0",
"@uxdprotocol/uxd-client": "^2.56.0",
"axios": "^0.21.1",
"bignumber.js": "^9.0.1",
"immer": "^9.0.1",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,7 @@
import { Program, BN, Provider, Wallet, utils } from '@project-serum/anchor'
import {
ASSOCIATED_TOKEN_PROGRAM_ID,
TOKEN_PROGRAM_ID,
} from '@solana/spl-token'
import {
TransactionInstruction,
PublicKey,
Connection,
Keypair,
} from '@solana/web3.js'
import {
Controller,
createAndInitializeMango,
MangoDepository,
} from '@uxdprotocol/uxd-client'
import uxdIdl from './uxdIdl'

// derives the canonical token account address for a given wallet and mint
function findAssociatedTokenAddress(
walletKey: PublicKey,
mintKey: PublicKey
): PublicKey {
return findAddr(
[walletKey.toBytes(), TOKEN_PROGRAM_ID.toBytes(), mintKey.toBytes()],
ASSOCIATED_TOKEN_PROGRAM_ID
)
}

// simple shorthand
function findAddr(
seeds: (Buffer | Uint8Array)[],
programId: PublicKey
): PublicKey {
return utils.publicKey.findProgramAddressSync(seeds, programId)[0]
}
import { Provider } from '@project-serum/anchor'
import { TransactionInstruction, PublicKey, Connection } from '@solana/web3.js'
import { MangoDepository } from '@uxdprotocol/uxd-client'
import { uxdClient, initializeMango } from './uxdClient'

const createDepositInsuranceToMangoDepositoryInstruction = async (
connection: Connection,
Expand All @@ -43,16 +11,9 @@ const createDepositInsuranceToMangoDepositoryInstruction = async (
insuranceMint: PublicKey,
insuranceDepositedAmount: number
): Promise<TransactionInstruction> => {
// generating a random wallet to be able to instantiate a dummy provider
const provider = new Provider(
connection,
new Wallet(Keypair.generate()),
Provider.defaultOptions()
)
const mango = await createAndInitializeMango(provider, 'devnet')
const program = new Program(uxdIdl, uxdProgramId, provider)
const { client, controller } = uxdClient(connection, uxdProgramId)

const controller = new Controller('UXD', 6, uxdProgramId)
const mango = await initializeMango(connection)
const depository = new MangoDepository(
depositoryMint,
'collateralName',
Expand All @@ -63,68 +24,13 @@ const createDepositInsuranceToMangoDepositoryInstruction = async (
uxdProgramId
)

const depositedTokenIndex = mango.group.getTokenIndex(
depository.insuranceMint
)
const mangoCacheAccount = mango.getMangoCacheAccount()
const mangoRootBankAccount = mango.getRootBankForToken(depositedTokenIndex)
const mangoNodeBankAccount = mango.getNodeBankFor(
depositedTokenIndex,
depository.insuranceMint
)
const mangoDepositedVaultAccount = mango.getVaultFor(depositedTokenIndex)
const authorityInsuranceATA = findAssociatedTokenAddress(
return client.createDepositInsuranceToMangoDepositoryInstruction(
insuranceDepositedAmount,
controller,
depository,
mango,
authority,
depository.insuranceMint
)
const insuranceAmountBN = new BN(
insuranceDepositedAmount * 10 ** depository.insuranceMintdecimals
)

console.log({
authority: authority.toBase58(),
controller: controller.pda.toBase58(),
depository: depository.pda.toBase58(),
collateralMint: depository.collateralMint.toBase58(),
insuranceMint: depository.insuranceMint.toBase58(),
authorityInsurance: authorityInsuranceATA.toBase58(),
depositoryInsurancePassthroughAccount: depository.insurancePassthroughPda.toBase58(),
depositoryMangoAccount: depository.mangoAccountPda.toBase58(),
// mango accounts for CPI
mangoGroup: mango.group.publicKey.toBase58(),
mangoCache: mangoCacheAccount.toBase58(),
mangoRootBank: mangoRootBankAccount.toBase58(),
mangoNodeBank: mangoNodeBankAccount.toBase58(),
mangoVault: mangoDepositedVaultAccount.toBase58(),
//
tokenProgram: TOKEN_PROGRAM_ID.toBase58(),
mangoProgram: mango.programId.toBase58(),
})
return program.instruction.depositInsuranceToMangoDepository(
insuranceAmountBN,
{
accounts: {
authority: authority,
controller: controller.pda,
depository: depository.pda,
collateralMint: depository.collateralMint,
insuranceMint: depository.insuranceMint,
authorityInsurance: authorityInsuranceATA,
depositoryInsurancePassthroughAccount:
depository.insurancePassthroughPda,
depositoryMangoAccount: depository.mangoAccountPda,
// mango accounts for CPI
mangoGroup: mango.group.publicKey,
mangoCache: mangoCacheAccount,
mangoRootBank: mangoRootBankAccount,
mangoNodeBank: mangoNodeBankAccount,
mangoVault: mangoDepositedVaultAccount,
//
tokenProgram: TOKEN_PROGRAM_ID,
mangoProgram: mango.programId,
},
options: Provider.defaultOptions(),
}
Provider.defaultOptions()
)
}

Expand Down
45 changes: 9 additions & 36 deletions tools/sdk/uxdProtocol/createInitializeControllerInstruction.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
import { Program, BN, Provider, Wallet } from '@project-serum/anchor'
import { TOKEN_PROGRAM_ID } from '@solana/spl-token'
import {
SystemProgram,
SYSVAR_RENT_PUBKEY,
TransactionInstruction,
PublicKey,
Connection,
Keypair,
} from '@solana/web3.js'
import { Controller } from '@uxdprotocol/uxd-client'
import uxdIdl from './uxdIdl'
import { Provider } from '@project-serum/anchor'
import { TransactionInstruction, PublicKey, Connection } from '@solana/web3.js'
import { uxdClient } from './uxdClient'

const createInitializeControllerInstruction = (
uxdProgramId: PublicKey,
Expand All @@ -19,31 +10,13 @@ const createInitializeControllerInstruction = (
payer: PublicKey,
connection: Connection
): TransactionInstruction => {
// generating a random wallet to be able to instantiate a dummy provider
const provider = new Provider(
connection,
new Wallet(Keypair.generate()),
Provider.defaultOptions()
)
const program = new Program(uxdIdl, uxdProgramId, provider)
const controller = new Controller(mintSymbol, mintDecimals, uxdProgramId)
const { client, controller } = uxdClient(connection, uxdProgramId)

return program.instruction.initializeController(
controller.bump,
controller.redeemableMintBump,
new BN(mintDecimals),
{
accounts: {
authority,
payer,
controller: controller.pda,
redeemableMint: controller.redeemableMintPda,
rent: SYSVAR_RENT_PUBKEY,
systemProgram: SystemProgram.programId,
tokenProgram: TOKEN_PROGRAM_ID,
},
options: Provider.defaultOptions(),
}
return client.createInitializeControllerInstruction(
controller,
authority,
Provider.defaultOptions(),
payer
)
}

Expand Down
65 changes: 13 additions & 52 deletions tools/sdk/uxdProtocol/createRegisterMangoDepositoryInstruction.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
import { Program, Provider, Wallet } from '@project-serum/anchor'
import { TOKEN_PROGRAM_ID } from '@solana/spl-token'
import {
SystemProgram,
SYSVAR_RENT_PUBKEY,
TransactionInstruction,
PublicKey,
Connection,
Keypair,
} from '@solana/web3.js'
import {
Controller,
createAndInitializeMango,
MangoDepository,
} from '@uxdprotocol/uxd-client'
import uxdIdl from './uxdIdl'
import { Provider } from '@project-serum/anchor'
import { TransactionInstruction, PublicKey, Connection } from '@solana/web3.js'
import { MangoDepository } from '@uxdprotocol/uxd-client'
import { initializeMango, uxdClient } from './uxdClient'

const createRegisterMangoDepositoryInstruction = async (
connection: Connection,
Expand All @@ -23,16 +11,7 @@ const createRegisterMangoDepositoryInstruction = async (
collateralMint: PublicKey,
insuranceMint: PublicKey
): Promise<TransactionInstruction> => {
// generating a random wallet to be able to instantiate a dummy provider
const provider = new Provider(
connection,
new Wallet(Keypair.generate()),
Provider.defaultOptions()
)
const mango = await createAndInitializeMango(provider, 'devnet')
const program = new Program(uxdIdl, uxdProgramId, provider)

const controller = new Controller('UXD', 6, uxdProgramId)
const mango = await initializeMango(connection)
const depository = new MangoDepository(
collateralMint,
'collateralName',
Expand All @@ -43,32 +22,14 @@ const createRegisterMangoDepositoryInstruction = async (
uxdProgramId
)

return program.instruction.registerMangoDepository(
depository.bump,
depository.collateralPassthroughBump,
depository.insurancePassthroughBump,
depository.mangoAccountBump,
{
accounts: {
authority,
payer,
controller: controller.pda,
depository: depository.pda,
collateralMint: depository.collateralMint, // BTC/ WSOL.....
insuranceMint: depository.insuranceMint, // USDC
depositoryCollateralPassthroughAccount:
depository.collateralPassthroughPda,
depositoryInsurancePassthroughAccount:
depository.insurancePassthroughPda,
depositoryMangoAccount: depository.mangoAccountPda,
mangoGroup: mango.group.publicKey,
rent: SYSVAR_RENT_PUBKEY,
systemProgram: SystemProgram.programId,
tokenProgram: TOKEN_PROGRAM_ID,
mangoProgram: mango.programId,
},
options: Provider.defaultOptions(),
}
const { client, controller } = uxdClient(connection, uxdProgramId)
return client.createRegisterMangoDepositoryInstruction(
controller,
depository,
mango,
authority,
Provider.defaultOptions(),
payer
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,43 +1,20 @@
import { Program, BN, Provider, Wallet } from '@project-serum/anchor'
import {
TransactionInstruction,
PublicKey,
Connection,
Keypair,
} from '@solana/web3.js'
import { Controller } from '@uxdprotocol/uxd-client'
import uxdIdl from './uxdIdl'

const redeemableDecimals = 6
import { Provider } from '@project-serum/anchor'
import { TransactionInstruction, PublicKey, Connection } from '@solana/web3.js'
import { uxdClient } from './uxdClient'

const createSetMangoDepositoriesRedeemableSoftCapInstruction = (
connection: Connection,
uxdProgramId: PublicKey,
supplyCapUiAmount: number,
authority: PublicKey
): TransactionInstruction => {
// generating a random wallet to be able to instantiate a dummy provider
const provider = new Provider(
connection,
new Wallet(Keypair.generate()),
Provider.defaultOptions()
)
const { client, controller } = uxdClient(connection, uxdProgramId)

const program = new Program(uxdIdl, uxdProgramId, provider)
const controller = new Controller('UXD', redeemableDecimals, uxdProgramId)

const decimals = new BN(10 ** redeemableDecimals)
const supplyCapNativeAmount = new BN(supplyCapUiAmount).mul(decimals)

return program.instruction.setMangoDepositoriesRedeemableSoftCap(
supplyCapNativeAmount,
{
accounts: {
authority: authority,
controller: controller.pda,
},
options: Provider.defaultOptions(),
}
return client.createSetMangoDepositoriesRedeemableSoftCapInstruction(
controller,
authority,
supplyCapUiAmount,
Provider.defaultOptions()
)
}

Expand Down
Loading

0 comments on commit bc4e7f0

Please sign in to comment.