WHAT IS WARTHOG?
Warthog is an experimental cryptocurrency with world's first Proof of Balanced Work algorithm written by a group of crypto enthusiasts. It is meant to be a community effort and everyone is more than welcome to join and contribute. Who knows how big this project will be?TOKENOMICS
This is not the default kind of project where you see a disproportionately high allocation of the total supply unfairly reserved for the team, the advisors and their pockets. 0% is minted, premined, reserved for anyone, 100% is publicly mineable.KEY FACTS
Remember the time when crypto was interesting and fun? We want to bring this golden age of crypto back to life.No Premine
Project was fairly launched on BitcointalkNo "Team/Dev" fund
No unfair allocation to anybody aka "team"/"development" funds100% mineable
100% of supply is publicly mineable, no coins were mintedWritten from scratch
This project is NOT a fork/copy of anything elseModern Codebase
Using modern C++20 and tools like clangd, meson, ninjaOpen Source
You are welcome to contributeChain descriptor based sync
Experimental new light-weight sync mechanism which requires less network communication and computational resourcesProof of Balanced Work
The world's first algorithm using PoBW concept! Now power of CPU is also important!ROAD MAP
Q1 2024
- Develop world's first PoBW algo
- Develop stratum pool
- Listing on Exbitron
- Listing on Xeggex
Q2 2024
- Refactor Networking code to support multiple transports
- Research on in-browser node support
- Support in-browser nodes (unique in the crypto world)
Q3 2024
- Add Token support
Q4 2024
- Add lightweight DeFI support.
CHAIN SPEC
COIN UNIT | 1 WART |
BLOCK TIME | 20 SECONDS |
REWARD | 3 WART |
PRECISION | 0.00000001 WART (8 digits) |
HALVING | ~ EVERY 2 YEARS |
SUPPLY | 18921599.68464 (~19M) WART |
DIFFICULTY ADJUSTEMENT | EVERY 8640 BLOCKS (2 days) |
NODE
β
WALLET
β
MINING
β
POOL
GET STARTED
NODE
At the moment, for any actions on the Warthog network, you need to run an instance of the node on your computer. Currently, the pre-compiled node executable file availabel for Windows, macOS (only arm), Linux (Ubuntu, Debian). You can download it from here. Πfter launch, node will start synchronizing the blockchain, after it is completed, it will be possible to perform operations with the wallet and start mining.[info] Warthog Node v0.4.11 [info] Chain database: /home/user/.warthog/chain.db3 [info] Peers database: /home/user/.warthog/peers.db3 [info] 0 IPs are currently blacklisted. [info] Cache has 258 entries [info] Chain info: length 1065993, work 7.006105109451692e+18, [info] Chain snapshot is valid: priority 0, height 1014260 [info] P2P endpoint is 0.0.0.0:9186. [info] RPC endpoint is 127.0.0.1:3000. [info] Connected to 1 peers [info] Connected to 2 peers [info] Connected to 3 peers [info] Connected to 4 peers [info] Connected to 5 peers [info] Syncing... (height 0 of 1080000)
WALLET
To use a wallet, you need to download pre-compiled wallet executable file from here. Currently support Windows, macOS (only arm), Linux (Ubuntu, Debian), but you can compileCreate wallet
To create the wallet you need just run next command:./wart-wallet -cIn output you get wallet address, private and public keys. This information will be saved to the wallet.json file.
Wallet file created. { "address": "5fe016f874698e11f36a2b2f4dd759d53b55d5520c255e64", "privateKey": "2cc2cbe28cb665d540c949aef5d1a3484a960740338780ec82a9ae1414bcc18a", "publicKey": "0285a33afacea56262b44b8b96f4affa8f31cc51d3065eb37e43c0d0cf979a2872" }
Check balance
If you want check your balance run command:./wart-wallet -bIn output you get balance of your wallet
Send coins
To send some coins, use command:./wart-walet -s --to=%address% --amount %count% --fee 0
./wart-walet -s --to=9da0dc31d0c3bcaaeaf422be6499fbf451b314fa622be978 --amount 0.00000001 --fee 0Next, you will be shown the details of the transaction and if you agree with them, you need to confirm it
Summary: To: 9da0dc31d0c3bcaaeaf422be6499fbf451b314fa622be978 Fee: 0.00000001 Amount: 0.00000001 Nonce: 4262777042 Confirm with "y": yAnd your transaction added to blockchain
Get pin Got pin NonceId: 4262777042 pinHeight: 896450 pinHeight: 896450 pinHash: 2452592e211a10b97da31e4b681aafe49b93321776580278b0c39fc5bae84558 =====DEBUG INFO TRANSACTION JSON===== { "amount": "0.00000001", "fee": "0.00000001", "nonceId": 4262777042, "pinHeight": 896450, "signature65": "53d429fa34ef05f9f413b4eb57...9c189ae3078894cb01aee91eda2201", "toAddr": "9929fdce19b2a71cf0950263baa71478ef1980f8c7d9ccb3" } ===================================== Transaction accepted.
Restore
To restore your wallet.json file, you need run command:./wart-wallet -r %your private key%In output you get wallet address, private and public keys and
./wart-wallet -r 2cc2cbe28cb665d540c949aef5d1a3484a960740338780ec82a9ae1414bcc18a Wallet file created. { "address": "5fe016f874698e11f36a2b2f4dd759d53b55d5520c255e64", "privateKey": "2cc2cbe28cb665d540c949aef5d1a3484a960740338780ec82a9ae1414bcc18a", "publicKey": "0285a33afacea56262b44b8b96f4affa8f31cc51d3065eb37e43c0d0cf979a2872" }
MINER
Bzminer
BZ miner is the first professional miner that supports mining on the Warthog Network chain. Support for Warthog was added in version 21.0.3. It supports Nvidia, Amd and Intel GPUs and Intel as well as AMD processors (desktop and server platforms). Mining either to pool or solo to node in stratum mode. Available in all major mining OSes as well as various systems executable available here# wooly pools ./bzminer -a warthog -r test -w 0000 -p stratum+tcp://pool.us.woolypooly.com:3140 --nc 1 --nvidia 1 --amd 1 --warthog_cpu_threads 0 --warthog_max_ram_gb 0 --warthog_verus_hr_target 0 # acc pool #./bzminer -a warthog -r test -w 0000 -p stratum+tcp://us.acc-pool.pw:12000 --nc 1 --nvidia 1 --amd 1 --warthog_cpu_threads 0 --warthog_max_ram_gb 0 --warthog_verus_hr_target 0 # solo, change 127.0.0.1 to ip node is running on, ensure to run node with `--stratum 0.0.0.0:3456` #./bzminer -a warthog -w 0000 -p stratum+tcp://127.0.0.1:3456 --nc 1 --amd 1 --nvidia 1 --intel 1 --warthog_cpu_threads 0 --warthog_max_ram_gb 4
------------------------ warthog - stratum+tcp://us.acc-pool.pw:12000 - test ------------------------ | # | a/r/i/p | cfg | tbs | tsls | eff | pool hr | janus hr | status | | 3:0 | -/-/-/- | i16 | -- | -- | 22hw | -- | 408h | 166.7mh/8h | | 8:0 | -/-/-/- | i16 | -- | -- | -- | -- | 122h | 56.2mh/2h | | | | | | | | | | | | smry | -/-/-/- | | -- | -- | 28hw | -- | 530h | diff: 1.00gh | | | | | | | | | | latency: -- | | | | | | | | | | est. tbs: 21.82d | | | | | | | | | | threads: 9 | | | | | | | | | | sha hr: 45h | | | | | | | | | | verus hr: 609.67kh | | | | | | | | | | calibrating: 47% | 04-04 21:48:29:0000 ------------------- uptime: 0d 0h 0m 15s ------------------------------ v21.0.3b7
Janusminer
To start mine this coin you need to download janusminer here. Current stable version is 0.2.9. Now miner have ONLY Linux support with OpenCL API../janusminer -a %wallet% -h %host_ip% -p %node_port% ./janusminer -a 5fe016f874698e11f36a2b2f4dd759d53b55d5520c255e64 -h 192.168.1.1 -p 3000 Janushash Miner (By CoinFuMasterShifu) β β [info] Node RPC is 192.168.1.1:3000 OpenCL installations for the following GPUs were detected: [0]: NVIDIA GeForce RTX 4070 Using all GPUs. Using 16 CPU threads for Verushash [warning] CPU queue drained [info] Total hashrate (GPU): 203.929200 mh/s [info] NVIDIA GeForce RTX 4070: 203.929200 mh/s [info] Total hashrate (CPU): 16.734208 mh/s [info] Thread#0: 940.485000 kh/s ... [info] Thread#15: 861.117000 kh/s [info] Janusscore: 72.634461 mh/s
POOL
See here for a list of poolsWarthog - An experimental fresh rewrite of a PoW cryptocurrency
Pumbaa
Rafiki
October 5, 2023
Warthog - An experimental fresh rewrite of a PoW cryptocurrency
Note: This white paper is a work in progress.
Introduction and Project goals
Warthog is a classical Proof-of-Work (PoW) based cryptocurrency which is meant to be a fun and experimental side project of its developers Pumbaa, Timon and Rafiki who work in blockchain industry.
We are working on Warthog in our free time and there is always the risk that we leave due to time constraints or personal reasons. In fact our colleague Timon has already left the team. Therefore we are trying to build up a strong community backing the project.
Mainly one can describe this project as an experiment to try out new things and learn how blockchain technology works in detail. But at the same time we want to be as transparent and fair as possible and avoid as much as possible fishy and questionable practice currently seen in most other new projects.
The code is freshly written in C++20 and is not a cheap fork of any other project. Therefore there is always the risk of serious or unfixable bugs. But at the same time there is real effort put into this project which sets it apart from most competitors.
The community is welcome to take actively part in the evolution of Warthog, the logo and the explorer are made by volunteers and also possible choices for a mining algorithm are proposed. The connection with the community shall be preserved and extended in the future. If you want to join, please do so!
There is no specific purpose or use case of Warthog. However we want to revive the days when crypto was a fun and an interesting experimental thing. One of our experiments with this project is to use SQLite to store blocks and state. Another is the completely novel idea of syncing nodes via chain descriptors instead of asking other nodes for blocks by their hashes.
One design principle of Warthog is fast sync speed and a low impact on system resources which is achieved by the use of fast hashing algorithms, appropriate data structures and our custom-built sync algorithm.
For now and in the near future the primary plan is to make the node implementation more robust and improve infrastructure like explorer and API for better interoperability.
Technical Details
Retarget Logic
Similarly to Bitcoin, the warthog blockchain will scale its difficulty periodically to adjust for changing hashrate. Changes in difficulty is partitioned into two phases:
- In the initial phase the difficulty is adjusted every 720 blocks which corresponds to approximately 4 hours.
- In the second phase the difficulty is adjusted every 8640 blocks which corresponds to 2 days.
The reason for this two-phase approach is the high variability of hashrate in early stages of a project's life which initially requires a more frequent difficulty adjustment. On the other hand too short intervals also have disadvantages such as the tendency to oscillate and a possibly higher impact of faked timestamps. Therefore the second phase stretches the difficulty adjustment interval after the initial phase.
While in Bitcoin the difficulty change is capped by factor 4, we have implemented a factor 2 cap because our difficulty adjustment is more frequent than 2 weeks.
Emission Scheme
Warthog was started without any premined or reserved amount of coins on June 29, 2023. The project implements a classical halving-based emission scheme with halvings occurring every 3153600 blocks (every 2 years). The emission for the next 4 years is summarized in the following table:
Date | Lifetime | % of total supply in circulation |
---|---|---|
June 29 2023 | 0 years | 0% |
~June 29 2024 | 1 years | 25% |
~June 29 2025 | 2 years | 50% |
~June 29 2026 | 3 years | 62.5% |
~June 29 2027 | 4 years | 75% |
There is no tail emission which means there is a hard cap of the amount in circulation. The hard cap is 18921599.68464 WART (around 19 million coins).
Before halving occurs every block yields 3 WART as miner reward. Since the block time is 20 seconds, every day approximately 60/20 * 60 * 24 = 4320 blocks and 12960 WART are mined before halving.
Coin Precision
The reference implementation uses the C++ data type uint64_t
for storing amounts of WART. This is a 64 bit unsigned integer. To represent fractions of a coin these values are interpreted in fixed point arithmetic with 8 digits precision. This means that 1 WART is internally represented as uint64_t
number with value 100000000. The smallest representable step is 0.00000001 WART and represented as uint64_t
number with value 1.
For easier integration all API endpoints return both, the WART amount as a string (like "amount": "12.0"
), and the internal integer representation indicated with label "E8
" (like "amountE8": 1200000000
).
One-of-a-kind chain descriptor based sync
This project is an experiment where the developers try out new things and push the boundary of what is possible in blockchain technology. We invented a completely unique and new way of syncing nodes which is not presently not known to the industry.
Traditionally during synchronization new nodes request block bodies identified by block hashes. The replying node has to look up the block body based on the hash and then sends it back.
In contrast we have invented a node communication protocol which works without block hashes for block body lookup. In our setup nodes keep track on fork heights with other nodes. A chain descriptor is used to identify a specific chain on the peer. When a node appends to its chain, the chain descriptor remains unchanged, however the current chain descriptor is increased when the consensus chain switches to a longer fork. Block bodies for previous chains are also kept for some time in case a peer requests them.
When syncing nodes request block bodies identified by a chain descriptor and a block range. This way we avoid overhead in communication and lookup.
SQLite backed block store
SQLite is a battle-proven and well-established embedded SQL database engine. Warthog nodes use SQLite as their main storage engine for both, blocks and state. Nodes also index transactions and can provide basic blockchain explorer functionality directly via API thanks to SQLite.
SQLite databases are also portable across 32-bit and 64-bit machines and between big-endian and little-endian architectures such that chain snapshots can easily shared. Furthermore SQLite supports transactions which are essential for data integrity even in case of a power outage or node crash.
The default SQLite database file name used for the chain is chain.db3
and can be configured via the --chain-db
command line option
Account based architecture
Warthog implements an account based architecture. This is similar to Ethereum and different from Bitcoin's UTXO model. Every account along with its balance is stored in the State
table of the chain database. For efficiency reasons accounts are referred by their id: Every account is assigned a unique auto-incremented id value on first use. This makes blocks more space-efficient since a block id only requires 8 bytes of storage whereas an address would require 20 bytes.
Anatomy of a block
The binary content of a block is a concatenation of the following sections in their specified order:
- Mining section
- New address section
- Reward section
- Transfer section
Below we describe the above sections. All numbers and id values are in network byte order.
Mining section
This section allows miners to put 4 bytes of arbitrary data to affect the merkle hash.
byte range | content |
---|---|
1-4 | arbitrary data |
New address section
This section lists new addresses that receive payments in this block and therefore need to be added to the state
table. This way they will be assigned a new id value which is referenced in the other sections to specify a particular account.
byte range | content |
---|---|
1-4 | number n of new addresses |
5-(4+n*20) | n addressess of 20 bytes each |
Miners are responsible to ensure that the addresses appearing in the new address section are not already present in the state table and are actually referenced in this block. Otherwise the block is considered invalid.
Reward section
Mining reward is distributed to at least one reward address.
byte range | content |
---|---|
1-2 | number r of reward entry |
3-(4+r*16) | r reward entries |
Every reward entry consists of 16 bytes:
byte range | content |
---|---|
1-8 | accountId |
9-16 | amount |
The sum of the amounts received by the addresses listed in the mining reward section must not exceed the total mining reward (block reward + transaction fees), otherwise the block is considered invalid.
The total size of the mining section is 2+ r
*16 bytes.
Transfer section
The transfer section contains the transfers made in this block. Its binary outline is as follows:
byte range | content |
---|---|
1-4 | number t of transfer entries |
5-(4+t*99) | t transfer entries |
Every transfer entry has the following structure:
byte range | content |
---|---|
1-8 | fromAccountId |
9-16 | pinNonce |
17-18 | fee |
19-26 | toAccountId |
27-34 | amount |
35-99 | recoverable signature (65 bytes) |
Each payment entry has length 99 bytes. Compare this to the average transaction size of around 200 bytes per Bitcoin transfer.
Fee specification
For efficiency and compactness transaction fees are encoded as 2-byte floating-point numbers (16 bits), where the first 6 bits encode the exponent and the remaining 10 bits encode a 11 bit mantissa starting with an implicit 1. This means that fee values cannot be 0 and are of lower precision than regular amount values which use 4 bytes. A fee of value of 0
specified on transaction generation will automatically transform into the minimal fee value of 0.0000001 WART
.
Project Links
FAQs
Q: What's algorithm used in this project? A: The new algorithm is called "Janushash". More detailed information you can find here https://github.com/warthog-network/Warthog/blob/master/doc/janushash.mdMiner (Linux and HiveOS builds): https://github.com/CoinFuMasterShifu/janusminer/releases
See README.md in these repos for usage information.
[error] API request failed. Are you running the node with RPC endpoint enabled? [warning] Could not get mining information, retrying in 100 milliseconds...A: You should run node with `--rpc=0.0.0.0:3000` to accept remote connections from your rigs and prevent this error.
Keep in mind that you can only run one node per public IP.