@tribecahq/tribeca-sdk
Version:
The TypeScript SDK for Tribeca, an open standard and toolkit for launching DAOs on Solana.
83 lines • 3.04 kB
JavaScript
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