Compare commits

...
16 Commits
Author SHA1 Message Date
Chris Troutner 6a4a861c07 Merge pull request #20 from Permissionless-Software-Foundation/ct-unstable
fix(ninsight): fixing testnet integration test
2020-08-13 16:45:45 -07:00
Chris Troutner caee2db99e fix(ninsight): fixing testnet integration test 2020-08-13 16:41:49 -07:00
Chris Troutner 392f51b166 Merge pull request #19 from Permissionless-Software-Foundation/ct-unstable
fix(ninsight): Fixing failing ninsight integration test
2020-08-13 16:19:06 -07:00
Chris Troutner 8facfd69ac fix(ninsight): Fixing failing ninsight integration test 2020-08-13 16:07:08 -07:00
Chris Troutner 7f1b87215c Merge branch 'master' into ct-unstable 2020-08-13 15:44:37 -07:00
Chris Troutner 662e53aaa2 debugging ninsight test 2020-08-13 15:44:26 -07:00
Chris Troutner 98fc4b9530 Merge pull request #18 from Permissionless-Software-Foundation/update/cleanUp-docs
Clean up documentation
2020-08-13 15:43:57 -07:00
nicocappabianca de8c8e6284 clean up documentation 2020-08-12 21:34:50 -03:00
Chris Troutner 739bdf1f34 Merge pull request #17 from Permissionless-Software-Foundation/ct-unstable
fix(docs): Adding deploy script to automatically update documentation
2020-08-07 18:17:44 -07:00
Chris Troutner b207a1639e Removing unit test for SLP.Utils.balance() 2020-08-07 18:13:52 -07:00
Chris Troutner a169c0f7d0 fix(docs): Adding deploy script to automatically update documentation 2020-08-07 18:03:55 -07:00
Chris Troutner 65cf49adf0 Merge pull request #16 from Permissionless-Software-Foundation/zh
fix(electrumx): Added unconfirmed endpoint for Electrumx library.
2020-08-05 09:02:29 -07:00
Chris Troutner 65104d60ad Commented out failing integration tests 2020-08-05 08:54:54 -07:00
Chris Troutner fd0a1a6af2 editing api docs for electrumx 2020-08-05 08:47:04 -07:00
Chris Troutner 25299e2f6e Merge pull request #14 from zh/add-electrumx-unconfirmed-utxo
Access to unconfirmed UTXOs API endpoints
2020-08-05 08:42:14 -07:00
Stoyan Zhekov b184c080f1 Access to unconfirmed UTXOs API endpoints 2020-08-04 22:58:22 +09:00
31 changed files with 497 additions and 255 deletions
+1 -1
View File
@@ -27,4 +27,4 @@ deploy:
provider: script
skip_cleanup: true
script:
- npx semantic-release
- npx semantic-release && ./deploy-production.sh
+14
View File
@@ -0,0 +1,14 @@
# Triggers a webhook to update the staging server at staging.fullstack.cash.
#!/bin/bash
#echo $DEPLOY_SECRET
echo "Deploy to production...."
export DATA="{\"ref\":\"$DEPLOY_SECRET\"}"
#echo $DATA
curl -X POST http://fullstack.cash:9000/hooks/bch-js -H "Content-Type: application/json" -d $DATA
echo "...Finished deploying to production."
+17 -17
View File
@@ -14,7 +14,7 @@ class Address {
}
/**
* @api Address.toLegacyAddress() toLegacyAddress() - Convert to Legacy Address
* @api Address.toLegacyAddress() toLegacyAddress()
* @apiName toLegacyAddress
* @apiGroup Address
* @apiDescription Convert cashaddr to legacy address format
@@ -73,7 +73,7 @@ class Address {
}
/**
* @api Address.toCashAddress() toCashAddress() - Convert to bitcoincash: format
* @api Address.toCashAddress() toCashAddress()
* @apiName toCashAddress
* @apiGroup Address
* @apiDescription Convert legacy to cashAddress format
@@ -120,7 +120,7 @@ class Address {
}
/**
* @api Address.hash160ToLegacy() hash160ToLegacy() - Convert hash160 to legacy address.
* @api Address.hash160ToLegacy() hash160ToLegacy()
* @apiName hash160ToLegacy
* @apiGroup Address
* @apiDescription Convert hash160 to legacy address.
@@ -146,7 +146,7 @@ class Address {
}
/**
* @api Address.hash160ToCash() hash160ToCash() - Convert hash160 to cash address.
* @api Address.hash160ToCash() hash160ToCash()
* @apiName hash160ToCash
* @apiGroup Address
* @apiDescription Convert hash160 to cash address.
@@ -255,7 +255,7 @@ class Address {
}
/**
* @api Address.isLegacyAddress() isLegacyAddress() - Detect if legacy address.
* @api Address.isLegacyAddress() isLegacyAddress()
* @apiName isLegacyAddress
* @apiGroup Address
* @apiDescription Detect if legacy base58check encoded address.
@@ -291,7 +291,7 @@ class Address {
}
/**
* @api Address.isCashAddress() isCashAddress() - Detect if cashAddr address.
* @api Address.isCashAddress() isCashAddress()
* @apiName isCashAddress
* @apiGroup Address
* @apiDescription Detect if cashAddr encoded address.
@@ -326,7 +326,7 @@ class Address {
}
/**
* @api Address.isHash160() isHash160() - Detect if an addess is a hash160.
* @api Address.isHash160() isHash160()
* @apiName isHash160
* @apiGroup Address
* @apiDescription Detect if an addess is a hash160.
@@ -345,7 +345,7 @@ class Address {
}
/**
* @api Address.isMainnetAddress() isMainnetAddress() - Detect if mainnet address.
* @api Address.isMainnetAddress() isMainnetAddress()
* @apiName isMainnetAddress
* @apiGroup Address
* @apiDescription Detect if mainnet address .
@@ -384,7 +384,7 @@ class Address {
}
/**
* @api Address.isTestnetAddress() isTestnetAddress() - Detect if testnet address.
* @api Address.isTestnetAddress() isTestnetAddress()
* @apiName isTestnetAddress
* @apiGroup Address
* @apiDescription Detect if testnet address.
@@ -422,7 +422,7 @@ class Address {
}
/**
* @api Address.isRegTestAddress() isRegTestAddress() - Detect if regtest address.
* @api Address.isRegTestAddress() isRegTestAddress()
* @apiName isRegTestAddress
* @apiGroup Address
* @apiDescription Detect if regtest address.
@@ -461,7 +461,7 @@ class Address {
}
/**
* @api Address.isP2PKHAddress() isP2PKHAddress() - Detect if p2pkh address.
* @api Address.isP2PKHAddress() isP2PKHAddress()
* @apiName isP2PKHAddress
* @apiGroup Address
* @apiDescription Detect if p2pkh address.
@@ -498,7 +498,7 @@ class Address {
}
/**
* @api Address.isP2SHAddress() isP2SHAddress() - Detect if p2sh address.
* @api Address.isP2SHAddress() isP2SHAddress()
* @apiName isP2SHAddress
* @apiGroup Address
* @apiDescription Detect if p2sh address.
@@ -534,7 +534,7 @@ class Address {
}
/**
* @api Address.detectAddressFormat() detectAddressFormat() - Detect address format.
* @api Address.detectAddressFormat() detectAddressFormat()
* @apiName detectAddressFormat
* @apiGroup Address
* @apiDescription Detect address format.
@@ -572,7 +572,7 @@ class Address {
}
/**
* @api Address.detectAddressNetwork() detectAddressNetwork() - Detect address network.
* @api Address.detectAddressNetwork() detectAddressNetwork()
* @apiName detectAddressNetwork
* @apiGroup Address
* @apiDescription Detect address network.
@@ -622,7 +622,7 @@ class Address {
}
/**
* @api Address.detectAddressType() detectAddressType() - Detect address type.
* @api Address.detectAddressType() detectAddressType()
* @apiName detectAddressType
* @apiGroup Address
* @apiDescription Detect address type.
@@ -660,7 +660,7 @@ class Address {
}
/**
* @api Address.fromXPub() fromXPub() - Generates an address (xpub).
* @api Address.fromXPub() fromXPub()
* @apiName fromXPub
* @apiGroup Address
* @apiDescription Generates an address for an extended public key (xpub).
@@ -698,7 +698,7 @@ class Address {
}
/**
* @api Address.fromOutputScript() fromOutputScript() - Detect an addess from an OutputScript..
* @api Address.fromOutputScript() fromOutputScript()
* @apiName fromOutputScript
* @apiGroup Address
* @apiDescription Detect an addess from an OutputScript..
+12 -12
View File
@@ -15,7 +15,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.toSatoshi() toSatoshi() - Converting Bitcoin Cash units to satoshi units.
* @api BitcoinCash.toSatoshi() toSatoshi()
* @apiName toSatoshi
* @apiGroup BitcoinCash
* @apiDescription
@@ -48,7 +48,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.toBitcoinCash() toBitcoinCash() - Converting satoshi units to Bitcoin Cash units.
* @api BitcoinCash.toBitcoinCash() toBitcoinCash()
* @apiName toBitcoinCash
* @apiGroup BitcoinCash
* @apiDescription
@@ -81,7 +81,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.toBits() toBits() - Converting satoshi units to Bits denomination.
* @api BitcoinCash.toBits() toBits()
* @apiName toBits
* @apiGroup BitcoinCash
* @apiDescription
@@ -133,7 +133,7 @@ class BitcoinCash {
// }
/**
* @api BitcoinCash.signMessageWithPrivKey() signMessageWithPrivKey() - Sign message with private key.
* @api BitcoinCash.signMessageWithPrivKey() signMessageWithPrivKey()
* @apiName signMessageWithPrivKey
* @apiGroup BitcoinCash
* @apiDescription
@@ -165,7 +165,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.verifyMessage() verifyMessage() - Verify message.
* @api BitcoinCash.verifyMessage() verifyMessage()
* @apiName verifyMessage
* @apiGroup BitcoinCash
* @apiDescription
@@ -189,7 +189,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.encodeBase58Check() encodeBase58Check() - Encodes hex string as base58Check.
* @api BitcoinCash.encodeBase58Check() encodeBase58Check()
* @apiName encodeBase58Check
* @apiGroup BitcoinCash
* @apiDescription
@@ -227,7 +227,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.decodeBase58Check() decodeBase58Check() - Decodes base58Check encoded string to hex.
* @api BitcoinCash.decodeBase58Check() decodeBase58Check()
* @apiName decodeBase58Check
* @apiGroup BitcoinCash
* @apiDescription
@@ -265,7 +265,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.encodeBIP21() encodeBIP21() - Encodes address and options as BIP21 uri.
* @api BitcoinCash.encodeBIP21() encodeBIP21()
* @apiName encodeBIP21
* @apiGroup BitcoinCash
* @apiDescription
@@ -306,7 +306,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.decodeBIP21() decodeBIP21() - Decodes BIP21 uri.
* @api BitcoinCash.decodeBIP21() decodeBIP21()
* @apiName decodeBIP21
* @apiGroup BitcoinCash
* @apiDescription
@@ -340,7 +340,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.getByteCount() getByteCount() - Get byte count of transaction.
* @api BitcoinCash.getByteCount() getByteCount()
* @apiName getByteCount
* @apiGroup BitcoinCash
* @apiDescription
@@ -458,7 +458,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.encryptBIP38() encryptBIP38() - BIP38 encrypt privkey WIFs.
* @api BitcoinCash.encryptBIP38() encryptBIP38()
* @apiName encryptBIP38
* @apiGroup BitcoinCash
* @apiDescription
@@ -486,7 +486,7 @@ class BitcoinCash {
}
/**
* @api BitcoinCash.decryptBIP38() decryptBIP38() - BIP38 encrypt privkey WIFs.
* @api BitcoinCash.decryptBIP38() decryptBIP38()
* @apiName decryptBIP38
* @apiGroup BitcoinCash
* @apiDescription
+3 -3
View File
@@ -24,7 +24,7 @@ class Blockbook {
}
/**
* @api Blockbook.balance() balance() - Balance about an address.
* @api Blockbook.balance() balance()
* @apiName Blockbook Balance
* @apiGroup Blockbook
* @apiDescription Return Balance about an address.
@@ -221,7 +221,7 @@ class Blockbook {
}
/**
* @api Blockbook.utxo() utxo() - Get list of uxto for address.
* @api Blockbook.utxo() utxo()
* @apiName Blockbook Utxo
* @apiGroup Blockbook
* @apiDescription Return list of uxto for address.
@@ -307,7 +307,7 @@ class Blockbook {
}
/**
* @api Blockbook.tx() tx() - Get details on a transaction.
* @api Blockbook.tx() tx()
* @apiName Blockbook Tx
* @apiGroup Blockbook
* @apiDescription Get details on a transaction.
+14 -14
View File
@@ -23,7 +23,7 @@ class Blockchain {
}
/**
* @api Blockchain.getBestBlockHash() getBestBlockHash() - Returns the hash of the best (tip) block in the longest blockchain.
* @api Blockchain.getBestBlockHash() getBestBlockHash()
* @apiName getBestBlockHash
* @apiGroup Blockchain
* @apiDescription
@@ -54,7 +54,7 @@ class Blockchain {
}
/**
* @api Blockchain.getBlock() getBlock() - Return information about block hash.
* @api Blockchain.getBlock() getBlock()
* @apiName getBlock
* @apiGroup Blockchain
* @apiDescription
@@ -102,7 +102,7 @@ class Blockchain {
}
/**
* @api Blockchain.getBlockchainInfo() getBlockchainInfo() - Returns an object containing various state info regarding blockchain processing.
* @api Blockchain.getBlockchainInfo() getBlockchainInfo()
* @apiName getBlockchainInfo
* @apiGroup Blockchain
* @apiDescription
@@ -152,7 +152,7 @@ class Blockchain {
}
/**
* @api Blockchain.getBlockCount() getBlockCount() - Returns the number of blocks in the longest blockchain.
* @api Blockchain.getBlockCount() getBlockCount()
* @apiName getBlockCount
* @apiGroup Blockchain
* @apiDescription
@@ -183,7 +183,7 @@ class Blockchain {
}
/**
* @api Blockchain.getBlockHash() getBlockHash() - Returns hash of block in best-block-chain at height provided.
* @api Blockchain.getBlockHash() getBlockHash()
* @apiName getBlockHash
* @apiGroup Blockchain
* @apiDescription
@@ -216,7 +216,7 @@ class Blockchain {
}
/**
* @api Blockchain.getBlockHeader() getBlockHeader() - Return information about blockheader hash.
* @api Blockchain.getBlockHeader() getBlockHeader()
* @apiName getBlockHeader
* @apiGroup Blockchain
* @apiDescription
@@ -281,7 +281,7 @@ class Blockchain {
}
/**
* @api Blockchain.getChainTips() getChainTips() - Return information about all known tips in the block tree.
* @api Blockchain.getChainTips() getChainTips()
* @apiName getChainTips
* @apiGroup Blockchain
* @apiDescription
@@ -324,7 +324,7 @@ class Blockchain {
}
/**
* @api Blockchain.getDifficulty() getDifficulty() - Returns the proof-of-work difficulty as a multiple of the minimum difficulty.
* @api Blockchain.getDifficulty() getDifficulty()
* @apiName getDifficulty
* @apiGroup Blockchain
* @apiDescription
@@ -387,7 +387,7 @@ class Blockchain {
}
/**
* @api Blockchain.getMempoolEntry() getMempoolEntry() - Returns mempool data for given transaction.
* @api Blockchain.getMempoolEntry() getMempoolEntry()
* @apiName getMempoolEntry
* @apiGroup Blockchain
* @apiDescription
@@ -499,7 +499,7 @@ class Blockchain {
}
/**
* @api Blockchain.getMempoolInfo() getMempoolInfo() - Returns details on the active state of the TX memory pool.
* @api Blockchain.getMempoolInfo() getMempoolInfo()
* @apiName getMempoolInfo
* @apiGroup Blockchain
* @apiDescription
@@ -535,7 +535,7 @@ class Blockchain {
}
/**
* @api Blockchain.getRawMempool() getRawMempool() - Returns all transaction ids in memory pool as a json array of string transaction ids.
* @api Blockchain.getRawMempool() getRawMempool()
* @apiName getRawMempool
* @apiGroup Blockchain
* @apiDescription
@@ -582,7 +582,7 @@ class Blockchain {
}
/**
* @api Blockchain.getTxOut() getTxOut() - Returns details about an unspent transaction output.
* @api Blockchain.getTxOut() getTxOut()
* @apiName getTxOut
* @apiGroup Blockchain
* @apiDescription
@@ -634,7 +634,7 @@ class Blockchain {
}
/**
* @api Blockchain.getTxOutProof() getTxOutProof() - Returns a hex-encoded proof that "txid" was included in a block.
* @api Blockchain.getTxOutProof() getTxOutProof()
* @apiName getTxOutProof
* @apiGroup Blockchain
* @apiDescription
@@ -740,7 +740,7 @@ class Blockchain {
}
/**
* @api Blockchain.verifyTxOutProof() verifyTxOutProof() - Verifies that a proof points to a transaction in a block.
* @api Blockchain.verifyTxOutProof() verifyTxOutProof()
* @apiName verifyTxOutProof
* @apiGroup Blockchain
* @apiDescription
+1 -1
View File
@@ -22,7 +22,7 @@ class Control {
}
/**
* @api Control.getNetworkInfo() getNetworkInfo() - Get Network info
* @api Control.getNetworkInfo() getNetworkInfo()
* @apiName getNetworkInfo
* @apiGroup Control
* @apiDescription Returns an object containing various network info.
+5 -5
View File
@@ -3,7 +3,7 @@ const Bitcoin = require("bitcoincashjs-lib")
class Crypto {
/**
* @api Crypto.sha256() sha256() - Utility for creating sha256 hash.
* @api Crypto.sha256() sha256()
* @apiName sha256
* @apiGroup Crypto
* @apiDescription Utility for creating sha256 hash digests of data
@@ -31,7 +31,7 @@ class Crypto {
}
/**
* @api Crypto.ripemd160() ripemd160()-Utility for creating ripemd160 hash.
* @api Crypto.ripemd160() ripemd160()
* @apiName ripemd160
* @apiGroup Crypto
* @apiDescription Utility for creating ripemd160 hash digests of data
@@ -57,7 +57,7 @@ class Crypto {
}
/**
* @api Crypto.hash256() hash256() - Utility for creating double sha256 hash.
* @api Crypto.hash256() hash256()
* @apiName hash256
* @apiGroup Crypto
* @apiDescription Utility for creating double sha256 hash digests of data.
@@ -83,7 +83,7 @@ class Crypto {
}
/**
* @api Crypto.hash160() hash160() - Utility for creating ripemd160(sha256()) hash.
* @api Crypto.hash160() hash160()
* @apiName hash160
* @apiGroup Crypto
* @apiDescription Utility for creating ripemd160(sha256()) hash digests of data.
@@ -109,7 +109,7 @@ class Crypto {
}
/**
* @api Crypto.randomBytes() randomBytes() - Generates cryptographically strong pseudo-random data.
* @api Crypto.randomBytes() randomBytes()
* @apiName randomBytes
* @apiGroup Crypto
* @apiDescription Generates cryptographically strong pseudo-random data. The size argument is a number indicating the number of bytes to generate.
+6 -6
View File
@@ -6,7 +6,7 @@ class ECPair {
ECPair._address = address
}
/**
* @api Ecpair.fromWIF() fromWIF() - Generates an ECPair from a private key in wallet import format (WIF).
* @api Ecpair.fromWIF() fromWIF()
* @apiName fromWIF
* @apiGroup ECPair
* @apiDescription Generates an ECPair from a private key in wallet import format (WIF). Follow these steps to go from a private key to a WIF. This method only works with a compressed private key.
@@ -35,7 +35,7 @@ class ECPair {
return Bitcoin.ECPair.fromWIF(privateKeyWIF, bitcoincashBitcoinJSLib)
}
/**
* @api Ecpair.toWIF() toWIF() - Gets a private key in wallet import format from an ECPair.
* @api Ecpair.toWIF() toWIF()
* @apiName toWIF
* @apiGroup ECPair
* @apiDescription Gets a private key in wallet import format from an ECPair.
@@ -69,7 +69,7 @@ class ECPair {
return ecpair.verify(buffer, signature)
}
/**
* @api Ecpair.fromPublicKey() fromPublicKey() - Generates an ECPair from a public key buffer.
* @api Ecpair.fromPublicKey() fromPublicKey()
* @apiName fromPublicKey
* @apiGroup ECPair
* @apiDescription Generates an ECPair from a public key buffer.
@@ -87,7 +87,7 @@ class ECPair {
return Bitcoin.ECPair.fromPublicKeyBuffer(pubkeyBuffer)
}
/**
* @api Ecpair.toPublicKey() toPublicKey() - Get the public key of an ECPair as a buffer.
* @api Ecpair.toPublicKey() toPublicKey()
* @apiName toPublicKey
* @apiGroup ECPair
* @apiDescription Get the public key of an ECPair as a buffer.
@@ -109,7 +109,7 @@ class ECPair {
return ecpair.getPublicKeyBuffer()
}
/**
* @api Ecpair.toLegacyAddress() toLegacyAddress() - Get legacy address of ECPair.
* @api Ecpair.toLegacyAddress() toLegacyAddress()
* @apiName toLegacyAddress
* @apiGroup ECPair
* @apiDescription Get legacy address of ECPair.
@@ -135,7 +135,7 @@ class ECPair {
return ecpair.getAddress()
}
/**
* @api Ecpair.toCashAddress() toCashAddress() - Get cash address of ECPair.
* @api Ecpair.toCashAddress() toCashAddress()
* @apiName toCashAddress
* @apiGroup ECPair
* @apiDescription Get cash address of ECPair.
+95 -3
View File
@@ -24,7 +24,7 @@ class ElectrumX {
}
/**
* @api Electrumx.utxo() utxo() - Get a list of uxto for an address.
* @api Electrumx.utxo() utxo()
* @apiName ElectrumX Utxo
* @apiGroup ElectrumX
* @apiDescription Return a list of uxtos for an address.
@@ -119,7 +119,7 @@ class ElectrumX {
}
/**
* @api Electrumx.balance() balance() - Get the balance for an address.
* @api Electrumx.balance() balance()
* @apiName ElectrumX Balance
* @apiGroup ElectrumX
* @apiDescription Return a list of balances for an address.
@@ -203,7 +203,7 @@ class ElectrumX {
}
/**
* @api Electrumx.transactions() transactions() - Get the transaction history for an address.
* @api Electrumx.transactions() transactions()
* @apiName ElectrumX Transactions
* @apiGroup ElectrumX
* @apiDescription Return a transaction history for an address.
@@ -299,6 +299,98 @@ class ElectrumX {
else throw error
}
}
/**
* @api Electrumx.unconfirmed() unconfirmed()
* @apiName ElectrumX Unconfirmed
* @apiGroup ElectrumX
* @apiDescription Return a list of unconfirmed uxtos (mempool) for an address.
*
* @apiExample Example usage:
* (async () => {
* try {
* let mempool = await bchjs.Electrumx.unconfirmed('bitcoincash:qqh793x9au6ehvh7r2zflzguanlme760wuzehgzjh9');
* console.log(mempool);
* } catch(error) {
* console.error(error)
* }
* })()
*
* mempool = {
* "success": true,
* "utxos": [
* {
* "height": 602405,
* "tx_hash": "2b37bdb3b63dd0bca720437754a36671431a950e684b64c44ea910ea9d5297c7",
* "fee": 24310
* }
* ]
* }
*
* (async () => {
* try {
* let mempool = await bchjs.Electrumx.unconfirmed(['bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf', 'bitcoincash:qpdh9s677ya8tnx7zdhfrn8qfyvy22wj4qa7nwqa5v']);
* console.log(mempool);
* } catch(error) {
* console.error(error)
* }
* })()
*
* mempool = {
* "success": true,
* "utxos": [
* {
* "utxos": [
* {
* "height": 604392,
* "tx_hash": "7774e449c5a3065144cefbc4c0c21e6b69c987f095856778ef9f45ddd8ae1a41",
* "fee": 24310
* },
* {
* "height": 630834,
* "tx_hash": "4fe60a51e0d8f5134bfd8e5f872d6e502d7f01b28a6afebb27f4438a4f638d53",
* "fee": 3000
* }
* ],
* "address": "bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf"
* },
* {
* "utxos": [],
* "address": "bitcoincash:qpdh9s677ya8tnx7zdhfrn8qfyvy22wj4qa7nwqa5v"
* }
* ]
* }
*
*/
async unconfirmed(address) {
try {
// Handle single address.
if (typeof address === "string") {
const response = await axios.get(
`${this.restURL}electrumx/unconfirmed/${address}`,
_this.axiosOptions
)
return response.data
// Handle array of addresses.
} else if (Array.isArray(address)) {
const response = await axios.post(
`${this.restURL}electrumx/unconfirmed`,
{
addresses: address
},
_this.axiosOptions
)
return response.data
}
throw new Error(`Input address must be a string or array of strings.`)
} catch (error) {
if (error.response && error.response.data) throw error.response.data
else throw error
}
}
}
module.exports = ElectrumX
+20 -20
View File
@@ -9,7 +9,7 @@ class HDNode {
}
/**
* @api HDNode.fromSeed() fromSeed() - Create HDNode from Seed Buffer.
* @api HDNode.fromSeed() fromSeed()
* @apiName fromSeed
* @apiGroup HDNode
* @apiDescription
@@ -46,7 +46,7 @@ class HDNode {
}
/**
* @api HDNode.toLegacyAddress() toLegacyAddress() - Get legacy address of HDNode.
* @api HDNode.toLegacyAddress() toLegacyAddress()
* @apiName toLegacyAddress
* @apiGroup HDNode
* @apiDescription
@@ -80,7 +80,7 @@ class HDNode {
}
/**
* @api HDNode.toCashAddress() toCashAddress() - Get cash address of HDNode
* @api HDNode.toCashAddress() toCashAddress()
* @apiName toCashAddress
* @apiGroup HDNode
* @apiDescription
@@ -114,7 +114,7 @@ class HDNode {
}
/**
* @api SLP.HDNode.toSLPAddress() toSLPAddress() - Get slp address of HDNode.
* @api SLP.HDNode.toSLPAddress() toSLPAddress()
* @apiName toSLPAddress
* @apiGroup SLP
* @apiDescription Get slp address of HDNode.
@@ -148,7 +148,7 @@ class HDNode {
}
/**
* @api HDNode.toWIF() toWIF() - Get private key in wallet import format (WIF) of HDNode.
* @api HDNode.toWIF() toWIF()
* @apiName toWIF
* @apiGroup HDNode
* @apiDescription
@@ -182,7 +182,7 @@ class HDNode {
}
/**
* @api HDNode.toXPub() toXPub() - Get extended public key of HDNode.
* @api HDNode.toXPub() toXPub()
* @apiName toXPub
* @apiGroup HDNode
* @apiDescription
@@ -216,7 +216,7 @@ class HDNode {
}
/**
* @api HDNode.toXPriv() toXPriv() - Get extended private key of HDNode.
* @api HDNode.toXPriv() toXPriv()
* @apiName toXPriv
* @apiGroup HDNode
* @apiDescription
@@ -250,7 +250,7 @@ class HDNode {
}
/**
* @api HDNode.toKeyPair() toKeyPair() - Get the ECPair of an HDNode.
* @api HDNode.toKeyPair() toKeyPair()
* @apiName toKeyPair
* @apiGroup HDNode
* @apiDescription
@@ -282,7 +282,7 @@ class HDNode {
}
/**
* @api HDNode.toPublicKey() toPublicKey() - Get the public key of an HDNode as a buffer.
* @api HDNode.toPublicKey() toPublicKey()
* @apiName toPublicKey
* @apiGroup HDNode
* @apiDescription
@@ -316,7 +316,7 @@ class HDNode {
}
/**
* @api HDNode.fromXPriv() fromXPriv() - Generate HDNode from extended private key.
* @api HDNode.fromXPriv() fromXPriv()
* @apiName fromXPriv
* @apiGroup HDNode
* @apiDescription
@@ -339,7 +339,7 @@ class HDNode {
}
/**
* @api HDNode.fromXPub() fromXPub() - Generate HDNode from extended public key.
* @api HDNode.fromXPub() fromXPub()
* @apiName fromXPub
* @apiGroup HDNode
* @apiDescription
@@ -362,7 +362,7 @@ class HDNode {
}
/**
* @api HDNode.derivePath() derivePath() - Derive child HDNode from path.
* @api HDNode.derivePath() derivePath()
* @apiName derivePath
* @apiGroup HDNode
* @apiDescription
@@ -383,7 +383,7 @@ class HDNode {
}
/**
* @api HDNode.derive() derive() - Derive non hardened child HDNode.
* @api HDNode.derive() derive()
* @apiName derive
* @apiGroup HDNode
* @apiDescription
@@ -404,7 +404,7 @@ class HDNode {
}
/**
* @api HDNode.deriveHardened() deriveHardened() - Derive hardened child HDNode.
* @api HDNode.deriveHardened() deriveHardened()
* @apiName deriveHardened
* @apiGroup HDNode
* @apiDescription
@@ -425,7 +425,7 @@ class HDNode {
}
/**
* @api HDNode.sign() sign() - Sign 32 byte hash encoded as a buffer.
* @api HDNode.sign() sign()
* @apiName sign
* @apiGroup HDNode
* @apiDescription
@@ -455,7 +455,7 @@ class HDNode {
}
/**
* @api HDNode.verify() verify() - Verify signed 32 byte hash encoded as a buffer.
* @api HDNode.verify() verify()
* @apiName verify
* @apiGroup HDNode
* @apiDescription
@@ -499,7 +499,7 @@ class HDNode {
}
/**
* @api HDNode.isPublic() isPublic() - Check if an HDNode can only derive public keys and children.
* @api HDNode.isPublic() isPublic()
* @apiName isPublic
* @apiGroup HDNode
* @apiDescription
@@ -535,7 +535,7 @@ class HDNode {
}
/**
* @api HDNode.isPrivate() isPrivate() - Check if an HDNode can derive both public and private keys and children.
* @api HDNode.isPrivate() isPrivate()
* @apiName isPrivate
* @apiGroup HDNode
* @apiDescription
@@ -571,7 +571,7 @@ class HDNode {
}
/**
* @api HDNode.toIdentifier() toIdentifier() - hash160 of Nodes public key.
* @api HDNode.toIdentifier() toIdentifier()
* @apiName toIdentifier
* @apiGroup HDNode
* @apiDescription
@@ -607,7 +607,7 @@ class HDNode {
}
/**
* @api HDNode.createAccount() createAccount() - Create BIP32 account.
* @api HDNode.createAccount() createAccount()
* @apiName createAccount
* @apiGroup HDNode
* @apiDescription
+5 -5
View File
@@ -53,7 +53,7 @@ class IPFS {
}
/**
* @api IPFS.createFileModelServer() createFileModelServer() - Create a file model
* @api IPFS.createFileModelServer() createFileModelServer()
* @apiName createFileModelServer()
* @apiGroup IPFS
* @apiDescription Creates a new model on the server. If successful, will
@@ -131,7 +131,7 @@ class IPFS {
}
/**
* @api IPFS.uploadFileServer() uploadFileServer() - Upload a file to IPFS
* @api IPFS.uploadFileServer() uploadFileServer()
* @apiName uploadFile()
* @apiGroup IPFS
* @apiDescription Upload a file to the FullStack.cash IPFS server. If
@@ -219,7 +219,7 @@ class IPFS {
}
/**
* @api IPFS.getStatus() getStatus() - Check status of file upload
* @api IPFS.getStatus() getStatus()
* @apiName getStatus()
* @apiGroup IPFS
* @apiDescription Gets the status of the uploaded file. Will return an object
@@ -271,7 +271,7 @@ class IPFS {
}
}
/**
* @api IPFS.createFileModelWeb() createFileModelWeb() - Create a file model
* @api IPFS.createFileModelWeb() createFileModelWeb()
* @apiName createFileModelWeb()
* @apiGroup IPFS
* @apiDescription Creates a new model on the server. If successful, will
@@ -348,7 +348,7 @@ class IPFS {
}
/**
* @api IPFS.uploadFileWeb() uploadFileWeb() - Upload a file to IPFS
* @api IPFS.uploadFileWeb() uploadFileWeb()
* @apiName uploadFileWeb()
* @apiGroup IPFS
* @apiDescription Upload a file to the FullStack.cash IPFS server. If
+8 -8
View File
@@ -10,7 +10,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.generate() generate() - Generate BIP39 mnemonic from entropy.
* @api Mnemonic.generate() generate()
* @apiName generate
* @apiGroup Mnemonic
* @apiDescription
@@ -50,7 +50,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.fromEntropy() fromEntropy() - Create mnemonic from entropy.
* @api Mnemonic.fromEntropy() fromEntropy()
* @apiName fromEntropy
* @apiGroup Mnemonic
* @apiDescription
@@ -104,7 +104,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.toEntropy() toEntropy() - Turn mnemonic to entropy.
* @api Mnemonic.toEntropy() toEntropy()
* @apiName toEntropy
* @apiGroup Mnemonic
* @apiDescription
@@ -141,7 +141,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.validate() validate() - Validate mnemonic.
* @api Mnemonic.validate() validate()
* @apiName validate
* @apiGroup Mnemonic
* @apiDescription
@@ -181,7 +181,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.toSeed() toSeed() - Create root seed from mnemonic
* @api Mnemonic.toSeed() toSeed()
* @apiName toSeed
* @apiGroup Mnemonic
* @apiDescription
@@ -208,7 +208,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.wordLists() wordLists() - Return mnemonic word lists.
* @api Mnemonic.wordLists() wordLists()
* @apiName wordLists
* @apiGroup Mnemonic
* @apiDescription
@@ -234,7 +234,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.toKeypairs() toKeypairs() - Returns an array of privateKeyWIF/publicAddress pairs.
* @api Mnemonic.toKeypairs() toKeypairs()
* @apiName toKeypairs
* @apiGroup Mnemonic
* @apiDescription
@@ -290,7 +290,7 @@ class Mnemonic {
}
/**
* @api Mnemonic.findNearestWord() findNearestWord() - Returns nearest matching word from provided word list.
* @api Mnemonic.findNearestWord() findNearestWord()
* @apiName findNearestWord
* @apiGroup Mnemonic
* @apiDescription
+2 -2
View File
@@ -31,7 +31,7 @@ class Ninsight {
}
/**
* @api Ninsight.utxo() utxo() - Get list of uxto for address.
* @api Ninsight.utxo() utxo()
* @apiName Ninsight Utxo
* @apiGroup Ninsight
* @apiDescription Return list of uxto for address.
@@ -69,7 +69,7 @@ class Ninsight {
// Handle single address.
if (typeof address === "string") {
const response = await axios.post(
`${this.ninsightURL}/address/utxo/${address}`,
`${this.ninsightURL}/address/utxo`,
{
addresses: [address]
},
+3 -3
View File
@@ -23,7 +23,7 @@ class OpenBazaar {
}
/**
* @api OpenBazaar.balance() balance() - Balance about an address.
* @api OpenBazaar.balance() balance()
* @apiName OpenBazaar Balance
* @apiGroup OpenBazaar
* @apiDescription Return Balance about an address.
@@ -83,7 +83,7 @@ class OpenBazaar {
}
/**
* @api OpenBazaar.utxo() utxo() - Get list of uxto for address.
* @api OpenBazaar.utxo() utxo()
* @apiName OpenBazaar Utxo
* @apiGroup OpenBazaar
* @apiDescription Return list of uxto for address.
@@ -135,7 +135,7 @@ class OpenBazaar {
}
/**
* @api OpenBazaar.tx() tx() - Get details on a transaction.
* @api OpenBazaar.tx() tx()
* @apiName OpenBazaar Tx
* @apiGroup OpenBazaar
* @apiDescription Get details on a transaction.
+1 -1
View File
@@ -1,6 +1,6 @@
const axios = require("axios")
/**
* @api price.current() current() - Get current price.
* @api price.current() current()
* @apiName Price.
* @apiGroup Price
* @apiDescription Return current price of BCH in multiple currencies.
+4 -4
View File
@@ -18,7 +18,7 @@ class RawTransactions {
}
/**
* @api RawTransactions.decodeRawTransaction() decodeRawTransaction() - Return an Array of JSON objects representing the serialized, hex-encoded transactions.
* @api RawTransactions.decodeRawTransaction() decodeRawTransaction()
* @apiName decodeRawTransaction
* @apiGroup RawTransactions
* @apiDescription
@@ -115,7 +115,7 @@ class RawTransactions {
}
/**
* @api RawTransactions.decodeScript() decodeScript() - Decode hex-encoded scripts.
* @api RawTransactions.decodeScript() decodeScript()
* @apiName decodeScript
* @apiGroup RawTransactions
* @apiDescription
@@ -182,7 +182,7 @@ class RawTransactions {
}
/**
* @api RawTransactions.getRawTransaction() getRawTransaction() - Return the raw transaction data.
* @api RawTransactions.getRawTransaction() getRawTransaction()
* @apiName getRawTransaction
* @apiGroup RawTransactions
* @apiDescription
@@ -279,7 +279,7 @@ class RawTransactions {
}
/**
* @api RawTransactions.sendRawTransaction() sendRawTransaction() - Submits raw transaction (serialized, hex-encoded) to local node and network.
* @api RawTransactions.sendRawTransaction() sendRawTransaction()
* @apiName sendRawTransaction
* @apiGroup RawTransactions
* @apiDescription
+11 -11
View File
@@ -14,7 +14,7 @@ class Schnorr {
}
/**
* @api Schnorr.sign() sign() - Sign a 32-byte message with the private key, returning a 64-byte signature.
* @api Schnorr.sign() sign()
* @apiName sign
* @apiGroup Schnorr
* @apiDescription
@@ -41,7 +41,7 @@ class Schnorr {
}
/**
* @api Schnorr.verify() verify() - Verify a 64-byte signature of a 32-byte message against the public key.
* @api Schnorr.verify() verify()
* @apiName verify
* @apiGroup Schnorr
* @apiDescription
@@ -73,7 +73,7 @@ class Schnorr {
}
/**
* @api Schnorr.batchVerify() batchVerify() - Verify a list of 64-byte signatures as a batch operation.
* @api Schnorr.batchVerify() batchVerify()
* @apiName batchVerify
* @apiGroup Schnorr
* @apiDescription
@@ -135,7 +135,7 @@ class Schnorr {
}
/**
* @api Schnorr.nonInteractive() nonInteractive() - Aggregates multiple signatures of different private keys
* @api Schnorr.nonInteractive() nonInteractive()
* @apiName nonInteractive
* @apiGroup Schnorr
* @apiDescription
@@ -184,7 +184,7 @@ class Schnorr {
}
/**
* @api Schnorr.computeEll() computeEll() - Generate ell which is the hash over all public keys participating in a session.
* @api Schnorr.computeEll() computeEll()
* @apiName computeEll
* @apiGroup Schnorr
* @apiDescription
@@ -258,7 +258,7 @@ class Schnorr {
}
/**
* @api Schnorr.publicKeyCombine() publicKeyCombine() - Creates a special rogue-key-resistant.
* @api Schnorr.publicKeyCombine() publicKeyCombine()
* @apiName publicKeyCombine
* @apiGroup Schnorr
* @apiDescription
@@ -276,7 +276,7 @@ class Schnorr {
}
/**
* @api Schnorr.sessionInitialize() sessionInitialize() - Creates a signing session.
* @api Schnorr.sessionInitialize() sessionInitialize()
* @apiName sessionInitialize
* @apiGroup Schnorr
* @apiDescription
@@ -315,7 +315,7 @@ class Schnorr {
}
/**
* @api Schnorr.sessionNonceCombine() sessionNonceCombine() - Combines multiple nonces R_i into the combined nonce R.
* @api Schnorr.sessionNonceCombine() sessionNonceCombine()
* @apiName sessionNonceCombine
* @apiGroup Schnorr
* @apiDescription
@@ -360,7 +360,7 @@ class Schnorr {
}
/**
* @api Schnorr.partialSign() partialSign() - Creates a partial signature s_i for a participant.
* @api Schnorr.partialSign() partialSign()
* @apiName partialSign
* @apiGroup Schnorr
* @apiDescription
@@ -392,7 +392,7 @@ class Schnorr {
}
/**
* @api Schnorr.partialSignatureVerify() partialSignatureVerify() - Verifies a partial signature s_i against the participant's public key P_i.
* @api Schnorr.partialSignatureVerify() partialSignatureVerify()
* @apiName partialSignatureVerify
* @apiGroup Schnorr
* @apiDescription
@@ -445,7 +445,7 @@ class Schnorr {
}
/**
* @api Schnorr.partialSignaturesCombine() partialSignaturesCombine() - Combines multiple partial signatures into a Schnorr signature.
* @api Schnorr.partialSignaturesCombine() partialSignaturesCombine()
* @apiName partialSignaturesCombine
* @apiGroup Schnorr
* @apiDescription
+11 -11
View File
@@ -14,7 +14,7 @@ class Address extends BCHJSAddress {
}
/**
* @api SLP.Address.toSLPAddress() toSLPAddress() - Converting to slpAddress format.
* @api SLP.Address.toSLPAddress() toSLPAddress()
* @apiName toSLPAddress
* @apiGroup SLP
* @apiDescription Converting legacy or cashaddr to slpAddress format.
@@ -60,7 +60,7 @@ class Address extends BCHJSAddress {
}
/**
* @api SLP.Address.toCashAddress() toCashAddress() - Converting to cashAddress format.
* @api SLP.Address.toCashAddress() toCashAddress()
* @apiName toCashAddress
* @apiGroup SLP
* @apiDescription Converting legacy or slpaddr to cashAddress format.
@@ -106,7 +106,7 @@ class Address extends BCHJSAddress {
}
/**
* @api SLP.Address.toLegacyAddress() toLegacyAddress() - Converting to legacy address format.
* @api SLP.Address.toLegacyAddress() toLegacyAddress()
* @apiName toLegacyAddress
* @apiGroup SLP
* @apiDescription Converting cashaddr or slpaddr to legacy address format.
@@ -164,7 +164,7 @@ class Address extends BCHJSAddress {
}
/**
* @api SLP.Address.isSLPAddress() isSLPAddress() - Detect if slpAddr encoded address.
* @api SLP.Address.isSLPAddress() isSLPAddress()
* @apiName isSLPAddress
* @apiGroup SLP
* @apiDescription Detect if slpAddr encoded address.
@@ -201,7 +201,7 @@ class Address extends BCHJSAddress {
}
/**
* @api SLP.Address.isMainnetAddress() isMainnetAddress() - Detect if mainnet address.
* @api SLP.Address.isMainnetAddress() isMainnetAddress()
* @apiName isMainnetAddress
* @apiGroup SLP
* @apiDescription Detect if mainnet address.
@@ -255,7 +255,7 @@ class Address extends BCHJSAddress {
}
/**
* @api SLP.Address.isTestnetAddress() isTestnetAddress() - Detect if testnet address.
* @api SLP.Address.isTestnetAddress() isTestnetAddress()
* @apiName isTestnetAddress
* @apiGroup SLP
* @apiDescription Detect if testnet address.
@@ -307,7 +307,7 @@ class Address extends BCHJSAddress {
return bchAddress.isTestnetAddress(cashAddr)
}
/**
* @api SLP.Address.isP2PKHAddress() isP2PKHAddress() - Detect if p2pkh address.
* @api SLP.Address.isP2PKHAddress() isP2PKHAddress()
* @apiName isP2PKHAddress
* @apiGroup SLP
* @apiDescription Detect if p2pkh address.
@@ -359,7 +359,7 @@ class Address extends BCHJSAddress {
return bchAddress.isP2PKHAddress(cashAddr)
}
/**
* @api SLP.Address.isP2SHAddress() isP2SHAddress() - Detect if p2sh address.
* @api SLP.Address.isP2SHAddress() isP2SHAddress()
* @apiName isP2SHAddress
* @apiGroup SLP
* @apiDescription Detect if p2sh address.
@@ -411,7 +411,7 @@ class Address extends BCHJSAddress {
return bchAddress.isP2SHAddress(cashAddr)
}
/**
* @api SLP.Address.detectAddressFormat() detectAddressFormat() - Detect address format.
* @api SLP.Address.detectAddressFormat() detectAddressFormat()
* @apiName detectAddressFormat
* @apiGroup SLP
* @apiDescription Detect address format.
@@ -464,7 +464,7 @@ class Address extends BCHJSAddress {
return bchAddress.detectAddressFormat(address)
}
/**
* @api SLP.Address.detectAddressNetwork() detectAddressNetwork() - Detect address network.
* @api SLP.Address.detectAddressNetwork() detectAddressNetwork()
* @apiName detectAddressNetwork
* @apiGroup SLP
* @apiDescription Detect address network.
@@ -516,7 +516,7 @@ class Address extends BCHJSAddress {
return bchAddress.detectAddressNetwork(cashAddr)
}
/**
* @api SLP.Address.detectAddressType() detectAddressType() - Detect address type.
* @api SLP.Address.detectAddressType() detectAddressType()
* @apiName detectAddressType
* @apiGroup SLP
* @apiDescription Detect address type.
+1 -1
View File
@@ -13,7 +13,7 @@ class ECPair extends BCHJSECPair {
}
*/
/**
* @api SLP.ECPair.toSLPAddress() toSLPAddress() - Get slp address of ECPair.
* @api SLP.ECPair.toSLPAddress() toSLPAddress()
* @apiName toSLPAddress
* @apiGroup SLP
* @apiDescription Get slp address of ECPair.
-78
View File
@@ -370,84 +370,6 @@ class Utils {
}
}
/**
* @api SLP.Utils.balance() balance()
* @apiName balance
* @apiGroup SLP Utils
* @apiDescription Return single balance for an address by token id.
*
* @apiExample Example usage:
*
* // single balance for SLP Address
* (async () => {
* try {
* let balance = await bchjs.SLP.Utils.balance(
* "simpleledger:qr5agtachyxvrwxu76vzszan5pnvuzy8duhv4lxrsk",
* "df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb"
* );
* console.log(balance);
* } catch (error) {
* console.error(error);
* }
* })();
*
* // returns
* // { tokenId:
* // 'df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb',
* // balance: '617',
* // decimalCount: 8 }
*
* // single balance for Cash Address
* (async () => {
* try {
* let balance = await bchjs.SLP.Utils.balance(
* "bitcoincash:qr5agtachyxvrwxu76vzszan5pnvuzy8dumh7ynrwg",
* "df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb"
* );
* console.log(balance);
* } catch (error) {
* console.error(error);
* }
* })();
*
* // returns
* // { tokenId:
* // 'df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb',
* // balance: '617',
* // decimalCount: 8 }
*
* // single balance for Legacy Address
* (async () => {
* try {
* let balance = await bchjs.SLP.Utils.balance(
* "1DwQqpWc8pzaRydCmiJsPdoqCzmjSQQbp8",
* "467969e067f5612863d0bf2daaa70dede2c6be03abb6fd401c5ef6e1e1f1f5c5"
* );
* console.log(balance);
* } catch (error) {
* console.error(error);
* }
* })();
*
* // returns
* // { tokenId:
* // '467969e067f5612863d0bf2daaa70dede2c6be03abb6fd401c5ef6e1e1f1f5c5',
* // balance: '1234',
* // decimalCount: 2 }
*/
// Retrieve a balance for a specific address and token ID
async balance(address, tokenId) {
const path = `${this.restURL}slp/balance/${address}/${tokenId}`
try {
const response = await axios.get(path, _this.axiosOptions)
return response.data
} catch (error) {
if (error.response && error.response.data) throw error.response.data
throw error
}
}
/**
* @api SLP.Utils.validateTxid() validateTxid()
* @apiName validateTxid
+5 -5
View File
@@ -37,7 +37,7 @@ class TransactionBuilder {
}
/**
* @api Transaction-Builder.addInput() addInput() - Add input to transaction.
* @api Transaction-Builder.addInput() addInput()
* @apiName AddInput
* @apiGroup TransactionBuilder
* @apiDescription Add input to transaction.
@@ -66,7 +66,7 @@ class TransactionBuilder {
this.p2shInput = true
}
/**
* @api Transaction-Builder.addOutput() addOutput() - Add output to transaction.
* @api Transaction-Builder.addOutput() addOutput()
* @apiName AddOutput
* @apiGroup TransactionBuilder
* @apiDescription Add output to transaction.
@@ -90,7 +90,7 @@ class TransactionBuilder {
}
}
/**
* @api Transaction-Builder.setLockTime() setLockTime() - Set locktime.
* @api Transaction-Builder.setLockTime() setLockTime()
* @apiName SetLockTime
* @apiGroup TransactionBuilder
* @apiDescription Set locktime.
@@ -108,7 +108,7 @@ class TransactionBuilder {
this.transaction.setLockTime(locktime)
}
/**
* @api Transaction-Builder.sign() sign() - Sign transaction..
* @api Transaction-Builder.sign() sign()
* @apiName Sign.
* @apiGroup TransactionBuilder
* @apiDescription Sign transaction. It creates the unlocking script needed to spend an input. Each input has its own script and thus 'sign' must be called for each input even if the keyPair is the same..
@@ -145,7 +145,7 @@ class TransactionBuilder {
)
}
/**
* @api Transaction-Builder.build() build() - Build transaction.
* @api Transaction-Builder.build() build()
* @apiName Build.
* @apiGroup TransactionBuilder
* @apiDescription Build transaction.
+1 -1
View File
@@ -18,7 +18,7 @@ class Util {
}
/**
* @api util.validateAddress() validateAddress() - Get information about the given bitcoin address.
* @api util.validateAddress() validateAddress()
* @apiName Validate Address.
* @apiGroup Util
* @apiDescription Return information about the given bitcoin address.
+62
View File
@@ -178,4 +178,66 @@ describe(`#ElectrumX`, () => {
}
})
})
describe(`#unconfirmed`, () => {
// These tests won't work because unconfirmed transactions are transient in nature.
/*
it(`should GET unconfirmed UTXOs (mempool) for a single address`, async () => {
const addr = "bitcoincash:qqy6qwk3wpne95hhv8uzwr4cn8m7c06cqgchl77dnv"
const result = await bchjs.Electrumx.unconfirmed(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "success")
assert.equal(result.success, true)
assert.property(result, "utxos")
assert.isArray(result.utxos)
assert.property(result.utxos[0], "height")
assert.property(result.utxos[0], "tx_hash")
assert.property(result.utxos[0], "fee")
})
it(`should POST request for unconfirmed UTXOs (mempool) for an array of addresses`, async () => {
const addr = [
"bitcoincash:qqy6qwk3wpne95hhv8uzwr4cn8m7c06cqgchl77dnv",
"bitcoincash:qpyrtsl9msdu2klgfpcmn2v5r22w9rk24g8pal74ts"
]
const result = await bchjs.Electrumx.unconfirmed(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "success")
assert.equal(result.success, true)
assert.property(result, "utxos")
assert.isArray(result.utxos)
assert.property(result.utxos[0], "utxos")
assert.isArray(result.utxos[0].utxos)
assert.property(result.utxos[0], "address")
assert.property(result.utxos[0].utxos[0], "height")
assert.property(result.utxos[0].utxos[0], "tx_hash")
assert.property(result.utxos[0].utxos[0], "fee")
})
*/
it(`should throw error on array size rate limit`, async () => {
try {
const addr = []
for (let i = 0; i < 25; i++)
addr.push("bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf")
await bchjs.Electrumx.unconfirmed(addr)
// console.log(`result: ${util.inspect(result)}`)
assert.equal(true, false, "Unexpected result!")
} catch (err) {
assert.hasAnyKeys(err, ["error"])
assert.include(err.error, "Array too large")
}
})
})
})
+13 -13
View File
@@ -17,21 +17,21 @@ describe(`#Ninsight`, () => {
const result = await bchjs.Ninsight.utxo(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "utxos")
assert.property(result, "legacyAddress")
assert.property(result, "cashAddress")
assert.property(result, "slpAddress")
assert.property(result, "scriptPubKey")
assert.property(result, "asm")
assert.property(result[0], "utxos")
assert.property(result[0], "legacyAddress")
assert.property(result[0], "cashAddress")
assert.property(result[0], "slpAddress")
assert.property(result[0], "scriptPubKey")
assert.property(result[0], "asm")
assert.isArray(result.utxos)
assert.isArray(result[0].utxos)
assert.property(result.utxos[0], "txid")
assert.property(result.utxos[0], "vout")
assert.property(result.utxos[0], "amount")
assert.property(result.utxos[0], "satoshis")
assert.property(result.utxos[0], "height")
assert.property(result.utxos[0], "confirmations")
assert.property(result[0].utxos[0], "txid")
assert.property(result[0].utxos[0], "vout")
assert.property(result[0].utxos[0], "amount")
assert.property(result[0].utxos[0], "satoshis")
assert.property(result[0].utxos[0], "height")
assert.property(result[0].utxos[0], "confirmations")
})
it(`should POST utxo details for an array of addresses`, async () => {
+62
View File
@@ -182,4 +182,66 @@ describe(`#ElectrumX`, () => {
}
})
})
describe(`#unconfirmed`, () => {
// These tests won't work because unconfirmed transactions are transient in nature.
/*
it(`should GET unconfirmed UTXOs (mempool) for a single address`, async () => {
const addr = "bchtest:qp25k20dgcljrz4hkdz43partam3j5httyprjp23qd"
const result = await bchjs.Electrumx.unconfirmed(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "success")
assert.equal(result.success, true)
assert.property(result, "utxos")
assert.isArray(result.utxos)
assert.property(result.utxos[0], "height")
assert.property(result.utxos[0], "tx_hash")
assert.property(result.utxos[0], "fee")
})
it(`should POST unconfirmed UTXO details for an array of addresses`, async () => {
const addr = [
"bchtest:qp25k20dgcljrz4hkdz43partam3j5httyprjp23qd",
"bchtest:qpkl3xylrjx4jup6m66e7zg7whlaucsxeudxeqawdj"
]
const result = await bchjs.Electrumx.unconfirmed(addr)
//console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "success")
assert.equal(result.success, true)
assert.property(result, "utxos")
assert.isArray(result.utxos)
assert.property(result.utxos[0], "utxos")
assert.isArray(result.utxos[0].utxos)
assert.property(result.utxos[0], "address")
assert.property(result.utxos[0].utxos[0], "height")
assert.property(result.utxos[0].utxos[0], "tx_hash")
assert.property(result.utxos[0].utxos[0], "fee")
})
*/
it(`should throw error on array size rate limit`, async () => {
try {
const addr = []
for (let i = 0; i < 25; i++)
addr.push("bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2")
await bchjs.Electrumx.unconfirmed(addr)
//console.log(`result: ${util.inspect(result)}`)
assert.equal(true, false, "Unexpected result!")
} catch (err) {
assert.hasAnyKeys(err, ["error"])
assert.include(err.error, "Array too large")
}
})
})
})
+13 -13
View File
@@ -17,21 +17,21 @@ describe(`#Ninsight`, () => {
const result = await bchjs.Ninsight.utxo(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "utxos")
assert.property(result, "legacyAddress")
assert.property(result, "cashAddress")
assert.property(result, "slpAddress")
assert.property(result, "scriptPubKey")
assert.property(result, "asm")
assert.property(result[0], "utxos")
assert.property(result[0], "legacyAddress")
assert.property(result[0], "cashAddress")
assert.property(result[0], "slpAddress")
assert.property(result[0], "scriptPubKey")
assert.property(result[0], "asm")
assert.isArray(result.utxos)
assert.isArray(result[0].utxos)
assert.property(result.utxos[0], "txid")
assert.property(result.utxos[0], "vout")
assert.property(result.utxos[0], "amount")
assert.property(result.utxos[0], "satoshis")
assert.property(result.utxos[0], "height")
assert.property(result.utxos[0], "confirmations")
assert.property(result[0].utxos[0], "txid")
assert.property(result[0].utxos[0], "vout")
assert.property(result[0].utxos[0], "amount")
assert.property(result[0].utxos[0], "satoshis")
assert.property(result[0].utxos[0], "height")
assert.property(result[0].utxos[0], "confirmations")
})
it(`should POST utxo details for an array of addresses`, async () => {
@@ -6,3 +6,4 @@ export NETWORK=testnet
cd test/integration/testnet/
mocha --timeout 30000 blockchain.js control.js electrumx.js openbazaar.js rawtransaction.js slp.js util.js
#mocha --timeout 30000 blockchain.js
+64
View File
@@ -196,4 +196,68 @@ describe(`#ElectrumX`, () => {
assert.property(result.transactions[0].transactions[0], "tx_hash")
})
})
describe(`#unconfirmed`, () => {
it(`should throw an error for improper input`, async () => {
try {
const addr = 12345
await bchjs.Electrumx.unconfirmed(addr)
assert.equal(true, false, "Unexpected result!")
} catch (err) {
// console.log(`err: `, err)
assert.include(
err.message,
`Input address must be a string or array of strings`
)
}
})
it(`should GET unconfirmed utxos for a single address`, async () => {
// Stub the network call.
sandbox.stub(axios, "get").resolves({ data: mockData.unconfirmed })
const addr = "bitcoincash:qqh793x9au6ehvh7r2zflzguanlme760wuzehgzjh9"
const result = await bchjs.Electrumx.unconfirmed(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "success")
assert.equal(result.success, true)
assert.property(result, "utxos")
assert.isArray(result.utxos)
assert.property(result.utxos[0], "height")
assert.property(result.utxos[0], "tx_hash")
assert.property(result.utxos[0], "fee")
})
it(`should POST unconfirmed utxo details for an array of addresses`, async () => {
// Stub the network call.
sandbox.stub(axios, "post").resolves({ data: mockData.unconfirmedArray })
const addr = [
"bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf",
"bitcoincash:qpdh9s677ya8tnx7zdhfrn8qfyvy22wj4qa7nwqa5v"
]
const result = await bchjs.Electrumx.unconfirmed(addr)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, "success")
assert.equal(result.success, true)
assert.property(result, "utxos")
assert.isArray(result.utxos)
assert.property(result.utxos[0], "utxos")
assert.isArray(result.utxos[0].utxos)
assert.property(result.utxos[0], "address")
assert.property(result.utxos[0].utxos[0], "height")
assert.property(result.utxos[0].utxos[0], "tx_hash")
assert.property(result.utxos[0].utxos[0], "fee")
})
})
})
+42 -1
View File
@@ -119,11 +119,52 @@ const transactions = {
]
}
const unconfirmed = {
success: true,
utxos: [
{
height: 602405,
tx_hash:
"2b37bdb3b63dd0bca720437754a36671431a950e684b64c44ea910ea9d5297c7",
fee: 34100
}
]
}
const unconfirmedArray = {
success: true,
utxos: [
{
utxos: [
{
height: 604392,
tx_hash:
"7774e449c5a3065144cefbc4c0c21e6b69c987f095856778ef9f45ddd8ae1a41",
fee: 34210
},
{
height: 630834,
tx_hash:
"4fe60a51e0d8f5134bfd8e5f872d6e502d7f01b28a6afebb27f4438a4f638d53",
value: 3000
}
],
address: "bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf"
},
{
utxos: [],
address: "bitcoincash:qpdh9s677ya8tnx7zdhfrn8qfyvy22wj4qa7nwqa5v"
}
]
}
module.exports = {
utxo,
utxos,
balance,
balances,
transaction,
transactions
transactions,
unconfirmed,
unconfirmedArray
}
-16
View File
@@ -231,22 +231,6 @@ describe("#SLP Utils", () => {
})
})
describe("#balance", () => {
it(`should fetch balance of single token for address: simpleledger:qzv3zz2trz0xgp6a96lu4m6vp2nkwag0kvyucjzqt9`, async () => {
// Mock the call to the REST API
if (process.env.TEST === "unit")
sandbox.stub(axios, "get").resolves({ data: mockData.mockBalance })
const balance = await slp.Utils.balance(
"simpleledger:qzv3zz2trz0xgp6a96lu4m6vp2nkwag0kvyucjzqt9",
"df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb"
)
//console.log(`balance: ${JSON.stringify(balance, null, 2)}`)
assert2.hasAllKeys(balance, ["tokenId", "balance", "balanceString"])
})
})
describe("#validateTxid", () => {
it(`should validate slp txid`, async () => {
// Mock the call to the REST API