DarkNetCoin is a new cryptocurrency based on CryptoNote technology. DarkNetCoin‘s major benefit is to provide much stronger privacy to both the senders and receivers of transactions. It does so by ensuring that:
- receivers are anonymous (the destination of a transaction can only be determined by its real recipient);
- Transactions cannot be linked to a single sender; instead, each transaction could have many equally possible senders, and an attacker cannot determine which one it was.
DarkNetCoin improves upon the base CryptoNote technology in several ways that strengthen its anonymity and reduce the size of the global ledger of all transactions, called the “blockchain”. It provides an aliasing facility built in to the blockchain so that people or programs can send money to, for example, “@zoidberg” instead of a long address. And it has an easy-to-use
GUI wallet that ships in source and binary as an official part of the DarkNetCoin distribution.
- New cryptography based on ring signatures and one-time transaction keys provides the strongest privacy of any cryptocurrency;
- Separated wallet and daemon help improve usability and security;
- Flexible RPC-like network protocol provides a basis for flexibly extending the network protocol quickly and robustly;
- Blockchain-based PoW hash helps balance CPU, GPU, and ASIC speeds while providing extremely fast block verification;
- Outs with guaranteed anonymity The output of a transaction can be marked so that it can only be later used with a certain number of mixins. By using only coins thus marked, a user that mixing her transactions for privacy can ensure that the transactions remain private over time.
- Alerts (signed by developers) broadcast via peer-to-peer mechanism, inform both users and miners of critical updates or other important events
- Transaction identification by prefix: this feature reduces blockchain bloat.pdf by cutting off ring signatures that are covered by a checkpoint. It can save 30-70% of the blockchain space, addressing an important drawback to CryptoNote’s stronger privacy.
- Wallet addresses aliasing: Any address can be linked to a symbolic name and be used globally. By being built into the blockchain, these aliases are globally unique (original), but do not require a central naming authority to maintain.
The main ideas of DarkNetCoin transaction generation are explained in the following graph:
This picture shows the transaction’s creation, the cryptographic protocol which is the basis for the whole technology. More details on theory page
Algorithm: Wild Keccak
Block Time: 60 seconds
Difficulty: Retarget each block
Block Reward: (2^64 – 1 – A)/2^18/10^10 ,Where ‘A’ is amount of already generated coins.
Total Coins: 1.8446 billion DNC
Reward Emissions for 12 months:
Time, Block NO, Generated Coins, Generated Coins/Total Coins Total Coins = 1844674407.370955 1st Block , 00000000 , 14073.7488 , 0.00 1st Day , 00001440 , 20169275.7807 , 0.01 1 Month(s) , 00043200 , 517961932.9580 , 0.28 2 Month(s) , 00086400 , 890479232.4214 , 0.48 3 Month(s) , 00129600 , 1158400290.3662 , 0.63 4 Month(s) , 00172800 , 1351093873.7075 , 0.73 5 Month(s) , 00216000 , 1489682521.2209 , 0.81 6 Month(s) , 00259200 , 1589357937.9449 , 0.86 7 Month(s) , 00302400 , 1661046267.9587 , 0.90 8 Month(s) , 00345600 , 1712605788.1401 , 0.93 9 Month(s) , 00388800 , 1749688310.7880 , 0.95 10 Month(s) , 00432000 , 1776358719.6883 , 0.96 11 Month(s) , 00475200 , 1795540551.4547 , 0.97 12 Month(s) , 00518400 , 1809336465.5439 , 0.98
Block reward depends of block cumulative size (includes transaction’s blob sizes) and could be less than nominal.
Reward for block is calculated according to the following rules:
base_reward=(EMISSION_SUPPLY - already_generated_coins) >> EMISSION_CURVE_CHARACTER; if(block_cumulative_size <= median) reward = base_reward; else reward = (base_reward*(block_cumulative_size * (2 * median - block_cumulative_size)))/(median2)
- base_reward is base block reward according to current emission state
- block_cumulative_size size of block’s coinbase plus size of all transactions included in block
- median – is median of cumulative sizes of last 400 blocks
If block cumulative size more than two medians – block is considered as wrong. This approach is used to make self-regulated fair model of transaction size/fee ration.
Actually this is a keccak hybrid(that we called wild keccak), that use external scratchpad. After each keccack round, psudo-randomly addressed[state vector used as addresses] data is taken from scratchpad and xored with state. Calculating each block PoW usualy hits about 1100 randomly addressed reading of blocks by 32 bytes.
We used “performance_tests” with different scratchpad size to find out memory hardness:
Warm up: 2161 ms test_wild_keccak<400> - OK: loop count: 100000 elapsed: 3020 ms time per call: 0 ms/call Warm up: 2158 ms test_wild_keccak<40000> - OK: loop count: 100000 elapsed: 3060 ms time per call: 0 ms/call Warm up: 2168 ms test_wild_keccak<4000000> - OK: loop count: 100000 elapsed: 3484 ms time per call: 0 ms/call Warm up: 2156 ms test_wild_keccak<40000000> - OK: loop count: 100000 elapsed: 8119 ms time per call: 0 ms/call 1JjGoHdzP5HvtyEZ6MN9LXbh8uTDVgrPY9 Warm up: 2150 ms test_wild_keccak<100000000> - OK: loop count: 100000 elapsed: 8574 ms time per call: 0 ms/call
As you can see, working on small amount of memory 100000 hash operations takes 3020 ms, meanwhile work on 100Mb scratchpad with the same operations count takes 8574 ms. Such difference(caused by the cache memory exhaustion) points to real memory hardness we guess.