Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Credix] Minting/Redeeming/CollectProfit IXs #152

Merged
merged 24 commits into from
Jan 3, 2023
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions components/instructions/programs/uxdProtocol.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -155,27 +155,6 @@ export const UXD_PROGRAM_INSTRUCTIONS = {
);
},
},
181: {
name: 'UXD - Reinject Mango Funds using Identity Depository',
accounts: [
'Authority',
'Payer',
'Controller',
'Depository',
'Collateral Vault',
'Mango Depository',
'User Collateral',
'System Program',
'Token Program',
],
getDataUI: (
_connection: Connection,
_data: Uint8Array,
_accounts: AccountMetaData[],
) => {
return <></>;
},
},
228: {
name: 'UXD - Mint with Mercurial Vault Depository',
accounts: [
Expand Down
28 changes: 26 additions & 2 deletions hooks/useGovernanceAssets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,12 +427,24 @@ export default function useGovernanceAssets() {
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDRegisterCredixLpDepository]: {
name: 'Register Credix Lp Depository',
isVisible: canUseAnyInstruction,
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDEditMercurialVaultDepository]: {
name: 'Edit Mercurial Vault Depository',
isVisible: canUseAnyInstruction,
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDEditCredixLpDepository]: {
name: 'Edit Credix Lp Depository',
isVisible: canUseAnyInstruction,
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDEditController]: {
name: 'Edit Controller',
isVisible: canUseAnyInstruction,
Expand All @@ -445,6 +457,12 @@ export default function useGovernanceAssets() {
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDMintWithCredixLpDepository]: {
name: 'Mint with Credix Lp Depository',
isVisible: canUseAnyInstruction,
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDInitializeIdentityDepository]: {
name: 'Initialize Identity Depository',
isVisible: canUseAnyInstruction,
Expand All @@ -469,8 +487,14 @@ export default function useGovernanceAssets() {
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDReinjectMangoToIdentityDepository]: {
name: 'Reinject Mango Funds to Identity Depository',
[InstructionEnum.UXDRedeemFromCredixLpDepository]: {
name: 'Redeem from Credix Lp Depository',
isVisible: canUseAnyInstruction,
packageId: PackageEnum.UXD,
tag: 'beta',
},
[InstructionEnum.UXDCollectProfitOfCredixLpDepository]: {
name: 'Collect profit of Credix Lp Depository',
isVisible: canUseAnyInstruction,
packageId: PackageEnum.UXD,
tag: 'beta',
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
"@solana/web3.js-1.41.0": "npm:@solana/[email protected]",
"@solendprotocol/solend-sdk": "^0.4.9",
"@tippyjs/react": "^4.2.5",
"@uxd-protocol/uxd-client": "5.1.4",
"@uxd-protocol/uxd-client": "6.0.0-credix-integration-rc4",
"@uxdprotocol/uxd-staking-client": "3.1.0",
"axios": "^0.21.1",
"bignumber.js": "^9.0.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,18 @@ import TribecaGaugeSetVote from './Tribeca/SetGaugeVote';
import UXDInitializeController from './UXD/InitializeController';
import UXDSetRedeemableGlobalSupplyCap from './UXD/SetRedeemGlobalSupplyCap';
import UXDRegisterMercurialVaultDepository from './UXD/RegisterMercurialVaultDepository';
import UXDRegisterCredixLpDepository from './UXD/RegisterCredixLpDepository';
import UXDEditMercurialVaultDepository from './UXD/EditMercurialVaultDepository';
import UXDEditCredixLpDepository from './UXD/EditCredixLpDepository';
import UXDEditController from './UXD/EditController';
import UXDMintWithMercurialVaultDepository from './UXD/MintWithMercurialVaultDepository';
import UXDMintWithCredixLpDepository from './UXD/MintWithCredixLpDepository';
import UXDInitializeIdentityDepository from './UXD/InitializeIdentityDepository';
import UXDMintWithIdentityDepository from './UXD/MintWithIdentityDepository';
import UXDRedeemFromIdentityDepository from './UXD/RedeemFromIdentityDepository';
import UXDRedeemFromMercurialVaultDepository from './UXD/RedeemFromMercurialVaultDepository';
import UXDReinjectMangoToIdentityDepository from './UXD/ReinjectMangoToIdentityDepository';
import UXDRedeemFromCredixLpDepository from './UXD/RedeemFromCredixLpDepository';
import UXDCollectProfitOfCredixLpDepository from './UXD/CollectProfitOfCredixLpDepository';
import UXDEditIdentityDepository from './UXD/EditIdentityDepository';
import UXDStakingInitializeStakingCampaign from './UXDStaking/InitializeStakingCampaign';
import UXDStakingMigrateStakingCampaignFromV1ToV2 from './UXDStaking/MigrateStakingCampaignFromV1ToV2';
Expand Down Expand Up @@ -236,21 +240,41 @@ const SelectedInstruction = ({
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDRegisterCredixLpDepository:
return (
<UXDRegisterCredixLpDepository
index={index}
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDEditMercurialVaultDepository:
return (
<UXDEditMercurialVaultDepository
index={index}
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDEditCredixLpDepository:
return (
<UXDEditCredixLpDepository
index={index}
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDMintWithMercurialVaultDepository:
return (
<UXDMintWithMercurialVaultDepository
index={index}
governedAccount={governedAccount}
/>
);

case InstructionEnum.UXDMintWithCredixLpDepository:
return (
<UXDMintWithCredixLpDepository
index={index}
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDInitializeIdentityDepository:
return (
<UXDInitializeIdentityDepository
Expand Down Expand Up @@ -279,9 +303,16 @@ const SelectedInstruction = ({
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDReinjectMangoToIdentityDepository:
case InstructionEnum.UXDRedeemFromCredixLpDepository:
return (
<UXDRedeemFromCredixLpDepository
index={index}
governedAccount={governedAccount}
/>
);
case InstructionEnum.UXDCollectProfitOfCredixLpDepository:
return (
<UXDReinjectMangoToIdentityDepository
<UXDCollectProfitOfCredixLpDepository
index={index}
governedAccount={governedAccount}
/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import * as yup from 'yup';
import Select from '@components/inputs/Select';
import useInstructionFormBuilder from '@hooks/useInstructionFormBuilder';
import { getDepositoryMintSymbols } from '@tools/sdk/uxdProtocol/uxdClient';
import { GovernedMultiTypeAccount } from '@utils/tokens';
import { UXDCollectProfitOfCredixLpDepositoryForm } from '@utils/uiTypes/proposalCreationTypes';
import SelectOptionList from '../../SelectOptionList';
import createCollectProfitOfCredixLpDepositoryInstruction from '@tools/sdk/uxdProtocol/createCollectProfitOfCredixLpDepositoryInstruction';

const schema = yup.object().shape({
governedAccount: yup
.object()
.nullable()
.required('Governance account is required'),
collateralName: yup.string().required('Collateral Name address is required'),
});

const UXDCollectProfitOfCredixLpDepository = ({
index,
governedAccount,
}: {
index: number;
governedAccount?: GovernedMultiTypeAccount;
}) => {
const {
connection,
form,
formErrors,
handleSetForm,
} = useInstructionFormBuilder<UXDCollectProfitOfCredixLpDepositoryForm>({
index,
initialFormValues: {
governedAccount,
},
schema,
shouldSplitIntoSeparateTxs: true,
buildInstruction: async function ({ form, governedAccountPubkey, wallet }) {
return createCollectProfitOfCredixLpDepositoryInstruction({
connection,
uxdProgramId: form.governedAccount!.governance!.account.governedAccount,
authority: governedAccountPubkey,
depositoryMintName: form.collateralName!,
payer: wallet.publicKey!,
});
},
});

return (
<>
<Select
label="Collateral Name"
value={form.collateralName}
placeholder="Please select..."
onChange={(value) =>
handleSetForm({ value, propertyName: 'collateralName' })
}
error={formErrors['collateralName']}
>
<SelectOptionList list={getDepositoryMintSymbols(connection.cluster)} />
</Select>
</>
);
};

export default UXDCollectProfitOfCredixLpDepository;
Loading