@agentek/tools
Version:
Blockchain tools for AI agents
54 lines • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNaniProposals = void 0;
const zod_1 = require("zod");
const client_js_1 = require("../client.js");
const chains_1 = require("viem/chains");
const abis_js_1 = require("./abis.js");
const constants_js_1 = require("./constants.js");
const supportedChains = [chains_1.mainnet, chains_1.base];
exports.getNaniProposals = (0, client_js_1.createTool)({
name: "getNaniProposals",
description: "Get proposals for NANIDAO",
supportedChains,
parameters: zod_1.z.object({
account: zod_1.z.string(),
chainId: zod_1.z.number(),
dao: zod_1.z.string(),
}),
execute: async (client, args) => {
if (!args.dao.toLowerCase().includes("nani")) {
return "Only NANIDAO is supported right now. More soon ✈️";
}
const publicClient = client.getPublicClient(args.chainId);
const votes = await publicClient.readContract({
address: constants_js_1.SIGNALS_ADDRESS,
abi: abis_js_1.SignalsAbi,
functionName: "getLatestProposals",
});
const proposalCount = await publicClient.readContract({
address: constants_js_1.SIGNALS_ADDRESS,
abi: abis_js_1.SignalsAbi,
functionName: "proposalCount",
});
const count = Number(proposalCount);
const len = count > 10 ? 10 : count;
const proposalIds = Array.from({ length: len }, (_, i) => count - len + i);
const isPassingResults = await Promise.all(proposalIds.map((id) => publicClient.readContract({
address: constants_js_1.SIGNALS_ADDRESS,
abi: abis_js_1.SignalsAbi,
functionName: "isPassing",
args: [BigInt(id)],
})));
return votes.map((vote, index) => ({
proposer: vote.proposer,
yes: vote.yes.toString(),
no: vote.no.toString(),
created: new Date(Number(vote.created) * 1000).toLocaleString(),
content: vote.content,
id: proposalIds[index],
isPassing: isPassingResults[index],
}));
},
});
//# sourceMappingURL=tools.js.map