0.4.0-alpha • Published 12 months ago

@myclique/governance-sdk v0.4.0-alpha

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

Clique JS governance SDK

@myclique/governance-sdk provides easy access to the high level interactions to be governance with an Clique DAO.

Installation

Use npm or yarn to install @myclique/governance-sdk.

npm install @myclique/governance-sdk
# or
yarn add @myclique/governance-sdk

# Usage

Context

The Context class is an utility component that holds the configuration passed to Clique instance.

import { Context, Clique, CChainId } from "@myclique/governance-sdk";

// Define
const context: Context = new Context({
  daoChainId: CChainId.POLYGON,
  daoAddress: "0x39fa22b4852119c62aabdd4523ac587481943c61",
  web3Providers: {
    [CChainId.ETH]: "https://rpc.ankr.com/eth",
    [CChainId.POLYGON]: "https://rpc.ankr.com/polygon",
    [CChainId.GOERLI]: "",
    [CChainId.POLYGON_MUMBAI]: "",
  },
});
// Test
const context: Context = new Context({
  daoChainId: CChainId.GOERLI,
  daoAddress: "0xadf89e38a2d189531c425e1f79db22b43889cb50",
  web3Providers: {
    [CChainId.ETH]: "https://rpc.ankr.com/eth",
    [CChainId.POLYGON]: "https://rpc.ankr.com/polygon",
    [CChainId.GOERLI]: "https://goerli.infura.io/v3/",
    [CChainId.POLYGON_MUMBAI]: "https://rpc.ankr.com/polygon_mumbai",
  },
});

const clique: Clique = new Clique(context);

// Update signer
context.set({ signer });
// or
clique.web3.useSigner(signer);

Get governance dao info

import { Clique, DaoInfoProp } from "@myclique/governance-sdk";

const clique: Clique = new Clique(context);
const daoInfo: DaoInfoProp | undefined = clique.daoInfo;
// if undefined
const daoInfo: DaoInfoProp = await clique.getDaoInfo();

Get governance dao token

import { Clique, DaoInfoProp, Token } from "@myclique/governance-sdk";

const clique: Clique = new Clique(context);

const daoToken: Token | undefined = await clique.getDaoToken();
// or
const daoInfo: DaoInfoProp | undefined = clique.daoInfo;
// const daoInfo: DaoInfoProp = await clique.getDaoInfo()
const daoToken: Token = daoInfo.token;

Create proposal

import {
  ProposalSignProp,
  ProposalVotingTypes,
} from "@myclique/governance-sdk";

const data: ProposalSignProp = await clique.getCreateProposalDataAndSignature(
  account
);
clique.createProposal(
  "title1",
  "introduction1",
  "content1",
  1664774069,
  1666033269,
  ProposalVotingTypes.MULTI,
  ["one", "two"],
  data
);

Get proposal list ids

import { ProposalStatus } from "@myclique/governance-sdk";

// get ids
const proposalListData: {
  total: number;
  proposalIds: number[];
} = await clique.getProposalListIds(ProposalStatus.OPEN, 0);

Get proposal info by proposal id

import { ProposalDetailProp } from "@myclique/governance-sdk";

const proposalDetail: ProposalDetailProp = await clique.getProposalInfo(1);

Cancel proposal

// To cancel proposal before closing
clique.cancelProposal(1);

Get account votes

import { AccountVotesInfo } from "@myclique/governance-sdk";

const votes: AccountVotesInfo = clique.getAccountVotesById(account, 1);

vote

import { ProposalSignProp } from "@myclique/governance-sdk";

const proposalId = 1;
const data: ProposalSignProp = await clique.getVotesDataAndSignature(
  account,
  proposalId
);
clique.proposalVote(proposalId, [0], [data.balance.raw.toString()], data, true);

Get proposal vote history

import { ProposalVoteHistory } from "@myclique/governance-sdk";

const list: {
  total: number;
  list: ProposalVoteHistory[];
} = await clique.getProposalVoteHistory(proposalId, 0, 8);