more defense against double index for token from ui
This commit is contained in:
parent
8bc661d07f
commit
96935c8434
|
@ -67,6 +67,7 @@ const ListMarket = ({ goBack }: { goBack: () => void }) => {
|
|||
const vsrClient = GovernanceStore((s) => s.vsrClient)
|
||||
const proposals = GovernanceStore((s) => s.proposals)
|
||||
const proposalsLoading = GovernanceStore((s) => s.loadingProposals)
|
||||
const refetchProposals = GovernanceStore((s) => s.refetchProposals)
|
||||
|
||||
const [advForm, setAdvForm] = useState<ListMarketForm>({
|
||||
...defaultFormValues,
|
||||
|
@ -161,7 +162,9 @@ const ListMarket = ({ goBack }: { goBack: () => void }) => {
|
|||
return
|
||||
}
|
||||
setProposing(true)
|
||||
const proposals = await refetchProposals()
|
||||
const index = proposals ? Object.values(proposals).length : 0
|
||||
|
||||
const proposalTx = []
|
||||
|
||||
const oraclePriceBand = baseBank?.oracleConfig.maxStalenessSlots.isNeg()
|
||||
|
@ -169,11 +172,7 @@ const ListMarket = ({ goBack }: { goBack: () => void }) => {
|
|||
: 1
|
||||
|
||||
const registerMarketix = await client!.program.methods
|
||||
.serum3RegisterMarket(
|
||||
advForm.marketIndex,
|
||||
advForm.marketName,
|
||||
oraclePriceBand,
|
||||
)
|
||||
.serum3RegisterMarket(index, advForm.marketName, oraclePriceBand)
|
||||
.accounts({
|
||||
group: group!.publicKey,
|
||||
admin: MANGO_DAO_WALLET,
|
||||
|
@ -491,6 +490,7 @@ const ListMarket = ({ goBack }: { goBack: () => void }) => {
|
|||
<div>
|
||||
<Label text={t('market-index')} />
|
||||
<Input
|
||||
disabled={true}
|
||||
hasError={formErrors.marketIndex !== undefined}
|
||||
type="number"
|
||||
value={advForm.marketIndex.toString()}
|
||||
|
|
|
@ -109,6 +109,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
const fee = mangoStore((s) => s.priorityFee)
|
||||
const loadingVoter = GovernanceStore((s) => s.loadingVoter)
|
||||
const proposals = GovernanceStore((s) => s.proposals)
|
||||
const refetchProposals = GovernanceStore((s) => s.refetchProposals)
|
||||
const getCurrentVotingPower = GovernanceStore((s) => s.getCurrentVotingPower)
|
||||
const connectionContext = GovernanceStore((s) => s.connectionContext)
|
||||
const { t } = useTranslation(['governance'])
|
||||
|
@ -520,13 +521,17 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
})
|
||||
return
|
||||
}
|
||||
const newProposals = await refetchProposals()
|
||||
|
||||
const index = proposals ? Object.values(newProposals).length : 0
|
||||
|
||||
const mint = new PublicKey(advForm.mintPk)
|
||||
const proposalTx = []
|
||||
|
||||
if (Object.keys(proposedPreset).length && !advForm.fastListing) {
|
||||
const registerTokenIx = await client!.program.methods
|
||||
.tokenRegister(
|
||||
Number(advForm.tokenIndex),
|
||||
Number(index),
|
||||
advForm.name,
|
||||
{
|
||||
confFilter: Number(proposedPreset.oracleConfFilter),
|
||||
|
@ -579,7 +584,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
proposalTx.push(registerTokenIx)
|
||||
} else {
|
||||
const trustlessIx = await client!.program.methods
|
||||
.tokenRegisterTrustless(Number(advForm.tokenIndex), advForm.name)
|
||||
.tokenRegisterTrustless(Number(index), advForm.name)
|
||||
.accounts({
|
||||
mint: mint,
|
||||
payer: MANGO_DAO_FAST_LISTING_WALLET,
|
||||
|
@ -596,7 +601,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
if (!advForm.listForSwapOnly) {
|
||||
const registerMarketix = await client!.program.methods
|
||||
.serum3RegisterMarket(
|
||||
Number(advForm.marketIndex),
|
||||
Number(index),
|
||||
advForm.marketName,
|
||||
proposedPreset.oraclePriceBand,
|
||||
)
|
||||
|
@ -636,7 +641,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
voter.tokenOwnerRecord!,
|
||||
advForm.proposalTitle,
|
||||
advForm.proposalDescription,
|
||||
advForm.tokenIndex,
|
||||
index,
|
||||
proposalTx,
|
||||
vsrClient,
|
||||
fee,
|
||||
|
@ -665,12 +670,14 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
voter.voteWeight,
|
||||
voter.tokenOwnerRecord,
|
||||
minVoterWeight,
|
||||
refetchProposals,
|
||||
proposals,
|
||||
proposedPreset,
|
||||
connection,
|
||||
t,
|
||||
mintVoterWeightNumber,
|
||||
client,
|
||||
group,
|
||||
connection,
|
||||
fee,
|
||||
])
|
||||
|
||||
|
@ -862,6 +869,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
|
|||
<div>
|
||||
<Label text={t('token-index')} />
|
||||
<Input
|
||||
disabled={true}
|
||||
hasError={formErrors.tokenIndex !== undefined}
|
||||
type="number"
|
||||
value={advForm.tokenIndex.toString()}
|
||||
|
|
|
@ -59,6 +59,7 @@ type IGovernanceStore = {
|
|||
) => void
|
||||
resetVoter: () => void
|
||||
updateProposals: (proposalPk: PublicKey) => void
|
||||
refetchProposals: () => Promise<Record<string, ProgramAccount<Proposal>>>
|
||||
fetchDelegatedAccounts: (
|
||||
wallet: PublicKey,
|
||||
connectionContext: ConnectionContext,
|
||||
|
@ -221,6 +222,24 @@ const GovernanceStore = create<IGovernanceStore>((set, get) => ({
|
|||
state.loadingRealm = false
|
||||
})
|
||||
},
|
||||
refetchProposals: async () => {
|
||||
const set = get().set
|
||||
const connectionContext = get().connectionContext!
|
||||
set((state) => {
|
||||
state.loadingProposals = true
|
||||
})
|
||||
const proposals = await getAllProposals(
|
||||
connectionContext.current,
|
||||
MANGO_GOVERNANCE_PROGRAM,
|
||||
MANGO_REALM_PK,
|
||||
)
|
||||
const proposalsObj = accountsToPubkeyMap(proposals.flatMap((p) => p))
|
||||
set((state) => {
|
||||
state.loadingProposals = false
|
||||
state.proposals = proposalsObj
|
||||
})
|
||||
return accountsToPubkeyMap(proposals.flatMap((p) => p))
|
||||
},
|
||||
updateProposals: async (proposalPk: PublicKey) => {
|
||||
const state = get()
|
||||
const set = get().set
|
||||
|
|
Loading…
Reference in New Issue