Блокчейн состоит из цепочки блоков. Каждый его следующий блок ссылается на предыдущий. Блоком генезиса называют самый первый блок в этой цепочки. Еще его часто называют “блоком ноль” или “блоком один”.
В чем его особенность и чем он отличается от остальных блоков в цепочке?
Этот блок не имеет связи с предыдущим блоком, т.к. его, по сути, нет. Обычно этот блок разработчики жестко закодируют в приложении блокчейна. А первые награды за майнинг, который порождают от него дочерние блоки, нельзя потратить.
Еще одна особенность блоков генезиса состоит в том, что они часто содержат уникальную дополнительную информацию, которую в них закладывают разработчики. Например, в первом генезис блоке биткоина содержится фраза “The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”, что в переводе означает намек на разыгравшийся в те времена глобальный мировой финансовый кризис и как следствие, ухудшение условий того времени. Данная фраза содержит в себе ссылу на заголовок статьи в газете “The Times” того времени.
Это и послужило рывком для создания и последующего развития криптовалют. Генезис-блоке биткоина в тот далекий 2009 год содержал 50 BTC.
Пример куска исходного кода биткоина, который отвечает за формирование генезис-блока:
// Genesis Block: // GetHash() = 0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f // hashMerkleRoot = 0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b // txNew.vin[0].scriptSig = 486604799 4 0x736B6E616220726F662074756F6C69616220646E6F63657320666F206B6E697262206E6F20726F6C6C65636E61684320393030322F6E614A2F33302073656D695420656854 // txNew.vout[0].nValue = 5000000000 // txNew.vout[0].scriptPubKey = 0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EE50455F3C438EF4C3FBCF649B6DE611FEAE06279A60939E028A8D65C10B73071A6F16719274855FEB0FD8A6704 OP_CHECKSIG // block.nVersion = 1 // block.nTime = 1231006505 // block.nBits = 0x1d00ffff // block.nNonce = 2083236893 // CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1) // CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0) // CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73) // CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) // vMerkleTree: 4a5e1e // Genesis block const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; CTransaction txNew; txNew.vin.resize(1); txNew.vout.resize(1); txNew.vin[0].scriptSig = CScript() << 486604799 << CBigNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); txNew.vout[0].nValue = 50 * COIN; CBigNum bnPubKey; bnPubKey.SetHex("0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EE50455F3C438EF4C3FBCF649B6DE611FEAE06279A60939E028A8D65C10B73071A6F16719274855FEB0FD8A6704"); txNew.vout[0].scriptPubKey = CScript() << bnPubKey << OP_CHECKSIG; CBlock block; block.vtx.push_back(txNew); block.hashPrevBlock = 0; block.hashMerkleRoot = block.BuildMerkleTree(); block.nVersion = 1; block.nTime = 1231006505; block.nBits = 0x1d00ffff; block.nNonce = 2083236893;
Сейчас каждый новый блок биткоина формируется 1 раз в 10 минут. Как думаете, сколько времени прошло между созданием первого генезис блока биткоина и следующего блока, который он породил? – Порядка 6 дней!
Это очень интригует и даже есть гипотезы, объясняющие как такое могло произойти. Согласно одной из них, – до того, как Сатоши Накамото выпустил биткоин публично, 3 января 2009 года он создал генезис блок и затем несколько дней тестировал программное обеспечение. После чего удалил тестовые данные кроме генезиса блока и запустил Блокчейн в основной сети. Теперь мы имеем то, что имеем