mirror of
https://github.com/fullstack-cash/bch-api.git
synced 2026-09-22 17:22:04 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b8710d3da | ||
|
|
7976909dbb | ||
|
|
24b85e410d | ||
|
|
ae13d2c42e | ||
|
|
bf0fc2437a | ||
|
|
88d3dd12a1 | ||
|
|
cb8b4a5586 | ||
|
|
ec0ef24508 |
@@ -28,6 +28,7 @@ test-fullstack-abc.sh
|
|||||||
test-fullstack-bchn.sh
|
test-fullstack-bchn.sh
|
||||||
start-fullstack-abc.sh
|
start-fullstack-abc.sh
|
||||||
start-fullstack-bchn.sh
|
start-fullstack-bchn.sh
|
||||||
|
start-ss-main.sh
|
||||||
|
|
||||||
coverage
|
coverage
|
||||||
start-my-infra
|
start-my-infra
|
||||||
|
|||||||
@@ -93,3 +93,4 @@ Copies of this repository will occasionally be uploaded and hosted on [IPFS](htt
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
[MIT](./LICENSE.md)
|
[MIT](./LICENSE.md)
|
||||||
|
a
|
||||||
|
|||||||
Generated
+7
-7
@@ -8,7 +8,7 @@
|
|||||||
"version": "1.16.0",
|
"version": "1.16.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": "^4.10.1",
|
"@psf/bch-js": "^4.11.1",
|
||||||
"apidoc": "^0.26.0",
|
"apidoc": "^0.26.0",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"bitcore-lib-cash": "^8.23.1",
|
"bitcore-lib-cash": "^8.23.1",
|
||||||
@@ -458,9 +458,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@psf/bch-js": {
|
"node_modules/@psf/bch-js": {
|
||||||
"version": "4.10.1",
|
"version": "4.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-4.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-4.11.1.tgz",
|
||||||
"integrity": "sha512-f0gHLiBfYVXnobqtpFom/n8U5FEM5XauSki3H4r+QzOPKljxu+JKm5+9Oa51wxoLAPHKQ1Nmhd+1+Pf6i1RvWw==",
|
"integrity": "sha512-IV/jQERtu1stQ+XibEQclpUv1WDf7eZWdu4IqAgET8Oa/g56f2LINcACMLmRcMPYEcl9z1QmtEilQqG+ejBecw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bip21": "^2.0.1",
|
"@psf/bip21": "^2.0.1",
|
||||||
"@psf/bip32-utils": "^0.13.1",
|
"@psf/bip32-utils": "^0.13.1",
|
||||||
@@ -19090,9 +19090,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@psf/bch-js": {
|
"@psf/bch-js": {
|
||||||
"version": "4.10.1",
|
"version": "4.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-4.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-4.11.1.tgz",
|
||||||
"integrity": "sha512-f0gHLiBfYVXnobqtpFom/n8U5FEM5XauSki3H4r+QzOPKljxu+JKm5+9Oa51wxoLAPHKQ1Nmhd+1+Pf6i1RvWw==",
|
"integrity": "sha512-IV/jQERtu1stQ+XibEQclpUv1WDf7eZWdu4IqAgET8Oa/g56f2LINcACMLmRcMPYEcl9z1QmtEilQqG+ejBecw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@psf/bip21": "^2.0.1",
|
"@psf/bip21": "^2.0.1",
|
||||||
"@psf/bip32-utils": "^0.13.1",
|
"@psf/bip32-utils": "^0.13.1",
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@
|
|||||||
"node": ">=10.15.1"
|
"node": ">=10.15.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": "^4.10.1",
|
"@psf/bch-js": "^4.11.1",
|
||||||
"apidoc": "^0.26.0",
|
"apidoc": "^0.26.0",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"bitcore-lib-cash": "^8.23.1",
|
"bitcore-lib-cash": "^8.23.1",
|
||||||
|
|||||||
+39
-12
@@ -17,6 +17,7 @@ const wlogger = require('../../util/winston-logging')
|
|||||||
const LOCAL_RESTURL = process.env.LOCAL_RESTURL
|
const LOCAL_RESTURL = process.env.LOCAL_RESTURL
|
||||||
? process.env.LOCAL_RESTURL
|
? process.env.LOCAL_RESTURL
|
||||||
: 'https://api.fullstack.cash/v4/'
|
: 'https://api.fullstack.cash/v4/'
|
||||||
|
|
||||||
const BCHJS = require('@psf/bch-js')
|
const BCHJS = require('@psf/bch-js')
|
||||||
// const BCHJS = require('../../../../bch-js')
|
// const BCHJS = require('../../../../bch-js')
|
||||||
const bchjs = new BCHJS({ restURL: LOCAL_RESTURL })
|
const bchjs = new BCHJS({ restURL: LOCAL_RESTURL })
|
||||||
@@ -34,7 +35,10 @@ util.inspect.defaultOptions = { depth: 5 }
|
|||||||
|
|
||||||
// Determine the Access password for a private instance of SLPDB.
|
// Determine the Access password for a private instance of SLPDB.
|
||||||
// https://gist.github.com/christroutner/fc717ca704dec3dded8b52fae387eab2
|
// https://gist.github.com/christroutner/fc717ca704dec3dded8b52fae387eab2
|
||||||
const SLPDB_PASS = process.env.SLPDB_PASS ? process.env.SLPDB_PASS : 'BITBOX'
|
// Password for General Purpose (GP) SLPDB.
|
||||||
|
const SLPDB_PASS_GP = process.env.SLPDB_PASS_GP ? process.env.SLPDB_PASS_GP : 'BITBOX'
|
||||||
|
// Password for Whitelist (WL) SLPDB.
|
||||||
|
const SLPDB_PASS_WL = process.env.SLPDB_PASS_GP ? process.env.SLPDB_PASS_GP : 'BITBOX'
|
||||||
|
|
||||||
// const rawtransactions = require('./full-node/rawtransactions')
|
// const rawtransactions = require('./full-node/rawtransactions')
|
||||||
const RawTransactions = require('./full-node/rawtransactions')
|
const RawTransactions = require('./full-node/rawtransactions')
|
||||||
@@ -433,7 +437,7 @@ class Slp {
|
|||||||
const b64 = Buffer.from(s).toString('base64')
|
const b64 = Buffer.from(s).toString('base64')
|
||||||
const url = `${process.env.SLPDB_URL}q/${b64}`
|
const url = `${process.env.SLPDB_URL}q/${b64}`
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsGP()
|
||||||
// Request options
|
// Request options
|
||||||
const opt = {
|
const opt = {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
@@ -584,7 +588,7 @@ class Slp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsGP()
|
||||||
|
|
||||||
// Collect an array of promises, one for each request to slpserve.
|
// Collect an array of promises, one for each request to slpserve.
|
||||||
// This is a nested array of promises.
|
// This is a nested array of promises.
|
||||||
@@ -806,7 +810,7 @@ class Slp {
|
|||||||
const b64 = Buffer.from(s).toString('base64')
|
const b64 = Buffer.from(s).toString('base64')
|
||||||
const url = `${process.env.SLPDB_URL}q/${b64}`
|
const url = `${process.env.SLPDB_URL}q/${b64}`
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsGP()
|
||||||
const opt = {
|
const opt = {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
baseURL: url,
|
baseURL: url,
|
||||||
@@ -995,7 +999,7 @@ class Slp {
|
|||||||
const url = `${process.env.SLPDB_URL}q/${b64}`
|
const url = `${process.env.SLPDB_URL}q/${b64}`
|
||||||
// console.log('url: ', url)
|
// console.log('url: ', url)
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsGP()
|
||||||
|
|
||||||
// Get data from SLPDB.
|
// Get data from SLPDB.
|
||||||
const opt = {
|
const opt = {
|
||||||
@@ -1129,7 +1133,7 @@ class Slp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsGP()
|
||||||
|
|
||||||
const s = JSON.stringify(query)
|
const s = JSON.stringify(query)
|
||||||
const b64 = Buffer.from(s).toString('base64')
|
const b64 = Buffer.from(s).toString('base64')
|
||||||
@@ -1307,6 +1311,7 @@ class Slp {
|
|||||||
async validate3Single (req, res, next) {
|
async validate3Single (req, res, next) {
|
||||||
try {
|
try {
|
||||||
const txid = req.params.txid
|
const txid = req.params.txid
|
||||||
|
// console.log('validate3Single txid: ', txid)
|
||||||
|
|
||||||
// Validate input
|
// Validate input
|
||||||
if (!txid || txid === '') {
|
if (!txid || txid === '') {
|
||||||
@@ -1328,7 +1333,7 @@ class Slp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsWL()
|
||||||
|
|
||||||
const s = JSON.stringify(query)
|
const s = JSON.stringify(query)
|
||||||
const b64 = Buffer.from(s).toString('base64')
|
const b64 = Buffer.from(s).toString('base64')
|
||||||
@@ -1388,6 +1393,7 @@ class Slp {
|
|||||||
async validate3Bulk (req, res, next) {
|
async validate3Bulk (req, res, next) {
|
||||||
try {
|
try {
|
||||||
const txids = req.body.txids
|
const txids = req.body.txids
|
||||||
|
// console.log(`validate3Bulk txids: `, txids)
|
||||||
|
|
||||||
// Reject if txids is not an array.
|
// Reject if txids is not an array.
|
||||||
if (!Array.isArray(txids)) {
|
if (!Array.isArray(txids)) {
|
||||||
@@ -1421,7 +1427,7 @@ class Slp {
|
|||||||
const url = `${process.env.SLPDB_WHITELIST_URL}q/${b64}`
|
const url = `${process.env.SLPDB_WHITELIST_URL}q/${b64}`
|
||||||
// console.log('url: ', url)
|
// console.log('url: ', url)
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsWL()
|
||||||
|
|
||||||
// Get data from SLPDB.
|
// Get data from SLPDB.
|
||||||
const opt = {
|
const opt = {
|
||||||
@@ -1564,7 +1570,7 @@ class Slp {
|
|||||||
const b64 = Buffer.from(s).toString('base64')
|
const b64 = Buffer.from(s).toString('base64')
|
||||||
const url = `${process.env.SLPDB_URL}q/${b64}`
|
const url = `${process.env.SLPDB_URL}q/${b64}`
|
||||||
|
|
||||||
const options = _this.generateCredentials()
|
const options = _this.generateCredentialsGP()
|
||||||
const opt = {
|
const opt = {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
baseURL: url,
|
baseURL: url,
|
||||||
@@ -1724,11 +1730,32 @@ class Slp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generates a Basic Authorization header for slpserve.
|
// Generates a Basic Authorization header for slpserve.
|
||||||
generateCredentials () {
|
generateCredentialsGP () {
|
||||||
// Generate the Basic Authentication header for a private instance of SLPDB.
|
// Generate the Basic Authentication header for a private instance of SLPDB.
|
||||||
const username = 'BITBOX'
|
const username = 'BITBOX'
|
||||||
const password = SLPDB_PASS
|
const password = SLPDB_PASS_GP
|
||||||
const combined = `${username}:${password}`
|
const combined = `${username}:${password}`
|
||||||
|
// console.log(`combined: ${combined}`)
|
||||||
|
var base64Credential = Buffer.from(combined).toString('base64')
|
||||||
|
var readyCredential = `Basic ${base64Credential}`
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
authorization: readyCredential
|
||||||
|
},
|
||||||
|
timeout: 15000
|
||||||
|
}
|
||||||
|
|
||||||
|
return options
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generates a Basic Authorization header for slpserve.
|
||||||
|
generateCredentialsWL () {
|
||||||
|
// Generate the Basic Authentication header for a private instance of SLPDB.
|
||||||
|
const username = 'BITBOX'
|
||||||
|
const password = SLPDB_PASS_WL
|
||||||
|
const combined = `${username}:${password}`
|
||||||
|
// console.log(`combined: ${combined}`)
|
||||||
var base64Credential = Buffer.from(combined).toString('base64')
|
var base64Credential = Buffer.from(combined).toString('base64')
|
||||||
var readyCredential = `Basic ${base64Credential}`
|
var readyCredential = `Basic ${base64Credential}`
|
||||||
|
|
||||||
@@ -1987,7 +2014,7 @@ class Slp {
|
|||||||
|
|
||||||
// Get SLP token details.
|
// Get SLP token details.
|
||||||
const details = await _this.bchjs.SLP.Utils.tokenUtxoDetails(theseUtxos)
|
const details = await _this.bchjs.SLP.Utils.tokenUtxoDetails(theseUtxos)
|
||||||
// console.log('details : ', details)
|
// console.log('details: ', details)
|
||||||
|
|
||||||
// Replace the original UTXO data with the hydrated data.
|
// Replace the original UTXO data with the hydrated data.
|
||||||
utxos[i].utxos = details
|
utxos[i].utxos = details
|
||||||
|
|||||||
@@ -16,9 +16,10 @@ export RPC_USERNAME=bitcoin
|
|||||||
export RPC_PASSWORD=password
|
export RPC_PASSWORD=password
|
||||||
|
|
||||||
# SLPDB
|
# SLPDB
|
||||||
|
export SLPDB_PASS_GP=somelongpassword
|
||||||
export SLPDB_URL=http://<SLPDB IP>:12300/
|
export SLPDB_URL=http://<SLPDB IP>:12300/
|
||||||
export SLPDB_PASS=somelongpassword
|
|
||||||
# Use the same address as SLPDB_URL if you don't have a separate whitelist server.
|
# Use the same address as SLPDB_URL if you don't have a separate whitelist server.
|
||||||
|
export SLPDB_PASS_WL=somelongpassword
|
||||||
export SLPDB_WHITELIST_URL=http://<SLPDB IP>:12300/
|
export SLPDB_WHITELIST_URL=http://<SLPDB IP>:12300/
|
||||||
# slp-api alternative SLP validator using slp-validate:
|
# slp-api alternative SLP validator using slp-validate:
|
||||||
# https://github.com/Permissionless-Software-Foundation/slp-api
|
# https://github.com/Permissionless-Software-Foundation/slp-api
|
||||||
|
|||||||
Reference in New Issue
Block a user