README
Electrum Proxy Middleware
ExpressJS middleware to add functionality for proxying requests to Electrum servers
Agenda
Web applications can't communicate with electrum servers. This package provide ability to make requests to them.
Requirements
Node >= 7.x
Getting started
npm install @agilie/electrum-proxy-middleware
const electrum = require('@agilie/electrum-proxy-middleware');
app.use(electrum.router);
app.listen(3000)
curl -X GET http://localhost:3000/server/version?coinType=btc
> {"status":"success","result":["ElectrumX 1.13.0","1.4"]}
or
curl -X GET 'http://localhost:3000/server/version?port=55002&host=tn.not.fyi&connectionType=ssl&version=1.4'
> {"status":"success","result":["ElectrumX 1.13.0","1.4"]}
Running the tests
npm test
Supported calls
All calls are required to have a coinType param or at least host, port, connectionType and version params.
or
Param | Value |
---|
host (required) | e.g. tn.not.fyi |
port (required) | e.g. 55002 |
connectionType (required) | ssl or tcp |
version (required) | e.g 1.4 |
netMode | mainnet (by default) or testnet |
Server methods
[GET] /server/version eq. to server.version
[GET] /server/features eq. to server.features
[GET] /server/banner eq. to server.banner
[GET] /server/donation-address eq. to server.donation_address
[GET] /server/add_peer eq. to server.add_peer
[GET] /server/ping eq. to server.ping
Example: /server/version?coinType=btc
Blockchain methods
Additional params:
Param | Type | Description |
---|
version | Float | server version |
height | non-negative integer | the height of the block |
Example: /block/header?coinType=btc&height=5
Additional params: start_height - the height of the first header requested, count - the number of headers requested.
Example: /block/headers?&coinType=btc&start_height=5&count=1
[GET] /blockchain/estimatefee eq. to blockchain.estimatefee
Additional params:
Param | Description |
---|
blocks | the number of blocks to target for confirmation |
Example: /blockchain/estimatefee?coinType=btc&blocks=1
[GET] /blockchain/relayfee eq. to blockchain.relayfee
Example: /blockchain/relayfee?coinType=btc
Mempool methods
[GET] /mempool/get_fee_histogram eq. to mempool.get_fee_histogram
Example: /mempool/get_fee_histogram?coinType=btc
Scripthash methods
Param | Type | Description |
---|
scripthash | hexadecimal string | script hash |
[GET] /scripthash/balance eq. to blockchain.scripthash.get_balance
[GET] /scripthash/listunspent eq. to blockchain.scripthash.listunspent
[GET] /scripthash/get_history eq. to blockchain.scripthash.get_history
[GET] /scripthash/get_mempool eq. to blockchain.scripthash.get_mempool
Example: /scripthash/balance?scripthash=20b360e68b4fe6d1eb460e45434f756fa1582ed687167898f9a716435ecd737f&coinType=btc
Transaction methods
[POST] /transaction/broadcast eq. to blockchain.transaction.broadcast
Additional params:
Param | Type | Description |
---|
raw_tx | hexadecimal string | raw transaction |
[GET] /transaction/get eq. to blockchain.transaction.get
Additional params:
Param | Type | Description |
---|
tx_hash | hexadecimal string | transaction hash |
verbose | boolean | whether a verbose coin-specific response is required |
Example: /transaction/get?tx_hash=871af2528c83ba90bd7b3fbfeac703cbd20f204f1b800ba4ec748842fcac0c9b&coinType=btc
[GET] /transaction/get-merkle eq. to blockchain.transaction.get_merkle
Additional params:
Param | Type | Description |
---|
tx_hash | hexadecimal string | raw transaction |
height | integer | the height at which it was confirmed |
[GET] /transaction/id-from-pos eq. to blockchain.transaction.id_from_pos
Additional params:
Param | Type | Description |
---|
height | non-negative integer | the main chain block height |
tx_pos | integer | a zero-based index of the transaction in the given block |
merkle | boolean | whether a merkle proof should also be returned |
Getting history
Getting history docs.
For more details, refer to the ElectrumX Protocol Methods docs.
Examples
Here are some basic examples.
Protocol version
-
URL
</server/version?coinType=btc>
-
Method:
GET
-
URL Params
Required:
coinType=[CoinType]
Optional:
netMode=[Netmode]
-
Success Response:
{
"status":"success","result":["ElectrumX 1.13.0","1.4"]
}
-
Error Response:
{
"error": [{
"target": {
"netMode": "mainnet",
"coinType": "etc"
},
"value": "etc",
"property": "coinType",
"children": [],
"constraints": {
"isEnum": "coinType must be a valid enum value"
}
}]
}
Or you can specify electrum server:
-
URL
</server/version?port=55002&host=tn.not.fyi&connectionType=ssl&version=1.4>
-
Method:
GET
-
URL Params
Required:
port=[integer]
host=[string]
connectionType=[ssl | tcp]
version=[server version]
Optional:
netMode=[testnet | mainnet]
Confirmed and unconfirmed history of a script hash.
-
URL
</history/get_history?address=1BWwXJH3q6PRsizBkSGm2Uw4Sz1urZ5sCj&coinType=btc&page=1&pageSize=2>
-
Method:
GET
-
URL Params
Required:
coinType=[CoinType]
address=[string]
Optional:
netMode=[Netmode]
page=[number]
pageSize=[number]
-
Success Response:
{
"status": "success",
"result": [{
"value": "0.0002",
"timestamp": 1399325126000,
"fee": "0.0001",
"status": "completed"
}, {
"value": "0.00011",
"timestamp": 1399325126000,
"fee": "0.0001",
"status": "completed"
}],
"time": 336.57917699999996
}
-
Error Response:
{
"error": [{
"target": {
"netMode": "test",
"address": "8b01df4e368ea28f8dc0423bcf77a4923e3a12d307c875e47a0cfbf90b5c39161",
"coinType": "btc",
"page": "1",
"pageSize": "2"
},
"value": "test",
"property": "netMode",
"children": [],
"constraints": {
"isEnum": "netMode must be a valid enum value"
}
}]
}
License
The MIT License (MIT). Full license text is available in LICENSE.