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:latestAlso 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:latestBoth 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
}
]