UNPKG

@unloc-xyz/unloc-sdk

Version:
185 lines 8.16 kB
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