pussy-ts/src/utils/governance.ts

import axios from 'axios';
import { CYBER } from './config';
import { GetTxsEventResponse } from 'cosmjs-types/cosmos/tx/v1beta1/service';

export const getProposals = async () => {
  try {
    const response = await axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/cosmos/gov/v1beta1/proposals`,
    });

    return response.data.proposals;
  } catch (error) {
    console.log('getProposals error', error);
    return [];
  }
};

export const getProposalsDetail = (id) =>
  new Promise((resolve) => {
    axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/cosmos/gov/v1beta1/proposals/${id}`,
    })
      .then((response) => {
        resolve(response.data.proposal);
      })
      .catch((e) => {
        console.error(e);
      });
  });

export const getStakingPool = () =>
  new Promise((resolve) => {
    axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/staking/pool`,
    })
      .then((response) => {
        resolve(response.data.result);
      })
      .catch((e) => {
        console.error(e);
      });
  });

export const getTallying = () =>
  new Promise((resolve) => {
    axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/gov/parameters/tallying`,
    })
      .then((response) => {
        resolve(response.data.result);
      })
      .catch((e) => {
        console.error(e);
      });
  });

export const getProposer = async (id) => {
  try {
    const response = await axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/gov/proposals/${id}/proposer`,
    });
    return response.data.result;
  } catch (error) {
    console.log(error);
    return null;
  }
};

export const getMinDeposit = async () => {
  try {
    const response = await axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/gov/parameters/deposit`,
    });
    return response.data.result;
  } catch (error) {
    console.log('error :>> ', error);
    return null;
  }
};

export const getTableVoters = async (id, offset = 0, limit = 20) => {
  try {
    const response = await axios({
      method: 'get',
      url: `${
        CYBER.CYBER_NODE_URL_LCD
      }/cosmos/tx/v1beta1/txs?pagination.offset=${
        offset * limit
      }&pagination.limit=${limit}&orderBy=ORDER_BY_DESC&events=proposal_vote.proposal_id%3D${id}`,
    });
    let r: Omit<GetTxsEventResponse, 'txResponses'> & {
      tx_responses: GetTxsEventResponse['txResponses'];
    } = response.data;

    return r;
  } catch (error) {
    return null;
  }
};

export const getTallyingProposals = async (id) => {
  try {
    const response = await axios({
      method: 'get',
      url: `${CYBER.CYBER_NODE_URL_LCD}/gov/proposals/${id}/tally`,
    });
    return response.data.result;
  } catch (e) {
    console.log(e);
    return null;
  }
};

export const reduceTxsVoters = (txs) => {
  return txs.reduce((prevObj, item) => {
    const { txhash, timestamp } = item;
    const messagesItems = item.tx.body.messages.reduce((mPrevObj, value) => {
      let v = value;

      if (value['@type'] === '/cosmos.authz.v1beta1.MsgExec') {
        v = value.msgs?.[0];
      }

      return { ...mPrevObj, ...v };
    }, {});
    return [...prevObj, { txhash, timestamp, ...messagesItems }];
  }, []);
};

Synonyms

cyb/src/utils/governance.ts
bostrom-mcp/src/tools/governance.ts
bostrom-mcp/src/services/governance.ts

Neighbours