@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
52 lines (51 loc) • 2.22 kB
JavaScript
import { getX2EarnAppsContract, loadMigrationData, validateMigrationData } from "./helpers";
async function main() {
const data = loadMigrationData();
validateMigrationData(data);
const x2EarnApps = await getX2EarnAppsContract();
const expectedAppScore = new Map();
const expectedAppNodes = new Map();
for (const e of data.endorsements) {
expectedAppScore.set(e.appId, (expectedAppScore.get(e.appId) ?? 0) + e.points);
if (!expectedAppNodes.has(e.appId))
expectedAppNodes.set(e.appId, new Set());
expectedAppNodes.get(e.appId).add(e.nodeId);
}
let failed = false;
for (const appId of expectedAppScore.keys()) {
const expectedSum = expectedAppScore.get(appId) ?? 0;
const onChainScore = Number(await x2EarnApps.getScore(appId));
if (onChainScore !== expectedSum) {
console.error(`App ${appId}: getScore()=${onChainScore}, expected=${expectedSum}`);
failed = true;
}
const expectedNodes = [...(expectedAppNodes.get(appId) ?? [])].sort();
const onChainNodes = (await x2EarnApps.getEndorserNodes(appId)).map((n) => n.toString());
onChainNodes.sort();
const nodesMatch = expectedNodes.length === onChainNodes.length && expectedNodes.every((n, i) => n === onChainNodes[i]);
if (!nodesMatch) {
console.error(`App ${appId}: getEndorserNodes() mismatch. expected=${expectedNodes.join(",")} onChain=${onChainNodes.join(",")}`);
failed = true;
}
}
for (const e of data.endorsements) {
const onChain = Number(await x2EarnApps.getNodePointsForApp(BigInt(e.nodeId), e.appId));
if (onChain !== e.points) {
console.error(`Node ${e.nodeId} app ${e.appId}: getNodePointsForApp()=${onChain}, expected=${e.points}`);
failed = true;
}
}
const paused = await x2EarnApps.endorsementsPaused();
console.log("endorsementsPaused():", paused);
if (failed) {
console.log("Verification: FAIL");
process.exit(1);
}
console.log("Verification: PASS");
}
main()
.then(() => process.exit(0))
.catch(e => {
console.error(e);
process.exit(1);
});