ts: Fix tokenDeregister() when ATA is missing
This commit is contained in:
parent
37060d4192
commit
a91ff847f2
|
@ -4,11 +4,7 @@ import {
|
||||||
initializeAccount,
|
initializeAccount,
|
||||||
WRAPPED_SOL_MINT,
|
WRAPPED_SOL_MINT,
|
||||||
} from '@project-serum/serum/lib/token-instructions';
|
} from '@project-serum/serum/lib/token-instructions';
|
||||||
import {
|
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
||||||
ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
||||||
createAssociatedTokenAccountInstruction,
|
|
||||||
TOKEN_PROGRAM_ID,
|
|
||||||
} from '@solana/spl-token';
|
|
||||||
import {
|
import {
|
||||||
AccountMeta,
|
AccountMeta,
|
||||||
Cluster,
|
Cluster,
|
||||||
|
@ -19,7 +15,6 @@ import {
|
||||||
SystemProgram,
|
SystemProgram,
|
||||||
SYSVAR_INSTRUCTIONS_PUBKEY,
|
SYSVAR_INSTRUCTIONS_PUBKEY,
|
||||||
SYSVAR_RENT_PUBKEY,
|
SYSVAR_RENT_PUBKEY,
|
||||||
Transaction,
|
|
||||||
TransactionInstruction,
|
TransactionInstruction,
|
||||||
TransactionSignature,
|
TransactionSignature,
|
||||||
} from '@solana/web3.js';
|
} from '@solana/web3.js';
|
||||||
|
@ -365,22 +360,18 @@ export class MangoClient {
|
||||||
const ai = await this.program.provider.connection.getAccountInfo(
|
const ai = await this.program.provider.connection.getAccountInfo(
|
||||||
dustVaultPk,
|
dustVaultPk,
|
||||||
);
|
);
|
||||||
|
const preInstructions: TransactionInstruction[] = [];
|
||||||
if (!ai) {
|
if (!ai) {
|
||||||
const tx = new Transaction();
|
preInstructions.push(
|
||||||
tx.add(
|
await createAssociatedTokenAccountIdempotentInstruction(
|
||||||
createAssociatedTokenAccountInstruction(
|
adminPk,
|
||||||
ASSOCIATED_TOKEN_PROGRAM_ID,
|
adminPk,
|
||||||
TOKEN_PROGRAM_ID,
|
|
||||||
bank.mint,
|
bank.mint,
|
||||||
dustVaultPk,
|
|
||||||
adminPk,
|
|
||||||
adminPk,
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
await (this.program.provider as AnchorProvider).sendAndConfirm(tx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return await this.program.methods
|
const ix = await this.program.methods
|
||||||
.tokenDeregister()
|
.tokenDeregister()
|
||||||
.accounts({
|
.accounts({
|
||||||
group: group.publicKey,
|
group: group.publicKey,
|
||||||
|
@ -397,7 +388,19 @@ export class MangoClient {
|
||||||
({ pubkey: pk, isWritable: true, isSigner: false } as AccountMeta),
|
({ pubkey: pk, isWritable: true, isSigner: false } as AccountMeta),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.rpc();
|
.instruction();
|
||||||
|
|
||||||
|
return await sendTransaction(
|
||||||
|
this.program.provider as AnchorProvider,
|
||||||
|
[
|
||||||
|
...preInstructions,
|
||||||
|
ix,
|
||||||
|
],
|
||||||
|
group.addressLookupTablesList,
|
||||||
|
{
|
||||||
|
postSendTxCallback: this.postSendTxCallback,
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getBanksForGroup(group: Group): Promise<Bank[]> {
|
public async getBanksForGroup(group: Group): Promise<Bank[]> {
|
||||||
|
|
|
@ -46,14 +46,6 @@ async function main() {
|
||||||
|
|
||||||
let sig;
|
let sig;
|
||||||
|
|
||||||
// close all banks
|
|
||||||
for (const banks of group.banksMapByMint.values()) {
|
|
||||||
sig = await client.tokenDeregister(group, banks[0].mint);
|
|
||||||
console.log(
|
|
||||||
`Removed token ${banks[0].name}, sig https://explorer.solana.com/tx/${sig}`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// deregister all serum markets
|
// deregister all serum markets
|
||||||
for (const market of group.serum3MarketsMapByExternal.values()) {
|
for (const market of group.serum3MarketsMapByExternal.values()) {
|
||||||
sig = await client.serum3deregisterMarket(
|
sig = await client.serum3deregisterMarket(
|
||||||
|
@ -73,6 +65,15 @@ async function main() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// close all banks
|
||||||
|
for (const banks of group.banksMapByMint.values()) {
|
||||||
|
console.log(banks[0].toString());
|
||||||
|
sig = await client.tokenDeregister(group, banks[0].mint);
|
||||||
|
console.log(
|
||||||
|
`Removed token ${banks[0].name}, sig https://explorer.solana.com/tx/${sig}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// close stub oracles
|
// close stub oracles
|
||||||
const stubOracles = await client.getStubOracle(group);
|
const stubOracles = await client.getStubOracle(group);
|
||||||
for (const stubOracle of stubOracles) {
|
for (const stubOracle of stubOracles) {
|
||||||
|
|
Loading…
Reference in New Issue