The proof of work algorithm used is called Cukoo Cycle, a graph theory-based algorithm that is far less energy-intensive than most other CPU, GPU or ASIC-bound PoW algorithms. The goal is to lower mining requirements, ensuring true decentralization, and laying the foundation for future scalability.
Cuckoo Cycle is designed to be ASIC-resistant and optimal for GPU-based transactions processing. PoW is used to facilitate a decentralized ecosystem where no single entity controls the network. Just as in a typical PoW project, miners provide the computing power to support the Cortex network, in return are rewarded with transaction fees. The process incidentally is Cortex's way to issue more CTXCs, the native Cortex asset.
The difficulty adjusts dynamically so that on average, a block is produced every 15 seconds, i.e., 15s block time. This rate ensures the synchronization of the system state while preventing double-spend and history alteration unless an attacker possesses more than 51% of the network's mining power.
Any node participating in the network can be a miner. The miner of the winning block receives:
- A fixed block reward for the 'winning' block, consisting of exactly 7 CTXCs
- The sender of the transaction pays for all the endorphins that carry the transaction
- All of the endorphins from the transactions in the block are split between the winning miner and AI model providers
Cuckoo Cycle tries to find a fixed length L ring in the Cuckoo Cycle bipartite graph randomly generated by Siphash. As the scale of the graph increases, the L value increases and becomes more difficult to find a ring that fits the length of L. Solving the solution (i.e., the process of finding a loop) itself requires a relatively large amount of memory to store the sorting of data. The Cuckoo Cycle algorithm is resisted to ASIC chips. The difficulty and cost to make Cuckoo Cycle compatible on ASIC are much higher than the SHA256 of Bitcoin.
Cortex utilizes CuckAroo 30, a variation of Cukoo Cycle. CuckARoo replaces Siphash-2-4 with Siphash-4-8, focusing more on memory use. The solution time is bound to memory bandwidth, making it resistant to ASIC chips. Unlike other PoW algorithms that require maxing out the capacity of your hardware and consuming a lot of power in the process, a memory-bound algorithm like CuckARoo requires far less energy than most other GPU, CPU or ASIC-bound PoW algorithms.
Below is the recommended minimum requirements for the official miner. Third party miners may be available after the Mainnet release which might be optimized to use less memory.
- System: Linux Ubuntu 16.04+
- GPU: Nvidia GPU with 10.7GB VRAM
- Space: 2TB (the size of the blockchain increases over time)
- CUDA version: 9.2+
- CUDA driver: 396+
- Compiler: Go 1.10+, GCC 5.4+
- Quota general: 64k per block (model uploading space)
- Uploading network bandwidth: 1MB/s
- Model mature: 100 blocks
- Model size limit: 1GB
- Pre-allocation: 149792458
- Total reward for mining: 150000000
- Total supply: 299792458
- Reward: 7 per block (half every 4 years) = 8409600
- Uncle Block Reward:
$(1- \frac{current - uncle} {8}) * block_reward$ current = current block no., uncle = uncle block no., block_reward = reward
download Cortex Pool Miner
git clone [email protected]:CortexFoundation/PoolMiner.git
cd PoolMiner && make clean && make
Ensure you have the correct version of gcc and go gcc/g++ 5.4 or later is required. Use g++ --version or gcc --version to check which version you have. On Ubuntu, if your version is too old then you can update to gcc/g++ 5.4 as follows:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-5.4
go 1.10 or later is required Use go --version to check which version you have. Update to Go 1.10 as follows:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install go-1.10
MinerPool Website :https://pool.cortexlabs.ai/ MinerPool Uri:miner-cn.cortexlabs.ai:8009 or miner.cortexlabs.ai:8009
Set miner account
Set the miner pool URI for submitting solutions. Up to 3.
Enable multiple miners to mine with the same account. Set different worker to differentiate different miner account
Set which GPU device use for mining, param is device ids concatenated by commas.
Set the verbosity of log printing.
./build/bin/cortex_miner -pool_uri=cuckoo.cortexlabs.ai:8008 -pool_uri_1=cuckoo.cortexlabs.ai:8008 -pool_uri_2=cuckoo.cortexlabs.ai:8008 -worker=cortex-nmg-4 -devices=0,1,2,3 -account=0xE893BA644128a0065B75d2c4f642615710802D4F