81 lines
3.6 KiB
JavaScript
81 lines
3.6 KiB
JavaScript
function checkIfSentByMasterAddress(tx) {
|
|
return tx.vin.some(vin => vin.addresses[0] === floGlobals.adminID);
|
|
}
|
|
|
|
function getApprovedAggregators() {
|
|
floGlobals.approvedKycAggregators = {};
|
|
return new Promise((resolve, reject) => {
|
|
floBlockchainAPI.readAllTxs(floGlobals.adminID).then(({ items: transactions }) => {
|
|
console.log(transactions);
|
|
transactions.filter(tx => checkIfSentByMasterAddress(tx) && tx.floData.startsWith('KYC'))
|
|
.reverse()
|
|
.forEach(tx => {
|
|
const { floData, time } = tx;
|
|
const [service, operationType, operationData, validity] = floData.split('|');
|
|
switch (operationType) {
|
|
case 'APPROVE_AGGREGATOR':
|
|
operationData.split('+').forEach(aggregator => {
|
|
const [address, label = ''] = aggregator.split(':');
|
|
floGlobals.approvedKycAggregators[floCrypto.toFloID(address)] = label;
|
|
});
|
|
break;
|
|
case 'REVOKE_AGGREGATOR':
|
|
operationData.split('+').forEach(aggregator => {
|
|
const [address, label = ''] = aggregator.split(':');
|
|
delete floGlobals.approvedKycAggregators[floCrypto.toFloID(address)]
|
|
});
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
});
|
|
resolve();
|
|
}).catch(e => {
|
|
console.error(e);
|
|
reject(e);
|
|
})
|
|
})
|
|
}
|
|
|
|
function getApprovedKycs() {
|
|
floGlobals.approvedKyc = {};
|
|
return new Promise((resolve, reject) => {
|
|
const aggregatorTxs = Object.keys(floGlobals.approvedKycAggregators).map(aggregator => {
|
|
return floBlockchainAPI.readAllTxs(aggregator);
|
|
});
|
|
if (!aggregatorTxs.length)
|
|
resolve();
|
|
Promise.all(aggregatorTxs).then(aggregatorData => {
|
|
aggregatorData = aggregatorData.flat(1)
|
|
.filter(tx => tx.vin[0].addresses[0] in floGlobals.approvedKycAggregators && tx.floData.startsWith('KYC'))
|
|
.sort((a, b) => a.time - b.time);
|
|
for (const tx of aggregatorData) {
|
|
const { floData, time, vin, vout } = tx;
|
|
const [service, operationType, operationData, validity] = floData.split('|');
|
|
switch (operationType) {
|
|
case 'APPROVE_KYC':
|
|
operationData.split('+').forEach(address => {
|
|
floGlobals.approvedKyc[address] = {
|
|
validFrom: time * 1000,
|
|
validTo: validity || Date.now() + 10000000,
|
|
issuedBy: vin[0].addresses[0]
|
|
};
|
|
});
|
|
break;
|
|
case 'REVOKE_KYC':
|
|
operationData.split('+').forEach(address => {
|
|
if (!floGlobals.approvedKyc[address]) return
|
|
floGlobals.approvedKyc[address].validTo = time * 1000;
|
|
floGlobals.approvedKyc[address].revokedBy = vin[0].addresses[0];
|
|
});
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
resolve();
|
|
}).catch(e => {
|
|
reject(e);
|
|
})
|
|
})
|
|
} |