Skip to content

Commit

Permalink
Merge pull request #966 from priyankub/integration
Browse files Browse the repository at this point in the history
Add support for Achi, and bump up greenbtc to enable v2 DB, and much faster performance
  • Loading branch information
guydavis authored Feb 16, 2024
2 parents e3e56af + 0a3213a commit af57d15
Show file tree
Hide file tree
Showing 14 changed files with 344 additions and 7 deletions.
51 changes: 51 additions & 0 deletions .github/workflows/develop-achi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: develop-achi

on:
push:
branches:
- 'develop'

jobs:
docker:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v4
with:
file: docker/dockerfile
context: .
platforms: linux/amd64
provenance: false
push: true
build-args: |
"UBUNTU_VER=focal"
"MACHINARIS_STREAM=develop"
"CHIADOG_BRANCH=dev"
"FDCLI_BRANCH=dev"
"ACHI_BRANCH=master"
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:develop
ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:develop
52 changes: 52 additions & 0 deletions .github/workflows/main-achi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: release-achi

on:
workflow_dispatch:
inputs:
version:
description: 'Release Version'

jobs:
docker:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v4
with:
file: docker/dockerfile
context: .
platforms: linux/amd64,linux/arm64
provenance: false
push: true
build-args: |
"UBUNTU_VER=focal"
"MACHINARIS_STREAM=latest"
"ACHI_BRANCH=master"
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:latest
${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:v${{ github.event.inputs.version }}
ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:latest
ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:v${{ github.event.inputs.version }}
50 changes: 50 additions & 0 deletions .github/workflows/test-achi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: test-achi

on:
push:
branches:
- 'integration'

jobs:
docker:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v4
with:
file: docker/dockerfile
context: .
platforms: linux/amd64,linux/arm64
provenance: false
push: true
build-args: |
"UBUNTU_VER=focal"
"MACHINARIS_STREAM=test"
"CHIADOG_BRANCH=dev"
"ACHI_BRANCH=master"
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:test
ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris-achi:test
2 changes: 1 addition & 1 deletion api/commands/chia_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
WALLET_SETTINGS_FILE = '/root/.chia/machinaris/config/wallet_settings.json'

# Blockchains which dropped compatibility with `show -c` commands around v1.6
BLOCKCHAINS_USING_PEER_CMD = ['btcgreen', 'cactus', 'chia', 'chinilla', 'flax', 'flora', 'gigahorse', 'hddcoin', 'littlelambocoin', 'maize', 'one', 'pipscoin', 'shibgreen', 'tad', 'wheat']
BLOCKCHAINS_USING_PEER_CMD = ['btcgreen', 'cactus', 'chia', 'chinilla', 'flax', 'flora', 'gigahorse', 'greenbtc', 'hddcoin', 'littlelambocoin', 'maize', 'one', 'pipscoin', 'shibgreen', 'tad', 'wheat']

def load_farm_summary(blockchain):
chia_binary = globals.get_blockchain_binary(blockchain)
Expand Down
9 changes: 8 additions & 1 deletion api/commands/rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@

blockchain = globals.enabled_blockchains()[0]

if blockchain == "apple":
if blockchain == "achi":
from achi.rpc.full_node_rpc_client import FullNodeRpcClient
from achi.rpc.farmer_rpc_client import FarmerRpcClient
from achi.rpc.wallet_rpc_client import WalletRpcClient
from achi.util.default_root import DEFAULT_ROOT_PATH
from achi.util.ints import uint16
from achi.util.config import load_config as load_fork_config
elif blockchain == "apple":
from apple.rpc.full_node_rpc_client import FullNodeRpcClient
from apple.rpc.farmer_rpc_client import FarmerRpcClient
from apple.rpc.wallet_rpc_client import WalletRpcClient
Expand Down
17 changes: 17 additions & 0 deletions common/config/blockchains.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
{
"achi": {
"name": "Achi",
"symbol": "ACH" ,
"binary": "/achi-blockchain/venv/bin/achi",
"network_path": "/root/.achi/mainnet",
"network_name": "mainnet",
"network_port": 9975,
"farmer_port": 9977,
"fullnode_rpc_port": 9965,
"worker_port": 8960,
"reward": 512.0,
"mojos_per_coin": 1000000000,
"blocks_per_day": 4608,
"git_url": "https://github.com/Achi-Coin/achi-blockchain",
"discord_url": "https://discord.gg/cnS7fUfwTq",
"website_url": "https://achicoin.org/"
},
"apple": {
"name": "Apple",
"symbol": "APPLE",
Expand Down
2 changes: 1 addition & 1 deletion common/config/globals.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ def get_alltheblocks_name(blockchain):
return blockchain

def legacy_blockchain(blockchain):
return blockchain in ['ballcoin', 'coffee', 'ecostake', 'greenbtc', 'gold', 'mint', 'nchain', 'petroleum', 'profit', 'silicoin', 'stor']
return blockchain in ['achi', 'ballcoin', 'coffee', 'ecostake', 'gold', 'mint', 'nchain', 'petroleum', 'profit', 'silicoin', 'stor']

last_mmx_reward = None
last_mmx_reward_load_time = None
Expand Down
4 changes: 3 additions & 1 deletion docker/dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ ARG FDCLI_BRANCH=master
ARG FORKTOOLS_BRANCH=main
ARG BLADEBIT_BRANCH=master

ARG ACHI_BRANCH
ARG APPLE_BRANCH
ARG BALLCOIN_BRANCH
ARG BPX_BRANCH
Expand Down Expand Up @@ -53,7 +54,8 @@ WORKDIR /chia-blockchain

# Install specific blockchain fork (based on branch enabled) + tools that depend on the fork
RUN \
/usr/bin/bash /machinaris/scripts/forks/apple_install.sh ${APPLE_BRANCH} \
/usr/bin/bash /machinaris/scripts/forks/achi_install.sh ${ACHI_BRANCH} \
&& /usr/bin/bash /machinaris/scripts/forks/apple_install.sh ${APPLE_BRANCH} \
&& /usr/bin/bash /machinaris/scripts/forks/ballcoin_install.sh ${BALLCOIN_BRANCH} \
&& /usr/bin/bash /machinaris/scripts/forks/bpx_install.sh ${BPX_BRANCH} \
&& /usr/bin/bash /machinaris/scripts/forks/btcgreen_install.sh ${BTCGREEN_BRANCH} \
Expand Down
4 changes: 2 additions & 2 deletions scripts/chiadog_setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ CHIADOG_BRANCH=$1

if [[ (${mode} =~ ^fullnode.* || ${mode} =~ "harvester") && ${blockchains} != 'mmx' ]]; then
if [[ ! -f /chiadog/main.py ]]; then
echo 'Installing Chiadog from https://github.com/guydavis/chiadog using branch: ${CHIADOG_BRANCH}'
echo 'Installing Chiadog from https://github.com/priyankub/chiadog using branch: ${CHIADOG_BRANCH}'
cd /
git clone --branch ${CHIADOG_BRANCH} https://github.com/guydavis/chiadog.git
git clone --branch ${CHIADOG_BRANCH} https://github.com/priyankub/chiadog.git
cd /chia-blockchain/
venv/bin/pip3 install -r /chiadog/requirements.txt
fi
Expand Down
26 changes: 26 additions & 0 deletions scripts/forks/achi_install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/env bash
#
# Installs Achi as per https://achicoin.org/achipedia/post-1/
#

ACHI_BRANCH=$1
# On 2024-02-08
HASH=e3ca475efb3d7267d3a2eedef8b4897d129aeb5d

if [ -z ${ACHI_BRANCH} ]; then
echo 'Skipping Achi install as not requested.'
else
git clone --branch ${ACHI_BRANCH} --recurse-submodules https://github.com/Achi-Coin/achi-blockchain.git /achi-blockchain
cd /achi-blockchain
git submodule update --init mozilla-ca
git checkout $HASH
chmod +x install.sh
/usr/bin/sh ./install.sh

if [ ! -d /chia-blockchain/venv ]; then
cd /
rmdir /chia-blockchain
ln -s /achi-blockchain /chia-blockchain
ln -s /achi-blockchain/venv/bin/achi /chia-blockchain/venv/bin/chia
fi
fi
116 changes: 116 additions & 0 deletions scripts/forks/achi_launch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#!/bin/env bash
#
# Initialize Achi service, depending on mode of system requested
#

cd /achi-blockchain

. ./activate

# Only the /root/.chia folder is volume-mounted so store achi within
mkdir -p /root/.chia/achi
rm -f /root/.achi
ln -s /root/.chia/achi /root/.achi

if [[ "${blockchain_db_download}" == 'true' ]] \
&& [[ "${mode}" == 'fullnode' ]] \
&& [[ ! -f /root/.achi/mainnet/db/blockchain_v1_mainnet.sqlite ]] \
&& [[ ! -f /root/.achi/mainnet/db/blockchain_v2_mainnet.sqlite ]]; then
echo "Sorry, Achi does not offer a recent blockchain DB for download. Standard sync will happen over a few days."
echo "It is recommended to add some peer node connections on the Connections page of Machinaris."
fi

mkdir -p /root/.achi/mainnet/log
achi init >> /root/.achi/mainnet/log/init.log 2>&1

echo 'Configuring Achi...'
if [ -f /root/.achi/mainnet/config/config.yaml ]; then
sed -i 's/log_stdout: true/log_stdout: false/g' /root/.achi/mainnet/config/config.yaml
sed -i 's/log_level: WARNING/log_level: INFO/g' /root/.achi/mainnet/config/config.yaml
sed -i 's/localhost/127.0.0.1/g' /root/.achi/mainnet/config/config.yaml
fi

# Loop over provided list of key paths
for k in ${keys//:/ }; do
if [[ "${k}" == "persistent" ]]; then
echo "Not touching key directories."
elif [ -s ${k} ]; then
echo "Adding key at path: ${k}"
achi keys add -f ${k} > /dev/null
fi
done

# Loop over provided list of completed plot directories
IFS=':' read -r -a array <<< "$plots_dir"
joined=$(printf ", %s" "${array[@]}")
echo "Adding plot directories at: ${joined:1}"
for p in ${plots_dir//:/ }; do
achi plots add -d ${p}
done

chmod 755 -R /root/.achi/mainnet/config/ssl/ &> /dev/null
achi init --fix-ssl-permissions >/dev/null 2>&1

# Start services based on mode selected. Default is 'fullnode'
if [[ ${mode} =~ ^fullnode.* ]]; then
for k in ${keys//:/ }; do
while [[ "${k}" != "persistent" ]] && [[ ! -s ${k} ]]; do
echo 'Waiting for key to be created/imported into mnemonic.txt. See: http://localhost:8926'
sleep 10 # Wait 10 seconds before checking for mnemonic.txt presence
if [ -s ${k} ]; then
achi keys add -f ${k}
sleep 10
fi
done
done
if [ -f /root/.chia/machinaris/config/wallet_settings.json ]; then
achi start farmer-no-wallet
else
achi start farmer
fi
if [[ ${mode} =~ .*timelord$ ]]; then
if [ ! -f vdf_bench ]; then
echo "Building timelord binaries..."
apt-get update > /tmp/timelord_build.sh 2>&1
apt-get install -y libgmp-dev libboost-python-dev libboost-system-dev >> /tmp/timelord_build.sh 2>&1
BUILD_VDF_CLIENT=Y BUILD_VDF_BENCH=Y /usr/bin/sh ./install-timelord.sh >> /tmp/timelord_build.sh 2>&1
fi
achi start timelord-only
fi
elif [[ ${mode} =~ ^farmer.* ]]; then
if [ ! -f ~/.achi/mainnet/config/ssl/wallet/public_wallet.key ]; then
echo "No wallet key found, so not starting farming services. Please add your Chia mnemonic.txt to the ~/.machinaris/ folder and restart."
else
achi start farmer-only
fi
elif [[ ${mode} =~ ^harvester.* ]]; then
if [[ -z ${farmer_address} || -z ${farmer_port} ]]; then
echo "A farmer peer address and port are required."
exit
else
if [ ! -f /root/.achi/farmer_ca/private_ca.crt ]; then
mkdir -p /root/.achi/farmer_ca
response=$(curl --write-out '%{http_code}' --silent http://${farmer_address}:8960/certificates/?type=achi --output /tmp/certs.zip)
if [ $response == '200' ]; then
unzip /tmp/certs.zip -d /root/.achi/farmer_ca
else
echo "Certificates response of ${response} from http://${farmer_address}:8960/certificates/?type=achi. Is the fork's fullnode container running?"
fi
rm -f /tmp/certs.zip
fi
if [[ -f /root/.achi/farmer_ca/private_ca.crt ]] && [[ ! ${keys} == "persistent" ]]; then
achi init -c /root/.achi/farmer_ca 2>&1 > /root/.achi/mainnet/log/init.log
chmod 755 -R /root/.achi/mainnet/config/ssl/ &> /dev/null
achi init --fix-ssl-permissions >/dev/null 2>&1
else
echo "Did not find your farmer's certificates within /root/.achi/farmer_ca."
echo "See: https://github.com/guydavis/machinaris/wiki/Workers#harvester"
fi
echo "Configuring farmer peer at ${farmer_address}:${farmer_port}"
achi configure --set-farmer-peer ${farmer_address}:${farmer_port} 2>&1 >> /root/.achi/mainnet/log/init.log
achi configure --enable-upnp false 2>&1 >> /root/.achi/mainnet/log/init.log
achi start harvester -r
fi
elif [[ ${mode} == 'plotter' ]]; then
echo "Starting in Plotter-only mode. Run Plotman from either CLI or WebUI."
fi
2 changes: 1 addition & 1 deletion scripts/forks/greenbtc_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

GREENBTC_BRANCH=$1
# On 2023-01-02
HASH=e14bc12696af1cbcdf89a3e7bea0cdb1dd0e89ad
HASH=200816a51c24375fadcbcd25a0b1cb7549f61c77

if [ -z ${GREENBTC_BRANCH} ]; then
echo 'Skipping GreenBTC install as not requested.'
Expand Down
Loading

0 comments on commit af57d15

Please sign in to comment.