Compare commits

..
32 Commits
Author SHA1 Message Date
Chris Troutner 9ca581e998 Merge pull request #37 from Permissionless-Software-Foundation/ct-unstable
Syncing with upstream ipfs-service-provider
2022-08-27 15:43:49 -07:00
Chris Troutner 02adbd5634 fixing merge conflicts 2022-08-27 15:40:59 -07:00
Chris Troutner da637df44a Merge pull request #98 from Permissionless-Software-Foundation/ct-unstable
Using bandwidth limited IPFS Docker container
2022-08-27 13:43:51 -07:00
Chris Troutner 9315e6f166 fix(production): Updating docker image 2022-08-27 13:39:06 -07:00
Chris Troutner 7e965e8415 Adding comments 2022-08-27 12:59:20 -07:00
Chris Troutner a5916c95f9 fix(production): Using bandwidth limited IPFS Docker container 2022-08-27 12:58:41 -07:00
Chris Troutner 708f97d107 More dependency updates 2022-08-27 12:55:24 -07:00
Chris Troutner 637738bfb9 Updated npm deps 2022-08-27 12:53:43 -07:00
Chris Troutner d8e82c5ad2 fix(ipfs-coord): Updating to v8.0.5 2022-08-27 12:52:16 -07:00
Chris Troutner b23acd3cdc Merge pull request #97 from Permissionless-Software-Foundation/ct-unstable
fix(production): Switching to Docker Image
2022-07-25 19:17:27 -07:00
Chris Troutner c71fda38ff fix(production): Switching to Docker Image 2022-07-25 19:14:44 -07:00
Chris Troutner f99f49d840 Merge pull request #96 from Permissionless-Software-Foundation/ct-unstable
Configuring ports with env vars
2022-07-25 17:58:40 -07:00
Chris Troutner 2edd924c57 fix(production): Adding 4003 websocket port 2022-07-25 17:56:02 -07:00
Chris Troutner 689c8fd8d9 fix(ipfs): Using config to set ports 2022-07-25 17:40:05 -07:00
Chris Troutner ffd6c452c9 Merge pull request #95 from Permissionless-Software-Foundation/ct-unstable
fix(mocks): Another update to IPFS test mocks
2022-07-24 08:15:55 -07:00
Chris Troutner fc8e160874 fix(mocks): Another update to IPFS test mocks 2022-07-24 08:14:27 -07:00
Chris Troutner d2f83307e6 Merge pull request #94 from Permissionless-Software-Foundation/ct-unstable
fix(mocks): Improvement to adapter mocks used in tests
2022-07-24 08:08:13 -07:00
Chris Troutner 1a09fcd26f fix(mocks): Improvement to adapter mocks used in tests 2022-07-24 08:06:32 -07:00
Chris Troutner db54a067f4 Merge pull request #36 from Permissionless-Software-Foundation/ct-unstable
Updating ipfs-coord & docker images
2022-07-08 16:09:45 -07:00
Chris Troutner 9fcee20498 Switching bch-dex app ID for RPi 2022-07-08 16:07:33 -07:00
Chris Troutner 0a04ee61ef Merge branch 'ct-unstable' of https://github.com/Permissionless-Software-Foundation/bch-dex into ct-unstable 2022-07-08 15:45:18 -07:00
Chris Troutner 7cae06dd65 fix(rpi): Updating containers for RPi 2022-07-08 15:44:30 -07:00
Chris Troutner 96064ac9a7 fix(production): New docker image 2022-07-08 12:48:31 -07:00
Chris Troutner 3690b749fe fix(package.json): Synced with upstream 2022-07-08 09:55:22 -07:00
Chris Troutner e2c5821dbe Merge pull request #93 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Updating bootstrap nodes
2022-07-07 15:56:42 -07:00
Chris Troutner 9967d5145b fix(ipfs-coord): Updating bootstrap nodes 2022-07-07 15:55:33 -07:00
Chris Troutner 9d16291855 Merge pull request #92 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Updating to v8
2022-07-07 15:17:09 -07:00
Chris Troutner 1518d1a12b fix(ipfs-coord): Updating to v8 2022-07-07 15:16:03 -07:00
Chris Troutner 6dbf284876 Merge pull request #35 from Permissionless-Software-Foundation/ct-unstable
fix(webhook): Ensuring startup waits for webhook to be established
2022-07-07 13:46:12 -07:00
Chris Troutner d1e96505c8 fix(order): Handling bad order data 2022-07-07 13:45:01 -07:00
Chris Troutner 1e80a3159e fix(webhook): Ensuring startup waits for webhook to be established 2022-07-07 13:37:16 -07:00
Chris Troutner d3df9546a7 fix(tests): Speeding up e2e tests 2022-07-06 20:56:01 -07:00
16 changed files with 2516 additions and 8042 deletions
+20 -18
View File
@@ -24,8 +24,8 @@ const config = require('../config') // this first.
const AdminLib = require('../src/adapters/admin')
// const adminLib = new AdminLib()
const WebHookLib = require('../src/adapters/webhook')
const webhookLib = new WebHookLib()
// const WebHookLib = require('../src/adapters/webhook')
// const webhookLib = new WebHookLib()
// const JSONRPC = require('../src/rpc')
// const rpc = new JSONRPC()
@@ -103,24 +103,26 @@ class Server {
// MIDDLEWARE END
// 7/7/22 CT: This code paragraph can be deleted
// Delay startup to give the P2WDB time to start first, so that it accepts the webook call
await this.sleep(20000)
// if (this.config.env !== 'test') {
// await this.sleep(20000)
// }
// Create webhook
try {
try {
// Delete an old webhook if it exists.
await webhookLib.deleteWebhook(config.webhookTarget)
} catch (err) {
/* exit quietly */
// console.log('err deleting webhook: ', err)
}
await webhookLib.createWebhook(config.webhookTarget)
console.log('Webhook created')
} catch (error) {
console.log('Webhook cant be created')
}
// try {
// try {
// // Delete an old webhook if it exists.
// await webhookLib.deleteWebhook(config.webhookTarget)
// } catch (err) {
// /* exit quietly */
// // console.log('err deleting webhook: ', err)
// }
//
// await webhookLib.createWebhook(config.webhookTarget)
// console.log('Webhook created')
// } catch (error) {
// console.log('Webhook cant be created')
// }
// startServer()
this.server = await app.listen(config.port)
+2376 -7976
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -27,14 +27,14 @@
},
"repository": "Permissionless-Software-Foundation/bch-dex",
"dependencies": {
"@psf/bch-js": "6.4.1",
"@psf/bch-js": "6.4.5",
"axios": "0.27.2",
"bch-message-lib": "2.2.0",
"bcryptjs": "2.4.3",
"bitcoincashjs-lib": "3.3.3",
"glob": "7.1.6",
"ipfs": "0.62.3",
"ipfs-coord": "7.1.19",
"ipfs-coord": "8.0.5",
"ipfs-http-client": "55.0.0",
"jsonrpc-lite": "2.2.0",
"jsonwebtoken": "8.5.1",
+19 -19
View File
@@ -4,7 +4,7 @@ version: '3.9'
services:
mongo-p2wdb-service:
image: mongo:4.4.2-bionic
image: mongo:4.2.0
container_name: mongo-p2wdb-service
ports:
- '5666:27017' # <host port>:<container port>
@@ -14,10 +14,16 @@ services:
restart: always
ipfs:
image: ipfs/go-ipfs:v0.13.0
# https://github.com/christroutner/trickle-ipfs
image: christroutner/trickle-ipfs:v1.0.1
#build:
# context: ./
# dockerfile: Dockerfile
container_name: ipfs
environment:
MY_ENV_VAR: 'placeholder'
IPFS_DAEMON_ARGUMENTS: '--enable-pubsub-experiment --migrate=true --agent-version-suffix=docker --routing=dhtclient'
UPLOAD_KBPS: '1000'
DOWNLOAD_KBPS: '1000'
logging:
driver: 'json-file'
options:
@@ -26,27 +32,21 @@ services:
mem_limit: 2000mb
ports:
- 4001:4001
- 4003:4003
- 172.17.0.1:5001:5001
- 172.17.0.1:8080:8080
command: [
'./start-ipfs.sh'
]
volumes:
- ../data/go-ipfs/data:/data/ipfs
- ../../swarm.key:/data/ipfs/swarm.key
# https://docs.docker.com/compose/compose-file/compose-file-v3/#command
# https://github.com/ipfs/go-ipfs/blob/91c52657166bcf86f2476926e4fe56694dc26562/Dockerfile#L115
command:
[
'daemon',
'--migrate=true',
'--agent-version-suffix=docker',
'--enable-pubsub-experiment'
]
- ../data/go-ipfs/data:/root/.ipfs
restart: always
p2wdb:
build:
context: ./p2wdb/
dockerfile: Dockerfile
#image: christroutner/ipfs-p2wdb-service:v3.0.4
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/p2wdb:v3.0.9
container_name: p2wdb
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -73,7 +73,7 @@ services:
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex:v1.8.0
image: christroutner/bch-dex:v1.9.1
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
+1 -1
View File
@@ -72,7 +72,7 @@ RUN npm run docs
#EXPOSE 5010
# Start the application.
COPY start-production.sh start-production.sh
#COPY start-production.sh start-production.sh
CMD ["./start-production.sh"]
#CMD ["npm", "start"]
@@ -24,9 +24,9 @@ export DBURL=mongodb://172.17.0.1:5666/bch-swap-service-prod
export PORT=5700
# bch-dex specific env vars
export BCH_ENV=production
export BCH_DEX=production
export WEBHOOKSERVICE=http://172.17.0.1:5667/webhook
export WEBHOOKTARGET=http://172.17.0.1:5700/p2wdb
export APP_ID=bch-dex-test557
export APP_ID=bch-dex-001
npm start
+12 -10
View File
@@ -3,9 +3,9 @@
version: '3.9'
services:
mongo-p2wdb-service:
image: mongo:4.4
container_name: mongo-p2wdb-service
mongo-bch-dex:
image: mongo:4.2.0
container_name: mongo-bch-dex
ports:
- '5666:27017' # <host port>:<container port>
volumes:
@@ -14,7 +14,7 @@ services:
restart: always
ipfs:
#image: ipfs/go-ipfs:v0.12.0
#image: ipfs/go-ipfs:v0.13.0
image: odanado/go-ipfs:v0.11.0
container_name: ipfs
environment:
@@ -31,7 +31,7 @@ services:
- 172.17.0.1:8080:8080
volumes:
- ../data/go-ipfs/data:/data/ipfs
- ../../swarm.key:/data/ipfs/swarm.key
# - ../../swarm.key:/data/ipfs/swarm.key
# https://docs.docker.com/compose/compose-file/compose-file-v3/#command
# https://github.com/ipfs/go-ipfs/blob/91c52657166bcf86f2476926e4fe56694dc26562/Dockerfile#L115
command:
@@ -47,7 +47,7 @@ services:
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/pwd-bch-dex-rpi:v1.7.1
image: christroutner/p2wdb-rpi-v3.0.6
container_name: p2wdb
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -59,7 +59,7 @@ services:
max-file: '10'
mem_limit: 1gb
links:
- mongo-p2wdb-service
- mongo-bch-dex
ports:
# <host port>:<container port>
- 5667:5667 # REST API
@@ -67,13 +67,14 @@ services:
#- 5669:5669 # IPFS WS Port
volumes:
- ../data/ipfsdata/p2wdb:/home/safeuser/ipfs-p2wdb-service/.ipfsdata/p2wdb
- ./p2wdb/start-production.sh:/home/safeuser/ipfs-p2wdb-service/start-production.sh
restart: always
bch-dex:
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex-rpi:v1.7.1
image: christroutner/bch-dex-rpi:v1.8.2
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -84,19 +85,20 @@ services:
max-file: '10'
mem_limit: 1000mb
links:
- mongo-p2wdb-service
- mongo-bch-dex
- p2wdb
ports:
- '5700:5700' # <host port>:<container port>
volumes:
- ../scripts/wallet.json:/home/safeuser/bch-dex/wallet.json
- ./bch-dex/start-production.sh:/home/safeuser/bch-dex/start-production.sh
restart: always
dex-ui:
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui-rpi:v1.7.3
image: christroutner/bch-dex-ui-rpi:v1.7.4
container_name: dex-ui
logging:
driver: 'json-file'
+1 -1
View File
@@ -61,7 +61,7 @@ RUN npm run docs
#EXPOSE 5010
# Start the application.
COPY start-production.sh start-production.sh
#COPY start-production.sh start-production.sh
CMD ["./start-production.sh"]
#CMD ["npm", "start"]
@@ -40,8 +40,9 @@ export P2W_ENV=production
export IPFS_HOST=172.17.0.1
export IPFS_API_PORT=5001
export IPFS_TCP_PORT=4001
export IPFS_WS_PORT=4003
# P2WDB specific env vars
export ORBITDB_NAME=/orbitdb/zdpuAm4fPafpjs5mgbBUJV8Az7kd8Xj1ttD6M1JaAxF8RMRrw/psf-bch-p2wdb-keyvalue-v1.0.0-0004
export ORBITDB_NAME=/orbitdb/zdpuAqNiwLiJBfbRK7uihV2hAbNSXj78ufzv5VyQb8GuvRwDh/psf-bch-p2wdb-keyvalue-v3.0.0-0001
npm start
+1 -1
View File
@@ -74,7 +74,7 @@ async function sweepNfts () {
// Wait for indexers to update.
console.log('Waiting for indexers to update...')
await bchjs.Util.sleep(20000)
await bchjs.Util.sleep(120000)
// Send NFT to root address.
const receiver2 = [{
+5
View File
@@ -19,6 +19,7 @@ const FullStackJWT = require('./fullstack-jwt')
const BCHAdapter = require('./bch')
const WalletAdapter = require('./wallet')
const P2wdbAdapter = require('./p2wdb-adapter')
const Webhook = require('./webhook')
const config = require('../../config')
@@ -37,6 +38,7 @@ class Adapters {
this.config = config
this.wallet = new WalletAdapter()
this.p2wdb = new P2wdbAdapter(localConfig)
this.webhook = new Webhook()
// Get a valid JWT API key and instance bch-js.
this.fullStackJwt = new FullStackJWT(config)
@@ -65,6 +67,9 @@ class Adapters {
if (this.config.env !== 'test') {
// Instance the wallet.
await this.wallet.instanceWallet(walletData, this.bchjs)
// Wait until a webhook is established with the P2WDB
await this.webhook.waitUntilSuccess(this.config.webhookTarget)
}
console.log('Async Adapters have been started.')
+5 -1
View File
@@ -5,6 +5,7 @@
// Local libraries
const IpfsAdapter = require('./ipfs')
const IpfsCoordAdapter = require('./ipfs-coord')
const config = require('../../../config')
class IPFS {
constructor (localConfig = {}) {
@@ -12,6 +13,7 @@ class IPFS {
this.ipfsAdapter = new IpfsAdapter()
this.IpfsCoordAdapter = IpfsCoordAdapter
this.process = process
this.config = config
this.ipfsCoordAdapter = {} // placeholder
@@ -32,7 +34,9 @@ class IPFS {
// Start ipfs-coord
this.ipfsCoordAdapter = new this.IpfsCoordAdapter({
ipfs: this.ipfs
ipfs: this.ipfs,
tcpPort: this.config.ipfsTcpPort,
wsPort: this.config.ipfsWsPort
})
await this.ipfsCoordAdapter.start()
console.log('ipfs-coord is ready.')
+40
View File
@@ -59,6 +59,46 @@ class WebHook {
throw err
}
}
// Returns a promise that will not resolve until a webhook has been successfully
// created with the P2WDB.
// Dev Note: This was created because establishing a webhook between bch-dex
// and the P2WDB at startup is critical. If it's not established, then bch-dex
// can not 'see' new Offers and Counter Offers.
async waitUntilSuccess (url) {
try {
let success = false
do {
try {
// Delete an old webhook if it exists.
await this.deleteWebhook(this.config.webhookTarget)
} catch (err) {
/* exit quietly */
// console.log('err deleting webhook: ', err)
}
try {
await this.createWebhook(this.config.webhookTarget)
console.log('Webhook created')
success = true
} catch (err) {
const now = new Date()
console.log(`${now.toLocaleString()}: Error trying to create webhook with P2WDB. Trying again...`)
await sleep(2000)
}
} while (!success)
return true
} catch (err) {
console.error('Error in webhook.js/waitUntilSuccess()')
throw err
}
}
}
function sleep (ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
module.exports = WebHook
+3 -1
View File
@@ -28,7 +28,9 @@ class OrderLib {
async createOrder (entryObj) {
try {
console.log('createOrder(entryObj): ', entryObj)
// if (!entryObj) return
if (!entryObj) return false
if (!entryObj.tokenId) throw new Error('entry does not contain required properties')
// Specify the address to send payment.
entryObj.makerAddr = this.adapters.wallet.bchWallet.walletInfo.cashAddress
+19 -7
View File
@@ -1,16 +1,22 @@
/*
Mocks for the Adapter library.
*/
const BCHJS = require('@psf/bch-js')
const bchjs = new BCHJS()
const ipfs = {
ipfsAdapter: {
ipfs: {}
},
ipfsCoordAdapter: {
ipfsCoord: {
class IpfsAdapter {
constructor () {
this.ipfs = {
files: {
stat: () => {}
}
}
}
}
class IpfsCoordAdapter {
constructor () {
this.ipfsCoord = {
useCases: {
peer: {
sendPrivateMessage: () => {
@@ -21,6 +27,12 @@ const ipfs = {
}
}
const ipfs = {
ipfsAdapter: new IpfsAdapter(),
ipfsCoordAdapter: new IpfsCoordAdapter()
}
ipfs.ipfs = ipfs.ipfsAdapter.ipfs
const localdb = {
Users: class Users {
static findById () {}
+8 -2
View File
@@ -125,12 +125,18 @@ describe('#order-use-case', () => {
it('should catch and throw an error', async () => {
try {
await uut.createOrder()
await uut.createOrder({ a: 'b' })
assert.fail('Unexpected code path')
} catch (err) {
assert.include(err.message, 'Cannot set')
assert.include(err.message, 'entry does not contain required properties')
}
})
it('should exit quietly if the entry is empty', async () => {
const result = await uut.createOrder()
assert.equal(result, false)
})
})
})