Mining Mode

The Beam Node supports External Miner via Stratum Server API for mining Beam: The Beam Node provides built-in support for Stratum API integration with multiple external mining clients to a single node. Stratum clients can be run together with the internal Miner. For more detailed information, and how-to mine Beam, please see our Beam Mining guide.

Obtain your Miner Keys!

To ensure all the rewards you accrue mining Beam go directly to your wallet, you must obtain your secret miner_key. Your mining key is derived from your seed phrase. You can generate multiple mining keys for separate mining modes.

Conversely, to display your total mining rewards accrued to all the nodes on the Beam network, you must obtain an owner_key. Owner keys only identify the cumulative mining rewards earned by a user, regardless of the node used.

For more information on retrieving or displaying mining and owner keys, please see our Beam Mining guide_._

Mining Beam

Beam is a Mimblewimble implementation. We use classic Proof-of-Work (PoW) consensus.

Alike most cryptocurrencies, Beam relies on miners to add transactions to the blockchain. While all nodes in the Beam network confirm the validity of transactions, Beam counts on miners to take on the massive heavy lifting to guard the network.

We welcome everyone to join our mining community to support the network and earn Beam coins.

Mining algorithm

To secure the network, Beam uses the uses a modified version of the Equihash (150,5) proof-of-work mining algorithm. Miners and their mining rigs compete to produce a new block on the chain. The miner who completes the computation for each block earns a network standard block reward, including any transactions fees added to that block.

At Mainnet launch, the Equihash parameters were: n=150, k=5. In addition, we will introduce a slight change to the datapath to further reduce the chance of zero-day ASICs.

The minimal memory requirement for the GPU is 4 GB. The most up-to-date list of supported GPUs will be made available.

Block size and time

A Beam block will be generated approximately every minute and contain about 1000 transactions. Block size is roughly 1 MB.

Mining difficulty

One can define 'difficulty' as the inverse probability of a random solution being the correct one. Mining difficulty measures how many attempts, on average, it is required to find the necessary proof-of-work solution to mine a block and receive the mining reward. Thus, a difficulty of 100 means that (on average) one in 100 tries should produce a valid block.

In Proof of Work blockchains, the difficulty is a dynamic parameter, periodically retargeted to reflect the fluctuations in all the miners' total computational power while accounting for changes in the mining competition and improvements in mining technology.

The goal of updating the difficulty is to keep the average block time at a certain value. In Beam, the target block time is 60 seconds, which underpins a constant currency issuance and the transaction settlement time of the network.

Here's an example: let's assume we have 100 miners in our network, each attempting a different solution, finding one roughly every minute. Now 100 more miners enter, the hash rate of the network doubles, the solution on average reduces by half (30 seconds). If 200 more join, the time halves into 15 seconds, and so on.

Beam nodes attempt to mitigate that by increasing the difficulting of the proof-of-work algorithm as more miners join, reducing the difficulty as the number of miners decreases.

In Beam, the difficulty reassess with every block: the algorithm looks at the average time and the average difficulty of the last 1440 blocks. If the time required to mine the previous 1440 blocks is higher or lower than 24 hours, the problem retargets accordingly.

The detailed algorithm is outlined below:

  1. Review the last seven blocks, identifying the block with the median block time, this is the Window End block.
  2. Review blocks from 127 to 120 before the current block (seven blocks total), identifying the block with the median block time out of those, this is the Window Start block.
  3. Sum the difficulties of the blocks from Window Start to Window End; this is Delta Work.
  4. Calculate the time difference between Window Start and Window End blocks; this is Delta Time.
  5. Calculate the difficulty for next block as: NewDifficulty = (Delta Work / Delta Time) * 60 seconds.
  6. The Delta Time is bound by one and 4 hours; e.g., it is considered Delta Time if the difference is less than one hour. Same for differences more than 4 hours, preventing extreme changes in difficulty.

The above algorithm ensures that as the total solution power of the network fluctuates, the difficulty is gradually adjusted, ensuring the target block time.

Treasury

For the first five years of Beam's emission schedule, block rewards will allocate to the Beam Treasury (along with miners) for every block mined.

‌During year one, the Treasury receives 20 Beam coins per block. In years 2-5, 10 coins per block will go to the Treasury.

The purpose of the Treasury is to repay Beam investors, incentivize the core development team, but the most significant single beneficiary of the Treasury will be the Beam Foundation.

The distribution of the Treasury Coins will occur monthly in the following amounts:

  • Investors: 40%
  • Core Team: 40%
  • Beam Foundation: 20% (Biggest single beneficiary).

ASIC resistance

Beam plans to keep mining ASIC resistant through the first 18 months to establish decentralization by performing one hard fork after six months and then a second hard fork after 12 months of Beams emission. Each hard fork will tweak the mining algorithm, the modifications releasing several weeks prior.

Mining guide

See our mining guide for more information on how-to mine Beam coins.

Mining using external miner

This guide will walk you through organizing a mining rig using a stand-alone Beam node, Stratum server, and mining client.

Before using the external miner, please review the sample Mining Architecture below:

Mining usiex

Things to consider:

  • The Beam node should connect to a different node on the network via --peer parameter, e.g., --peer=3.0.115.1:8100 for TestNet 4.
  • The Beam node can run Stratum server adding --stratum_port parameter, e.g.,--stratum_port=10002.
  • The Beam node should have the mining_key and owner_key, so the mining rewards accumulated are transferred to a specific wallet, e.g., parameters --miner_key and --owner_key. Miner_key and Owner_key should be kept secret at all times.
  • Several Mining clients running on GPU rigs can connect to the same node.
  • The connection between the Mining Client and Beam node is encrypted with TLS. For TLS to work, you need to provide a certificate file and secret keys for it.
  • Mining Client and Beam Node should use the same API key.
  • Your wallet will earn mining rewards if:
    • It uses the exact wallet seed phrase associated with the original miner and owner keys.
    • The node connected has the--owner_keyparameter.

How to mine using an external miner

  1. Download the CLI Wallet (available on all platforms) from the Beam Website.
  2. Extract the CLI Wallet to any folder on your machine and title it wallet_folder.
  3. Launch the Command Line and change the directory to wallet_folder. Enter the following command:
    cd /wallet_folder
    
  4. If you want to create a new wallet (with a new seed phrase) run the following command:
    ./beam-wallet init
    

    If you have already created a wallet run the following command:
    ./beam-wallet restore --seed_phrase=<semicolon separated list of 12 seed phrase words>
    
  5. To export miner_key, enter the following command:
    ./beam-wallet export_miner_key --subkey=1
    

    Save the exported miner_key in a text_file for later.
    Running several mining nodes:
    If you want to run several mining nodes, enter the--export_miner_keycommand again with other subkeys, e.g., enter./beam-wallet export_miner_key --subkey=2for the second node. Enter./beam-wallet export_miner_key --subkey=3for the third node and so on.
    Your miner_keyshould be kept secret at all times.

6. Export the owner_key. Enter the following command:

./beam-wallet export_owner_key

Save the exported owner_key in a text_file for later.

7. Download the Beam node archive (available on all platforms) from the Beam Website.

8. Extract Beam Node to any folder on your machine and title it node_folder.

9. Create certificate and API key for the Stratum server.

Note: users interested in testing are welcome to download the sample certificate and API keys below.

Certificate and API keys

{% file src=".gitbook/assets/stratum.crt Stratum.crt {% endfile %}

{% file src=".gitbook/assets/stratum (2).key stratum.key {% endfile %}

{% file src=".gitbook/assets/stratum.api (1).keys stratum.api.keys {% endfile %}

The files currently contain one API key: aaaa1234. The --key=aaaa1234parameter is necessary to operate the miner client.

Users should save the API keys and certificate files to theirnode_folder.

Attention: for production setup please read the following section carefully, otherwise skip to step 10.

Beam node utilizes the Stratum protocol for connecting external miner clients. Clients open a TCP connection to the node through which they receive opportunities to mine blocks using the Equihash mining protocol.

Stratum server connections are protected using Transport Layer Security (TLS) protocol and require TLS certificates to function correctly. TLS certificates are available for purchase, and advanced users have the option to create self-signed certificates on their local machines; however, instructions for creating self-signed TLS certificates are outside the scope of this guide.

TLS protocols should be accompanied by two files: one for the certificate and one with the certificate secret key. For testing purposes, you can always use sample files provided in the note above.

In addition, users should create a file and title it stratum.api.keys. Each line of the text file will represent one API key (one row per API key). The miner client then uses these keys via the --key parameter.

If done correctly, it should produce three files:

  • stratum.crt: TLS certificate.
  • stratum.key: private key for TLS certificate.
  • stratum.api.keys: a text file with allowed API keys with each API key should be on a single row in a sequence of eight or more symbols.

All three files should be copied into the same folder. The path to this folder will be provided via --stratum_secrets_folder parameter. By default, the path points to the same node_folder.

The output to the node_foldershould resemble the following:

10. Launch a terminal window. Change the directory to the node_folder by entering the following:

cd /node_folder

11. Run Beam Node with the stratum server by entering the following command:

./beam-node
    --port=10001
    --peer=3.0.115.1:8100
    --stratum_port=10002
    --stratum_secrets_path=.
    --miner_key=<mining key you got in step 5 >
    --owner_key=<owner key you got in step 6>
    --pass=<your wallet password (not seed phrase) >

Note: the parameters above example are ideal for testing purposes. Users can always change the parameters if necessary. Users also have the option of plugging in custom parameters in theirbeam-node.cfgfile in a text editor instead of the command line.

Read more about each parameter in the table below:

Node parameters

portThe port to start the server on.
stratum_portThe stratum_port the server is scanning for incoming connections.
peer

A comma-separated list of peer ip:port (minimum of one peer). Peershould be a machine on the network you wish to connect to e.g., Testnet 4.

A list of available peers is published on the downloads page of the main Beam website.

stratum_secrets_pathPath to a folder which holds TLS Certificate and API keys files described above.
miner_keyMiner_key, exported via CLI wallet.
owner_keyOwner_key, exported via CLI wallet.
passWallet password.

12. Next, download the miner client archive from the Beam Website.

Beam provides two mining clients for Equihash 150,5 with data path change: one for OpenCL and one for CUDA.

Attention: Testnet mining client is limited to OpenCL and only supported by Windows and Linux platforms.

13. Download the miner client to a folder on your mining rig and title it miner_folder.

14. Launch a terminal window (or command prompt for Windows users). Change the directory to the miner_folder by entering the following:

cd /miner_folder

15. Enter the following command:

 beamMiner.exe --server 127.0.0.1:10002 --key aaaa1234

If your node runs on a different machine than the miner client, change IP address above to the IP of the node machine

If you have set a different API key then aaa1234 from the example set your key in the --key parameter.

Miner client parameters

serverIP and port of the Stratum server path.
keyAPI key you have set in your Stratum server Instratum.api.keysfile.
devicesThis parameter is only necessary if the users want to use a specific GPU. By default, the miner client will use all available GPUs.

Your mining rig is now ready to begin mining.

To view your miner rewards:

Launch the CLI Wallet or Beam Desktop Wallet linked with the same seed phrase as the miner client and connect to the local node (or a remote node that knows the owner_key) within the wallet. Theowner_keywill automatically detect and the miner rewards will be reflected in the wallet balance.

Linking to a random node on the network will NOT display your mining rewards.

GPU support

Here are some performance stats reported by our community:

OpenCL miner client

GPUSupportedReported Sol/s rate
AMD RX560Yes~4
AMD RX570Yes~7-8
AMD RX580Yes~8-9
AMD Rx Vega 56Yes~13
nVidia GTX 1066Yes~5.25
nVidia GTX 1050TiYes~2.2-4.8
nVidia GTX 1060 6GBYes~5
nVidia GTX 1070Yes~7
nVidia GTX 1080Yes~8-9
nVidia GTX 1080TiYes~10-11
nVidia GTX 2080Yes~10-11

Note:CUDAminer client is still in development.