Compare commits

...
6 Commits
10 changed files with 114 additions and 21 deletions
+1
View File
@@ -69,5 +69,6 @@ ipfs-service-provider.sh
run-dev.sh
wallet.json
data/
*.zip
!README.md
+2 -1
View File
@@ -46,7 +46,8 @@ export default {
// : 'https://wa-usa-bch-consumer.fullstackcash.nl',
// P2WDB URL that will accept API calls from the p2wdb npm library.
p2wdbUrl: process.env.P2WDB_URL ? process.env.P2WDB_URL : 'https://p2wdb.fullstack.cash',
// p2wdbUrl: process.env.P2WDB_URL ? process.env.P2WDB_URL : 'https://p2wdb.fullstack.cash',
p2wdbUrl: process.env.P2WDB_URL ? process.env.P2WDB_URL : 'http://localhost:5010',
// FullStack.cash account information, used for automatic JWT handling.
getJwtAtStartup: process.env.GET_JWT_AT_STARTUP ? true : false,
+14 -13
View File
@@ -13,6 +13,7 @@
"@psf/bch-js": "6.5.1",
"axios": "0.27.2",
"bch-message-lib": "2.2.1",
"bch-token-sweep": "2.2.1",
"bcryptjs": "2.4.3",
"bitcoincashjs-lib": "3.3.3",
"glob": "7.1.6",
@@ -38,7 +39,7 @@
"mongoose": "5.13.14",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.7.5",
"p2wdb-esm": "2.2.8",
"p2wdb-esm": "2.2.9",
"passport-local": "1.0.0",
"public-ip": "4.0.4",
"winston": "3.3.3",
@@ -46,7 +47,6 @@
},
"devDependencies": {
"apidoc": "0.51.1",
"bch-token-sweep": "2.1.2",
"c8": "7.12.0",
"chai": "4.3.0",
"coveralls": "2.11.4",
@@ -2263,9 +2263,9 @@
}
},
"node_modules/bch-token-sweep": {
"version": "2.1.2",
"dev": true,
"license": "MIT",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bch-token-sweep/-/bch-token-sweep-2.2.1.tgz",
"integrity": "sha512-f4UGEpPXzea7HQMRSEb6h/amXiwrlsMBAjl1dVYg5//26IDWeG+e3qVNtMJhm00NMZ0BS+LasUa2xlz0UVziZA==",
"dependencies": {
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
@@ -11867,9 +11867,9 @@
}
},
"node_modules/p2wdb-esm": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.8.tgz",
"integrity": "sha512-wqTj6HaUdSMDFjp9a2lAGUembGtLxDxBH+PNUNnCHG1RSrLsrFrYFzMc48RlW9BGWybqypstrhORHrlZ30aygA==",
"version": "2.2.9",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.9.tgz",
"integrity": "sha512-I6Pc/Jj2kQRIpDmvs0LAnIv7ssFm1kz+SW+SRkjHezw84arFeeIMkqaVk8DXnKWKfIqy3asG4E77jVGrD55IRA==",
"dependencies": {
"@chris.troutner/retry-queue-commonjs": "1.0.8",
"axios": "0.24.0"
@@ -17230,8 +17230,9 @@
"requires": {}
},
"bch-token-sweep": {
"version": "2.1.2",
"dev": true,
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bch-token-sweep/-/bch-token-sweep-2.2.1.tgz",
"integrity": "sha512-f4UGEpPXzea7HQMRSEb6h/amXiwrlsMBAjl1dVYg5//26IDWeG+e3qVNtMJhm00NMZ0BS+LasUa2xlz0UVziZA==",
"requires": {
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
@@ -23630,9 +23631,9 @@
"dev": true
},
"p2wdb-esm": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.8.tgz",
"integrity": "sha512-wqTj6HaUdSMDFjp9a2lAGUembGtLxDxBH+PNUNnCHG1RSrLsrFrYFzMc48RlW9BGWybqypstrhORHrlZ30aygA==",
"version": "2.2.9",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.9.tgz",
"integrity": "sha512-I6Pc/Jj2kQRIpDmvs0LAnIv7ssFm1kz+SW+SRkjHezw84arFeeIMkqaVk8DXnKWKfIqy3asG4E77jVGrD55IRA==",
"requires": {
"@chris.troutner/retry-queue-commonjs": "1.0.8",
"axios": "0.24.0"
+2 -2
View File
@@ -32,6 +32,7 @@
"@psf/bch-js": "6.5.1",
"axios": "0.27.2",
"bch-message-lib": "2.2.1",
"bch-token-sweep": "2.2.1",
"bcryptjs": "2.4.3",
"bitcoincashjs-lib": "3.3.3",
"glob": "7.1.6",
@@ -57,7 +58,7 @@
"mongoose": "5.13.14",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.7.5",
"p2wdb-esm": "2.2.8",
"p2wdb-esm": "2.2.9",
"passport-local": "1.0.0",
"public-ip": "4.0.4",
"winston": "3.3.3",
@@ -65,7 +66,6 @@
},
"devDependencies": {
"apidoc": "0.51.1",
"bch-token-sweep": "2.1.2",
"c8": "7.12.0",
"chai": "4.3.0",
"coveralls": "2.11.4",
@@ -29,4 +29,6 @@ export WEBHOOKSERVICE=http://172.17.0.1:5667/webhook
export WEBHOOKTARGET=http://172.17.0.1:5700/p2wdb
export APP_ID=bch-dex-001
export P2WDB_URL=http://172.17.0.1:5667
npm start
+6 -4
View File
@@ -50,6 +50,7 @@ services:
container_name: p2wdb
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
#ENABLE_BCH_PAYMENT: 1
DEBUG_LEVEL: 1
logging:
driver: 'json-file'
@@ -67,13 +68,14 @@ services:
volumes:
- ../data/ipfsdata/p2wdb:/home/safeuser/ipfs-p2wdb-service/.ipfsdata/p2wdb
- ./p2wdb/start-production.sh:/home/safeuser/ipfs-p2wdb-service/start-production.sh
#- ../scripts/wallet.json:/home/safeuser/ipfs-p2wdb-service/wallet.json
restart: always
bch-dex:
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex:v2.0.12
build:
context: ./bch-dex/
dockerfile: Dockerfile
#image: christroutner/bch-dex:v2.0.12
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
+45 -1
View File
@@ -4,6 +4,7 @@
// Public npm libraries
import BchWallet from 'minimal-slp-wallet'
import BchTokenSweep from 'bch-token-sweep/index.js'
import bitcoinJs from 'bitcoincashjs-lib'
@@ -22,6 +23,8 @@ const WALLET_FILE = `${__dirname.toString()}/../../wallet.json`
// const P2WDB_TOKEN_ID =
// '38e97c5d7d3585a2cbf3f9580c82ca33985f9cb0845d4dcce220cb709f9538b0'
const advancedConfig = {}
class WalletAdapter {
constructor (localConfig = {}) {
// Encapsulate dependencies
@@ -87,7 +90,7 @@ class WalletAdapter {
throw new Error('Wallet data is not formatted correctly. Can not read mnemonic in wallet file!')
}
const advancedConfig = {}
// const advancedConfig = {}
console.log(`Using FullStack.cash: ${this.config.useFullStackCash}`)
if (this.config.useFullStackCash) {
advancedConfig.interface = 'rest-api'
@@ -512,6 +515,47 @@ class WalletAdapter {
throw err
}
}
// Given an Order database object, this function sends the tokens from the
// HD index where they are stored, back to the root address of the wallet.
async reclaimTokens (orderData) {
try {
// Get the key pair from the Order.
const keyPair = await this.getKeyPair(orderData.hdIndex)
console.log('keyPair: ', keyPair)
// Instantiate the wallet using the private key of the Order.
// const tempWallet = new this.BchWallet(keyPair.wif, advancedConfig)
// await tempWallet.initialize()
// Send the tokens from the Order to the root address.
// const receiver = {
// address: this.bchWallet.walletInfo.address,
// tokenId: orderData.tokenId,
// qty: orderData.numTokens
// }
// console.log('receiver: ', receiver)
//
// const txid = await tempWallet.sendTokens(receiver)
// Sweep the tokens to the root address.
const sweeper = new BchTokenSweep(
keyPair.wif,
this.bchWallet.walletInfo.privateKey,
this.bchWallet,
550,
this.bchWallet.walletInfo.cashAddress
)
await sweeper.populateObjectFromNetwork()
const hex = await sweeper.sweepTo(this.bchWallet.walletInfo.cashAddress)
const txid = await this.bchWallet.ar.sendTx(hex)
return txid
} catch (err) {
console.error('Error in wallet.js/reclaimTokens()')
throw err
}
}
}
export default WalletAdapter
@@ -35,6 +35,7 @@ class OrderRESTControllerLib {
// console.log('body: ', ctx.request.body)
const orderObj = ctx.request.body.order
console.log('orderObj: ', orderObj)
const hash = await _this.useCases.order.createOrder(orderObj)
@@ -62,6 +63,26 @@ class OrderRESTControllerLib {
}
}
// Delete an existing order by returning the token to the root address of
// the DEX wallet.
async deleteOrder (ctx) {
try {
// console.log('body: ', ctx.request.body)
const p2wdbHash = ctx.request.body.p2wdbHash
// console.log('p2wdbHash: ', p2wdbHash)
const txid = await _this.useCases.order.deleteOrder(p2wdbHash)
ctx.body = { txid }
} catch (err) {
// console.log(`err.message: ${err.message}`)
// console.log('err: ', err)
// ctx.throw(422, err.message)
_this.handleError(ctx, err)
}
}
// DRY error handler
handleError (ctx, err) {
console.log('err', err)
+1
View File
@@ -51,6 +51,7 @@ class OrderRouter {
// Define the routes and attach the controller.
this.router.post('/', _this.orderRESTController.createOrder)
this.router.get('/list/all/:page', _this.orderRESTController.listOrders)
this.router.post('/delete', _this.orderRESTController.deleteOrder)
// Attach the Controller routes to the Koa app.
app.use(_this.router.routes())
+20
View File
@@ -265,6 +265,26 @@ class OrderLib {
throw error
}
}
// Delete an Order model by sending the token back to the root address. This
// will allow the garbage collectors to delete the Order and the Offer.
async deleteOrder (p2wdbHash) {
try {
console.log('p2wdbHash: ', p2wdbHash)
// Find the order by the given hash.
const order = await this.findOrderByHash(p2wdbHash)
console.log('order: ', order)
// Reclaim the tokens
const txid = await this.adapters.wallet.reclaimTokens(order)
return txid
} catch (err) {
console.error('Error in use-cases/order/deleteOrder()')
throw err
}
}
}
export default OrderLib