Guides
Dash CoreDash PlatformDash.orgDash User DocsLog In
These docs are for v0.17.0. Click to read the latest docs for v0.25-redirect.

Platform Endpoints

Detailed platform 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

broadcastStateTransition

Broadcasts a state transition to the platform via DAPI to make a change to layer 2 data.

Returns: Nothing or error
Parameters:

NameTypeRequiredDescription
state_transitionBytesYesA state transition

Example Request and Response

# Submit an identity create State Transition
# `state_transition` must be represented in base64
grpcurl -proto protos/platform/v0/platform.proto -plaintext \
  -d '{
    "state_transition":"pWR0eXBlAmlzaWduYXR1cmV4WEg3TWhFWDQ0Z3JzMVIwTE9XTU5IZjAxWFNpYVFQcUlVZ1JLRXQyMkxHVERsUlUrZ1BwQUlUZk5JUmhXd3IvYTVHd0lzWm1idGdYVVFxcVhjbW9lQWtUOD1qcHVibGljS2V5c4GkYmlkAGRkYXRheCxBdzh2UmYxeFFCTlVLbzNiY2llaHlaR2NhM0hBSThkY0ZvVWJTK3hLb0lITmR0eXBlAGlpc0VuYWJsZWT1bmxvY2tlZE91dFBvaW50eDBLT1VUSHB5YnFPek9DNnhEVUhFWm9uc1lNSVpqcGppTHFZNnkxYmlWNWxRQUFBQUFvcHJvdG9jb2xWZXJzaW9uAA=="

    }' \
  seed-1.testnet.networks.dash.org:3010 \
  org.dash.platform.dapi.v0.Platform/broadcastStateTransition
const {
  v0: {
    PlatformPromiseClient,
    BroadcastStateTransitionRequest,
  },
} = require('@dashevo/dapi-grpc');
const DashPlatformProtocol = require('@dashevo/dpp');

const platformPromiseClient = new PlatformPromiseClient(
  'http://seed-1.testnet.networks.dash.org:3010',
);

const dpp = new DashPlatformProtocol();

// Data Contract Create State Transition (JSON)
const stateTransitionObject = {
  protocolVersion: 0,
  type: 0,
  signature: 'IAp3sn0tLA2FyxsWbEgrgIrjpNig0VdlgVHrBFiHtTvrAU7d7kkpQ0mUdK8PhMZjOKaepVOPRTDQgnHfVZ6HESA=',
  signaturePublicKeyId: 0,
  dataContract: {
    protocolVersion: 0,
    '$id': 'HvjAUGUHuVBWP7vXEWWmBSb4mTCoquhxenbziyGM14aF',
    '$schema': 'https://schema.dash.org/dpp-0-4-0/meta/data-contract',
    ownerId: '7NUbPf231ixt1kVBQsBvSMMBxd7AgPad8KtdtfFGhXDP',
    documents: {
      note: {
        properties: { message: { type: 'string' } },
        additionalProperties: false
      }
    }
  },
  entropy: 'XyuDb+YebayRZT4vxQQnzP7htozTXYEHRnBFL9KQjDg='
};

// Convert signature and entropy to buffer
stateTransitionObject.signature = Buffer.from(stateTransitionObject.signature, 'base64');
stateTransitionObject.entropy = Buffer.from(stateTransitionObject.entropy, 'base64');

const broadcastStateTransitionRequest = new BroadcastStateTransitionRequest();

dpp.stateTransition.createFromObject(stateTransitionObject, { skipValidation: true })
  .then((stateTransition) => {
    console.log(stateTransition);
    broadcastStateTransitionRequest.setStateTransition(stateTransition.toBuffer());

    platformPromiseClient.broadcastStateTransition(broadcastStateTransitionRequest)
      .then(() => console.log('State Transition broadcast successfully'))
      .catch((e) => {
        console.error(e);
        console.error(e.metadata);
      });
  })
  .catch((e) => console.error(e));

Response: No response except on error

getIdentity

Returns: Identity information for the requested identity
Parameters:

NameTypeRequiredDescription
idBytesYesAn identity id

Example Request and Response

const DAPIClient = require('@dashevo/dapi-client');
const Identifier = require('@dashevo/dpp/lib/Identifier');
const cbor = require('cbor');

const client = new DAPIClient();

const identityId = Identifier.from('BhC9M3fQHyUCyuxH4WHdhn1VGgJ4JTLmer8qmTTHkYTe');
client.platform.getIdentity(identityId).then((response) => {
  const identity = cbor.decode(response);
  console.log(identity);
});
const {
  v0: {
    PlatformPromiseClient,
  },
} = require('@dashevo/dapi-grpc');
const Identifier = require('@dashevo/dpp/lib/Identifier');
const cbor = require('cbor');

const platformPromiseClient = new PlatformPromiseClient(
  'http://seed-1.testnet.networks.dash.org:3010',
);

const id = Identifier.from('BhC9M3fQHyUCyuxH4WHdhn1VGgJ4JTLmer8qmTTHkYTe');
const idBuffer = Buffer.from(id);
const getIdentityRequest = new GetIdentityRequest();
getIdentityRequest.setId(idBuffer);

platformPromiseClient.getIdentity(getIdentityRequest)
  .then((response) => {
    const identityResponse = response.getIdentity();
    const identityBuffer = Buffer.from(identityResponse);
    console.log(cbor.decode(identityBuffer));
  })
  .catch((e) => console.error(e));
# `id` must be represented in base64
grpcurl -proto protos/platform/v0/platform.proto -plaintext \
  -d '{
    "id":"nuCzumg/s5LC1SplgbztDxV9AfZBr1wNklM4zK8xZ90="
    }' \
  seed-1.testnet.networks.dash.org:3010 \
  org.dash.platform.dapi.v0.Platform/getIdentity
{
  id: <Buffer 9e e0 b3 ba 68 3f b3 92 c2 d5 2a 65 81 bc ed 0f 15 7d 01 f6 41 af 5c 0d 92 53 38 cc af 31 67 dd>,
  balance: 10994307,
  revision: 0,
  publicKeys: [
    {
      id: 0,
      data: <Buffer 03 f5 a6 bf e2 e1 c4 08 d2 04 4d 7d 77 73 89 09 46 b0 52 26 0e 44 5e 47 0c 37 ad 65 bb d3 0e 04 10>,
      type: 0
    }
  ],
  protocolVersion: 0
}
{
  "identity": "pWJpZFggnuCzumg/s5LC1SplgbztDxV9AfZBr1wNklM4zK8xZ91nYmFsYW5jZRoAp7gPaHJldmlzaW9uAGpwdWJsaWNLZXlzgaNiaWQAZGRhdGFYIQP1pr/i4cQI0gRNfXdziQlGsFImDkReRww3rWW70w4EEGR0eXBlAG9wcm90b2NvbFZlcnNpb24A"
}

getIdentitiesByPublicKeyHashes

Returns: Identity information associated with the provided public key hashes
Parameters:

NameTypeRequiredDescription
public_key_hashesBytesYesPublic key hashes (double-sha256) of identity public keys

๐Ÿ“˜

Public key hash

Note: the hash must be done using all fields of the identity public key object - e.g.

{
  id: 0,
  type: 0,
  data: 'A/Wmv+LhxAjSBE19d3OJCUawUiYORF5HDDetZbvTDgQQ'
}

When using the js-dpp library, the hash can be accessed via the IdentityPublicKey object's hash method (e.g. identity.getPublicKeyById(0).hash()).

Example Request and Response

const DAPIClient = require('@dashevo/dapi-client');
const DashPlatformProtocol = require('@dashevo/dpp');

const client = new DAPIClient();
const dpp = new DashPlatformProtocol();

const publicKeyHash = 'afa1783993cb690ccd4ab53765589437ccca83e7';
const publicKeysBuffer = [Buffer.from(publicKeyHash, 'hex')];

client.platform.getIdentitiesByPublicKeyHashes(publicKeysBuffer)
  .then((response) => {
    const retrievedIdentity = dpp.identity.createFromBuffer(response[0]);
    console.log(retrievedIdentity.toJSON());
  });
const {
  v0: {
    PlatformPromiseClient,
    GetIdentitiesByPublicKeyHashesRequest,
  },
} = require('@dashevo/dapi-grpc');
const cbor = require('cbor');
const DashPlatformProtocol = require('@dashevo/dpp');

const dpp = new DashPlatformProtocol();
const platformPromiseClient = new PlatformPromiseClient(
  'http://seed-1.testnet.networks.dash.org:3010',
);

const publicKeyHash = 'afa1783993cb690ccd4ab53765589437ccca83e7';
const publicKeysBuffer = [Buffer.from(publicKeyHash, 'hex')];

const getIdentitiesByPublicKeyHashesRequest = new GetIdentitiesByPublicKeyHashesRequest();
getIdentitiesByPublicKeyHashesRequest.setPublicKeyHashesList(publicKeysBuffer);

platformPromiseClient.getIdentitiesByPublicKeyHashes(getIdentitiesByPublicKeyHashesRequest)
  .then((response) => {
    const identitiesResponse = response.getIdentitiesList();
    const identities = identitiesResponse
      .map((identity) => (identity.length > 0 ? cbor.decode(Buffer.from(identity)) : null));
    console.log(dpp.identity.createFromObject(identities[0]).toJSON());
  })
  .catch((e) => console.error(e));
# `public_key_hashes` must be represented in base64
grpcurl -proto protos/platform/v0/platform.proto -plaintext \
  -d '{
    "public_key_hashes":"r6F4OZPLaQzNSrU3ZViUN8zKg+c="
    }' \
  seed-1.testnet.networks.dash.org:3010 \
  org.dash.platform.dapi.v0.Platform/getIdentitiesByPublicKeyHashes
{
  protocolVersion: 0,
  id: 'BhC9M3fQHyUCyuxH4WHdhn1VGgJ4JTLmer8qmTTHkYTe',
  publicKeys: [
    {
      id: 0,
      type: 0,
      data: 'A/Wmv+LhxAjSBE19d3OJCUawUiYORF5HDDetZbvTDgQQ'
    }
  ],
  balance: 10991320,
  revision: 0
}
{
  "identities": [
    "pWJpZFggmxU33DGz26TMBLW0pjNE06+RWmmbfCrKbOXHXBFrPfZnYmFsYW5jZRoAp8IhaHJldmlzaW9uAGpwdWJsaWNLZXlzgaNiaWQAZGRhdGFYIQKqExozt8o2EV9+p4es4sdvNLHb+uSzmJt3l+UHScAFmWR0eXBlAG9wcm90b2NvbFZlcnNpb24A"
  ]
}

getIdentityIdsByPublicKeyHashes

Returns: Identity ID(s) associated with the provided public key hashes
Parameters:

NameTypeRequiredDescription
public_key_hashesBytesYesPublic key hash (double-sha256) of an identity's public key

๐Ÿ“˜

Public key hash

Note: the hash must be done using all fields of the identity public key object - e.g.

{
  id: 0,
  type: 0,
  data: 'A/Wmv+LhxAjSBE19d3OJCUawUiYORF5HDDetZbvTDgQQ'
}

When using the js-dpp library, the hash can be accessed via the IdentityPublicKey object's hash method (e.g. identity.getPublicKeyById(0).hash()).

Example Request and Response

const DAPIClient = require('@dashevo/dapi-client');
const Identifier = require('@dashevo/dpp/lib/Identifier');

const client = new DAPIClient();

// Get identity from hex public key hash
const publicKeyHash = 'afa1783993cb690ccd4ab53765589437ccca83e7';
const publicKeysBuffer = [Buffer.from(publicKeyHash, 'hex')];

client.platform.getIdentityIdsByPublicKeyHashes(publicKeysBuffer)
  .then((response) => {
    for (const r of response) {
      console.log(`Identity ID: ${Identifier.from(r).toString()}`);
    }
  });
const {
  v0: {
    PlatformPromiseClient,
    GetIdentityIdsByPublicKeyHashesRequest,
  },
} = require('@dashevo/dapi-grpc');
const Identifier = require('@dashevo/dpp/lib/Identifier');

const platformPromiseClient = new PlatformPromiseClient(
  'http://seed-1.testnet.networks.dash.org:3010',
);

const publicKeyHash = 'afa1783993cb690ccd4ab53765589437ccca83e7';
const publicKeysBuffer = [Buffer.from(publicKeyHash, 'hex')];

const getIdentityIdsByPublicKeyHashesRequest = new GetIdentityIdsByPublicKeyHashesRequest();
getIdentityIdsByPublicKeyHashesRequest.setPublicKeyHashesList(publicKeysBuffer);

platformPromiseClient.getIdentityIdsByPublicKeyHashes(getIdentityIdsByPublicKeyHashesRequest)
  .then((response) => {
    for (const r of response.getIdentityIdsList()) {
      const id = Buffer.from(r);
      console.log(`Identity ID: ${Identifier.from(id).toString()}`);
    }
  })
  .catch((e) => console.error(e));
# `public_key_hashes` must be represented in base64
grpcurl -proto protos/platform/v0/platform.proto -plaintext \
  -d '{
    "public_key_hashes":"r6F4OZPLaQzNSrU3ZViUN8zKg+c="
    }' \
  seed-1.testnet.networks.dash.org:3010 \
  org.dash.platform.dapi.v0.Platform/getIdentityIdsByPublicKeyHashes
Identity ID: Bbqt9aQgKGJeYeYvmKQUTSh1UbhGQV15sN5Jq7AjSGms
{
  "identityIds": [
    "mxU33DGz26TMBLW0pjNE06+RWmmbfCrKbOXHXBFrPfY="
  ]
}

getDataContract

Returns: Data Contract information for the requested data contract
Parameters:

NameTypeRequiredDescription
idBytesYesA data contract id

Example Request and Response

const DAPIClient = require('@dashevo/dapi-client');
const Identifier = require('@dashevo/dpp/lib/Identifier');
const cbor = require('cbor');

const client = new DAPIClient();

const contractId = Identifier.from('6Ti3c7nvD1gDf4gFi8a3FfZVhVLiRsGLnQ7nCAF74osi');
client.platform.getDataContract(contractId).then((response) => {
  const contract = cbor.decode(response);
  console.dir(contract, { depth:10 });
});
const {
  v0: {
    PlatformPromiseClient,
    GetDataContractRequest,
  },
} = require('@dashevo/dapi-grpc');
const Identifier = require('@dashevo/dpp/lib/Identifier');
const cbor = require('cbor');

const platformPromiseClient = new PlatformPromiseClient(
  'http://seed-1.testnet.networks.dash.org:3010',
);

const contractId = Identifier.from('6Ti3c7nvD1gDf4gFi8a3FfZVhVLiRsGLnQ7nCAF74osi');
const contractIdBuffer = Buffer.from(contractId);
const getDataContractRequest = new GetDataContractRequest();
getDataContractRequest.setId(contractIdBuffer);

platformPromiseClient.getDataContract(getDataContractRequest)
  .then((response) => {
    const contractResponse = response.getDataContract();
    const contractBuffer = Buffer.from(contractResponse);
    console.dir(cbor.decode(contractBuffer), { depth: 5 });
  })
  .catch((e) => console.error(e));
# `id` must be represented in base64
grpcurl -proto protos/platform/v0/platform.proto -plaintext \
  -d '{
    "id":"USHx/8H6lZvZGKbGltP9oW4QgnGP61q70JD+h8rb/E0="
    }' \
  seed-1.testnet.networks.dash.org:3010 \
  org.dash.platform.dapi.v0.Platform/getDataContract
{
  '$id': Buffer(32) [Uint8Array] [
     81,  33, 241, 255, 193, 250, 149,
    155, 217,  24, 166, 198, 150, 211,
    253, 161, 110,  16, 130, 113, 143,
    235,  90, 187, 208, 144, 254, 135,
    202, 219, 252,  77
  ],
  '$schema': 'https://schema.dash.org/dpp-0-4-0/meta/data-contract',
  ownerId: Buffer(32) [Uint8Array] [
    155,  21,  55, 220,  49, 179, 219, 164,
    204,   4, 181, 180, 166,  51,  68, 211,
    175, 145,  90, 105, 155, 124,  42, 202,
    108, 229, 199,  92,  17, 107,  61, 246
  ],
  documents: {
    note: {
      properties: { message: { type: 'string' } },
      additionalProperties: false
    }
  },
  protocolVersion: 0
}
{
  "dataContract": "pWMkaWRYIFEh8f/B+pWb2RimxpbT/aFuEIJxj+tau9CQ/ofK2/xNZyRzY2hlbWF4NGh0dHBzOi8vc2NoZW1hLmRhc2gub3JnL2RwcC0wLTQtMC9tZXRhL2RhdGEtY29udHJhY3Rnb3duZXJJZFggmxU33DGz26TMBLW0pjNE06+RWmmbfCrKbOXHXBFrPfZpZG9jdW1lbnRzoWRub3Rlompwcm9wZXJ0aWVzoWdtZXNzYWdloWR0eXBlZnN0cmluZ3RhZGRpdGlvbmFsUHJvcGVydGllc/RvcHJvdG9jb2xWZXJzaW9uAA=="
}

getDocuments

Returns: Document information for the requested document(s)
Parameters:

NameTypeRequiredDescription
data_contract_idBytesYesA data contract id
document_typeStringYesA document type defined by the data contract (e.g. preorder or domain for the DPNS contract)
where *BytesNoWhere clause to filter the results (must be CBOR encoded)
order_by *BytesNoSort records by the field(s) provided (must be CBOR encoded)
limitIntegerNoMaximum number of results to return
----------
One of the following:
start_atIntegerNoReturn records beginning with the index provided
start_afterIntegerNoReturn records beginning after the index provided

๐Ÿšง
  • Parameter constraints

The where, order_by, limit, start_at, and start_after parameters must comply with the limits defined on the Query Syntax page.

Additionally, note that where and order_by must be CBOR encoded.

Example Request and Response

const DAPIClient = require('@dashevo/dapi-client');
const Identifier = require('@dashevo/dpp/lib/Identifier');
const cbor = require('cbor');

const client = new DAPIClient();

const contractId = Identifier.from('6Ti3c7nvD1gDf4gFi8a3FfZVhVLiRsGLnQ7nCAF74osi');
client.platform.getDocuments(contractId, 'note', { limit: 10 }).then((response) => {
  for (const rawData of response) {
    console.log(cbor.decode(rawData));
  }
});
const {
  v0: {
    PlatformPromiseClient,
    GetDocumentsRequest,
  },
} = require('@dashevo/dapi-grpc');
const cbor = require('cbor');
const Identifier = require('@dashevo/dpp/lib/Identifier');

const platformPromiseClient = new PlatformPromiseClient(
  'http://seed-1.testnet.networks.dash.org:3010',
);

const contractId = Identifier.from('6Ti3c7nvD1gDf4gFi8a3FfZVhVLiRsGLnQ7nCAF74osi');
const contractIdBuffer = Buffer.from(contractId);
const getDocumentsRequest = new GetDocumentsRequest();
const type = 'note';
const limit = 10;

getDocumentsRequest.setDataContractId(contractIdBuffer);
getDocumentsRequest.setDocumentType(type);
// getDocumentsRequest.setWhere(whereSerialized);
// getDocumentsRequest.setOrderBy(orderBySerialized);
getDocumentsRequest.setLimit(limit);
// getDocumentsRequest.setStartAfter(startAfter);
// getDocumentsRequest.setStartAt(startAt);

platformPromiseClient.getDocuments(getDocumentsRequest)
  .then((response) => {
    for (const document of response.getDocumentsList()) {
      console.log(cbor.decode(Buffer.from(document)));
    }
  })
  .catch((e) => console.error(e));
# Request one DPNS document
# `id` must be represented in base64
grpcurl -proto protos/platform/v0/platform.proto -plaintext \
  -d '{
    "data_contract_id":"USHx/8H6lZvZGKbGltP9oW4QgnGP61q70JD+h8rb/E0=",
    "document_type":"note",
    "limit":10
    }' \
  seed-1.testnet.networks.dash.org:3010 \
  org.dash.platform.dapi.v0.Platform/getDocuments
{
  '$id': <Buffer ce 41 d0 51 36 0d 22 ee 58 ad 29 1b 94 bc ed 2c 43 a6 ce 3f d5 5b 9e cc ad 66 65 97 27 09 71 13>,
  '$type': 'note',
  message: 'Tutorial Test @ Wed, 30 Dec 2020 21:12:38 GMT',
  '$ownerId': <Buffer 9b 15 37 dc 31 b3 db a4 cc 04 b5 b4 a6 33 44 d3 af 91 5a 69 9b 7c 2a ca 6c e5 c7 5c 11 6b 3d f6>,
  '$revision': 1,
  '$dataContractId': <Buffer 51 21 f1 ff c1 fa 95 9b d9 18 a6 c6 96 d3 fd a1 6e 10 82 71 8f eb 5a bb d0 90 fe 87 ca db fc 4d>,
  '$protocolVersion': 0
}
{
  "documents": [
    "p2MkaWRYIM5B0FE2DSLuWK0pG5S87SxDps4/1VuezK1mZZcnCXETZSR0eXBlZG5vdGVnbWVzc2FnZXgtVHV0b3JpYWwgVGVzdCBAIFdlZCwgMzAgRGVjIDIwMjAgMjE6MTI6MzggR01UaCRvd25lcklkWCCbFTfcMbPbpMwEtbSmM0TTr5FaaZt8Ksps5cdcEWs99mkkcmV2aXNpb24BbyRkYXRhQ29udHJhY3RJZFggUSHx/8H6lZvZGKbGltP9oW4QgnGP61q70JD+h8rb/E1wJHByb3RvY29sVmVyc2lvbgA="
  ]
}

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: