itns-sidechain/lib/covenants/view.js
2018-01-07 12:30:09 -08:00

69 lines
1.4 KiB
JavaScript

'use strict';
const assert = require('assert');
const blake2b = require('bcrypto/lib/blake2b');
const Auction = require('./auction');
class View {
constructor() {
this.auctions = new Map();
}
async getAuction(db, nameHash) {
assert(Buffer.isBuffer(nameHash));
const hash = nameHash.toString('hex');
const cache = this.auctions.get(hash);
if (cache)
return cache;
const auction = await db.getAuction(nameHash);
if (!auction)
return null;
this.auctions.set(hash, auction);
return auction;
}
async getAuctionByName(db, name) {
return this.getAuction(db, blake2b.digest(name));
}
async getDataFor(db, prevout) {
const entry = this.getEntry(prevout);
if (!entry)
entry = await db.readCoin(prevout);
if (!entry)
return null;
const {output} = entry;
const {covenant} = output;
return covenant.items[1];
}
async ensureAuction(db, name, height) {
const nameHash = blake2b.digest(name);
const hash = nameHash.toString('hex');
const cache = await this.getAuction(db, nameHash);
if (cache && !cache.isNull())
return cache;
const auction = new Auction();
auction.name = name;
auction.nameHash = nameHash;
auction.height = height;
auction.renewal = height;
this.auctions.set(hash, auction);
return auction;
}
}
module.exports = View;