https://github.com/uxdprotocol/uxd-client
JavaScript Client for the UXD Solana Program.
https://github.com/uxdprotocol/uxd-client
Last synced: 4 months ago
JSON representation
JavaScript Client for the UXD Solana Program.
- Host: GitHub
- URL: https://github.com/uxdprotocol/uxd-client
- Owner: UXDProtocol
- License: mit
- Created: 2022-04-19T23:04:54.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-12-22T10:00:57.000Z (over 2 years ago)
- Last Synced: 2025-05-07T04:47:29.706Z (about 1 year ago)
- Language: TypeScript
- Homepage: https://uxd.fi
- Size: 2.47 MB
- Stars: 14
- Watchers: 1
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![npm][npm-image]][npm-url]
[npm-image]: https://img.shields.io/npm/v/@uxd-protocol/uxd-client.svg
[npm-url]: https://www.npmjs.com/package/@uxd-protocol/uxd-client
# JavaScript Client for the UXD Solana Program
## Install
```
npm install --save @uxd-protocol/uxd-client
```
## Usage
### About UXD on Solana
#### Mainnet-Beta
- UXD Program: _UXD8m9cvwk4RcSxnX2HZ9VudQCEeDH6fRnB4CAP57Dr_
- UXD Mint: _7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT_
#### Devnet
- UXD Program: _BA67esrWE7cPzQWtAftaTbrVWtmHZJ1PbbBBpZgpjH4p_
- UXD Mint: _B8fvu55oqVmPzRFjo99wvnPXkuA2AcFBou5tstpeHFaR_
#### Instantiate the Controller Object
```javascript
import { Controller } from '@uxd-protocol/uxd-client';
const mainnetProgramId = new PublicKey('UXD8m9cvwk4RcSxnX2HZ9VudQCEeDH6fRnB4CAP57Dr');
const controller = new Controller(
'UXD',
6,
mainnetProgramId
);
```
### Instantiate a Solana Connection
```javascript
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://api.mainnet-beta.solana.com');
```
### Instantiate the UXD Client
```javascript
import { UXDClient } from '@uxd-protocol/uxd-client';
const mainnetProgramId = new PublicKey('UXD8m9cvwk4RcSxnX2HZ9VudQCEeDH6fRnB4CAP57Dr');
const client = new UXDClient(mainnetProgramId);
```
## Available Instructions
### Public instructions
All public instructions are permissionless, anyone can use them at any point in time.
Note that appart from mint/redeem, all other instructions do not have any parameter, and simply trigger a periodic maintainance action needed by the program.
- `mint` (User can deposit USDC and receive UXD in exchange)
- `redeem` (User can return UXD and receive USDC in exchange)
- `collect_profits_of_mercurial_vault_depository` (Buyback UXP using profits)
- `collect_profits_of_credix_lp_depository` (Buyback UXP using profits)
- `rebalance_create_withdraw_request_from_credix_lp_depository` (automatic credix rebalance, step1)
- `rebalance_redeem_withdraw_request_from_credix_lp_depository` (automatic credix rebalance, step2)
### Instructions reserved for DAO governance
Those instructions are internal instructions usable only by the UXP governance.
They will be used to configure and initialize the on-chain program states.
Each instruction require the DAO's authority to sign the transaction.
#### Controller (program's root state)
- `initialize_controller`
- `edit_controller`
- `freeze_program`
#### Identity depository (hold USDC)
- `edit_identity_depository`
- `initialize_identity_depository`
- `mint_with_identity_depository`
- `redeem_from_identity_depository`
#### Mercurial vault depository (liquid on-chain investment)
- `register_mercurial_vault_depository`
- `edit_mercurial_vault_depository`
- `mint_with_mercurial_vault_depository`
- `redeem_from_mercurial_vault_depository`
#### Credix lp depository (semi-liquid lending)
- `register_credix_lp_depository`
- `edit_credix_lp_depository`
- `mint_with_credix_lp_depository`
- `redeem_from_credix_lp_depository`
## How to use
### Javascript
Complete example for a UXD mint:
```ts
import { PublicKey, Connection, ComputeBudgetProgram } from '@solana/web3.js';
import { UXDClient } from '@uxd-protocol/uxd-client';
import { Controller } from '@uxd-protocol/uxd-client';
import { IdentityDepository } from '@uxd-protocol/uxd-client';
import { MercurialVaultDepository } from '@uxd-protocol/uxd-client';
import { CredixLpDepository } from '@uxd-protocol/uxd-client';
import { Controller } from '@uxd-protocol/uxd-client';
const uxdProgramId = new PublicKey('UXD8m9cvwk4RcSxnX2HZ9VudQCEeDH6fRnB4CAP57Dr');
const usdcMint = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');
/**
* Initialize UXD's data sources
*/
const client = new UXDClient(uxdProgramId);
const connection = new Connection('https://api.mainnet-beta.solana.com');
const controller = new Controller('UXD', 6, uxdProgramId);
const identityDepository = new IdentityDepository(
usdcMint,
'USDC',
6,
uxdProgramId
);
const mercurialVaultDepository = await MercurialVaultDepository.initialize({
connection: connection,
collateralMint: {
mint: usdcMint,
name: 'USDC',
symbol: 'USDC',
decimals: 6,
},
uxdProgramId,
});
const credixLpDepository = await CredixLpDepository.initialize({
connection: connection,
uxdProgramId: uxdProgramId,
collateralMint: usdcMint,
collateralSymbol: 'USDC',
credixProgramId: new PublicKey(
'CRDx2YkdtYtGZXGHZ59wNv1EwKHQndnRc1gT4p8i2vPX'
),
});
/**
* Generate and process the mint instruction and transaction
*/
const user: Signer = new Keypair(); // Use your keys here
const TXN_OPTS = {
commitment: 'confirmed',
preflightCommitment: 'confirmed',
skipPreflight: true,
};
const mintInstruction = client.createMintWithCredixLpDepositoryInstruction(
controller,
identityDepository,
mercurialVaultDepository,
credixLpDepository,
user,
42, // ui amount to mint
TXN_OPTS
);
const mintTransaction = new Transaction();
mintTransaction.add(mintInstruction);
mintTransaction.add(
ComputeBudgetProgram.setComputeUnitLimit({
units: 400_000,
})
);
mintTransaction.feePayer = user.publicKey;
const mintResult = await web3.sendAndConfirmTransaction(
connection,
mintTransaction,
[user],
TXN_OPTS
);
```
### Rust
For a rust-based CPI call, please checkout the uxd-cpi repository:
https://github.com/UXDProtocol/uxd-cpi