UNPKG

@tribecahq/tribeca-sdk

Version:

The TypeScript SDK for Tribeca, an open standard and toolkit for launching DAOs on Solana.

83 lines 3.04 kB
import { newProgramMap } from "@saberhq/anchor-contrib"; import { SolanaAugmentedProvider, TransactionEnvelope, } from "@saberhq/solana-contrib"; import { Keypair, SystemProgram } from "@solana/web3.js"; import { DEFAULT_LOCKER_PARAMS, TRIBECA_ADDRESSES, TRIBECA_IDLS, } from "./constants"; import { GovernWrapper } from "./wrappers"; import { findLockerAddress } from "./wrappers/lockedVoter/pda"; import { findSimpleElectorateAddress } from "./wrappers/simpleVoter/pda"; /** * TribecaSDK. */ export class TribecaSDK { constructor(provider, programs) { this.provider = provider; this.programs = programs; } /** * Creates a new instance of the SDK with the given keypair. */ withSigner(signer) { return TribecaSDK.load({ provider: this.provider.withSigner(signer), }); } /** * Loads the SDK. * @returns */ static load({ provider }) { const programs = newProgramMap(provider, TRIBECA_IDLS, TRIBECA_ADDRESSES); return new TribecaSDK(new SolanaAugmentedProvider(provider), programs); } /** * Govern program helpers. */ get govern() { return new GovernWrapper(this); } async createSimpleElectorate({ proposalThreshold, governor, govTokenMint, baseKP = Keypair.generate(), }) { const [electorate, bump] = await findSimpleElectorateAddress(baseKP.publicKey); return { electorate, tx: new TransactionEnvelope(this.provider, [ this.programs.SimpleVoter.instruction.initializeElectorate(bump, proposalThreshold, { accounts: { base: baseKP.publicKey, governor, electorate, govTokenMint, payer: this.provider.wallet.publicKey, systemProgram: SystemProgram.programId, }, }), ], [baseKP]), }; } /** * Creates a Locker, which is an Electorate that supports vote locking. * @returns */ async createLocker({ governor, govTokenMint, baseKP = Keypair.generate(), ...providedLockerParams }) { const [locker, bump] = await findLockerAddress(baseKP.publicKey); const lockerParams = { ...DEFAULT_LOCKER_PARAMS, ...providedLockerParams, }; return { locker, tx: new TransactionEnvelope(this.provider, [ this.programs.LockedVoter.instruction.newLocker(bump, lockerParams, { accounts: { base: baseKP.publicKey, governor, locker, tokenMint: govTokenMint, payer: this.provider.wallet.publicKey, systemProgram: SystemProgram.programId, }, }), ], [baseKP]), }; } } //# sourceMappingURL=sdk.js.map