@q-dev/gdk-sdk
Version:
Typescript Library to interact with GDK Contracts
105 lines • 5.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DAOInstance = void 0;
const index_1 = require("../index");
const utils_1 = require("../utils");
class DAOInstance {
constructor(signer, DAORegistry) {
this.signer = signer;
this.DAORegistry = DAORegistry;
this.DAORegistryInstance = new index_1.DAORegistryInstance(this.signer, this.DAORegistry);
}
async getConstitutionHash() {
const storage = await this.getConfParameterStorageInstance(utils_1.DAO_RESERVED_NAME);
const hash = (await storage.getDAOParameter(utils_1.CONSTITUTION_HASH_ID)).value;
return hash.toString();
}
async getPanelVotingTokenAddress(panelName) {
const votingInstance = await this.getDAOVotingInstance(panelName);
return votingInstance.instance.votingToken();
}
async getPermissionManagerInstance() {
const permissionManagerAddress = await this.DAORegistryInstance.instance.getPermissionManager();
return new index_1.PermissionManagerInstance(this.signer, permissionManagerAddress);
}
async getVaultInstance() {
const vaultAddress = await this.DAORegistryInstance.instance.getDAOVault();
return new index_1.DAOVaultInstance(this.signer, vaultAddress);
}
async getDAOVotingInstance(panelName) {
const voting = panelName === utils_1.DAO_RESERVED_NAME
? await this.DAORegistryInstance.instance.getGeneralDAOVoting(panelName)
: await this.DAORegistryInstance.instance.getExpertsDAOVoting(panelName);
return new index_1.DAOVotingInstance(this.signer, voting);
}
async getExpertsVotingInstance(panelName) {
const voting = await this.DAORegistryInstance.instance.getExpertsDAOVoting(panelName);
return new index_1.DAOVotingInstance(this.signer, voting);
}
async getGeneralVotingInstance(panelName) {
const voting = await this.DAORegistryInstance.instance.getGeneralDAOVoting(panelName);
return new index_1.DAOVotingInstance(this.signer, voting);
}
async getMemberStorageInstance(panelName) {
const memberStorage = await this.DAORegistryInstance.instance.getDAOMemberStorage(panelName);
return new index_1.DAOMemberStorageInstance(this.signer, memberStorage);
}
async getConfParameterStorageInstance(panelName) {
const parameterStorage = await this.DAORegistryInstance.instance.getConfDAOParameterStorage(panelName);
return new index_1.DAOParameterStorageInstance(this.signer, parameterStorage);
}
async getRegParameterStorageInstance(panelName) {
const parameterStorage = await this.DAORegistryInstance.instance.getRegDAOParameterStorage(panelName);
return new index_1.DAOParameterStorageInstance(this.signer, parameterStorage);
}
async createVoting(votingInstance, params) {
return votingInstance.createProposal(params.situation, params.remark, params.callData);
}
async getAggregatedParameters(panelName) {
let regParams = [];
if (panelName !== utils_1.DAO_RESERVED_NAME) {
const parameterStorage = await this.getRegParameterStorageInstance(panelName);
regParams = await parameterStorage.instance.getDAOParameters();
}
const confParameterStorage = await this.getConfParameterStorageInstance(panelName);
const confParams = await confParameterStorage.instance.getDAOParameters();
return regParams.concat(confParams);
}
async getProposalTotalParticipate(panelName, proposalId) {
const votingInstance = await this.getDAOVotingInstance(panelName);
const proposalInfo = await votingInstance.getProposal(proposalId);
if (panelName !== utils_1.DAO_RESERVED_NAME && proposalInfo.params.votingType === index_1.VotingType.Restricted) {
const memberStorageInstance = await this.getMemberStorageInstance(panelName);
return await memberStorageInstance.instance.getMembersCount();
}
const daoVaultInstance = await this.getVaultInstance();
const token = await votingInstance.instance.votingToken();
return daoVaultInstance.instance.getTokenSupply(token);
}
/**
* Checks if the DAO supports external links in voting situations.
*
* This method verifies if the DAO's voting contract can handle external links associated with voting proposals.
* It returns true if the DAO's contract has been updated to support this feature (or it was initially deployed
* with support for external links).
*
* Note: Older contract versions, which were created before the introduction of external link support, will cause
* this method to throw an error and return false.
*
* @returns {Promise<boolean>} True if external links are supported, false otherwise.
*/
async doesDaoSupportExternalLinks() {
try {
const votingInstance = await this.getGeneralVotingInstance(utils_1.DAO_RESERVED_NAME);
// Attempt to access a feature specific to external link support
await votingInstance.instance.proposalSituationLink(0);
return true;
}
catch (error) {
console.error(`Error checking external link support in DAO: ${error.message}`);
return false;
}
}
}
exports.DAOInstance = DAOInstance;
//# sourceMappingURL=DAOInstance.js.map