莱特币(litecoin/LTC)技术传承比特币,看代码仓库就是从比特币Fork过来的,里面代码改动很少,主要区别为是:

 

* POW的Hash算法有修改,由比特币的SHA256修改成了scrypt算法,这个算法计算起来耗费内存,所以相对于比特币,研发矿机难度更高一些。
* 挖矿速度由比特币原来的10分钟缩短为2.5分钟

代码方面,改动很少,如:https://github.com/litecoin-project/litecoin/blob/master/src/bitcoind.cpp
文件名也没改动

还有一个Golang的litecoin,在https://github.com/ltcsuite/ltcd,代码是从BTCD Fork来的。但是貌似不能运行

比特币的Genesis块信息:

 
/** * Build the genesis block. Note that the output of its generation *
transaction cannot be spent since it did not originally exist in the *
database. * * 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 */ static CBlock CreateGenesisBlock(uint32_t nTime,
uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount&
genesisReward) { const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor
on brink of second bailout for banks"; const CScript genesisOutputScript =
CScript() <<
ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f")
<< OP_CHECKSIG; return CreateGenesisBlock(pszTimestamp, genesisOutputScript,
nTime, nNonce, nBits, nVersion, genesisReward); } void
CChainParams::UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t
nStartTime, int64_t nTimeout) { consensus.vDeployments[d].nStartTime =
nStartTime; consensus.vDeployments[d].nTimeout = nTimeout; }
Litecoin的Genesis块信息:

 
/** * Build the genesis block. Note that the output of its generation *
transaction cannot be spent since it did not originally exist in the *
database. * * 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 */ static CBlock CreateGenesisBlock(uint32_t nTime,
uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount&
genesisReward) { const char* pszTimestamp = "NY Times 05/Oct/2011 Steve Jobs,
Apple’s Visionary, Dies at 56"; const CScript genesisOutputScript = CScript()
<<
ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9")
<< OP_CHECKSIG; return CreateGenesisBlock(pszTimestamp, genesisOutputScript,
nTime, nNonce, nBits, nVersion, genesisReward); } void
CChainParams::UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t
nStartTime, int64_t nTimeout) { consensus.vDeployments[d].nStartTime =
nStartTime; consensus.vDeployments[d].nTimeout = nTimeout; }
可见Litecoin的创始块信息包含的是:NY Times 05/Oct/2011 Steve Jobs, Apple’s Visionary, Dies
at 56 以纪念乔布斯

但是LTCD的块信息:

 
var genesisCoinbaseTx = wire.MsgTx{ Version: 1, TxIn: []*wire.TxIn{ {
PreviousOutPoint: wire.OutPoint{ Hash: chainhash.Hash{}, Index: 0xffffffff, },
SignatureScript: []byte{ 0x04, 0xff, 0xff, 0x00, 0x1d, 0x01, 0x04, 0x45, /*
|.......E| */ 0x54, 0x68, 0x65, 0x20, 0x54, 0x69, 0x6d, 0x65, /* |The Time| */
0x73, 0x20, 0x30, 0x33, 0x2f, 0x4a, 0x61, 0x6e, /* |s 03/Jan| */ 0x2f, 0x32,
0x30, 0x30, 0x39, 0x20, 0x43, 0x68, /* |/2009 Ch| */ 0x61, 0x6e, 0x63, 0x65,
0x6c, 0x6c, 0x6f, 0x72, /* |ancellor| */ 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x72,
0x69, 0x6e, /* | on brin| */ 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, /*
|k of sec|*/ 0x6f, 0x6e, 0x64, 0x20, 0x62, 0x61, 0x69, 0x6c, /* |ond bail| */
0x6f, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, /* |out for |*/ 0x62, 0x61,
0x6e, 0x6b, 0x73, /* |banks| */ }, Sequence: 0xffffffff, }, },
跟比特币的一致。

Litecoin的POW算法:

 
#include "primitives/block.h" #include "hash.h" #include "crypto/scrypt.h"
#include "tinyformat.h" #include "utilstrencodings.h" #include
"crypto/common.h" uint256 CBlockHeader::GetHash() const { return
SerializeHash(*this); } uint256 CBlockHeader::GetPoWHash() const { uint256
thash; scrypt_1024_1_1_256(BEGIN(nVersion), BEGIN(thash)); return thash; }
可见使用了crypto加密算法


具体怎么算的有兴趣的可以详细研究https://github.com/litecoin-project/litecore-litecoin/blob/0.13-master/src/crypto/scrypt.cpp

 

OK
本文作者:architect.bian,欢迎收藏,转载请保留原文地址并保留版权声明!谢谢~
还没完!往下看!!!

 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信