Currently, there are two main ways to extract data from the Ergo blockchain
for applications, whether using node with custom scans (ergoutils, Ergo Auctions, SigmaUSD UI)
or explorer API (ErgoMixer).
However, both node and explorer APIs has limitations, also, can have problems under high load.
Thus this scanner is providing a way to scan and extract boxes and corresponding transactions block-by-block, with forks handling, database storage, configurable database schema and blockchain scanning rules.
For using docker in first step you should build image for this clone project and following commands:
cd scanner
sudo docker build -t scanner:latest .
After build image, you can run scanner with following command:
sudo docker run -d \
-p 127.0.0.1:9000:9000 \
-v /path/on/host/to/scanner/database:/home/ergo/database \
scanner:latest
Also for set custom configuration, use the below command:
sudo docker run -d \
-p 127.0.0.1:9000:9000 \
-v /path/on/host/to/scanner/database:/home/ergo/database \
-v /path/on/host/system/to/application.conf:/home/ergo/application.conf
scanner:latest
Both commands also would store database of scanner in /path/on/host/to/scanner/database
on host system, and open ports 9000
(REST API) locally on host system. The /path/on/host/to/scanner/database
directory must has 777
permissions or has owner/group numeric id equal to 9052
to be writable by container, as ergo
user inside Docker image.
The REST API to the scanner is described below.
GET /info
curl -i -H 'Accept: application/json' http://localhost:9000/info
HTTP/1.1 200 OK
Date: Thu, 24 Feb 2011 12:36:30 GMT
Content-Type: application/json
Content-Length: 62
{
"lastScannedHeight" : 554437,
"networkHeight" : 609429
}
POST /scan/register
curl -X POST 'localhost:9000/scan/register' -H 'Content-Type: application/json' -i --data-raw '{
"scanName": "ControlBox NFT",
"trackingRule": {
"predicate": "containsAsset",
"assetId": "72c3fbce3243d491d81eb564cdab1662b1f8d4c7e312b88870cec79b7cfd4321"
}
}'
HTTP/1.1 200 OK
Date: Thu, 24 Feb 2011 12:36:30 GMT
Content-Type: application/json
Content-Length: 19
{
"scanId" : 1
}
POST /scan/deregister
curl -X POST 'localhost:9000/scan/deregister' -H 'Content-Type: application/json' -i -d '{
"scanId": 1
}'
HTTP/1.1 200 OK
Date: Thu, 24 Feb 2011 12:36:30 GMT
Content-Type: application/json
Content-Length: 19
{
"scanId" : 1
}
GET /scan/listAll
curl -i -H 'Accept: application/json' http://localhost:9000/scan/listAll
HTTP/1.1 200 OK
Date: Thu, 24 Feb 2011 12:36:30 GMT
Content-Type: application/json
Content-Length: 229
[
{
"scanId" : 1,
"scanName" : "ControlBox NFT",
"trackingRule" : {
"predicate" : "containsAsset",
"assetId" : "72c3fbce3243d491d81eb564cdab1662b1f8d4c7e312b88870cec79b7cfd4321"
}
}
]
GET /scan/unspentBoxes/:scanId?minConfirmations=Int&minInclusionHeight=Int
curl -i -H 'Accept: application/json' http://localhost:9000/scan/unspentBoxes/1?minConfirmations=1000&minInclusionHeight=500000
HTTP/1.1 200 OK
Date: Thu, 24 Feb 2011 12:36:30 GMT
Content-Type: application/json
Content-Length: 589
[
{
"boxId" : "8bce771e080fbd054a70ec387106d4f6d9eeb4d9cd4b47e1014bda76619f8631",
"value" : 100000000,
"ergoTree" : "10010100d17300",
"assets" : [
{
"tokenId" : "72c3fbce3243d491d81eb564cdab1662b1f8d4c7e312b88870cec79b7cfd4321",
"amount" : 1
}
],
"creationHeight" : 553058,
"additionalRegisters" : {
"R4" : "058084af5f",
"R5" : "08cd0327e65711a59378c59359c3e1d0f7abe906479eccb76094e50fe79d743ccc15e6"
},
"transactionId" : "48b5858414bd3950b66036b2fed9ad4d2f3e8033d78056aab0affffbf0812ae6",
"index" : 0
}
]