The qubic-http
service acts as a bridge to the qubic network.
Some of its features include:
- Checking balances
- Broadcasting transactions
- Tick information
- Block height
go build -o "server" "./app/grpc_server"
qubic-http
requires an instance of qubic-nodes for fetching reliable node addresses.
The service can be configured either by CLI parameters or environment variables.
The current configuration will be printed at startup.
QUBIC_API_SIDECAR_SERVER_HTTPS_HOST: "0.0.0.0:8000"
QUBIC_API_SIDECAR_SERVER_GRPC_HOST: "0.0.0.0:8001"
QUBIC_API_SIDECAR_SERVER_MAX_TICK_FETCH_URL: "http://127.0.0.1:8080/max-tick"
QUBIC_API_SIDECAR_POOL_NODE_FETCHER_URL: "http://127.0.0.1:8080/status"
QUBIC_API_SIDECAR_SERVER_READ_TIMEOUT: (default: 5s)
QUBIC_API_SIDECAR_SERVER_WRITE_TIMEOUT: (default: 5s)
QUBIC_API_SIDECAR_SERVER_SHUTDOWN_TIMEOUT: (default: 5s)
QUBIC_API_SIDECAR_POOL_NODE_FETCHER_TIMEOUT: (default: 2s)
QUBIC_API_SIDECAR_POOL_INITIAL_CAP: (default: 5)
QUBIC_API_SIDECAR_POOL_MAX_IDLE: (default: 20)
QUBIC_API_SIDECAR_POOL_MAX_CAP: (default: 30)
QUBIC_API_SIDECAR_POOL_IDLE_TIMEOUT: (default: 15s)
A docker-compose.yml
file is provided in this repository. You can run it as-is using docker compose up -d
.
This will start a qubic-nodes
service alongside qubic-http
.
It may be necessary to configure
qubic-nodes
with an up-to-date list of peers if the service fails to start.
Setting up a qubic-nodes
instance is outside the scope of this documentation, but you can learn about it on thequbic-nodes
GitHub.
We assume that qubic-nodes
is running locally on port 8080.
Export the required environment variables:
export QUBIC_API_SIDECAR_SERVER_HTTPS_HOST="0.0.0.0:8000"
export QUBIC_API_SIDECAR_SERVER_GRPC_HOST="0.0.0.0:8001"
export QUBIC_API_SIDECAR_SERVER_MAX_TICK_FETCH_URL="http://127.0.0.1:8080/max-tick"
export QUBIC_API_SIDECAR_POOL_NODE_FETCHER_URL="http://127.0.0.1:8080/status"
You can now start the service:
./server
curl http://localhost:8000/tick-info
{
"tickInfo": {
"tick": 13692242,
"duration": 7,
"epoch": 107,
"initialTick": 13680000
}
}
curl http://localhost:8000/block-height
{
"blockHeight": {
"tick": 13692267,
"duration": 0,
"epoch": 107,
"initialTick": 13680000
}
}
curl http://localhost:8000/balances/PKXGRCNOEEDLEGTLAZOSXMEYZIEDLGMSPNTJJJBHIBJISHFFYBBFDVGHRJQF
{
"balance": {
"id": "PKXGRCNOEEDLEGTLAZOSXMEYZIEDLGMSPNTJJJBHIBJISHFFYBBFDVGHRJQF",
"balance": "0",
"validForTick": 13692275,
"latestIncomingTransferTick": 0,
"latestOutgoingTransferTick": 0
}
}
curl -X POST http://localhost:8000/broadcast-transaction -d '{"encodedTransaction": "..."}'
{
"peersBroadcasted": 3,
"encodedTransaction": "...",
"transactionId": "oxmqdbynwbisqcjgphyaexhlknmaanipiyxpulatkdjxpdqsqtiovjhcxqkd"
}
curl localhost:8000/assets/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB/issued
{
"issuedAssets": [
{
"data": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "RANDOM",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
},
"info": {
"tick": 14057739,
"universeIndex": 0
}
},
{
"data": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "QX",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
},
"info": {
"tick": 14057739,
"universeIndex": 0
}
},
{
"data": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "QTRY",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
},
"info": {
"tick": 14057739,
"universeIndex": 0
}
},
{
"data": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "QUTIL",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
},
"info": {
"tick": 14057739,
"universeIndex": 0
}
}
]
}
curl localhost:8000/assets/IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC/owned
{
"ownedAssets": [
{
"data": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 2,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 0,
"numberOfUnits": "2",
"issuedAsset": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "RANDOM",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
}
},
"info": {
"tick": 14057652,
"universeIndex": 0
}
},
{
"data": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 2,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 1,
"numberOfUnits": "1",
"issuedAsset": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "QX",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
}
},
"info": {
"tick": 14057652,
"universeIndex": 0
}
},
{
"data": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 2,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9284980,
"numberOfUnits": "186685601",
"issuedAsset": {
"issuerIdentity": "QWALLETSGQVAGBHUCVVXWZXMBKQBPQQSHRYKZGEJWFVNUFCEDDPRMKTAUVHA",
"type": 1,
"name": "QWALLET",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, -48, 0, -48, 35, 24, 21]
}
},
"info": {
"tick": 14057652,
"universeIndex": 0
}
},
{
"data": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 2,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 2741973,
"numberOfUnits": "10",
"issuedAsset": {
"issuerIdentity": "TFUYVBXYIYBVTEMJHAJGEJOOZHJBQFVQLTBBKMEHPEVIZFXZRPEYFUWGTIWG",
"type": 1,
"name": "QFT",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [84, 79, 75, 69, 78, 0, 0]
}
},
"info": {
"tick": 14057652,
"universeIndex": 0
}
}
]
}
curl localhost:8000/assets/IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC/possessed
{
"possessedAssets": [
{
"data": {
"possessorIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707976,
"numberOfUnits": "2",
"ownedAsset": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707976,
"numberOfUnits": "2",
"issuedAsset": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "RANDOM",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
}
}
},
"info": {
"tick": 14057759,
"universeIndex": 0
}
},
{
"data": {
"possessorIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707978,
"numberOfUnits": "1",
"ownedAsset": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707978,
"numberOfUnits": "1",
"issuedAsset": {
"issuerIdentity": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
"type": 1,
"name": "QX",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, 0, 0, 0, 0, 0, 0]
}
}
},
"info": {
"tick": 14057759,
"universeIndex": 0
}
},
{
"data": {
"possessorIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707980,
"numberOfUnits": "186685601",
"ownedAsset": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707980,
"numberOfUnits": "186685601",
"issuedAsset": {
"issuerIdentity": "QWALLETSGQVAGBHUCVVXWZXMBKQBPQQSHRYKZGEJWFVNUFCEDDPRMKTAUVHA",
"type": 1,
"name": "QWALLET",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [0, -48, 0, -48, 35, 24, 21]
}
}
},
"info": {
"tick": 14057759,
"universeIndex": 0
}
},
{
"data": {
"possessorIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707982,
"numberOfUnits": "10",
"ownedAsset": {
"ownerIdentity": "IGJQYTMFLVNIMEAKLANHKGNGZPFCFJGSMVOWMNGLWCZWKFHANHGCBYODMKBC",
"type": 3,
"padding": 0,
"managingContractIndex": 1,
"issuanceIndex": 9707982,
"numberOfUnits": "10",
"issuedAsset": {
"issuerIdentity": "TFUYVBXYIYBVTEMJHAJGEJOOZHJBQFVQLTBBKMEHPEVIZFXZRPEYFUWGTIWG",
"type": 1,
"name": "QFT",
"numberOfDecimalPlaces": 0,
"unitOfMeasurement": [84, 79, 75, 69, 78, 0, 0]
}
}
},
"info": {
"tick": 14057759,
"universeIndex": 0
}
}
]
}