Compare commits

...
5 Commits
4 changed files with 108 additions and 5 deletions
+82
View File
@@ -0,0 +1,82 @@
/*
This script will travers the HD wallet and sweep funds and tokens back
into the root address (index 0). That root address needs to have funds
to pay for the transactions.
*/
// Public npm libraries
const BCHJS = require('@psf/bch-js')
const BchTokenSweep = require('bch-token-sweep/index')
// Local libraries
const WalletAdapter = require('../../src/adapters/wallet')
// Constants
const EMTPY_ADDR_CUTOFF = 10
async function sweepFunds () {
try {
// Open the wallet files.
const wallet = new WalletAdapter()
const walletInfo = await wallet.openWallet()
console.log('walletInfo: ', walletInfo)
const rootAddr = walletInfo.cashAddress
const rootWif = walletInfo.privateKey
console.log(`Sweeping all funds into root address ${rootAddr}...`)
// Generate an HD tree
const bchjs = new BCHJS()
const rootSeed = await bchjs.Mnemonic.toSeed(walletInfo.mnemonic)
const masterHDNode = bchjs.HDNode.fromSeed(rootSeed)
let emptyAddrCnt = 0
let hdIndex = 1
do {
// Generate a keypair from the HD wallet.
const childNode = masterHDNode.derivePath(`m/44'/245'/0'/0/${hdIndex}`)
const cashAddress = bchjs.HDNode.toCashAddress(childNode)
const wifToSweep = bchjs.HDNode.toWIF(childNode)
console.log(`\nSweeping ${cashAddress}`)
try {
// Sweep tokens from address
const sweeper = new BchTokenSweep(
wifToSweep,
rootWif,
bchjs,
550,
rootAddr
)
await sweeper.populateObjectFromNetwork()
const hex = await sweeper.sweepTo(rootAddr)
// console.log(`hex: ${hex}`)
const txid = await sweeper.blockchain.broadcast(hex)
// console.log('Transaction ID', txid)
console.log(`Swept HD index ${hdIndex}. TXID: ${txid}`)
emptyAddrCnt = 0
// Wait between loop iterations.
await bchjs.Util.sleep(3000)
} catch (err) {
console.log(`error message with index ${hdIndex}: ${err.message}`)
emptyAddrCnt++
}
hdIndex++
} while (emptyAddrCnt < EMTPY_ADDR_CUTOFF)
console.log(`${EMTPY_ADDR_CUTOFF} empty addresses detected. Exiting.`)
console.log('\n\nDo not forget to reset the nextAddress property in the wallet.json file!\n\n')
} catch (err) {
console.error('Error in sweepFunds(): ', err)
}
}
sweepFunds()
+2 -1
View File
@@ -23,7 +23,8 @@ const Offer = new mongoose.Schema({
sigMsg: { type: String },
// Utility data
timestamp: { type: String },
timestamp: { type: Number },
globalTimestamp: { type: String },
localTimestamp: { type: String },
// SWaP Protocol Properties
+6 -1
View File
@@ -70,6 +70,10 @@ class OfferEntity {
throw new Error("Property 'ticker' must be a string.")
}
// Convert the timestamp to a number.
let timestamp = new Date(offerData.timestamp)
timestamp = timestamp.getTime()
const validatedOfferData = {
messageType,
messageClass,
@@ -80,7 +84,8 @@ class OfferEntity {
numTokens,
utxoTxid,
utxoVout,
timestamp: offerData.timestamp,
timestamp,
globaltimestamp: offerData.timestamp,
localTimestamp: offerData.localTimeStamp,
txid: offerData.txid,
p2wdbHash: offerData.hash,
+18 -3
View File
@@ -93,7 +93,7 @@ class OfferUseCases {
async listOffers () {
try {
return this.OfferModel.find({})
return this.OfferModel.find({}).sort('-timestamp')
} catch (error) {
console.error('Error in use-cases/offer/listOffers()')
throw error
@@ -188,6 +188,10 @@ class OfferUseCases {
}
const hash = await this.adapters.p2wdb.write(p2wdbObj)
// Delete the Offer from the database, so that the user doesn't attempt
// to take the offer more than once.
offerInfo.remove()
// Return the P2WDB CID
return hash
@@ -261,10 +265,12 @@ class OfferUseCases {
throw new Error('offer not found')
}
const offerObject = offer.toObject()
return offer
// const offerObject = offer.toObject()
// return this.offerEntity.validateFromModel(offerObject)
return offerObject
// return offerObject
// } catch (err) {
// // console.error('Error in findOffer(): ', err)
// throw err
@@ -367,6 +373,15 @@ class OfferUseCases {
console.log(`Spent UTXO detected. Deleting this Offer: ${JSON.stringify(thisOffer, null, 2)}`)
await thisOffer.remove()
}
// If the Offer is older than 7 days, delete it.
const nowMs = now.getTime()
const sevenDays = 1000 * 60 * 60 * 24 * 7
const sevenDaysAgo = nowMs - sevenDays
if (thisOffer.timestamp < sevenDaysAgo) {
console.log('Offer older than 7 days. Deleting.')
await thisOffer.remove()
}
}
} catch (err) {
console.error('Error in removeStaleOffers()')