PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@polkadot/api-derive/treasury
Просмотр файла: proposals.js
import { combineLatest, map, of, switchMap } from 'rxjs';
import { memo } from '../util/index.js';
function parseResult(api, { allIds, allProposals, approvalIds, councilProposals, proposalCount }) {
const approvals = [];
const proposals = [];
const councilTreasury = councilProposals.filter(({ proposal }) =>
// FIXME `approveProposal` and `rejectProposal` have been removed in substrate and released in 1.14
// in favor of `spend`. See: https://github.com/paritytech/polkadot-sdk/pull/3820
proposal && ((api.tx.treasury['approveProposal'] && api.tx.treasury['approveProposal'].is(proposal)) ||
(api.tx.treasury['rejectProposal'] && api.tx.treasury['rejectProposal'].is(proposal))));
allIds.forEach((id, index) => {
if (allProposals[index].isSome) {
const council = councilTreasury
.filter(({ proposal }) => proposal && id.eq(proposal.args[0]))
.sort((a, b) => a.proposal && b.proposal
? a.proposal.method.localeCompare(b.proposal.method)
: a.proposal
? -1
: 1);
const isApproval = approvalIds.some((approvalId) => approvalId.eq(id));
const derived = { council, id, proposal: allProposals[index].unwrap() };
if (isApproval) {
approvals.push(derived);
}
else {
proposals.push(derived);
}
}
});
return { approvals, proposalCount, proposals };
}
function retrieveProposals(api, proposalCount, approvalIds) {
const proposalIds = [];
const count = proposalCount.toNumber();
for (let index = 0; index < count; index++) {
if (!approvalIds.some((id) => id.eqn(index))) {
proposalIds.push(api.registry.createType('ProposalIndex', index));
}
}
const allIds = [...proposalIds, ...approvalIds];
return combineLatest([
api.query.treasury.proposals.multi(allIds),
api.derive.council
? api.derive.council.proposals()
: of([])
]).pipe(map(([allProposals, councilProposals]) => parseResult(api, { allIds, allProposals, approvalIds, councilProposals, proposalCount })));
}
/**
* @description Retrieve all active and approved treasury proposals, along with their info
*/
export function proposals(instanceId, api) {
return memo(instanceId, () => api.query.treasury
? combineLatest([
api.query.treasury.proposalCount(),
api.query.treasury.approvals()
]).pipe(switchMap(([proposalCount, approvalIds]) => retrieveProposals(api, proposalCount, approvalIds)))
: of({
approvals: [],
proposalCount: api.registry.createType('ProposalIndex'),
proposals: []
}));
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!