区块链作为近几年十分热门的互联网技术,作为一个合格的程序猿应当不忘初心,保持对技术的热情去了解去学习。并且 Node.js 可以用来开发区块链,solidity开发智能合约,其也是类JavaScript 的语言,因此区块链还是十分适合前端工程师了解学习的。
区块链(block chain)字面意思是包含信息的区块链接一起组成的信息链条, 本质是分布式、不可篡改、信息透明化的、昂贵的、缓慢的数据库。
其发展分为三个部分:
有以下特性:
基于区块链的特性的各种脑洞大开的应用
具体应用领域
迷你区块链 iblockchain,这是github上的一个开源项目,可以帮助理解区块链,有以下主要功能:
想要查看当前的区块链,你需要在命令提示行下输入blockchain或者bc。你应该会看到像下面的图片一样的一个区块。
isValidNewBlock (newBlock, previousBlock) {
const newBlockHash = this.calculateHashForBlock(newBlock)
if (previousBlock.index + 1 !== newBlock.index) {
console.log('[错误]: 新区快index不对')
return false
} else if (previousBlock.hash !== newBlock.previousHash) {
console.log(`[错误]: 第${newBlock.index}个区块的previousHash不对`)
return false
} else if (newBlockHash !== newBlock.hash) {
console.log(`[错误]: 第 ${newBlock.index}个区块hash不对,算出的是${newBlockHash} 区块里本来的hash是${newBlock.hash} 看来数据被篡改了`)
return false
} else if (newBlockHash.slice(0, this.difficulty) !== '0'.repeat(this.difficulty)) {
return false
} else if (!this.isValidTrans(newBlock.data)) {
console.log('[错误]: 交易不合法')
return false
} else {
return true
}
}
generateNewBlock () {
const nextIndex = this.blockchain.length
const previousHash = this.getLastBlock().hash
let data = this.data
let timestamp = new Date().getTime()
let nonce = 0
let hash = this.calculateHash(nextIndex, previousHash, timestamp, data, nonce)
while (hash.slice(0, this.difficulty) !== '0'.repeat(this.difficulty)) {
nonce = nonce + 1
timestamp = new Date().getTime()
hash = this.calculateHash(nextIndex, previousHash, timestamp, data, nonce)
}
return {
index: nextIndex,
previousHash,
timestamp,
nonce,
hash,
data: this.data
}
}
Nonce迭代到直到Hash有效。在我们的案例中,一个有效的Hash至少要拥有4个前置0。查找与有效Hash对应的Nonce的过程就是挖矿。随着难度的增加,可能的有效Hash数量就会减少。伴随着有效Hash的减少,我们需要更强的算力来查找有效Hash。挖矿是写入数据,是昂贵的操作,需要设置一定的难度,Nonce则是难度系数的体现。 6. 为什么这么重要? 这些机制非常重要,它们使区块链不可变。如果我们有这么一个区块链“A->B->C”,而且有一个人想要改变区块A上的数据。那么会发生什么呢?
改变一个区块的唯一方法就是将这个区块重新挖一遍,接下来是所有的区块。由于总是有新的区块被添加,因此改变区块几乎是一件不可能的事。
总结一下用 Node.js 开发区块链的思路
目前区块链更广泛的应用是它的二代技术,强类型语言solidity开发智能合约,truffle框架自动化部署编译合约代码,web3引入合约到前端代码中,再结合前端技术展示页面,根据合约制定的规则响应用户的操作,就可以做去中西化的应用DAPP,比如众筹、宠物领养等等。
DAPP中,用户写入数据(比如添加众筹课程、领养宠物等)是需要支付比特币的,这时就需要用到 chrome 插件 metamask 比特币钱包,具体如何安装插件以及开发DAPP,truffle官网中有详细demo教程,就不一一赘述了: DAPP宠物领养开发教程。以下是开发 DAPP 的思维导图:
本人的领养宠物项目:zyqq/pet-shop,用react+web3连接智能合约开发了领养宠物的DAPP,代码展示了前端如何链接区块链
“志存高远,脚踏实地。是前端,但不止于前端”,学无止境,大伙共勉。
参考文章: 1. 写给前端的区块链开发入门指南 2. 前端技术和区块链技术的结合点在哪里