zebec-instant-card-sdk
Version:
An sdk for interacting with zebec instant card program in solana.
383 lines (382 loc) • 15.7 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZebecCardInstructions = void 0;
const web3_js_1 = require("@solana/web3.js");
const constants_1 = require("./constants");
/**
* Zebec Card Instruction Factory
*/
class ZebecCardInstructions {
constructor(cardProgram) {
this.cardProgram = cardProgram;
}
getInitCardConfigsInstruction(cardPda, usdcToken, zicOwner, data) {
return __awaiter(this, void 0, void 0, function* () {
const { revenueFee, nativeFee, nonNativeFee, cardVault, revenueVault, commissionVault, maxCardAmount, minCardAmount, feeTiers, dailyCardPurchaseLimit, } = data;
return this.cardProgram.methods
.initCardConfigs({
cardVault,
commissionVault,
nativeFee,
nonNativeFee,
revenueFee,
revenueVault,
maxCardAmount,
minCardAmount,
feeTier: feeTiers,
dailyCardBuyLimit: dailyCardPurchaseLimit,
})
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
cardPda,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
usdcToken,
zicOwner,
})
.instruction();
});
}
getDepositInstruction(cardPda, feeMapPda, tokenMint, user, userAta, userVault, userVaultAta, userPurchaseRecord, revenueVault, revenueVaultAta, data) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, sourceTokenAddress } = data;
return this.cardProgram.methods
.deposit({
amount,
sourceTokenAddress: sourceTokenAddress ? sourceTokenAddress : tokenMint,
})
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
cardPda,
feeMapPda,
revenueVault,
revenueVaultAta,
systemProgram: web3_js_1.SystemProgram.programId,
tokenMint,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
user,
userAta,
userVault,
userVaultAta,
vaultPda: userPurchaseRecord,
})
.instruction();
});
}
getSetCardConfigsInstruction(cardPda, zicOwner, data) {
return __awaiter(this, void 0, void 0, function* () {
const { revenueFee, nativeFee, nonNativeFee, cardVault, revenueVault, commissionVault, feeTiers, maxCardAmount, minCardAmount, dailyCardPurchaseLimit, newZicOwner, } = data;
return this.cardProgram.methods
.setCardConfigs({
zicOwner: newZicOwner,
cardVault,
commissionVault,
revenueVault,
nativeFee,
nonNativeFee,
revenueFee,
maxCardAmount,
minCardAmount,
dailyCardBuyLimit: dailyCardPurchaseLimit,
feeTier: feeTiers,
})
.accounts({
cardPda,
zicOwner,
})
.instruction();
});
}
getWithdrawInstruction(user, tokenMint, userAta, userVault, userVaultAta, userPurchaseRecord, amount) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.withdraw(amount)
.accounts({
tokenMint,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
user,
userAta,
userVault,
userVaultAta,
vaultPda: userPurchaseRecord,
})
.instruction();
});
}
getBuyPrepaidDigitalCardInstruction(buyerPda, cardPda, cardVault, cardVaultAta, commissionVault, commissionVaultAta, revenueVault, revenueVaultAta, usdcToken, user, userVault, userVaultAta, userPurchaseRecord, buyCardData) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, cardType, index } = buyCardData;
return this.cardProgram.methods
.buyPrepaidDigitalCard({
amount,
cardType,
index,
})
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
buyerPda,
cardPda,
cardVault,
cardVaultAta,
commissionVault,
commissionVaultAta,
revenueVault,
revenueVaultAta,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
usdcToken,
user,
userVault,
userVaultAta,
vaultPda: userPurchaseRecord,
})
.instruction();
});
}
getGenerateYieldInstruction(user, userVault, userPurchaseRecord, userVaultAta, tokenMint, flexlendUserAccount, flexlendUserAta, promotionReservePda, reserveAdmin, amount) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.generateYield(amount)
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
flexlendProgram: constants_1.FLEXLEND_PROGRAM_ID,
flexlendUserAccount,
flexlendUserAta,
promotionReserve: promotionReservePda,
reserveAdmin,
systemProgram: web3_js_1.SystemProgram.programId,
tokenMint,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
user,
userVault,
userVaultAta,
vaultPda: userPurchaseRecord,
})
.instruction();
});
}
getWithdrawYieldInstruction(user, userPurchaseRecord, userVault, userVaultAta, tokenMint, flexlendUserAccount, flexlendUserAta, promotionReserve, amount, withdrawAll) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.withdrawYield(amount, withdrawAll)
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
flexlendProgram: constants_1.FLEXLEND_PROGRAM_ID,
flexlendUserAccount,
flexlendUserAta,
promotionReserve,
reserveAdmin: constants_1.FLEXLEND_RESERVE_ADMIN,
systemProgram: web3_js_1.SystemProgram.programId,
tokenMint,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
user,
userVault,
userVaultAta,
vaultPda: userPurchaseRecord,
})
.instruction();
});
}
getBuyCardDirectInstruction(buyerPda, cardPda, cardVault, cardVaultAta, feeMapPda, revenueVault, revenueVaultAta, usdcToken, user, userAta, userPurchaseRecord, buyCardData) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, cardType, index, sourceTokenAddress } = buyCardData;
return this.cardProgram.methods
.buyCardDirect({
amount,
cardType,
index,
sourceTokenAddress: sourceTokenAddress ? sourceTokenAddress : usdcToken,
})
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
buyerPda,
cardPda,
cardVault,
cardVaultAta,
feeMapPda,
revenueVault,
revenueVaultAta,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
usdcToken,
user,
userAta,
vaultPda: userPurchaseRecord,
})
.instruction();
});
}
getSetCustomFeesInstruction(cardPda, feeMapPda, zicOwner, tokenFeeList) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.setCustomFees(tokenFeeList)
.accounts({
cardPda,
feeMapPda,
systemProgram: web3_js_1.SystemProgram.programId,
zicOwner,
})
.instruction();
});
}
getDeleteCustomFeesInstruction(cardPda, feeMapPda, zicOwner, tokenFeeList) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.deleteCustomFees(tokenFeeList)
.accounts({
cardPda,
feeMapPda,
systemProgram: web3_js_1.SystemProgram.programId,
zicOwner,
})
.instruction();
});
}
// bot instructions
getInitBotConfigInstruction(cardBotConfig, cardPda, zicOwner, data) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.initBotConfig({
botAdmin: data.botAdmin,
})
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
cardBotConfig,
cardPda,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
zicOwner,
})
.instruction();
});
}
getSetBotAdminInstruction(cardBotConfig, cardPda, zicOwner, data) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.setBotAdmin(data.newAdmin)
.accounts({
cardBotConfig,
cardPda,
zicOwner,
})
.instruction();
});
}
getInitBotUserCustodyInstruction(botAdmin, cardBotConfig, usdcToken, userCustody, userCustodyAta, data) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.initBotPda({ userId: data.userId })
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
botAdmin,
cardBotConfig,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
usdcToken,
userCustody,
userCustodyAta,
})
.instruction();
});
}
getBuyCardBotInstruction(botAdmin, cardBotConfig, cardPda, cardVault, cardVaultAta, feeMapPda, revenueVault, revenueVaultAta, usdcToken, userCustody, userCustodyAta, buyCardData) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, sourceTokenAddress, userId, cardType } = buyCardData;
return this.cardProgram.methods
.buyCardBot({ amount, sourceTokenAddress, userId, cardType })
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
botAdmin,
cardBotConfig,
cardPda,
cardVault,
cardVaultAta,
feeMapPda,
revenueVault,
revenueVaultAta,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
usdcToken,
userCustody,
userCustodyAta,
})
.instruction();
});
}
// on ramp instructions
getInitOnRampInstruction(zicOwner, cardConfig, onRampConfig, data) {
return __awaiter(this, void 0, void 0, function* () {
const { admin, zbcnToken } = data;
return this.cardProgram.methods
.initOnRampConfig({ admin, zbcnToken })
.accounts({
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
cardPda: cardConfig,
onRampConfig,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
zicOwner,
})
.instruction();
});
}
getInitOnRampUserCustodyInstruction(admin, onRampConfig, onRampUserCustody, onRampUserCustodyZbcnAccount, zbcnToken, data) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.initOnRampPda({
userId: data.userId,
})
.accounts({
admin,
associatedTokenProgram: constants_1.ASSOCIATED_TOKEN_PROGRAM_ID,
onRampConfig,
systemProgram: web3_js_1.SystemProgram.programId,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
userCustody: onRampUserCustody,
userCustodyAta: onRampUserCustodyZbcnAccount,
zbcnToken,
})
.instruction();
});
}
getSetOnRampAdminInstruction(cardConfig, onRampConfig, zicOwner, data) {
return __awaiter(this, void 0, void 0, function* () {
return this.cardProgram.methods
.setOnRampAdmin(data.newAdmin)
.accounts({
cardPda: cardConfig,
onRampConfig,
zicOwner,
})
.instruction();
});
}
getOnRampTransferZbcnInstruction(onRampAdmin, onRampConfig, onRampUserCustody, onRampUserCustodyZbcnAccount, receiverAccount, receiverZbcnAccount, zbcnToken, data) {
return __awaiter(this, void 0, void 0, function* () {
const { amount, userId } = data;
return this.cardProgram.methods
.transferZbcn({ amount, userId })
.accounts({
admin: onRampAdmin,
from: onRampUserCustody,
fromAta: onRampUserCustodyZbcnAccount,
onRampConfig,
to: receiverAccount,
toAta: receiverZbcnAccount,
tokenProgram: constants_1.TOKEN_PROGRAM_ID,
zbcnToken,
})
.instruction();
});
}
}
exports.ZebecCardInstructions = ZebecCardInstructions;