Check vouch status on appId in addition to contentHash (#6719)
* Check vouch status on appId in addition to contentHash * Simplify var expansion
This commit is contained in:
parent
e51e54eeeb
commit
edbbd42d80
@ -20,55 +20,68 @@ import { uniq } from 'lodash';
|
|||||||
import Contracts from '~/contracts';
|
import Contracts from '~/contracts';
|
||||||
import { vouchfor as vouchForAbi } from '~/contracts/abi';
|
import { vouchfor as vouchForAbi } from '~/contracts/abi';
|
||||||
|
|
||||||
|
let contractPromise = null;
|
||||||
|
|
||||||
export default class Store {
|
export default class Store {
|
||||||
@observable vouchers = [];
|
@observable vouchers = [];
|
||||||
|
|
||||||
constructor (api, app) {
|
constructor (api, app) {
|
||||||
this._api = api;
|
this._api = api;
|
||||||
|
|
||||||
const { contentHash } = app;
|
this.findVouchers(app);
|
||||||
|
}
|
||||||
|
|
||||||
if (contentHash) {
|
async attachContract () {
|
||||||
this.lookupVouchers(contentHash);
|
const address = await Contracts.get().registry.lookupAddress('vouchfor');
|
||||||
|
|
||||||
|
if (!address || /^0x0*$/.test(address)) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const contract = await this._api.newContract(vouchForAbi, address);
|
||||||
|
|
||||||
|
return contract;
|
||||||
}
|
}
|
||||||
|
|
||||||
lookupVouchers (contentHash) {
|
async findVouchers ({ contentHash, id }) {
|
||||||
Contracts
|
if (!contentHash) {
|
||||||
.get().registry
|
return;
|
||||||
.lookupAddress('vouchfor')
|
}
|
||||||
.then((address) => {
|
|
||||||
if (!address || /^0x0*$/.test(address)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this._api.newContract(vouchForAbi, address);
|
if (!contractPromise) {
|
||||||
})
|
contractPromise = this.attachContract();
|
||||||
.then(async (contract) => {
|
}
|
||||||
if (!contract) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let lastItem = false;
|
const contract = await contractPromise;
|
||||||
|
|
||||||
for (let index = 0; !lastItem; index++) {
|
if (!contract) {
|
||||||
const voucher = await contract.instance.vouched.call({}, [`0x${contentHash}`, index]);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (/^0x0*$/.test(voucher)) {
|
const vouchHash = await this.lookupHash(contract, `0x${contentHash}`);
|
||||||
lastItem = true;
|
const vouchId = await this.lookupHash(contract, id);
|
||||||
} else {
|
|
||||||
this.addVoucher(voucher);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error('vouchFor', error);
|
|
||||||
|
|
||||||
return;
|
this.addVouchers(vouchHash, vouchId);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@action addVoucher = (voucher) => {
|
async lookupHash (contract, hash) {
|
||||||
this.vouchers = uniq([].concat(this.vouchers.peek(), [voucher]));
|
const vouchers = [];
|
||||||
|
let lastItem = false;
|
||||||
|
|
||||||
|
for (let index = 0; !lastItem; index++) {
|
||||||
|
const voucher = await contract.instance.vouched.call({}, [hash, index]);
|
||||||
|
|
||||||
|
if (/^0x0*$/.test(voucher)) {
|
||||||
|
lastItem = true;
|
||||||
|
} else {
|
||||||
|
vouchers.push(voucher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vouchers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@action addVouchers = (vouchHash, vouchId) => {
|
||||||
|
this.vouchers = uniq([].concat(this.vouchers.peek(), vouchHash, vouchId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user