cosmos-explorer/src/stores/useBankStore.ts
2023-06-08 10:02:47 +08:00

52 lines
1.3 KiB
TypeScript

import { defineStore } from 'pinia';
import { useBlockchain } from './useBlockchain';
import { useStakingStore } from './useStakingStore';
import type { Coin, DenomTrace } from '@/types';
export const useBankStore = defineStore('bankstore', {
state: () => {
return {
supply: {} as Coin,
balances: {} as Record<string, Coin[]>,
totalSupply: { supply: [] as Coin[] },
ibcDenoms: {} as Record<string, DenomTrace>
};
},
getters: {
blockchain() {
return useBlockchain();
},
staking() {
return useStakingStore();
},
},
actions: {
initial() {
this.$reset();
this.supply = {} as Coin;
const denom =
this.staking.params.bond_denom ||
this.blockchain.current?.assets[0].base;
if (denom) {
this.blockchain.rpc.getBankSupplyByDenom(denom).then((res) => {
if (res.amount) this.supply = res.amount;
});
}
},
async fetchSupply(denom: string) {
return this.blockchain.rpc.getBankSupplyByDenom(denom);
},
async fetchDenomTrace(denom: string) {
const hash = denom.replace('ibc/', '');
let trace = this.ibcDenoms[hash];
if (!trace) {
trace = (await this.blockchain.rpc.getIBCAppTransferDenom(hash))
.denom_trace;
this.ibcDenoms[hash] = trace;
}
return trace;
},
},
});