Initial work on reputation nft
This commit is contained in:
parent
75bb48a0e5
commit
92da97fede
|
@ -0,0 +1,28 @@
|
||||||
|
import { ERC721 } from './erc721.js';
|
||||||
|
import { CryptoUtil } from './crypto.js';
|
||||||
|
|
||||||
|
export class ReputationToken extends ERC721 {
|
||||||
|
constructor() {
|
||||||
|
super('Reputation', 'REP');
|
||||||
|
this.histories = new Map(); // token id --> {increment, context (i.e. validation pool id)}
|
||||||
|
this.values = new Map(); // token id --> current value
|
||||||
|
}
|
||||||
|
|
||||||
|
mint(to, value, context) {
|
||||||
|
const tokenId = CryptoUtil.randomUUID();
|
||||||
|
super.mint(to, tokenId);
|
||||||
|
this.values.set(tokenId, value);
|
||||||
|
this.histories.set(tokenId, [{ increment: value, context }]);
|
||||||
|
}
|
||||||
|
|
||||||
|
incrementValue(tokenId, increment, context) {
|
||||||
|
const value = this.values.get(tokenId);
|
||||||
|
const newValue = value + increment;
|
||||||
|
const history = this.histories.get(tokenId);
|
||||||
|
if (newValue < 0) {
|
||||||
|
throw new Error('Token value can not become negative');
|
||||||
|
}
|
||||||
|
this.values.set(tokenId, newValue);
|
||||||
|
history.push({ increment, context });
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue