github iron-fish/ironfish v0.1.26

latest releases: v2.3.0, v2.2.0, v2.1.0...
2 years ago

What's Changed (Major highlights)

  • NPM Builds - you can now install Iron Fish with npm install -g ironfish
  • Mining pool support and mining refactor - read more below
  • Many other changes, see the full changelog below

Community Contributions

Full Changelog: v0.1.25...v0.1.26

Changes to the miner

We've completely rebuilt the miner from the ground up. The primary use for your average miner will not change at all, however there are some improvements to be aware of:

  1. Threads should utilize the CPU more efficiently. Previously, miners with many cores were noticing that their CPU usage was lower than expected. Now, threads should use more of the CPU as expected.
  2. Because of the above change, miners who have changed their batch size will want to revisit that number. CPU usage should stay high even with a lower batch size, and a lower batch size means faster switching to new work as it comes in. The default batch size should be effective for a wider range of miners.
  3. The default thread count when using ironfish miners:start will now utilize all CPU cores instead of just 1. This can still be changed with -t # where # is the amount of cores you want the miner to use.

We are adding a simple mining pool

Due to a lot of the changes we wanted to make, we decided to build a simple pool that ships with the Iron Fish node. It was not intended to be fully featured, so pool operators will likely still opt to build one with more features (or extend from the one we ship). It will still serve as a good starting point and example.

If you are interested in running a pool (Note that this is not the same as mining from a pool!), you can start one as simply as ironfish miners:pool:start. We recommend giving your pool a name with ironfish config:set poolName <name-goes-here> prior to running the pool start command. The name is used to identify blocks your pool has mined using the graffiti on a block, as well as a memo in the payouts to miners. If you don't set a name, it will use the default of 'Iron Fish Pool'. For people with multiple mining machines, you can utilize the pool with disabled payouts with the --no-payouts flag: ironfish miners:pool:start --no-payouts.

Connecting to a pool

For miners interested in contributing to a pool, you can do so as simply as ironfish miners:start -p <ip-address-of-pool> -a <your-public-address>. Note that the public address needs to be a valid public address, you can get yours with ironfish accounts:publickey. This address is where the pool will payout your share of IRON.

Something to be aware of: blocks mined while connected to a pool will not utilize your graffiti, instead you will see something like Iron Fish Pool.38d7, this is so that the pool can organize work between the miners without having the miners duplicate work. This won't have any negative effects, since Incentivized Testnet Phase 1 has ended.

Pool specifics

We opted to keep things fairly simple for now. Payouts will be done on a 2 hour interval, using 10% of the confirmed balance of the pool's account. The payout is then divided by the amount of shares submitted by the miners during that time period.

For example:

  • Pool account confirmed balance: 100 IRON
  • Miner 1 contributed 75 shares
  • Miner 2 contributed 25 shares

Therefore:

  • Payout total: 10 IRON
  • Miner 1 payout: 7.5 IRON since they had 75% of the contributed shares during that time period.
  • Miner 2 payout: 2.5 IRON since they had 25% of the contributed shares during that time period.

What is a share?

A share is a pool's version of a block. When mining from a pool, miners are given a target that is different from the actual block target. This target is usually much easier to find valid work with, so that miners will periodically tell the pool they found valid work, even if it isn't a valid block. This allows the miner to prove to the pool that they are contributing their share of work, and allows the pool to have a fairly accurate estimate of how much work each miner is contributing.

New config settings for pool

  • poolName: The name that the pool will use in block graffiti and transaction memo.
    • default: 'Iron Fish Pool'
  • poolAccountName: The name of the account that the pool will use to payout from.
    • default: 'default'
  • poolBalancePercentPayout: The percent of the confirmed balance of the pool's account that it will payout
    • default: 10
  • poolPort: The port that the pool is listening for miner connections on.
    • default: 9034
  • poolDifficulty: The pool difficulty, which determines how often miners submit shares. Note that you can estimate how often a machine will submit shares by dividing this value by the machine's hashrate. Ex: 15000000000 / 25000000 = 600, so a machine with 25MH/s would be expected to submit a share on average once per 10 minutes.
    • default: 15000000000
  • poolAttemptPayoutInterval: The length of time in seconds that the pool will wait between checking if it is time to make a payout.
    • default: 900 (15 minutes)
  • poolSuccessfulPayoutInterval: The length of time in seconds that the pool will wait between successful payouts.
    • default: 7200 (2 hours)
  • poolRecentShareCutoff: The length of time in seconds that will be used to calculate hashrate for the pool.
    • default: 600 (10 minutes)
  • poolDiscordWebhook: The discord webhook URL to post pool critical pool information too
    • default: ''

Don't miss a new ironfish release

NewReleases is sending notifications on new releases.