@tribecahq/tribeca-sdk
Version:
The TypeScript SDK for Tribeca, an open standard and toolkit for launching DAOs on Solana.
87 lines • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TribecaSDK = void 0;
const anchor_contrib_1 = require("@saberhq/anchor-contrib");
const solana_contrib_1 = require("@saberhq/solana-contrib");
const web3_js_1 = require("@solana/web3.js");
const constants_1 = require("./constants");
const wrappers_1 = require("./wrappers");
const pda_1 = require("./wrappers/lockedVoter/pda");
const pda_2 = require("./wrappers/simpleVoter/pda");
/**
* TribecaSDK.
*/
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 = (0, anchor_contrib_1.newProgramMap)(provider, constants_1.TRIBECA_IDLS, constants_1.TRIBECA_ADDRESSES);
return new TribecaSDK(new solana_contrib_1.SolanaAugmentedProvider(provider), programs);
}
/**
* Govern program helpers.
*/
get govern() {
return new wrappers_1.GovernWrapper(this);
}
async createSimpleElectorate({ proposalThreshold, governor, govTokenMint, baseKP = web3_js_1.Keypair.generate(), }) {
const [electorate, bump] = await (0, pda_2.findSimpleElectorateAddress)(baseKP.publicKey);
return {
electorate,
tx: new solana_contrib_1.TransactionEnvelope(this.provider, [
this.programs.SimpleVoter.instruction.initializeElectorate(bump, proposalThreshold, {
accounts: {
base: baseKP.publicKey,
governor,
electorate,
govTokenMint,
payer: this.provider.wallet.publicKey,
systemProgram: web3_js_1.SystemProgram.programId,
},
}),
], [baseKP]),
};
}
/**
* Creates a Locker, which is an Electorate that supports vote locking.
* @returns
*/
async createLocker({ governor, govTokenMint, baseKP = web3_js_1.Keypair.generate(), ...providedLockerParams }) {
const [locker, bump] = await (0, pda_1.findLockerAddress)(baseKP.publicKey);
const lockerParams = {
...constants_1.DEFAULT_LOCKER_PARAMS,
...providedLockerParams,
};
return {
locker,
tx: new solana_contrib_1.TransactionEnvelope(this.provider, [
this.programs.LockedVoter.instruction.newLocker(bump, lockerParams, {
accounts: {
base: baseKP.publicKey,
governor,
locker,
tokenMint: govTokenMint,
payer: this.provider.wallet.publicKey,
systemProgram: web3_js_1.SystemProgram.programId,
},
}),
], [baseKP]),
};
}
}
exports.TribecaSDK = TribecaSDK;
//# sourceMappingURL=sdk.js.map