Compare commits

..
5 Commits
6 changed files with 59 additions and 34 deletions
+1
View File
@@ -0,0 +1 @@
COMPOSE_PROJECT_NAME=bch-wallet-consumer
+9 -3
View File
@@ -250,6 +250,7 @@ class BchAdapter {
}
}
// Get the transaction history for an address.
async getTransactions (address, sortOrder = 'DESCENDING', page = 0) {
try {
console.log('Executing getTransaction() bch adapter')
@@ -263,7 +264,7 @@ class BchAdapter {
}
const rpcData = {
endpoint: 'transactions',
endpoint: 'txHistory',
address: address,
sortOrder,
page
@@ -298,6 +299,10 @@ class BchAdapter {
async getTransaction (txids) {
try {
console.log(
`Getting txData on these txids: ${JSON.stringify(txids, null, 2)}`
)
// Throw an error if this IPFS node has not yet made a connection to a
// wallet service provider.
const selectedProvider =
@@ -307,7 +312,7 @@ class BchAdapter {
}
const rpcData = {
endpoint: 'transaction',
endpoint: 'txData',
txids
}
@@ -329,11 +334,12 @@ class BchAdapter {
// Wait for data to come back from the wallet service.
const data = await this.waitForRPCResponse(rpcId)
console.log(`data: ${JSON.stringify(data, null, 2)}`)
return data
} catch (err) {
// console.log('createUser() error: ', err)
wlogger.error('Error in adapters/bch.js/transaction()')
wlogger.error('Error in adapters/bch.js/getTransaction()')
throw err
}
}
+28 -9
View File
@@ -271,10 +271,17 @@ class BchRESTControllerLib {
/**
*
* @api {post} /bch/transactions Transactions
* @apiName Transactions
* @api {post} /bch/txHistory TX History
* @apiName TX History
* @apiGroup REST BCH
* @apiDescription This endpoint wraps the bchjs.Electrumx.transactions([]) function.
* It returns the transaction history for an address. This list of TXIDs is
* sorted and paginated.
*
* There are three possible inputs:
* - address: (required) the address to query for a transaction history
* - sortOrder: (optional) will sort results in 'DECENDING' (default) or 'ASCENDING' order.
* - page: (optional) will return a 'page' of 100 results. Default is 0
*
* Given the 'addresses' property returns an array of objects
* with the following properties
@@ -289,7 +296,7 @@ class BchRESTControllerLib {
* Note: For a single address pass the 'addresses' of string type
*
* @apiExample Example usage:
* curl -H "Content-Type: application/json" -X POST -d '{ "addresses": ["bitcoincash:qrl2nlsaayk6ekxn80pq0ks32dya8xfclyktem2mqj"] }' localhost:5001/bch/transactions
* curl -H "Content-Type: application/json" -X POST -d '{ "address": "bitcoincash:qrl2nlsaayk6ekxn80pq0ks32dya8xfclyktem2mqj" }' localhost:5001/bch/txHistory
*
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
@@ -317,9 +324,10 @@ class BchRESTControllerLib {
* "error": "Unprocessable Entity"
* }
*/
async transactions (ctx) {
async txHistory (ctx) {
try {
console.log('transactions REST API handler called.')
// console.log('transactions REST API handler called.')
// console.log(`body: ${JSON.stringify(ctx.request.body, null, 2)}`)
const addr = ctx.request.body.address
const sortOrder = ctx.request.body.sortOrder
@@ -339,10 +347,13 @@ class BchRESTControllerLib {
}
/**
* @api {post} /bch/transaction Transaction
* @apiName Transaction
* @api {post} /bch/txData TX Data
* @apiName txData
* @apiGroup REST BCH
* @apiDescription Get data about specific transactions.
* @apiDescription Get expanded transaction data for an array of transaction
* IDs. Each call is limited to 20 TXIDs or less.
*
* Get data about specific transactions.
* Given an array of transaction IDs this endpoint will return an array of objects
* with the following properties
*
@@ -425,8 +436,16 @@ class BchRESTControllerLib {
* "error": "Unprocessable Entity"
* }
*/
async transaction (ctx) {
async txData (ctx) {
try {
console.log(
`txData called with this body data: ${JSON.stringify(
ctx.request.body,
null,
2
)}`
)
const txids = ctx.request.body.txids
const data = await this.adapters.bch.getTransaction(txids)
+6 -7
View File
@@ -56,8 +56,8 @@ class BchRouter {
this.router.post('/balance', this.postBalance)
this.router.post('/utxos', this.postUtxos)
this.router.post('/broadcast', this.postBroadcast)
this.router.post('/transactions', this.postTransactions)
this.router.post('/transaction', this.postTransaction)
this.router.post('/txHistory', this.postTxHistory)
this.router.post('/txData', this.postTxData)
this.router.post('/pubkey', this.postPubKey)
// Attach the Controller routes to the Koa app.
@@ -85,13 +85,12 @@ class BchRouter {
await _this.bchRESTController.broadcast(ctx, next)
}
async postTransactions (ctx, next) {
console.log('Calling _this.bchRESTController.transactions()')
await _this.bchRESTController.transactions(ctx, next)
async postTxHistory (ctx, next) {
await _this.bchRESTController.txHistory(ctx, next)
}
async postTransaction (ctx, next) {
await _this.bchRESTController.transaction(ctx, next)
async postTxData (ctx, next) {
await _this.bchRESTController.txData(ctx, next)
}
async postPubKey (ctx, next) {
+9 -9
View File
@@ -116,14 +116,14 @@ describe('#BCH E2E Tests', () => {
})
})
describe('#transactions', () => {
describe('#txHistory', () => {
it('should get transaction history for an address, and sort by default in descending order.', async () => {
const address = 'bitcoincash:qpdh9s677ya8tnx7zdhfrn8qfyvy22wj4qa7nwqa5v'
const body = {
address
}
const url = `${SERVER}/bch/transactions`
const url = `${SERVER}/bch/txHistory`
const result = await axios.post(url, body)
// console.log(`result.data: ${JSON.stringify(result.data, null, 2)}`)
@@ -145,7 +145,7 @@ describe('#BCH E2E Tests', () => {
sortOrder: 'ASCENDING'
}
const url = `${SERVER}/bch/transactions`
const url = `${SERVER}/bch/txHistory`
const result = await axios.post(url, body)
// console.log(`result.data: ${JSON.stringify(result.data, null, 2)}`)
@@ -164,7 +164,7 @@ describe('#BCH E2E Tests', () => {
address: 'bitcoincash:qqlrzp23w08434twmvr4fxw672whkjy0py26r63g3d'
}
const url = `${SERVER}/bch/transactions`
const url = `${SERVER}/bch/txHistory`
const result = await axios.post(url, body)
// console.log(`result.data: ${JSON.stringify(result.data, null, 2)}`)
@@ -178,7 +178,7 @@ describe('#BCH E2E Tests', () => {
page: 1
}
const url = `${SERVER}/bch/transactions`
const url = `${SERVER}/bch/txHistory`
const result = await axios.post(url, body)
// console.log(`result.data: ${JSON.stringify(result.data, null, 2)}`)
@@ -187,7 +187,7 @@ describe('#BCH E2E Tests', () => {
})
})
describe('#transaction', () => {
describe('#txData', () => {
it('should get transaction details for a txid', async () => {
const body = {
txids: [
@@ -195,14 +195,14 @@ describe('#BCH E2E Tests', () => {
]
}
const url = `${SERVER}/bch/transaction`
const url = `${SERVER}/bch/txData`
const result = await axios.post(url, body)
// console.log(`result.data: ${JSON.stringify(result.data, null, 2)}`)
assert.equal(result.data.status, 200)
assert.isArray(result.data.txData)
assert.property(result.data.txData[0].txData, 'txid')
assert.property(result.data.txData[0].txData, 'vin')
assert.property(result.data.txData[0], 'txid')
assert.property(result.data.txData[0], 'vin')
})
})
})
@@ -213,7 +213,7 @@ describe('#BCH-REST-Controller', () => {
})
})
describe('#transactions', () => {
describe('#txHistory', () => {
it('should return 422 status on arbitrary error', async () => {
try {
// Force an error
@@ -225,7 +225,7 @@ describe('#BCH-REST-Controller', () => {
address: 'blah'
}
await uut.transactions(ctx)
await uut.txHistory(ctx)
assert.fail('Unexpected result')
} catch (err) {
@@ -242,14 +242,14 @@ describe('#BCH-REST-Controller', () => {
address: 'blah'
}
await uut.transactions(ctx)
await uut.txHistory(ctx)
// Assert the expected HTTP response
assert.equal(ctx.status, 200)
})
})
describe('#transaction', () => {
describe('#txData', () => {
it('should return 422 status on arbitrary error', async () => {
try {
// Force an error
@@ -261,7 +261,7 @@ describe('#BCH-REST-Controller', () => {
txid: 'blah'
}
await uut.transaction(ctx)
await uut.txData(ctx)
assert.fail('Unexpected result')
} catch (err) {
@@ -280,7 +280,7 @@ describe('#BCH-REST-Controller', () => {
txid: 'blah'
}
await uut.transaction(ctx)
await uut.txData(ctx)
// Assert the expected HTTP response
assert.equal(ctx.status, 200)