mirror of
https://github.com/Permissionless-Software-Foundation/bch-js.git
synced 2026-09-21 16:51:59 -07:00
feat(DSProof): Added DSProof to bch-js
This commit is contained in:
Generated
+53
-16095
File diff suppressed because it is too large
Load Diff
@@ -32,6 +32,7 @@ const IPFS = require('./ipfs')
|
|||||||
const Encryption = require('./encryption')
|
const Encryption = require('./encryption')
|
||||||
const Utxo = require('./utxo')
|
const Utxo = require('./utxo')
|
||||||
const Transaction = require('./transaction')
|
const Transaction = require('./transaction')
|
||||||
|
const DSProof = require('./dsproof')
|
||||||
|
|
||||||
// Indexers
|
// Indexers
|
||||||
const Ninsight = require('./ninsight')
|
const Ninsight = require('./ninsight')
|
||||||
@@ -115,6 +116,8 @@ class BCHJS {
|
|||||||
this.IPFS = new IPFS()
|
this.IPFS = new IPFS()
|
||||||
this.Utxo = new Utxo(libConfig)
|
this.Utxo = new Utxo(libConfig)
|
||||||
this.Transaction = new Transaction(libConfig)
|
this.Transaction = new Transaction(libConfig)
|
||||||
|
|
||||||
|
this.DSProof = new DSProof(libConfig)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
const axios = require('axios')
|
||||||
|
|
||||||
|
let _this
|
||||||
|
|
||||||
|
class Mining {
|
||||||
|
constructor (config) {
|
||||||
|
this.restURL = config.restURL
|
||||||
|
this.apiToken = config.apiToken
|
||||||
|
this.authToken = config.authToken
|
||||||
|
this.axios = axios
|
||||||
|
|
||||||
|
if (this.authToken) {
|
||||||
|
// Add Basic Authentication token to the authorization header.
|
||||||
|
this.axiosOptions = {
|
||||||
|
headers: {
|
||||||
|
authorization: this.authToken
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Add JWT token to the authorization header.
|
||||||
|
this.axiosOptions = {
|
||||||
|
headers: {
|
||||||
|
authorization: `Token ${this.apiToken}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_this = this
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDSProof (txid) {
|
||||||
|
try {
|
||||||
|
if (!txid) {
|
||||||
|
throw new Error('txid is required')
|
||||||
|
}
|
||||||
|
if (txid.length !== 64) {
|
||||||
|
throw new Error(`txid must be of length 64 (not ${txid.length})`)
|
||||||
|
}
|
||||||
|
const response = await _this.axios.get(
|
||||||
|
`${this.restURL}dsproof/getdsproof/${txid}`,
|
||||||
|
_this.axiosOptions
|
||||||
|
)
|
||||||
|
return response.data
|
||||||
|
} catch (error) {
|
||||||
|
if (error.response && error.response.data) throw error.response.data
|
||||||
|
else throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Mining
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
Integration tests for bchjs dsproof library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const BCHJS = require('../../src/bch-js')
|
||||||
|
const bchjs = new BCHJS()
|
||||||
|
|
||||||
|
describe('#DSProof', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
if (process.env.IS_USING_FREE_TIER) await sleep(1000)
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#getDSProof', () => {
|
||||||
|
it('should get info on the full node', async () => {
|
||||||
|
const txid =
|
||||||
|
'ee0df780b58f6f24467605b2589c44c3a50fc849fb8f91b89669a4ae0d86bc7e'
|
||||||
|
const result = await bchjs.DSProof.getDSProof(txid)
|
||||||
|
console.log(`result: ${JSON.stringify(result, null, 2)}`)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function sleep (ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms))
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
// Public npm libraries
|
||||||
|
const assert = require('chai').assert
|
||||||
|
const sinon = require('sinon')
|
||||||
|
|
||||||
|
// Unit under test (uut)
|
||||||
|
const BCHJS = require('../../src/bch-js')
|
||||||
|
const mockData = require('./fixtures/dsproof-mock')
|
||||||
|
|
||||||
|
let bchjs
|
||||||
|
const txid = 'ee0df780b58f6f24467605b2589c44c3a50fc849fb8f91b89669a4ae0d86bc7e'
|
||||||
|
describe('#DSProof', () => {
|
||||||
|
let sandbox
|
||||||
|
beforeEach(() => {
|
||||||
|
bchjs = new BCHJS()
|
||||||
|
sandbox = sinon.createSandbox()
|
||||||
|
})
|
||||||
|
afterEach(() => sandbox.restore())
|
||||||
|
|
||||||
|
describe('#getDSProof', () => {
|
||||||
|
it('should throw error if input is not provided', async () => {
|
||||||
|
try {
|
||||||
|
await bchjs.DSProof.getDSProof()
|
||||||
|
assert.equal(false, true, 'unexpected error')
|
||||||
|
} catch (err) {
|
||||||
|
assert.include(err.message, 'txid is required')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it('should throw error txid is invalid', async () => {
|
||||||
|
try {
|
||||||
|
await bchjs.DSProof.getDSProof('txid')
|
||||||
|
assert.equal(false, true, 'unexpected error')
|
||||||
|
} catch (err) {
|
||||||
|
assert.include(err.message, 'txid must be of length 64')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it('should handle error', async () => {
|
||||||
|
try {
|
||||||
|
sandbox.stub(bchjs.DSProof.axios, 'get').throws(new Error('test error'))
|
||||||
|
await bchjs.DSProof.getDSProof(txid)
|
||||||
|
|
||||||
|
assert.equal(false, true, 'unexpected error')
|
||||||
|
} catch (err) {
|
||||||
|
assert.include(err.message, 'test error')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it('should get double spend proof', async () => {
|
||||||
|
try {
|
||||||
|
sandbox
|
||||||
|
.stub(bchjs.DSProof.axios, 'get')
|
||||||
|
.resolves({ data: mockData.dsproof })
|
||||||
|
const result = await bchjs.DSProof.getDSProof(txid)
|
||||||
|
|
||||||
|
assert.property(result, 'dspid')
|
||||||
|
assert.property(result, 'txid')
|
||||||
|
assert.property(result, 'outpoint')
|
||||||
|
assert.property(result, 'path')
|
||||||
|
assert.property(result, 'descendants')
|
||||||
|
|
||||||
|
assert.property(result.outpoint, 'txid')
|
||||||
|
assert.property(result.outpoint, 'vout')
|
||||||
|
} catch (error) {
|
||||||
|
assert.equal(false, true, 'unexpected error')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
Mock data used for unit testing.
|
||||||
|
*/
|
||||||
|
const dsproof = {
|
||||||
|
dspid: '6234fff2a9dbcaa50e2c50d74e1d725a2bed1757d7a05a2db7a82df659554397',
|
||||||
|
txid: 'ee0df780b58f6f24467605b2589c44c3a50fc849fb8f91b89669a4ae0d86bc7e',
|
||||||
|
outpoint: {
|
||||||
|
txid: '17ebef34f7e9a0692317dd6fbb43ffccff45b7d688a2a754dbccfc5e6d93ce3e',
|
||||||
|
vout: 1
|
||||||
|
},
|
||||||
|
path: ['ee0df780b58f6f24467605b2589c44c3a50fc849fb8f91b89669a4ae0d86bc7e'],
|
||||||
|
descendants: [
|
||||||
|
'ee0df780b58f6f24467605b2589c44c3a50fc849fb8f91b89669a4ae0d86bc7e'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
dsproof
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user