import dayjs from 'dayjs' function toDay(time) { return dayjs(time).format('YYYY-MM-DD') } function formatToken(token) { // token.denom // token.amount let denom = token.denom.toUpperCase() if (denom.charAt(0) === 'U') { denom = denom.substring(1) } return `${(token.amount / 1000000).toFixed()} ${denom}` } const handler = class DefaultHandler { commonProcess(res) { this.raw = res return res.result } processProposalTally(tally) { console.log(tally) const result = this.commonProcess(tally) return result } processProposalList(proposals) { console.log(proposals) const ret = [] this.commonProcess(proposals[0]).forEach(element => { const yes = Number(element.final_tally_result.yes) const no = Number(element.final_tally_result.no) const abstain = Number(element.final_tally_result.abstain) const veto = Number(element.final_tally_result.no_with_veto) // const j = voting.indexOf(element.id) // if (proposals.length > 2 && j > -1) { // const update = this.commonProcess(proposals[j + 2]) // yes = update.yes // no = update.no // abstain = update.abstain // veto = update.no_with_veto // } // calculate total const pool = this.commonProcess(proposals[1]) let total = yes + no + veto + abstain if (total < Number(pool.bonded_tokens)) total = Number(pool.bonded_tokens) ret.push({ id: element.id, status: element.status, type: element.content.type, title: element.content.value.title, description: element.content.value.description, tally: { yes: ((yes / total) * 100).toFixed(2), no: ((no / total) * 100).toFixed(2), abstain: ((abstain / total) * 100).toFixed(2), veto: ((veto / total) * 100).toFixed(2), turnout: (((yes + no + abstain + veto) / total) * 100).toFixed(2), total, }, submit_time: toDay(element.submit_time), voting_end_time: toDay(element.voting_end_time), voting_start_time: toDay(element.voting_start_time), total_deposit: formatToken(element.total_deposit[0]), }) }) console.log(ret) return ret } } export default handler