Skip to content

Commit

Permalink
[UXD] Adding alloyx depository register/edit IXs (#167)
Browse files Browse the repository at this point in the history
  • Loading branch information
crypto-vincent authored Jan 5, 2024
1 parent 825bc1a commit 1074729
Show file tree
Hide file tree
Showing 11 changed files with 288 additions and 160 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
"@urql/exchange-multipart-fetch": "1.0.1",
"@urql/exchange-persisted-fetch": "2.0.0",
"@urql/exchange-request-policy": "1.0.0",
"@uxd-protocol/uxd-client": "8.2.0-rc2",
"@uxd-protocol/uxd-client": "9.0.0-rc6",
"arweave": "1.11.4",
"axios": "0.26.1",
"bignumber.js": "9.0.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,15 @@ const schema = yup.object().shape({
credixLpDepositoryWeightBps: yup
.number()
.min(0, 'weight bps should be min 0'),
alloyxVaultDepositoryWeightBps: yup
.number()
.min(0, 'weight bps should be min 0'),
}),
routerDepositories: yup.object().shape({
identityDepository: yup.string(),
mercurialVaultDepository: yup.string(),
credixLpDepository: yup.string(),
alloyxVaultDepository: yup.string(),
}),
outflowLimitPerEpochAmount: yup
.number()
Expand All @@ -65,27 +69,21 @@ const EditController = ({
const [formErrors, setFormErrors] = useState({})
const { handleSetInstructions } = useContext(NewProposalContext)
const { assetAccounts } = useGovernanceAssets()
const [
redeemableGlobalSupplyCapChange,
setRedeemableGlobalSupplyCapChange,
] = useState<boolean>(false)
const [redeemableGlobalSupplyCapChange, setRedeemableGlobalSupplyCapChange] =
useState<boolean>(false)
const [
depositoriesRoutingWeightBpsChange,
setDepositoriesRoutingWeightBpsChange,
] = useState<boolean>(false)
const [
routerDepositoriesChange,
setRouterDepositoriesChange,
] = useState<boolean>(false)
const [routerDepositoriesChange, setRouterDepositoriesChange] =
useState<boolean>(false)

const [
outflowLimitPerEpochAmountChange,
setOutflowLimitPerEpochAmountChange,
] = useState<boolean>(false)
const [
outflowLimitPerEpochBpsChange,
setOutflowLimitPerEpochBpsChange,
] = useState<boolean>(false)
const [outflowLimitPerEpochBpsChange, setOutflowLimitPerEpochBpsChange] =
useState<boolean>(false)
const [slotsPerEpochChange, setSlotsPerEpochChange] = useState<boolean>(false)

const [form, setForm] = useState<UXDEditControllerForm>({
Expand Down Expand Up @@ -133,27 +131,34 @@ const EditController = ({
const slotsPerEpoch = slotsPerEpochChange ? form.slotsPerEpoch : undefined
const depositoriesRoutingWeightBps =
depositoriesRoutingWeightBpsChange &&
form.depositoriesRoutingWeightBps?.credixLpDepositoryWeightBps &&
form.depositoriesRoutingWeightBps &&
form.depositoriesRoutingWeightBps.identityDepositoryWeightBps &&
form.depositoriesRoutingWeightBps.mercurialVaultDepositoryWeightBps
form.depositoriesRoutingWeightBps.mercurialVaultDepositoryWeightBps &&
form.depositoriesRoutingWeightBps.credixLpDepositoryWeightBps &&
form.depositoriesRoutingWeightBps.alloyxVaultDepositoryWeightBps
? form.depositoriesRoutingWeightBps
: undefined

const routerDepositories =
routerDepositoriesChange &&
form.routerDepositories?.credixLpDepository &&
form.routerDepositories &&
form.routerDepositories.identityDepository &&
form.routerDepositories.mercurialVaultDepository
form.routerDepositories.credixLpDepository &&
form.routerDepositories.mercurialVaultDepository &&
form.routerDepositories.alloyxVaultDepository
? {
credixLpDepository: new PublicKey(
form.routerDepositories.credixLpDepository
),
identityDepository: new PublicKey(
form.routerDepositories.identityDepository
),
mercurialVaultDepository: new PublicKey(
form.routerDepositories.mercurialVaultDepository
),
credixLpDepository: new PublicKey(
form.routerDepositories.credixLpDepository
),
alloyxVaultDepository: new PublicKey(
form.routerDepositories.alloyxVaultDepository
),
}
: undefined

Expand Down Expand Up @@ -298,6 +303,25 @@ const EditController = ({
}
error={formErrors['depositoriesRoutingWeightBps']}
/>
<Input
label="Alloyx Vault Depository Routing Weight in Bps"
value={
form.depositoriesRoutingWeightBps?.alloyxVaultDepositoryWeightBps
}
type="number"
min={0}
max={10 ** 12}
onChange={(evt) =>
handleSetForm({
value: {
...form.depositoriesRoutingWeightBps,
alloyxVaultDepositoryWeightBps: evt.target.value,
},
propertyName: 'depositoriesRoutingWeightBps',
})
}
error={formErrors['depositoriesRoutingWeightBps']}
/>
</>
) : null}

Expand Down Expand Up @@ -354,6 +378,21 @@ const EditController = ({
}
error={formErrors['routerDepositories']}
/>
<Input
label="Alloyx Vault Depository"
value={form.routerDepositories?.alloyxVaultDepository}
type="string"
onChange={(evt) =>
handleSetForm({
value: {
...form.routerDepositories,
alloyxVaultDepository: evt.target.value,
},
propertyName: 'routerDepositories',
})
}
error={formErrors['routerDepositories']}
/>
</>
) : null}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,11 @@ const EditDepository = ({
index: number
governance: ProgramAccount<Governance> | null
}) => {
const [mintingFeesInBpsChange, setMintingFeesInBpsChange] = useState<boolean>(
false
)
const [mintingFeesInBpsChange, setMintingFeesInBpsChange] =
useState<boolean>(false)

const [
redeemingFeesInBpsChange,
setRedeemingFeesInBpsChange,
] = useState<boolean>(false)
const [redeemingFeesInBpsChange, setRedeemingFeesInBpsChange] =
useState<boolean>(false)

const [
redeemableAmountUnderManagementCapChange,
Expand All @@ -84,7 +81,7 @@ const EditDepository = ({

const [form, setForm] = useState<UXDEditDepositoryForm>({
governedAccount: undefined,
depositoryType: DEPOSITORY_TYPES.CREDIX,
depositoryType: DEPOSITORY_TYPES.ALLOYX_VAULT,
redeemableAmountUnderManagementCap: 0,
mintingFeeInBps: 0,
redeemingFeeInBps: 0,
Expand Down Expand Up @@ -131,9 +128,10 @@ const EditDepository = ({
? form.redeemingFeeInBps
: undefined

const redeemableAmountUnderManagementCap = redeemableAmountUnderManagementCapChange
? form.redeemableAmountUnderManagementCap
: undefined
const redeemableAmountUnderManagementCap =
redeemableAmountUnderManagementCapChange
? form.redeemableAmountUnderManagementCap
: undefined

const profitsBeneficiaryCollateral = profitsBeneficiaryCollateralChange
? new PublicKey(form.profitsBeneficiaryCollateralChange)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,8 @@ const EditIdentityDepository = ({
index: number
governance: ProgramAccount<Governance> | null
}) => {
const [mintingDisabledChange, setMintingDisabledChange] = useState<boolean>(
false
)
const [mintingDisabledChange, setMintingDisabledChange] =
useState<boolean>(false)
const [
redeemableAmountUnderManagementCapChange,
setRedeemableAmountUnderManagementCapChange,
Expand Down Expand Up @@ -105,9 +104,10 @@ const EditIdentityDepository = ({
identityDepository,
authority,
{
redeemableAmountUnderManagementCap: redeemableAmountUnderManagementCapChange
? form.redeemableAmountUnderManagementCap
: undefined,
redeemableAmountUnderManagementCap:
redeemableAmountUnderManagementCapChange
? form.redeemableAmountUnderManagementCap
: undefined,
mintingDisabled: mintingDisabledChange
? form.mintingDisabled!
: undefined,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const Redeem = ({

const [form, setForm] = useState<UXDRedeemForm>({
governedAccount: undefined,
depositoryType: DEPOSITORY_TYPES.CREDIX,
depositoryType: DEPOSITORY_TYPES.MERCURIAL_VAULT,
redeemableAmount: 0,
uxdProgram: 'UXD8m9cvwk4RcSxnX2HZ9VudQCEeDH6fRnB4CAP57Dr',
user: '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const RegisterDepository = ({

const [form, setForm] = useState<UXDRegisterDepositoryForm>({
governedAccount: undefined,
depositoryType: DEPOSITORY_TYPES.CREDIX,
depositoryType: DEPOSITORY_TYPES.ALLOYX_VAULT,
redeemableDepositorySupplyCap: 0,
mintingFeeInBps: 0,
redeemingFeeInBps: 0,
Expand Down
85 changes: 58 additions & 27 deletions tools/sdk/uxdProtocol/editDepository.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import { PublicKey, TransactionInstruction } from '@solana/web3.js'
import {
UXDClient,
MercurialVaultDepository,
Controller,
UXD_DECIMALS,
} from '@uxd-protocol/uxd-client'
import { UXDClient, Controller, UXD_DECIMALS } from '@uxd-protocol/uxd-client'
import { ConnectionContext } from '@utils/connection'
import {
DEPOSITORY_TYPES,
getCredixLpDepository,
getDepositoryMintInfo,
getMercurialVaultDepository,
getAlloyxVaultDepository,
uxdClient,
} from './uxdClient'

Expand All @@ -23,7 +19,7 @@ export type UXDEditDepositoryParams = {
mintingDisabled: boolean
}

const editMercurialDepositoryIx = async ({
const editMercurialVaultDepositoryIx = async ({
connection,
uxdProgramId,
client,
Expand All @@ -36,20 +32,11 @@ const editMercurialDepositoryIx = async ({
controller: Controller
params: UXDEditDepositoryParams
}): Promise<TransactionInstruction> => {
const {
address: collateralMint,
decimals: collateralDecimals,
} = getDepositoryMintInfo(connection.cluster, params.depositoryMintName)
const depository = await MercurialVaultDepository.initialize({
connection: connection.current,
collateralMint: {
mint: collateralMint,
name: params.depositoryMintName,
symbol: params.depositoryMintName,
decimals: collateralDecimals,
},
const depository = await getMercurialVaultDepository(
connection,
uxdProgramId,
})
params.depositoryMintName
)

return client.createEditMercurialVaultDepositoryInstruction(
controller,
Expand All @@ -67,7 +54,7 @@ const editMercurialDepositoryIx = async ({
)
}

const editCredixDepository = async ({
const editCredixLpDepository = async ({
connection,
uxdProgramId,
client,
Expand Down Expand Up @@ -102,6 +89,41 @@ const editCredixDepository = async ({
)
}

const editAlloyxVaultDepository = async ({
connection,
uxdProgramId,
client,
controller,
params,
}: {
connection: ConnectionContext
uxdProgramId: PublicKey
client: UXDClient
controller: Controller
params: UXDEditDepositoryParams
}): Promise<TransactionInstruction> => {
const depository = await getAlloyxVaultDepository(
connection,
uxdProgramId,
params.depositoryMintName
)

return client.createEditAlloyxVaultDepositoryInstruction(
controller,
depository,
params.authority,
{
redeemableAmountUnderManagementCap:
params.redeemableAmountUnderManagementCap,
mintingFeeInBps: params.mintingFeeInBps,
redeemingFeeInBps: params.redeemingFeeInBps,
profitsBeneficiaryCollateral: params.profitsBeneficiaryCollateral,
mintingDisabled: params.mintingDisabled,
},
{ preflightCommitment: 'processed', commitment: 'processed' }
)
}

export const editUXDDepositoryIx = async (
connection: ConnectionContext,
uxdProgramId: PublicKey,
Expand All @@ -111,22 +133,31 @@ export const editUXDDepositoryIx = async (
const client = uxdClient(uxdProgramId)
const controller = new Controller('UXD', UXD_DECIMALS, uxdProgramId)
switch (depositoryType) {
case DEPOSITORY_TYPES.MERCURIAL:
return editMercurialDepositoryIx({
case DEPOSITORY_TYPES.MERCURIAL_VAULT:
return editMercurialVaultDepositoryIx({
connection,
uxdProgramId,
client,
controller,
params,
})
case DEPOSITORY_TYPES.CREDIX:
default:
return editCredixDepository({
case DEPOSITORY_TYPES.CREDIX_LP:
return editCredixLpDepository({
connection,
uxdProgramId,
client,
controller,
params,
})
case DEPOSITORY_TYPES.ALLOYX_VAULT:
return editAlloyxVaultDepository({
connection,
uxdProgramId,
client,
controller,
params,
})
default:
throw new Error('Edit depository type unknown: ' + depositoryType)
}
}
Loading

1 comment on commit 1074729

@vercel
Copy link

@vercel vercel bot commented on 1074729 Jan 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.