mirror of
https://github.com/aljazceru/cyphernode.git
synced 2026-01-31 10:14:35 +01:00
Schema in README, added broker and notifier tests
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# cyphernode
|
||||
|
||||
Modular Bitcoin full-node microservices API server architecture and utilities toolkit to build scalable, secure and featureful apps and services without trusted third parties.
|
||||
Modular Bitcoin full-node microservices API server architecture and utilities toolkit to build scalable, secure and featureful apps and services without trusted third parties.
|
||||
|
||||
# What is cyphernode?
|
||||
|
||||
@@ -14,9 +14,11 @@ It is currently in production by Bylls.com, Canada's first and largest Bitcoin p
|
||||
|
||||
The project is in **heavy development** - we are currently looking for reviews, new features, user feedback and contributors to our roadmap.
|
||||
|
||||

|
||||
|
||||
# Low requirements, efficient use of resources
|
||||
|
||||
Cyphernode is designed to be deployed on virtual machines with launch scripts, but with efficiency and minimalism in mind so that it can also run on multiple Rasberry Pi with very low computing ressources (and extremely low if installing pre-synchronized blockchain and pruned). Because of the modular architecture, heavier modules like blockchain indexers are optional (and not needed for most commercial use-cases).
|
||||
Cyphernode is designed to be deployed on virtual machines with launch scripts, but with efficiency and minimalism in mind so that it can also run on multiple Rasberry Pi with very low computing ressources (and extremely low if installing pre-synchronized blockchain and pruned). Because of the modular architecture, heavier modules like blockchain indexers are optional (and not needed for most commercial use-cases).
|
||||
|
||||
* For a full-node and all modules:
|
||||
* 350 GB of storage, 2GB of RAM.
|
||||
|
||||
BIN
doc/CN-Arch-0.2.1.jpg
Normal file
BIN
doc/CN-Arch-0.2.1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
@@ -33,6 +33,9 @@ services:
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
# deploy:
|
||||
# placement:
|
||||
# constraints: [node.hostname==dev]
|
||||
volumes:
|
||||
- "/var/run/docker.sock:/var/run/docker.sock"
|
||||
- "<%= traefik_datapath%>/traefik.toml:/traefik.toml"
|
||||
@@ -160,6 +163,9 @@ services:
|
||||
ports:
|
||||
- "<%= (net === 'mainnet')?'8332:8332':'18332:18332' %>"
|
||||
<% } %>
|
||||
# deploy:
|
||||
# placement:
|
||||
# constraints: [node.hostname==dev]
|
||||
volumes:
|
||||
- "<%= bitcoin_datapath %>:/.bitcoin"
|
||||
networks:
|
||||
@@ -172,9 +178,6 @@ services:
|
||||
# deploy:
|
||||
# placement:
|
||||
# constraints: [node.hostname==dev]
|
||||
# ports:
|
||||
# - "1883:1883"
|
||||
# - "9001:9001"
|
||||
networks:
|
||||
- cyphernodenet
|
||||
restart: always
|
||||
|
||||
@@ -83,6 +83,26 @@ checkpycoin() {
|
||||
return 0
|
||||
}
|
||||
|
||||
checkbroker() {
|
||||
echo -en "\r\n\e[1;36mTesting Broker... " > /dev/console
|
||||
local rc
|
||||
|
||||
|
||||
echo -e "\e[1;36mBroker rocks!" > /dev/console
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
checknotifier() {
|
||||
echo -en "\r\n\e[1;36mTesting Notifier... " > /dev/console
|
||||
local rc
|
||||
|
||||
|
||||
echo -e "\e[1;36mNotifier rocks!" > /dev/console
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
checkots() {
|
||||
echo -en "\r\n\e[1;36mTesting OTSclient... " > /dev/console
|
||||
local rc
|
||||
@@ -133,12 +153,12 @@ checkservice() {
|
||||
while :
|
||||
do
|
||||
outcome=0
|
||||
for container in gatekeeper proxy proxycron pycoin <%= (features.indexOf('otsclient') != -1)?'otsclient ':'' %>bitcoin <%= (features.indexOf('lightning') != -1)?'lightning ':'' %>; do
|
||||
for container in gatekeeper proxy proxycron broker notifier pycoin <%= (features.indexOf('otsclient') != -1)?'otsclient ':'' %>bitcoin <%= (features.indexOf('lightning') != -1)?'lightning ':'' %>; do
|
||||
echo -e " \e[0;32mVerifying \e[0;33m${container}\e[0;32m..." > /dev/console
|
||||
(ping -c 10 ${container} 2> /dev/null | grep "0% packet loss" > /dev/null) &
|
||||
eval ${container}=$!
|
||||
done
|
||||
for container in gatekeeper proxy proxycron pycoin <%= (features.indexOf('otsclient') != -1)?'otsclient ':'' %>bitcoin <%= (features.indexOf('lightning') != -1)?'lightning ':'' %>; do
|
||||
for container in gatekeeper proxy proxycron broker notifier pycoin <%= (features.indexOf('otsclient') != -1)?'otsclient ':'' %>bitcoin <%= (features.indexOf('lightning') != -1)?'lightning ':'' %>; do
|
||||
eval wait '$'${container} ; returncode=$? ; outcome=$((${outcome} + ${returncode}))
|
||||
eval c_${container}=${returncode}
|
||||
done
|
||||
@@ -160,7 +180,7 @@ checkservice() {
|
||||
# { "name": "bitcoin", "active":true },
|
||||
# { "name": "lightning", "active":true },
|
||||
# ]
|
||||
for container in gatekeeper proxy proxycron pycoin <%= (features.indexOf('otsclient') != -1)?'otsclient ':'' %>bitcoin <%= (features.indexOf('lightning') != -1)?'lightning ':'' %>; do
|
||||
for container in gatekeeper proxy proxycron broker notifier pycoin <%= (features.indexOf('otsclient') != -1)?'otsclient ':'' %>bitcoin <%= (features.indexOf('lightning') != -1)?'lightning ':'' %>; do
|
||||
[ -n "${result}" ] && result="${result},"
|
||||
result="${result}{\"name\":\"${container}\",\"active\":"
|
||||
eval "returncode=\$c_${container}"
|
||||
@@ -279,6 +299,28 @@ fi
|
||||
finalreturncode=$((${returncode} | ${finalreturncode}))
|
||||
result="${result}$(feature_status ${returncode} 'Bitcoin error!')}"
|
||||
|
||||
result="${result},{\"coreFeature\":true, \"name\":\"broker\",\"working\":"
|
||||
status=$(echo "{${containers}}" | jq ".containers[] | select(.name == \"broker\") | .active")
|
||||
if [[ "${brokenproxy}" != "true" && "${status}" = "true" ]]; then
|
||||
timeout_feature checkbroker
|
||||
returncode=$?
|
||||
else
|
||||
returncode=1
|
||||
fi
|
||||
finalreturncode=$((${returncode} | ${finalreturncode}))
|
||||
result="${result}$(feature_status ${returncode} 'Broker error!')}"
|
||||
|
||||
result="${result},{\"coreFeature\":true, \"name\":\"notifier\",\"working\":"
|
||||
status=$(echo "{${containers}}" | jq ".containers[] | select(.name == \"notifier\") | .active")
|
||||
if [[ "${brokenproxy}" != "true" && "${status}" = "true" ]]; then
|
||||
timeout_feature checknotifier
|
||||
returncode=$?
|
||||
else
|
||||
returncode=1
|
||||
fi
|
||||
finalreturncode=$((${returncode} | ${finalreturncode}))
|
||||
result="${result}$(feature_status ${returncode} 'Notifier error!')}"
|
||||
|
||||
result="${result},{\"coreFeature\":true, \"name\":\"pycoin\",\"working\":"
|
||||
status=$(echo "{${containers}}" | jq ".containers[] | select(.name == \"pycoin\") | .active")
|
||||
if [[ "${brokenproxy}" != "true" && "${status}" = "true" ]]; then
|
||||
|
||||
Reference in New Issue
Block a user