Simplify sequence diagram
This commit is contained in:
parent
be71d4f3cd
commit
f57c38e322
|
@ -73,7 +73,7 @@ export class Business extends Actor {
|
||||||
post.setTitle(`Work Evidence ${requestIndex + 1}`);
|
post.setTitle(`Work Evidence ${requestIndex + 1}`);
|
||||||
|
|
||||||
await this.actions.submitPost.log(this, this.dao);
|
await this.actions.submitPost.log(this, this.dao);
|
||||||
const postId = await this.dao.forum.addPost(reputationPublicKey, post);
|
const { id: postId } = await this.dao.forum.addPost(reputationPublicKey, post);
|
||||||
|
|
||||||
// Initiate a validation pool for this work evidence.
|
// Initiate a validation pool for this work evidence.
|
||||||
await this.actions.initiateValidationPool.log(this, this.dao);
|
await this.actions.initiateValidationPool.log(this, this.dao);
|
||||||
|
|
|
@ -18,9 +18,9 @@ export class DAO extends Actor {
|
||||||
super(name);
|
super(name);
|
||||||
|
|
||||||
/* Contracts */
|
/* Contracts */
|
||||||
this.forum = new Forum(this, `${name} Forum`);
|
this.forum = new Forum(this, 'Forum');
|
||||||
this.availability = new Availability(this, `${name} Availability`);
|
this.availability = new Availability(this, 'Availability');
|
||||||
this.business = new Business(this, `${name} Business`);
|
this.business = new Business(this, 'Business');
|
||||||
this.reputation = new ReputationTokenContract();
|
this.reputation = new ReputationTokenContract();
|
||||||
|
|
||||||
/* Data */
|
/* Data */
|
||||||
|
@ -28,8 +28,6 @@ export class DAO extends Actor {
|
||||||
this.experts = new Map();
|
this.experts = new Map();
|
||||||
|
|
||||||
this.actions = {
|
this.actions = {
|
||||||
addPost: new Action('add post'),
|
|
||||||
createValidationPool: new Action('create validation pool'),
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +61,6 @@ export class DAO extends Actor {
|
||||||
const name = `Pool${validationPoolNumber}`;
|
const name = `Pool${validationPoolNumber}`;
|
||||||
const pool = new ValidationPool(this, poolOptions, name);
|
const pool = new ValidationPool(this, poolOptions, name);
|
||||||
this.validationPools.set(pool.id, pool);
|
this.validationPools.set(pool.id, pool);
|
||||||
await this.actions.createValidationPool.log(this, pool);
|
|
||||||
pool.activate();
|
pool.activate();
|
||||||
|
|
||||||
if (stakeOptions) {
|
if (stakeOptions) {
|
||||||
|
|
|
@ -37,15 +37,10 @@ export class Expert extends ReputationHolder {
|
||||||
await forumNode.receiveMessage(JSON.stringify(postMessage.toJSON()));
|
await forumNode.receiveMessage(JSON.stringify(postMessage.toJSON()));
|
||||||
}
|
}
|
||||||
|
|
||||||
async submitPost(postContent) {
|
|
||||||
// TODO: Include fee
|
|
||||||
await this.actions.submitPost.log(this, this.dao);
|
|
||||||
return this.dao.forum.addPost(this.reputationPublicKey, postContent);
|
|
||||||
}
|
|
||||||
|
|
||||||
async submitPostWithFee(postContent, poolOptions) {
|
async submitPostWithFee(postContent, poolOptions) {
|
||||||
await this.actions.submitPost.log(this, this.dao);
|
const post = await this.dao.forum.addPost(this.reputationPublicKey, postContent);
|
||||||
const postId = await this.dao.forum.addPost(this.reputationPublicKey, postContent);
|
await this.actions.submitPost.log(this, post);
|
||||||
|
const postId = post.id;
|
||||||
const pool = await this.initiateValidationPool({ ...poolOptions, postId });
|
const pool = await this.initiateValidationPool({ ...poolOptions, postId });
|
||||||
this.tokens.push(pool.tokenId);
|
this.tokens.push(pool.tokenId);
|
||||||
return { postId, pool };
|
return { postId, pool };
|
||||||
|
@ -54,14 +49,14 @@ export class Expert extends ReputationHolder {
|
||||||
async initiateValidationPool(poolOptions) {
|
async initiateValidationPool(poolOptions) {
|
||||||
// For now, directly call bench.initiateValidationPool();
|
// For now, directly call bench.initiateValidationPool();
|
||||||
poolOptions.reputationPublicKey = this.reputationPublicKey;
|
poolOptions.reputationPublicKey = this.reputationPublicKey;
|
||||||
await this.actions.initiateValidationPool.log(
|
|
||||||
this,
|
|
||||||
this.dao,
|
|
||||||
`(fee: ${poolOptions.fee}, stake: ${poolOptions.authorStakeAmount ?? 0})`,
|
|
||||||
);
|
|
||||||
const pool = await this.dao.initiateValidationPool(poolOptions);
|
const pool = await this.dao.initiateValidationPool(poolOptions);
|
||||||
this.tokens.push(pool.tokenId);
|
this.tokens.push(pool.tokenId);
|
||||||
this.validationPools.set(pool.id, poolOptions);
|
this.validationPools.set(pool.id, poolOptions);
|
||||||
|
await this.actions.initiateValidationPool.log(
|
||||||
|
this,
|
||||||
|
pool,
|
||||||
|
`(fee: ${poolOptions.fee}, stake: ${poolOptions.authorStakeAmount ?? 0})`,
|
||||||
|
);
|
||||||
return pool;
|
return pool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ export class Forum extends ReputationHolder {
|
||||||
this.id = this.reputationPublicKey;
|
this.id = this.reputationPublicKey;
|
||||||
this.posts = new WDAG();
|
this.posts = new WDAG();
|
||||||
this.actions = {
|
this.actions = {
|
||||||
addPost: new Action('add post'),
|
|
||||||
propagateValue: new Action('propagate'),
|
propagateValue: new Action('propagate'),
|
||||||
transfer: new Action('transfer'),
|
transfer: new Action('transfer'),
|
||||||
};
|
};
|
||||||
|
@ -28,12 +27,11 @@ export class Forum extends ReputationHolder {
|
||||||
|
|
||||||
async addPost(authorId, postContent) {
|
async addPost(authorId, postContent) {
|
||||||
const post = new Post(this, authorId, postContent);
|
const post = new Post(this, authorId, postContent);
|
||||||
await this.actions.addPost.log(this, post);
|
|
||||||
this.posts.addVertex(post.id, post, post.getLabel());
|
this.posts.addVertex(post.id, post, post.getLabel());
|
||||||
for (const { postId: citedPostId, weight } of post.citations) {
|
for (const { postId: citedPostId, weight } of post.citations) {
|
||||||
this.posts.addEdge(CITATION, post.id, citedPostId, weight);
|
this.posts.addEdge(CITATION, post.id, citedPostId, weight);
|
||||||
}
|
}
|
||||||
return post.id;
|
return post;
|
||||||
}
|
}
|
||||||
|
|
||||||
getPost(postId) {
|
getPost(postId) {
|
||||||
|
@ -55,9 +53,8 @@ export class Forum extends ReputationHolder {
|
||||||
}
|
}
|
||||||
|
|
||||||
async onValidate({
|
async onValidate({
|
||||||
postId, tokenId,
|
pool, postId, tokenId,
|
||||||
}) {
|
}) {
|
||||||
this.activate();
|
|
||||||
const initialValue = this.dao.reputation.valueOf(tokenId);
|
const initialValue = this.dao.reputation.valueOf(tokenId);
|
||||||
const postVertex = this.posts.getVertex(postId);
|
const postVertex = this.posts.getVertex(postId);
|
||||||
const post = postVertex.data;
|
const post = postVertex.data;
|
||||||
|
@ -73,7 +70,7 @@ export class Forum extends ReputationHolder {
|
||||||
|
|
||||||
// Compute rewards
|
// Compute rewards
|
||||||
await this.propagateValue(
|
await this.propagateValue(
|
||||||
{ to: postVertex, from: { data: this } },
|
{ to: postVertex, from: { data: pool } },
|
||||||
{ rewardsAccumulator, increment: initialValue },
|
{ rewardsAccumulator, increment: initialValue },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -88,10 +85,8 @@ export class Forum extends ReputationHolder {
|
||||||
|
|
||||||
// Transfer ownership of the minted/staked token, from the posts to the post author
|
// Transfer ownership of the minted/staked token, from the posts to the post author
|
||||||
this.dao.reputation.transferFrom(this.id, post.authorPublicKey, post.tokenId);
|
this.dao.reputation.transferFrom(this.id, post.authorPublicKey, post.tokenId);
|
||||||
const toActor = window?.scene?.findActor((actor) => actor.reputationPublicKey === post.authorPublicKey);
|
// const toActor = window?.scene?.findActor((actor) => actor.reputationPublicKey === post.authorPublicKey);
|
||||||
const value = this.dao.reputation.valueOf(post.tokenId);
|
// const value = this.dao.reputation.valueOf(post.tokenId);
|
||||||
this.actions.transfer.log(this, toActor, `(${value})`);
|
|
||||||
this.deactivate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -117,7 +112,7 @@ export class Forum extends ReputationHolder {
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('propagateValue start', {
|
console.log('propagateValue start', {
|
||||||
from: edge.from.id,
|
from: edge.from.id ?? edge.from,
|
||||||
to: edge.to.id,
|
to: edge.to.id,
|
||||||
depth,
|
depth,
|
||||||
value: post.value,
|
value: post.value,
|
||||||
|
|
|
@ -260,8 +260,8 @@ export class ValidationPool extends ReputationHolder {
|
||||||
|
|
||||||
// Transfer ownership of the minted token, from the pool to the forum
|
// Transfer ownership of the minted token, from the pool to the forum
|
||||||
this.dao.reputation.transferFrom(this.id, this.dao.forum.id, this.tokenId);
|
this.dao.reputation.transferFrom(this.id, this.dao.forum.id, this.tokenId);
|
||||||
const value = this.dao.reputation.valueOf(this.tokenId);
|
// const value = this.dao.reputation.valueOf(this.tokenId);
|
||||||
this.actions.transfer.log(this, this.dao.forum, `(${value})`);
|
// this.actions.transfer.log(this, this.dao.forum, `(${value})`);
|
||||||
|
|
||||||
// Recurse through forum to determine reputation effects
|
// Recurse through forum to determine reputation effects
|
||||||
await this.dao.forum.onValidate({
|
await this.dao.forum.onValidate({
|
||||||
|
@ -278,7 +278,7 @@ export class ValidationPool extends ReputationHolder {
|
||||||
const actor = window?.scene?.findActor((a) => a.reputationPublicKey === voter.reputationPublicKey);
|
const actor = window?.scene?.findActor((a) => a.reputationPublicKey === voter.reputationPublicKey);
|
||||||
await actor.computeValues();
|
await actor.computeValues();
|
||||||
}
|
}
|
||||||
await this.dao.forum.computeValues();
|
await this.dao.computeValues();
|
||||||
|
|
||||||
window?.scene?.stateToTable(`validation pool ${this.name} complete`);
|
window?.scene?.stateToTable(`validation pool ${this.name} complete`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ export class ForumTest {
|
||||||
scene.addDisplayValue('q4. leachingValue').set(params.leachingValue);
|
scene.addDisplayValue('q4. leachingValue').set(params.leachingValue);
|
||||||
scene.addDisplayValue(' ');
|
scene.addDisplayValue(' ');
|
||||||
|
|
||||||
this.dao = (window.dao = new DAO('DGF'));
|
this.dao = (window.dao = new DAO('DAO'));
|
||||||
this.forum = this.dao.forum;
|
this.forum = this.dao.forum;
|
||||||
this.experts = (window.experts = []);
|
this.experts = (window.experts = []);
|
||||||
this.posts = (window.posts = []);
|
this.posts = (window.posts = []);
|
||||||
|
@ -79,7 +79,8 @@ export class ForumTest {
|
||||||
// await newExpert();
|
// await newExpert();
|
||||||
// await newExpert();
|
// await newExpert();
|
||||||
|
|
||||||
// this.dao.addValue('total rep', () => this.dao.reputation.getTotal());
|
this.dao.addValue('total value', () => this.dao.reputation.getTotal());
|
||||||
this.dao.forum.addValue('total value', () => this.dao.forum.getTotalValue());
|
// this.dao.addValue('total reputation', () => this.dao.forum.getTotalValue());
|
||||||
|
this.dao.computeValues();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue