};

vargenerateNextBlock= (blockData)=> {

varpreviousBlock= getLatestBlock();

varnextIndex= previousBlock.index+ 1;

varnextTimestamp= newDate().getTime()/ 1000;

varnextHash= calculateHash(nextIndex,previousBlock.hash,nextTimestamp,blockData);

returnnewBlock(nextIndex,previousBlock.hash,nextTimestamp,blockData,nextHash);

};

块的存储

内存中的Java数组被用于存储区块链。区块链的第一个块通常被称为“起源块”,是硬编码的。

vargetGenesisBlock= ()=> {

returnnewBlock(0,"0",1465154705,"my genesis block!!","816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7");

};

varblockchain= [getGenesisBlock()];

vargetGenesisBlock= ()=> {

returnnewBlock(0,"0",1465154705,"my genesis block!!","816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7");

};

varblockchain= [getGenesisBlock()];

确认块的完整性

在任何时候都必须能确认一个区块或者一整条链的区块是否完整。在我们从其他节点接收到新的区块,并需要决定接受或拒绝它们时,这一点尤为重要。

varisValidNewBlock= (newBlock,previousBlock)=> {

if(previousBlock.index+ 1!== newBlock.index){

console.log('invalid index');

returnfalse;

}elseif(previousBlock.hash!== newBlock.previousHash){

console.log('invalid previoushash');

returnfalse;

}elseif(calculateHashForBlock(newBlock)!== newBlock.hash){

console.log('invalid hash: '+ calculateHashForBlock(newBlock)+ ' '+ newBlock.hash);

returnfalse;

}

returntrue;

};

varisValidNewBlock= (newBlock,previousBlock)=> {

if(previousBlock.index+ 1!== newBlock.index){

console.log('invalid index');

returnfalse;

}elseif(previousBlock.hash!== newBlock.previousHash){

console.log('invalid previoushash');

returnfalse;

}elseif(calculateHashForBlock(newBlock)!== newBlock.hash){

console.log('invalid hash: '+ calculateHashForBlock(newBlock)+ ' '+ newBlock.hash);

returnfalse;

}

returntrue;

};

任何时候在链中都应该只有一组明确的块。万一冲突了(例如:两个结点都生成了72号块时),会选择有最大数目的块的链。

varreplaceChain= (newBlocks)=> {

if(isValidChain(newBlocks)&& newBlocks.length> blockchain.length){

console.log('Received blockchain is valid. Replacing current blockchain with received blockchain');

blockchain= newBlocks;

broadcast(responseLatestMsg());

}else{

console.log('Received blockchain invalid');

}

};

varreplaceChain= (newBlocks)=> {

if(isValidChain(newBlocks)&& newBlocks.length> blockchain.length){

console.log('Received blockchain is valid. Replacing current blockchain with received blockchain');

blockchain= newBlocks;

broadcast(responseLatestMsg());

}else{

console.log('Received blockchain invalid');

}

};

结点的本质是和其他结点共享和同步区块链,下面的规则能保证网络同步。

当一个结点生成一个新块时,它会在网络上散布这个块。

当一个节点连接新peer时,它会查询最新的block。

当一个结点遇到一个块,其index大于当前所有块的index时,它会添加这个块到它当前的链中,或者到整个区块链中查询这个块。

当一个结点生成一个新块时,它会在网络上散布这个块。

当一个节点连接新peer时,它会查询最新的block。

当一个结点遇到一个块,其index大于当前所有块的index时,它会添加这个块到它当前的链中,或者到整个区块链中查询这个块。

如图为当节点遵循前文所述协议时会发生的一些典型通信场景

我没有采用自动发现peer的工具。peers的位置(URL)必须是手动添加的。

结点控制

在某种程度上用户必须能够控制结点。这一点通过搭建一个HTTP服务器可以实现。

varinitHttpServer= ()=> {

varapp= express();

app.use(bodyParser.json());

app.get('/blocks',(req,res)=> res.send(JSON.stringify(blockchain)));

app.post('/mineBlock',(req,res)=> {

varnewBlock= generateNextBlock(req.body.data);

addBlock(newBlock);

broadcast(responseLatestMsg());

-imtoken钱包app">
欢迎来到 imtoken钱包app
全国咨询热线: 13915452721
新闻中心

imtoken源码(仿imtoken源码)

};

vargenerateNextBlock= (blockData)=> {

varpreviousBlock= getLatestBlock();

varnextIndex= previousBlock.index+ 1;

varnextTimestamp= newDate().getTime()/ 1000;

varnextHash= calculateHash(nextIndex,previousBlock.hash,nextTimestamp,blockData);

returnnewBlock(nextIndex,previousBlock.hash,nextTimestamp,blockData,nextHash);

};

块的存储

内存中的Java数组被用于存储区块链。区块链的第一个块通常被称为“起源块”,是硬编码的。

vargetGenesisBlock= ()=> {

returnnewBlock(0,"0",1465154705,"my genesis block!!","816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7");

};

varblockchain= [getGenesisBlock()];

vargetGenesisBlock= ()=> {

returnnewBlock(0,"0",1465154705,"my genesis block!!","816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7");

};

varblockchain= [getGenesisBlock()];

确认块的完整性

在任何时候都必须能确认一个区块或者一整条链的区块是否完整。在我们从其他节点接收到新的区块,并需要决定接受或拒绝它们时,这一点尤为重要。

varisValidNewBlock= (newBlock,previousBlock)=> {

if(previousBlock.index+ 1!== newBlock.index){

console.log('invalid index');

returnfalse;

}elseif(previousBlock.hash!== newBlock.previousHash){

console.log('invalid previoushash');

returnfalse;

}elseif(calculateHashForBlock(newBlock)!== newBlock.hash){

console.log('invalid hash: '+ calculateHashForBlock(newBlock)+ ' '+ newBlock.hash);

returnfalse;

}

returntrue;

};

varisValidNewBlock= (newBlock,previousBlock)=> {

if(previousBlock.index+ 1!== newBlock.index){

console.log('invalid index');

returnfalse;

}elseif(previousBlock.hash!== newBlock.previousHash){

console.log('invalid previoushash');

returnfalse;

}elseif(calculateHashForBlock(newBlock)!== newBlock.hash){

console.log('invalid hash: '+ calculateHashForBlock(newBlock)+ ' '+ newBlock.hash);

returnfalse;

}

returntrue;

};

任何时候在链中都应该只有一组明确的块。万一冲突了(例如:两个结点都生成了72号块时),会选择有最大数目的块的链。

varreplaceChain= (newBlocks)=> {

if(isValidChain(newBlocks)&& newBlocks.length> blockchain.length){

console.log('Received blockchain is valid. Replacing current blockchain with received blockchain');

blockchain= newBlocks;

broadcast(responseLatestMsg());

}else{

console.log('Received blockchain invalid');

}

};

varreplaceChain= (newBlocks)=> {

if(isValidChain(newBlocks)&& newBlocks.length> blockchain.length){

console.log('Received blockchain is valid. Replacing current blockchain with received blockchain');

blockchain= newBlocks;

broadcast(responseLatestMsg());

}else{

console.log('Received blockchain invalid');

}

};

结点的本质是和其他结点共享和同步区块链,下面的规则能保证网络同步。

当一个结点生成一个新块时,它会在网络上散布这个块。

当一个节点连接新peer时,它会查询最新的block。

当一个结点遇到一个块,其index大于当前所有块的index时,它会添加这个块到它当前的链中,或者到整个区块链中查询这个块。

当一个结点生成一个新块时,它会在网络上散布这个块。

当一个节点连接新peer时,它会查询最新的block。

当一个结点遇到一个块,其index大于当前所有块的index时,它会添加这个块到它当前的链中,或者到整个区块链中查询这个块。

如图为当节点遵循前文所述协议时会发生的一些典型通信场景

我没有采用自动发现peer的工具。peers的位置(URL)必须是手动添加的。

结点控制

在某种程度上用户必须能够控制结点。这一点通过搭建一个HTTP服务器可以实现。

varinitHttpServer= ()=> {

varapp= express();

app.use(bodyParser.json());

app.get('/blocks',(req,res)=> res.send(JSON.stringify(blockchain)));

app.post('/mineBlock',(req,res)=> {

varnewBlock= generateNextBlock(req.body.data);

addBlock(newBlock);

broadcast(responseLatestMsg());

  来源:imtoken钱包app币安钱包ios手机app  更新时间:2023-10-01 03:25:59

城市分站
友情链接
联系我们

地址:铜陵市麻城路919号

电话:13669583062

传真:13727601113

邮箱:95724472@qq.com

10.4891

Copyright © 2023 Powered by imtoken钱包app币安钱包ios手机app   sitemap