Core gRPC Endpoints
Detailed core gRPC endpoint reference
gRPC Overview
Please refer to the gRPC Overview for details regarding running the examples shown below, encoding/decoding the request/response data, and clients available for several languages.
Endpoint Details
broadcastTransaction
Returns: The transaction id (TXID) if successful
Parameters:
Name | Type | Required | Description |
---|---|---|---|
transaction | Bytes | Yes | A raw transaction |
allow_high_fees | Boolean | No | Enables bypassing the high fee check |
bypass_limits | Boolean | No |
Example Request and Response
const DAPIClient = require('@dashevo/dapi-client');
const { Transaction } = require('@dashevo/dashcore-lib');
const client = new DAPIClient({
seeds: [{
host: 'seed-1.testnet.networks.dash.org',
port: 3000,
}],
});
const tx = Transaction('02000000022fd1c4583099109524b8216d712373bd837d24a502414fcadd8ae94753c3d87e010000006a47304402202cbdc560898ad389005fbe231fb345da503d838cfadab738a7d2f57bdd7ff77c02206e02b9f05c3dfb380d158949407372f26fa8ecc66956297792509c2f700723d1012103422fa857d5049000c22c3188e84557da5b783c2ef54b83a76a2933a0564c22dafeffffff07e987f3bb114c4370b937915e980657e2706135e21fbd8972a5534c804d5495000000006a473044022041a69c058035a2a8c88715c018efcb77a9ee3a08b72fd24afe8591364cee8dc002203026f115ac9c7206a985f71422ac38d451bde092d708bfb81ef35b2968f4ee34012102f0ce58f50515d04d4ff01a550a4d3246fbdc9d27031ef7d883e845b6b41f0e4efeffffff0269440f00000000001976a91465f6a3d634ba58247825c6fd55174ca72fdcdbd988ac00e1f505000000001976a9144139b147b5cef5fef5bcdb02fcdf55e426f74dbb88ac4d5b0600');
client.core.broadcastTransaction(tx.toBuffer())
.then((response) => console.log(response));
const {
v0: {
CorePromiseClient,
},
} = require('@dashevo/dapi-grpc');
const { Transaction } = require('@dashevo/dashcore-lib');
const corePromiseClient = new CorePromiseClient('http://seed-1.testnet.networks.dash.org:3010');
const tx = Transaction('02000000022fd1c4583099109524b8216d712373bd837d24a502414fcadd8ae94753c3d87e010000006a47304402202cbdc560898ad389005fbe231fb345da503d838cfadab738a7d2f57bdd7ff77c02206e02b9f05c3dfb380d158949407372f26fa8ecc66956297792509c2f700723d1012103422fa857d5049000c22c3188e84557da5b783c2ef54b83a76a2933a0564c22dafeffffff07e987f3bb114c4370b937915e980657e2706135e21fbd8972a5534c804d5495000000006a473044022041a69c058035a2a8c88715c018efcb77a9ee3a08b72fd24afe8591364cee8dc002203026f115ac9c7206a985f71422ac38d451bde092d708bfb81ef35b2968f4ee34012102f0ce58f50515d04d4ff01a550a4d3246fbdc9d27031ef7d883e845b6b41f0e4efeffffff0269440f00000000001976a91465f6a3d634ba58247825c6fd55174ca72fdcdbd988ac00e1f505000000001976a9144139b147b5cef5fef5bcdb02fcdf55e426f74dbb88ac4d5b0600');
corePromiseClient.client.broadcastTransaction({ transaction: tx.toBuffer() })
.then((response) => console.log(response));
{
transactionId: '552eaf24a60014edcbbb253dbc4dd68766532cab3854b44face051cedcfd578f'
}
getStatus
Breaking change in Dash Platform 0.19.0
The structure of the response has been reformatted in Dash Platform 0.19.0 (PR 107). See the previous version of documentation for details of the older format.
Returns: Status information from the Core chain
Parameters: None
Example Request and Response
const DAPIClient = require('@dashevo/dapi-client');
const client = new DAPIClient({
seeds: [{
host: 'seed-1.testnet.networks.dash.org',
port: 3000,
}],
});
client.core.getStatus()
.then((response) => console.log(response));
const {
v0: {
GetStatusRequest,
CorePromiseClient,
},
} = require('@dashevo/dapi-grpc');
const corePromiseClient = new CorePromiseClient('http://seed-1.testnet.networks.dash.org:3010');
corePromiseClient.client.getStatus(new GetStatusRequest())
.then((response) => console.log(response));
grpcurl -plaintext -proto protos/core/v0/core.proto \
seed-1.testnet.networks.dash.org:3010 \
org.dash.platform.dapi.v0.Core/getStatus
Note: The gRPCurl response
bestBlockHash
,chainWork
, andproTxHash
data is Base64 encoded
{
"version":{
"protocol":70219,
"software":170003,
"agent":"/Dash Core:0.17.0.3/"
},
"time":{
"now":1627313884,
"offset":0,
"median":1627313175
},
"status":"READY",
"syncProgress":0.9999992137956843,
"chain":{
"name":"test",
"headersCount":544700,
"blocksCount":544700,
"bestBlockHash":<Buffer 00 00 01 9f 39 5a 78 7a fa a9 d3 5b 1d 30 1d 1c 37 2a 03 97 24 31 ee 8c 47 e2 b9 25 ca 5a a5 a0>,
"difficulty":0.001875704086679367,
"chainWork":<Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 2f 15 da 49 09 6b 68>,
"isSynced":true,
"syncProgress":0.9999992137956843
},
"masternode":{
"status":"READY",
"proTxHash":<Buffer a1 27 b0 f6 c4 db d2 66 a1 8f a2 fb 3b 6b b7 8f 5c 38 18 6c 48 10 f1 55 1e 49 eb 3c 68 09 d5 23>,
"posePenalty":0,
"isSynced":true,
"syncProgress":1
},
"network":{
"peersCount":145,
"fee":{
"relay":0.00001,
"incremental":0.00001
}
}
}
{
"version": {
"protocol": 70219,
"software": 170003,
"agent": "/Dash Core:0.17.0.3/"
},
"time": {
"now": 1626972817,
"median": 1626972367
},
"status": "READY",
"syncProgress": 0.9999999881972154,
"chain": {
"name": "test",
"headersCount": 542260,
"blocksCount": 542260,
"bestBlockHash": "AAABpMcUDETRYHpIpp7oIuSuCI2Ky0N+0XMlGZqoQXY=",
"difficulty": 0.001271379585851713,
"chainWork": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi8V1fYcn9E=",
"isSynced": true,
"syncProgress": 0.9999999881972154
},
"masternode": {
"status": "READY",
"proTxHash": "W+WigTimWKgCoehx17tKXooWfv/p5mW0ouyqVZ0Bc04=",
"isSynced": true,
"syncProgress": 1
},
"network": {
"peersCount": 177,
"fee": {
"relay": 1e-05,
"incremental": 1e-05
}
}
}
getBlock
Returns: A raw block
Parameters:
Name | Type | Required | Description |
---|---|---|---|
One of the following: | |||
hash | Bytes | No | Return the block matching the block hash provided |
height | Integer | No | Return the block matching the block height provided |
Example Request and Response
const DAPIClient = require('@dashevo/dapi-client');
const client = new DAPIClient({
seeds: [{
host: 'seed-1.testnet.networks.dash.org',
port: 3000,
}],
});
client.core.getBlockByHeight(1)
.then((response) => console.log(response.toString('hex')));
const {
v0: {
CorePromiseClient,
},
} = require('@dashevo/dapi-grpc');
const corePromiseClient = new CorePromiseClient('http://seed-1.testnet.networks.dash.org:3010');
corePromiseClient.client.getBlock({ height: 1 })
.then((response) => console.log(response.block.toString('hex')));
const {
v0: {
CorePromiseClient,
},
} = require('@dashevo/dapi-grpc');
const corePromiseClient = new CorePromiseClient('http://seed-1.testnet.networks.dash.org:3010');
corePromiseClient.client.getBlock({
hash: '0000047d24635e347be3aaaeb66c26be94901a2f962feccd4f95090191f208c1',
}).then((response) => {
console.log(response.block.toString('hex'));
});
grpcurl -plaintext -proto protos/core/v0/core.proto \
-d '{
"height":1
}' \
seed-1.testnet.networks.dash.org:3010 \
org.dash.platform.dapi.v0.Core/getBlock
Block Encoding
Note: The gRPCurl response block data is Base64 encoded
020000002cbcf83b62913d56f605c0e581a48872839428c92e5eb76cd7ad94bcaf0b00007f11dcce14075520e8f74cc4ddf092b4e26ebd23b8d8665a1ae5bfc41b58fdb4c3a95e53ffff0f1ef37a00000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0a510101062f503253482fffffffff0100743ba40b0000002321020131f38ae3eb0714531dbfc3f45491b4131d1211e3777177636388bb5a74c3e4ac00000000
{
"block": "AgAAACy8+DtikT1W9gXA5YGkiHKDlCjJLl63bNetlLyvCwAAfxHczhQHVSDo90zE3fCStOJuvSO42GZaGuW/xBtY/bTDqV5T//8PHvN6AAABAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8KUQEBBi9QMlNIL/////8BAHQ7pAsAAAAjIQIBMfOK4+sHFFMdv8P0VJG0Ex0SEeN3cXdjY4i7WnTD5KwAAAAA"
}
getTransaction
Updated in Dash Platform 0.20.0
Dash Platform 0.20.0 added block hash, height, confirmation count, InstantSend lock status, and ChainLock status to the
getTransaction
response.
Returns: A raw transaction
Parameters:
Name | Type | Required | Description |
---|---|---|---|
id | String | Yes | A transaction id (TXID) |
Example Request and Response
const DAPIClient = require('@dashevo/dapi-client');
const client = new DAPIClient({
seeds: [{
host: 'seed-1.testnet.networks.dash.org',
port: 3000,
}],
});
const txid = '4004d3f9f1b688f2babb1f98ea48e1472be51e29712f942fc379c6e996cdd308';
client.core.getTransaction(txid)
.then((response) => console.dir(response, { length: 0 }));
const {
v0: {
CorePromiseClient,
},
} = require('@dashevo/dapi-grpc');
const corePromiseClient = new CorePromiseClient('http://seed-1.testnet.networks.dash.org:3010');
const txid = '4004d3f9f1b688f2babb1f98ea48e1472be51e29712f942fc379c6e996cdd308';
corePromiseClient.client.getTransaction({ id: txid })
.then((response) => console.dir(response, { length: 0 }));
grpcurl -plaintext -proto protos/core/v0/core.proto \
-d '{
"id":"4004d3f9f1b688f2babb1f98ea48e1472be51e29712f942fc379c6e996cdd308"
}' \
seed-1.testnet.networks.dash.org:3010 \
org.dash.platform.dapi.v0.Core/getTransaction
Transaction Encoding
Note: The gRPCurl response
transaction
andblockHash
data are Base64 encoded
GetTransactionResponse {
transaction: Buffer(196) [Uint8Array] [
3, 0, 5, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 255, 6, 3, 194, 90, 6, 1, 9,
255, 255, 255, 255, 2, 238, 252, 207, 49, 0, 0, 0,
0, 25, 118, 169, 20, 126, 178, 93, 197, 175, 71, 45,
107, 241, 154, 135, 122, 150, 240, 167, 7, 194, 198, 27,
118, 136, 172, 101, 251, 183, 74, 0, 0, 0, 0, 25,
118, 169, 20, 30,
... 96 more items
],
blockHash: Buffer(32) [Uint8Array] [
0, 0, 2, 9, 133, 199, 245, 83,
191, 120, 191, 203, 109, 166, 9, 115,
193, 152, 249, 11, 7, 245, 126, 31,
55, 65, 10, 150, 205, 150, 131, 213
],
height: 416450,
confirmations: 128257,
instantLocked: false,
chainLocked: true
}
{
"transaction": "AwAFAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8GA8JaBgEJ/////wLu/M8xAAAAABl2qRR+sl3Fr0cta/Gah3qW8KcHwsYbdoisZfu3SgAAAAAZdqkUHsXGbpeJxlWuBo01CItAczRf4LCIrAAAAABGAgDCWgYA3zSmucmdu7+CaY+6n4aGHySJHhbAxeiB3gNMGSIgYA1c6q3De0wxbi7HpAf4g4BgSUqhmkAxVflcQyddo+2zGA==",
"blockHash": "AAACCYXH9VO/eL/LbaYJc8GY+QsH9X4fN0EKls2Wg9U=",
"height": 416450,
"confirmations": 125820,
"isChainLocked": true
}
subscribeToTransactionsWithProofs
Returns: streams the requested transaction information
Parameters:
Name | Type | Required | Description |
---|---|---|---|
bloom_filter.v_data | Bytes | Yes | The filter itself is simply a bit field of arbitrary byte-aligned size. The maximum size is 36,000 bytes |
bloom_filter.n_hash_funcs | Integer | Yes | The number of hash functions to use in this filter. The maximum value allowed in this field is 50 |
bloom_filter.n_tweak | Integer | Yes | A random value to add to the seed value in the hash function used by the bloom filter |
bloom_filter.n_flags | Integer | Yes | A set of flags that control how matched items are added to the filter |
---------- | |||
One of the following: | |||
from_block_hash | Bytes | No | Return records beginning with the block hash provided |
from_block_height | Integer | No | Return records beginning with the block height provided |
---------- | |||
count | Integer | No | Number of blocks to sync. If set to 0 syncing is continuously sends new data as well (default: 0) |
send_transaction_hashes * | Boolean | No |
Example Request and Response
grpcurl -proto protos/core/v0/core.proto -plaintext \
-d '{
"from_block_height": 1,
"count": 1,
"bloom_filter": {
"n_hash_funcs": 11,
"v_data": "",
"n_tweak": 0,
"n_flags": 0
}
}' \
seed-1.testnet.networks.dash.org:3010 \
org.dash.platform.dapi.v0.Core/subscribeToTransactionsWithProofs
Note: The gRPCurl response
transactions
andrawMerkleBlock
data is Base64 encoded
{
"rawTransactions": {
"transactions": [
"AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8KUQEBBi9QMlNIL/////8BAHQ7pAsAAAAjIQIBMfOK4+sHFFMdv8P0VJG0Ex0SEeN3cXdjY4i7WnTD5KwAAAAA"
]
}
}
{
"rawMerkleBlock": "AgAAACy8+DtikT1W9gXA5YGkiHKDlCjJLl63bNetlLyvCwAAfxHczhQHVSDo90zE3fCStOJuvSO42GZaGuW/xBtY/bTDqV5T//8PHvN6AAABAAAAAX8R3M4UB1Ug6PdMxN3wkrTibr0juNhmWhrlv8QbWP20AQE="
}
Deprecated Endpoints
There are no recently deprecated endpoint, but the previous version of documentation can be viewed here.
Code Reference
Implementation details related to the information on this page can be found in:
- The DAPI repository
lib/grpcServer/handlers/core
folder - The DAPI-gRPC repository
protos
folder
Updated over 3 years ago