123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import { splFeatureProposalProgram } from "@coral-xyz/spl-feature-proposal";
- import { splTokenProgram } from "@coral-xyz/spl-token";
- import { BN } from "@coral-xyz/anchor";
- import {
- Keypair,
- PublicKey,
- SystemProgram,
- SYSVAR_CLOCK_PUBKEY,
- SYSVAR_RENT_PUBKEY,
- } from "@solana/web3.js";
- import {
- SPL_FEATURE_PROPOSAL_PROGRAM_ID,
- SPL_TOKEN_PROGRAM_ID,
- } from "../constants";
- import { getProvider, loadKp, sendAndConfirmTx, test } from "../utils";
- export async function featureProposalTests() {
- const provider = await getProvider();
- const program = splFeatureProposalProgram({
- provider,
- programId: SPL_FEATURE_PROPOSAL_PROGRAM_ID,
- });
- const tokenProgram = splTokenProgram({
- provider,
- programId: SPL_TOKEN_PROGRAM_ID,
- });
- const kp = await loadKp();
- let featureProposalPk: PublicKey;
- let acceptanceTokenAccountPk: PublicKey;
- let featureIdPk: PublicKey;
- async function propose() {
- const featureProposalKp = new Keypair();
- featureProposalPk = featureProposalKp.publicKey;
- const [mintPk] = await PublicKey.findProgramAddress(
- [featureProposalPk.toBuffer(), Buffer.from("mint")],
- program.programId
- );
- const [distributorTokenAccountPk] = await PublicKey.findProgramAddress(
- [featureProposalPk.toBuffer(), Buffer.from("distributor")],
- program.programId
- );
- [acceptanceTokenAccountPk] = await PublicKey.findProgramAddress(
- [featureProposalPk.toBuffer(), Buffer.from("acceptance")],
- program.programId
- );
- [featureIdPk] = await PublicKey.findProgramAddress(
- [featureProposalPk.toBuffer(), Buffer.from("feature-id")],
- program.programId
- );
- const proposeIx = await program.methods
- .propose(new BN(10), { tokensRequired: new BN(5), deadline: new BN(24) })
- .accounts({
- fundingAddress: kp.publicKey,
- featureProposalAddress: featureProposalPk,
- mintAddress: mintPk,
- distributorTokenAddress: distributorTokenAccountPk,
- acceptanceTokenAddress: acceptanceTokenAccountPk,
- feature: featureIdPk,
- systemProgram: SystemProgram.programId,
- tokenProgram: tokenProgram.programId,
- rent: SYSVAR_RENT_PUBKEY,
- })
- .instruction();
- await sendAndConfirmTx([proposeIx], [kp, featureProposalKp]);
- }
- async function tally() {
- const tallyIx = await program.methods
- .tally()
- .accounts({
- featureProposalAddress: featureProposalPk,
- acceptanceTokenAddress: acceptanceTokenAccountPk,
- feature: featureIdPk,
- systemProgram: SystemProgram.programId,
- clock: SYSVAR_CLOCK_PUBKEY,
- })
- .instruction();
- await sendAndConfirmTx([tallyIx], [kp]);
- }
- async function fetchFeatureProposal() {
- const featureProposal = await program.account.featureProposal.fetch(
- featureProposalPk
- );
- if (!featureProposal.expired) {
- throw new Error("Feature should be expired.");
- }
- }
- await test(propose);
- await test(tally);
- await test(fetchFeatureProposal);
- }
|