dao-governance-framework/forum-network/public/validation-pool-test.js

70 lines
2.6 KiB
JavaScript

import { Box } from './classes/box.js';
import { Scene } from './classes/scene.js';
import { Member } from './classes/member.js';
import { Bench } from './classes/bench.js';
import { delay } from './util.js';
const rootElement = document.getElementById('validation-pool');
const rootBox = new Box('rootBox', rootElement).flex();
const scene = window.scene = new Scene('Validation Pool test', rootBox).log('sequenceDiagram');
const member1 = window.member1 = await new Member("Member1", scene).initialize();
const member2 = window.member2 = await new Member("Member2", scene).initialize();
const bench = window.bench = new Bench("Bench", scene);
const updateDisplayValues = async () => {
member1.setValue('rep', bench.reputations.getTokens(member1.reputationPublicKey));
member2.setValue('rep', bench.reputations.getTokens(member2.reputationPublicKey));
bench.setValue('total rep', bench.getTotalReputation());
// With params.lockingTimeExponent = 0 and params.activeVoterThreshold = null,
// these next 3 propetries are all equal to total rep
// bench.setValue('available rep', bench.getTotalAvailableReputation());
// bench.setValue('active rep', bench.getTotalActiveReputation());
// bench.setValue('active available rep', bench.getTotalActiveAvailableReputation());
await scene.renderSequenceDiagram();
};
updateDisplayValues();
await delay(1000);
// First member can self-approve
{
const pool = await member1.initiateValidationPool(bench, {fee: 7, duration: 1000, tokenLossRatio: 1});
// await member1.castVote(pool, true, 0, 0);
await member1.revealIdentity(pool); // Vote passes
await updateDisplayValues();
await delay(1000);
}
// // Failure example: second member can not self-approve
// try {
// const pool = member2.initiateValidationPool(bench, {fee: 1, duration: 1000, tokenLossRatio: 1});
// await member2.castVote(pool, true, 0, 0);
// await member2.revealIdentity(pool); // Quorum not met!
// await updateDisplayValues();
// await delay(1000);
// } catch(e) {
// if (e.message.match(/Quorum is not met/)) {
// console.log("Caught expected error: Quorum not met")
// } else {
// console.error("Unexpected error")
// throw e;
// }
// }
// Second member must be approved by first member
{
const pool = await member2.initiateValidationPool(bench, {fee: 1, duration: 1000, tokenLossRatio: 1});
await member1.castVote(pool, {position: true, stake: 4, lockingTime: 0});
await member1.revealIdentity(pool);
await member2.revealIdentity(pool); // Vote passes
await updateDisplayValues();
await delay(1000);
}
await updateDisplayValues();
scene.deactivateAll();
await updateDisplayValues();