@triadxyz/triad-protocol
Version:
<div align="center"> <h1>Triad Protocol</h1> </div>
194 lines (193 loc) • 8.16 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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const anchor_1 = require("@coral-xyz/anchor");
const helpers_1 = require("./utils/helpers");
const sendVersionedTransaction_1 = __importDefault(require("./utils/sendVersionedTransaction"));
const pda_1 = require("./utils/pda");
const merkle_1 = require("./utils/merkle");
class Claim {
constructor(program, rpcOptions) {
this.program = program;
this.rpcOptions = rpcOptions;
}
/**
* Get All Claim Vaults
*/
getAllClaimVaults() {
return __awaiter(this, void 0, void 0, function* () {
const claimVaults = yield this.program.account.claimVault.all();
return claimVaults.map(({ account, publicKey }) => (0, helpers_1.formatClaimVault)(account, publicKey));
});
}
/**
* Get Claim Vault
* @param name - Name of the claim vault
*/
getClaimVault(name) {
return __awaiter(this, void 0, void 0, function* () {
const claimVaultPDA = (0, pda_1.getClaimVaultPDA)(this.program.programId, name);
const claimVault = yield this.program.account.claimVault.fetch(claimVaultPDA);
return (0, helpers_1.formatClaimVault)(claimVault, claimVaultPDA);
});
}
/**
* Get Claimed User
* @param claimVault - Claim vault
* @param user - User
*/
getClaimedUser(claimVault, user) {
return __awaiter(this, void 0, void 0, function* () {
const claimedUserPDA = (0, pda_1.getClaimedUserPDA)(this.program.programId, claimVault, user);
const claimedUser = yield this.program.account.claimedUser.fetch(claimedUserPDA);
return (0, helpers_1.formatClaimedUser)(claimedUser, claimedUserPDA);
});
}
/**
* Claim Token
* @param claimData - Claim data
* @param claimVaultName - Vault name
* @param payer - Payer
* @param mint - Mint
* @param amount - Amount to claim
*/
claimToken({ mint, claimVaultName, claimData, amount, isFirstComeFirstServed }) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
let proof = [];
if (!isFirstComeFirstServed) {
const { proofs } = (0, merkle_1.generateMerkleTree)(claimData);
proof = (_a = proofs.find((p) => p.user.toBase58() === this.program.provider.publicKey.toBase58())) === null || _a === void 0 ? void 0 : _a.proof;
}
const ixs = [
yield this.program.methods
.claimToken({
amount: new anchor_1.BN(amount * Math.pow(10, 6)),
merkleProof: proof
})
.accounts({
signer: this.program.provider.publicKey,
payer: this.rpcOptions.payer,
mint,
claimVault: (0, pda_1.getClaimVaultPDA)(this.program.programId, claimVaultName),
tokenProgram: (0, helpers_1.getTokenProgram)(mint)
})
.instruction()
];
return (0, sendVersionedTransaction_1.default)(this.program, ixs, this.rpcOptions);
});
}
/**
* Create Claim Vault
* @param args - Create Claim Vault Args
*/
createClaimVault({ totalAmount, totalUsers, name, isFirstComeFirstServed, endTs, claimData, mint }) {
return __awaiter(this, void 0, void 0, function* () {
let merkleRoot = null;
if (claimData) {
const { merkleRoot: root } = (0, merkle_1.generateMerkleTree)(claimData);
merkleRoot = root;
}
const ixs = [
yield this.program.methods
.createClaimVault({
totalAmount: new anchor_1.BN(totalAmount * Math.pow(10, 6)),
totalUsers: new anchor_1.BN(totalUsers),
name,
isFirstComeFirstServed,
endTs: new anchor_1.BN(endTs),
merkleRoot
})
.accounts({
signer: this.program.provider.publicKey,
mint,
tokenProgram: (0, helpers_1.getTokenProgram)(mint)
})
.instruction()
];
return (0, sendVersionedTransaction_1.default)(this.program, ixs, this.rpcOptions);
});
}
/**
* Update Claim Vault Is Active
* @param isActive - Is active
* @param claimVault - Claim vault
*/
updateClaimVaultIsActive({ isActive, claimVaultName }) {
return __awaiter(this, void 0, void 0, function* () {
const ixs = [
yield this.program.methods
.updateClaimVaultIsActive(isActive)
.accounts({
signer: this.program.provider.publicKey,
claimVault: (0, pda_1.getClaimVaultPDA)(this.program.programId, claimVaultName)
})
.instruction()
];
return (0, sendVersionedTransaction_1.default)(this.program, ixs, this.rpcOptions);
});
}
/**
* Update Claim Vault Amount
* @param amount - Amount to add
* @param newUsers - New users to add
* @param claimVaultName - Claim vault name
* @param mint - Mint
*/
updateClaimVaultAmount({ amount, newUsers, claimVaultName, mint, claimData }) {
return __awaiter(this, void 0, void 0, function* () {
let merkleRoot = null;
if (claimData) {
const { merkleRoot: root } = (0, merkle_1.generateMerkleTree)(claimData);
merkleRoot = root;
}
const ixs = [
yield this.program.methods
.updateClaimVaultAmount({
amount: new anchor_1.BN(amount * Math.pow(10, 6)),
newUsers: new anchor_1.BN(newUsers),
merkleRoot
})
.accounts({
signer: this.program.provider.publicKey,
mint,
tokenProgram: (0, helpers_1.getTokenProgram)(mint),
claimVault: (0, pda_1.getClaimVaultPDA)(this.program.programId, claimVaultName)
})
.instruction()
];
return (0, sendVersionedTransaction_1.default)(this.program, ixs, this.rpcOptions);
});
}
/**
* Update Claim Vault End Ts
* @param endTs - End ts
* @param claimVaultName - Claim vault name
*/
updateClaimVaultEndTs({ endTs, claimVaultName }) {
return __awaiter(this, void 0, void 0, function* () {
const ixs = [
yield this.program.methods
.updateClaimVaultEndTs(new anchor_1.BN(endTs))
.accounts({
signer: this.program.provider.publicKey,
claimVault: (0, pda_1.getClaimVaultPDA)(this.program.programId, claimVaultName)
})
.instruction()
];
return (0, sendVersionedTransaction_1.default)(this.program, ixs, this.rpcOptions);
});
}
}
exports.default = Claim;