diff --git a/README.md b/README.md index bbd8233f3..ee9ebf776 100644 --- a/README.md +++ b/README.md @@ -167,6 +167,8 @@ The Travis CI system makes sure that every pull request is built, and that unit Testnet is maintained for testing purposes and can be accessed using the command `./lbrycrdd -testnet`. If you would like to obtain testnet credits, please contact brannon@lbry.com or grin@lbry.com . +It is easy to solo mine on testnet. (It's easy on mainnet too, but much harder to win.) For instructions see https://github.com/lbryio/sgminer-gm and https://github.com/lbryio/lbrycrd/tree/master/contrib/mining + ## License This project is MIT licensed. For the full license, see [LICENSE](LICENSE). diff --git a/contrib/mining/README.md b/contrib/mining/README.md new file mode 100644 index 000000000..cace968db --- /dev/null +++ b/contrib/mining/README.md @@ -0,0 +1,56 @@ +## Stratum Server Instructions +In simple terms, the stratum protocol is a protocol to distribute crypto mining work to multiple miners. Mining pools typically run a stratum endpoint that the various miners communicate with. +Please refer to other web sources for more information about mining pools or the stratum protocol. + +When mining LBC, you can solo mine directly to an instance of a full node (using the node's wallet). Or you can mine as part of a pool. +You can host your own pool or use one of the many hosted LBC pools. See https://miningpoolstats.stream/lbry + +This document refers to Yiimp, a derivative of Yaamp, as found here: https://github.com/tpruvot/yiimp.git . +Please refer to the instructions there as well. Yiimp has supported LBRY mining for several years. + +Yiimp consists of two pieces: the web GUI for pool management (written in PHP) and the Stratum server (written in C++). The two communicate via polling a MySQL database (or MariaDB). +The web GUI and configuration of the pooling rewards, fees, etc. are out of scope here. + +To help you with running Yiimp, we have created two docker images: one for the DB and one for the Yiimp Stratum Server. (See the subfolders.) +Use of the Docker images is optional; you can refer to other Yiimp and MySQL documentation for running it without Docker. +If you are using your own database instance, you will need to import the Yiimp SQL files to establish the yaamp database. +See https://github.com/tpruvot/yiimp/tree/next/sql . + +### Sample Usage Steps: + +#### 1. Run the full lbrycrd node: +``` +./lbrycrdd -testnet -rpcuser=ruser -rpcpassword=rpswd -deprecatedrpc=validateaddress -deprecatedrpc=accounts -daemon +``` +The included deprecated RPCs are required for compatibility with Yiimp. +It will need to be caught up to the current block before it is ready. +Remove `-testnet` for the real deal. +#### 2. Run and initialize the datatabase: +``` +docker run -d -e MYSQL_ROOT_PASSWORD=patofpaq -e MYSQL_DATABASE=yaamp --network host --name db lbry/yiimp_db + +docker exec -it db mysql -uroot -ppatofpaq +use yaamp; +delete from coins; +insert into coins(name, symbol, symbol2, algo, enable, auto_ready, rpcuser, rpcpasswd, rpchost, rpcport, rpccurl, rpcencoding, hasgetinfo, hassubmitblock, usememorypool, usesegwit, auxpow) + values('Local LBRY Instance', 'LBC', 'LBC', 'lbry', 1, 1, 'ruser', 'rpswd', '127.0.0.1', 19245, 1, 'utf-8', 0, 1, 0, 0, 0); +exit +``` +Use port 19245 for testnet, port 9245 for main. +#### 3. Run the stratum server: +``` +docker run --network host -d lbry/yiimp_stratum +``` +Alternatively, to get more output or see how its called directly: +``` +docker run --network host -it lbry/yiimp_stratum bash +cat config/lbry.conf +./stratum config/lbry +``` + +#### 4. Connect sgminer to it: +``` +sgminer -k lbry -o stratum+tcp://127.0.0.1:3334/ -D -T -O mn824Su1wX7ip8WcNYzXwwWqvBvkeWGRo6:x +``` +The username there is the account to receive payments from the pool. The password is unused. Tested with https://github.com/lbryio/sgminer-gm. +You can use whatever miner you prefer. \ No newline at end of file diff --git a/contrib/mining/yiimp_db/Dockerfile b/contrib/mining/yiimp_db/Dockerfile new file mode 100644 index 000000000..1a0c58848 --- /dev/null +++ b/contrib/mining/yiimp_db/Dockerfile @@ -0,0 +1,34 @@ +FROM mariadb:10.1-bionic +ARG REPOSITORY=https://github.com/tpruvot/yiimp.git + +ENV BUILD_DEPS \ + ca-certificates \ + git + +COPY init-db.sh /docker-entrypoint-initdb.d/ + +RUN apt-get update \ + && apt-get install -y --no-install-recommends ${BUILD_DEPS} \ + && git clone --progress ${REPOSITORY} ~/yiimp \ + && mkdir /tmp/sql \ + && mv ~/yiimp/sql/2016-04-03-yaamp.sql.gz /tmp/sql/0000-00-00-initial.sql.gz \ + && cp ~/yiimp/sql/*.sql /tmp/sql \ + && apt-get purge -y --auto-remove ${BUILD_DEPS} \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf ~/yiimp + +EXPOSE 3306 + +ARG VCS_REF +ARG BUILD_DATE +LABEL maintainer="blockchain@lbry.com" \ + decription="yiimp_db" \ + version="1.0" \ + org.label-schema.name="yiimp_db" \ + org.label-schema.description="Use this to run a compatible MariaDB for yiimp's stratum server" \ + org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url="https://github.com/lbryio/lbrycrd" \ + org.label-schema.schema-version="1.0.0-rc1" \ + org.label-schema.vendor="LBRY" \ + org.label-schema.docker.cmd="docker build --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` -t lbry/yiimp_db yiimp_db" diff --git a/contrib/mining/yiimp_db/init-db.sh b/contrib/mining/yiimp_db/init-db.sh new file mode 100644 index 000000000..179ae65dc --- /dev/null +++ b/contrib/mining/yiimp_db/init-db.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +for f in /tmp/sql/*; do + case "$f" in + *.sql) echo "$0: running $f"; "${mysql[@]}" --force < "$f"; echo ;; + *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;; + *) echo "$0: ignoring $f" ;; + esac + echo +done diff --git a/contrib/mining/yiimp_stratum/Dockerfile b/contrib/mining/yiimp_stratum/Dockerfile new file mode 100644 index 000000000..becf5d7b1 --- /dev/null +++ b/contrib/mining/yiimp_stratum/Dockerfile @@ -0,0 +1,54 @@ +FROM alpine:3.7 +ARG REPOSITORY=https://github.com/tpruvot/yiimp.git + +ENV BUILD_DEPS \ + build-base \ + git + +ENV RUN_DEPS \ + curl-dev \ + gmp-dev \ + mariadb-dev \ + libssh2-dev \ + curl + +RUN apk update \ + && apk add --no-cache ${BUILD_DEPS} \ + && apk add --no-cache ${RUN_DEPS} \ + && git clone --progress ${REPOSITORY} ~/yiimp \ + && sed -i 's/ulong/uint64_t/g' ~/yiimp/stratum/algos/rainforest.c \ + && find ~/yiimp -name '*akefile' -exec sed -i 's/-march=native//g' {} + \ + && make -C ~/yiimp/stratum/iniparser \ + && make -C ~/yiimp/stratum \ + && mkdir /var/stratum /var/stratum/config \ + && cp ~/yiimp/stratum/run.sh /var/stratum \ + && cp ~/yiimp/stratum/config/run.sh /var/stratum/config \ + && cp ~/yiimp/stratum/stratum /var/stratum \ + && cp ~/yiimp/stratum/config.sample/lbry.conf /var/stratum/config \ + && sed -i 's/yaamp.com/127.0.0.1/g' /var/stratum/config/lbry.conf \ + && sed -i 's/yaampdb/127.0.0.1/g' /var/stratum/config/lbry.conf \ + && rm -rf ~/yiimp \ + && apk del ${BUILD_DEPS} \ + && rm -rf /var/cache/apk/* + +RUN apk add --no-cache bash + +ARG VCS_REF +ARG BUILD_DATE +LABEL maintainer="blockchain@lbry.com" \ + decription="yiimp_stratum" \ + version="1.0" \ + org.label-schema.name="yiimp_stratum" \ + org.label-schema.description="Use this to run yiimp's stratum server in lbry mode" \ + org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url="https://github.com/lbryio/lbrycrd" \ + org.label-schema.schema-version="1.0.0-rc1" \ + org.label-schema.vendor="LBRY" \ + org.label-schema.docker.cmd="docker build --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` -t lbry/yiimp_stratum yiimp_stratum" + +WORKDIR /var/stratum + +CMD ["./stratum", "config/lbry"] + +EXPOSE 3334