Coder Social home page Coder Social logo

mining-pool's Introduction

Build

  1. install redis
  2. install alephium full node
  3. install node.js(>=14) and npm(>=8)

Or:

  1. deploy with Docker Compose

Run

configs explanation:

{
    "logPath": "./logs/",               // log path

    "connectionTimeout": 600,           // disconnect workers that haven't submitted shares for this many seconds
    "maxConnectionsFromSameIP": 10,     // limit number of connection from same IP address
    "whitelistIps": [],                 // whitelist IP address from 'maxConnectionsFromSameIP'
	
    "jobExpiryPeriod": 10,              // job expires after set period
	
    "banning": {
        "enabled": true,                // enabled by default
        "time": 600,                    // how many seconds to ban worker for
        "invalidPercent": 50,           // what percent of invalid shares triggers ban
        "checkThreshold": 500,          // perform check when this many shares have been submitted
        "purgeInterval": 300            // every this many seconds clear out the list of old bans
    },

    "diff1TargetNumZero": 30,           // diff1 target leading zero num
    "pool": {
        "port": 20032,                  // port which the server bind
        "diff": 64,                     // init difficulty
        "proxyProtocol": false,         // enable it to get real client IPs if you are behind a reverse proxy that uses Proxy Protocol v1  
        "varDiff": {
            "minDiff": 16,              // minimum difficulty
            "maxDiff": 4096,            // maximum difficulty
            "targetTime": 15,           // try to get 1 share per this many seconds
            "retargetTime": 90,         // check to see if we should retarget every this many seconds
            "variancePercent": 30       // allow time to very this % from target without retargeting
        }
    },

    "daemon": {
        "host": "127.0.0.1",            // alephium full node host
        "port": 12973,                  // alephium full node rest api port
        "apiKey": "xxx",                // alephium full node api key
        "minerApiPort": 10973           // alephium full node miner api port
    },

    "redis": {
        "host": "127.0.0.1",            // redis host
        "port": 6379                    // redis port
    },

    "withholdPercent": 0.005,           // coinbase reward withhold percent(0.5% by default), used for tx fee mainly
    "rewardEnabled": true,              // enabled by default
    "rewardInterval": 600,              // update miner balances every this many seconds
    "confirmationTime": 30600,          // 510m by default, you can decrease this if your payment addresses have enough balance

    "paymentEnabled": true,             // enabled by default
    "minPaymentCoins": "3.5",           // minimum number of coins that a miner must earn before sending payment
    "paymentInterval": 600,             // send payment every this many seconds
    "txConfirmations": {                // Check tx confirmations to remove/pay back balance after tx
        "chainConfirmations": 10,
        "fromGroupConfirmations": 5,
        "toGroupConfirmations": 5
    },

    "persistence": {                    // persistent shares and blocks
        "enabled": false,               // disabled by default
        "host": "127.0.0.1",            // postgresql ip
        "port": 5432,                   // postgresql port
        "user": "postgres",             // postgresql user
        "password": "postgres",         // postgresql password
        "database": "mining-pool"       // database name
    },
	
    "addresses": [],                    // 4 addresses(we have 4 groups) to where block rewards are given

    "wallet": {
        "name": "",                     // wallet name
        "password": "",                 // wallet password
        "mnemonicPassphrase": ""        // wallet mnemonic passphrase
    }
}

run:

npm install
npm run start

Docker:

The provided docker-compose file allows you to deploy Redis, Postgres and the Alephium mining pool in 2 simple steps:

Clone the repo and move to its folder:

git clone https://github.com/alephium/mining-pool.git && cd mining-pool
docker-compose up -d

(optional) Build different Docker image variants:

  1. From (modified) local sources:
docker build -t mining-pool:latest .
  1. From latest master branch code:
docker build -t mining-pool:latest https://github.com/alephium/mining-pool.git
  1. From latest release:
docker build -t mining-pool:latest -f Dockerfile-release .

The only prerequisites are a synced full node and Docker, and of course your own config file. For this kind of deployment the follliwng sections of the config file should be left unaltered:

    "redis": {
        "host": "redis",                // the "redis" host spawned by docker-compose
        "port": 6379                    // and its port
    },

    "persistence": {                    // persistent shares and blocks
        "enabled": false,               // disabled by default
        "host": "postgres",             // the "postgres" host spawned by docker-compose
        "port": 5432,                   // its port
        "user": "postgres",             // its user
        "password": "postgres",         // its password
        "database": "postgres"          // and its db name. All as defined in the Compose file.
    },

Lastly, for single-user setups these are suitable payout and reward settings:

    "pool": {
        "port": 20032,                  // port which the server binds to
        "diff": 8,                      // init difficulty

        "varDiff": {
            "minDiff": 1,               // minimum difficulty
            "maxDiff": 4096,            // maximum difficulty
            "targetTime": 10,           // try to get 1 share per this many seconds
            "retargetTime": 90,         // check to see if we should retarget every this many seconds
            "variancePercent": 30       // allow time to very this % from target without retargeting
        }
    },

    "withholdPercent": 0.005,           // Even for single-user pools, this is required to allow the pool to pay tx fees
    "rewardInterval": 600,              // This can be relaxed, but should still be lower than paymentInterval

    "minPaymentCoins": "10",            // Increases the min payout to 10 Alph
    "paymentInterval": 7200,            // Increased to 1 payment every 2 hours.

TLS configuration

...
    "pool": {
        "port": 20443,
        "tls": true,
        "privateKeyPath": "/path/to/pool.key",
        "publicCertPath": "/path/to/pool.pem",
        ...
    }

Generate a basic, self-signed TLS certificate

openssl req -newkey rsa:4096 \
            -x509 \
            -sha256 \
            -days 3650 \
            -nodes \
            -out pool.pem \
            -keyout pool.key

mining-pool's People

Contributors

aciddude avatar ahmedbodi avatar alex-oleshkevich avatar bart-is avatar bitbandi avatar bluecircle avatar bmatusiak avatar bolkin avatar bricecarpentier avatar chrisfranko avatar darcymei avatar dogui1718 avatar earlz avatar hashunlimited avatar jimmyhoffa avatar jonnybravo0311 avatar killerwhile avatar lbqds avatar lucasjones avatar mauroferra avatar mike8643 avatar minkcrypto avatar polarker avatar romanornr avatar stackout avatar suchpool avatar sven-hash avatar valera-rozuvan avatar vekexasia avatar zone117x avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.