You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

79 lines
2.0 KiB

/*!
* scripts/delete-data-banned-addresses.js
* Copyright © 2019 – Katana Cryptographic Ltd. All Rights Reserved.
*/
'use strict'
const mysql = require('mysql')
const Logger = require('../lib/logger')
const util = require('../lib/util')
const db = require('../lib/db/mysql-db-wrapper')
/**
* Script deleting all data related to addresses registered in the ban list
*/
async function getBannedAddresses() {
const query = mysql.format('SELECT `addrAddress` FROM `banned_addresses`')
return db._query(query)
}
async function deleteAddress(address) {
const addr = address.addrAddress
Logger.info('Start deletion of address ' + addr)
const query = mysql.format(
'DELETE `addresses`.* FROM `addresses` WHERE `addresses`.`addrAddress` = ?',
addr
)
const ret = await db._query(query)
Logger.info('Completed deletion of address ' + addr)
return ret
}
async function getUnlinkedTransactions() {
const query = mysql.format(
'SELECT `transactions`.`txnTxid` \
FROM `transactions` \
WHERE `transactions`.`txnID` NOT IN (SELECT `outputs`.`txnID` FROM `outputs`) \
AND `transactions`.`txnID` NOT IN (SELECT `inputs`.`txnID` FROM `inputs`)'
)
return db._query(query)
}
async function deleteTransaction(tx) {
const txid = tx.txnTxid
Logger.info('Start deletion of transaction ' + txid)
await db.deleteTransaction(txid)
Logger.info('Completed deletion of transaction ' + txid)
}
async function run() {
// Get a list of banned addresses
const addresses = await getBannedAddresses()
// Delete addresses, outputs, inputs
// related to a banned address
await util.seriesCall(addresses, deleteAddress)
// Get a list of unlinked transactions
const txs = await getUnlinkedTransactions()
// Deletes the transactions
await util.seriesCall(txs, deleteTransaction)
}
/**
* Launch the script
*/
Logger.info('Start processing')
const startupTimeout = setTimeout(async function() {
return run().then(() => {
Logger.info('Processing completed')
})
}, 1500)