UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

73 lines (72 loc) 3.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLegacyNodeHolder = exports.createNodeHolder = exports.endorseApp = exports.getNodeIdFromStakeTx = void 0; const deploy_1 = require("./deploy"); const common_1 = require("./common"); const getNodeIdFromStakeTx = async (tx) => { const { stargateNftMock } = await (0, deploy_1.getOrDeployContractInstances)({}); const nodeStakeTxReceipt = await tx.wait(); // Find the Transfer event and decode it to get the tokenId const transferEvent = nodeStakeTxReceipt?.logs .map(log => { try { return stargateNftMock.interface.parseLog({ topics: log.topics, data: log.data }); } catch { return null; } }) .find(event => event?.name === "Transfer"); if (!transferEvent) throw new Error("No Transfer event found"); const nodeId = transferEvent.args.tokenId; return nodeId; }; exports.getNodeIdFromStakeTx = getNodeIdFromStakeTx; const endorseApp = async (appId, endorser, useLegacyNode = false) => { const { x2EarnApps, nodeManagement, otherAccounts } = await (0, deploy_1.getOrDeployContractInstances)({}); let nodeId; // Create a MjolnirX node holder => score = 100, but maxPointsPerNodePerApp = 49 // So we need 3 endorsers to reach 100 points (49 + 49 + 2) if (useLegacyNode) { await (0, common_1.mintLegacyNode)(7, endorser); const ownerNodes = await nodeManagement.getUserNodes(endorser.address); nodeId = ownerNodes[0].nodeId; } else { nodeId = await (0, exports.createNodeHolder)(7, endorser); } // Primary endorser contributes 49 points const tx = await x2EarnApps.connect(endorser).endorseApp(appId, nodeId, 49); const txReceipt = await tx.wait(); // Get 2 additional accounts from the end of otherAccounts to avoid conflicts const extra1 = otherAccounts[otherAccounts.length - 3]; const extra2 = otherAccounts[otherAccounts.length - 2]; // Create nodes for additional endorsers const nodeId2 = await (0, exports.createNodeHolder)(7, extra1); const nodeId3 = await (0, exports.createNodeHolder)(7, extra2); // Additional endorsers contribute 49 + 2 = 51 points (total = 100) await x2EarnApps.connect(extra1).endorseApp(appId, nodeId2, 49); await x2EarnApps.connect(extra2).endorseApp(appId, nodeId3, 2); const event = txReceipt?.logs[0]; if (!event) throw new Error("No endorsement event found"); return { nodeId, txReceipt }; }; exports.endorseApp = endorseApp; const createNodeHolder = async (level, endorser) => { const { stargateMock, stargateNftMock } = await (0, deploy_1.getOrDeployContractInstances)({}); const nodeStakeTx = await stargateMock .connect(endorser) .stake(level, { value: (await stargateNftMock.getLevel(level)).vetAmountRequiredToStake }); const nodeId = await (0, exports.getNodeIdFromStakeTx)(nodeStakeTx); return nodeId; }; exports.createNodeHolder = createNodeHolder; const createLegacyNodeHolder = async (level, endorser) => { const { nodeManagement } = await (0, deploy_1.getOrDeployContractInstances)({}); await (0, common_1.mintLegacyNode)(level, endorser); const ownerNodes = await nodeManagement.getUserNodes(endorser.address); return ownerNodes[0].nodeId; }; exports.createLegacyNodeHolder = createLegacyNodeHolder;