@unloc-xyz/unloc-sdk
Version:
185 lines • 8.16 kB
JavaScript
import * as anchor from "@project-serum/anchor";
import { BN } from "@project-serum/anchor";
import { STAKING_PID, VOTING_PID } from "./../global-config";
import { getFirstStakingPool } from "./../staking";
import { defaults, pda, SOLANA_CONNECTION } from "./../utils";
const { PublicKey } = anchor.web3;
import { IDL } from "../types/unloc_voting";
export const VOTING_GLOBAL_STATE_TAG = Buffer.from("GLOBAL_STATE_TAG");
export const VOTING_TAG = Buffer.from("VOTING_TAG");
export const VOTING_ITEM_TAG = Buffer.from("VOTING_ITEM_TAG");
export const VOTING_USER_TAG = Buffer.from("VOTING_USER_TAG");
export let votingProgram = null;
export let votingProgramProvider = null;
export let votingProgramId = null;
export const initVotingProgram = (wallet, connection = SOLANA_CONNECTION, pid = VOTING_PID) => {
if (votingProgram != null) {
return;
}
votingProgramId = pid;
const provider = new anchor.AnchorProvider(connection, wallet, {
skipPreflight: true,
});
votingProgramProvider = provider;
// Generate the program client from IDL.
votingProgram = new anchor.Program(IDL, votingProgramId, provider);
};
export const setVotingGlobalState = async (newSuperOwner, stakingPid = STAKING_PID, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const superOwner = signer;
const tx = await votingProgram.rpc.setGlobalState(newSuperOwner, stakingPid, {
accounts: {
superOwner,
globalState,
...defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("setGlobalState tx = ", tx);
};
export const createVoting = async (votingStartTimestamp, votingEndTimestamp, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const globalStateData = await votingProgram.account.globalState.fetch(globalState);
const votingNumber = globalStateData.votingCount;
const voting = await pda([VOTING_TAG, votingNumber.toArrayLike(Buffer, "be", 8)], votingProgramId);
const superOwner = signer;
const tx = await votingProgram.rpc.setVoting(votingNumber, votingStartTimestamp, votingEndTimestamp, {
accounts: {
superOwner,
globalState,
voting,
...defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("createVoting tx = ", tx);
};
export const setVoting = async (votingNumber, votingStartTimestamp, votingEndTimestamp, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const voting = await pda([VOTING_TAG, votingNumber.toArrayLike(Buffer, "be", 8)], votingProgramId);
const superOwner = signer;
const tx = await votingProgram.rpc.setVoting(votingNumber, votingStartTimestamp, votingEndTimestamp, {
accounts: {
superOwner,
globalState,
voting,
...defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("setVoting tx = ", tx);
};
export const setVotingItem = async (collectionKey, voting, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const superOwner = signer;
const votingItem = await pda([VOTING_ITEM_TAG, voting.toBuffer(), collectionKey.toBuffer()], votingProgramId);
try {
const tx = await votingProgram.rpc.setVotingItem(collectionKey, {
accounts: {
superOwner,
globalState,
voting,
votingItem,
...defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("setVotingItem tx = ", tx);
}
catch (e) {
console.log(e);
}
};
export const delVotingItem = async (votingItem, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const superOwner = signer;
const votingItemData = await votingProgram.account.votingItem.fetch(votingItem);
const voting = votingItemData.voting;
const tx = await votingProgram.rpc.setVotingItem({
accounts: {
superOwner,
globalState,
voting,
votingItem,
...defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("delVotingItem tx = ", tx);
};
export const vote = async (votingItem, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const user = signer;
const votingItemData = await votingProgram.account.votingItem.fetch(votingItem);
const voting = votingItemData.voting;
const votingUser = await pda([VOTING_USER_TAG, voting.toBuffer(), user.toBuffer()], votingProgramId);
const stakingPool = (await getFirstStakingPool()).publicKey;
const stakingUser = await pda([stakingPool.toBuffer(), user.toBuffer()], STAKING_PID);
try {
const tx = await votingProgram.rpc.vote({
accounts: {
user,
globalState,
voting,
votingItem,
votingUser,
stakingUser,
...defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("vote tx = ", tx);
}
catch (e) {
console.log(e);
}
};
export const getVotingGlobalState = async () => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
return await votingProgram.account.globalState.fetch(globalState);
};
export const getVoting = async (votingNumber) => {
const voting = await pda([VOTING_TAG, votingNumber.toArrayLike(Buffer, "be", 8)], votingProgramId);
return await votingProgram.account.voting.fetch(voting);
};
export const getLastVoting = async () => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const globalStateData = await votingProgram.account.globalState.fetch(globalState);
const votingNumber = new BN(globalStateData.votingCount.toNumber() - 1);
const voting = await pda([VOTING_TAG, votingNumber.toArrayLike(Buffer, "be", 8)], votingProgramId);
return await votingProgram.account.voting.fetch(voting);
};
export const getLastVotingKey = async () => {
const globalState = await pda([VOTING_GLOBAL_STATE_TAG], votingProgramId);
const globalStateData = await votingProgram.account.globalState.fetch(globalState);
const votingNumber = new BN(globalStateData.votingCount.toNumber() - 1);
const voting = await pda([VOTING_TAG, votingNumber.toArrayLike(Buffer, "be", 8)], votingProgramId);
return voting;
};
export const getVotingItem = async (votingItem) => {
return await votingProgram.account.votingItem.fetch(votingItem);
};
export const getAllVotingItems = async () => {
return await votingProgram.account.votingItem.all();
};
export const getVotingItemKey = async (collectionKey, voting) => {
const votingItem = await pda([VOTING_ITEM_TAG, voting.toBuffer(), collectionKey.toBuffer()], votingProgramId);
return votingItem;
};
export const getVotingUser = async (voting, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const user = signer;
const votingUser = await pda([VOTING_USER_TAG, voting.toBuffer(), user.toBuffer()], votingProgramId);
return await votingProgram.account.votingUser.fetch(votingUser);
};
export const getVotingUserKey = async (voting, signer = votingProgramProvider.wallet.publicKey, signers = []) => {
const user = signer;
const votingUser = await pda([VOTING_USER_TAG, voting.toBuffer(), user.toBuffer()], votingProgramId);
return votingUser;
};
//# sourceMappingURL=index.js.map