区块链原理及js实现区块链钱包例子

区块链原理及js实现区块链钱包例子

<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

最近区块链又火了,上升到国家战略层面,那么区块链到底是啥?

一、啥是区块链

区块链,曾被誉为“具有改变世界潜力的颠覆性新兴技术”。从学术角度来解释,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链本质上是一个去中心化的数据库。

懂了吗,如果还不懂,那么有个通俗的解释,

区块链可以视作一个账本,每个区块可以视作一页账,其通过记录时间的先后顺序链接起来就形成了“账本”。

在商业领域,假账错账是十分头疼的事情。而通过区块链技术,则每一笔交易通过分布式留存,任何节点想要篡改几乎没有可能。即使单一区块数据损坏,链上其他区块也有完整且真实的数据留存。区块链在构筑现代商业社会的交易、安全、信用等体系上意义重大。

区块链的特点

1、异常安全:不同于公司或政府机构拥有的集中化数据库,区块链不受任何人或实体的控制,数据在多台计算机上完整地复制(分发)。与集中式数据库不同,攻击者没有一个单一的入口点,数据的安全性更有保障。

<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

2、不可篡改性:一旦进入区块链,任何信息都无法更改,甚至管理员也无法修改此信息。一个东西一旦出现就再也没法改变,这种属性对于人类目前所处的可以更改、瞬息万变的网上世界而言意义重大。

<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

3、可访问:网络中的所有节点都可以轻松访问信息。

<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

4、无第三方:因为区块链的去中心化,它可以帮助点对点交易,因此,无论您是在交易还是交换资金,都无需第三方的批准。区块链本身就是一个平台。

那么作为技术人员,我们要研究一下区块链的技术原理

二、技术原理

区块链的数据结构

<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

1.1. 区块头

区块头主要包含的三组元数据分别是:(1)用于连接前面的区块、索引自父区块哈希值的数据;(2)挖矿难度、时间戳、Nonce(随机数,用于工作量证明算法的计数器,也可理解为记录解密该区块相关数学题的答案的值);(3)能够总结并快速归纳校验区块中所有交易数据的Merkle(默克尔)树根数据。当然区块头不仅仅包含这些元数据,还有其他比如:版本号、难度值等(以上这些生涩的名称不懂没关系,后面几篇文章都会分析这些技术)。

从这个结构来看,区块链的大部分功能都由区块头实现。

1.2 区块主体

区块主体所记录的交易信息是区块所承载的任务数据,具体包括交易双方的私钥、交易的数量、电子货币的数字签名等。

2. 链

比特币系统大约每10分钟会创建一个区块,这个区块包含了这段时间里全网范围内发生的所有交易。每一个区块都保存了上一个区块的哈希值,使得每个区块都能找到其前一个区块,这样就将这些区块连接起来,形成了一个链式的结构。

3. 区块的形成过程

在当前区块加入区块链后,所有矿工就立即开始下一个区块的生成工作:(1)把在本地内存中的交易信息记录到区块主体中;(2)在区块主体中生成此区块中所有交易信息的Merkle树,把Merkle树根的值保存在区块头中;(3)把上一个刚刚生成的区块的区块头的数据通过SHA256算法生成一个哈希值填入到当前区块的父哈希值中;(4)把当前时间保存在时间戳字段中;(5)难度值字段会根据之前一段时间区块的平均生成时间进行调整,以应对整个网络不断变化的整体计算总量,如果计算总量增长了,则系统会调高数学题的难度值,使得预期完成下一个区块的时间依然在一定时间内。

区块链的网络结构

区块链基础架构和通信OSI 七层协议有些类似,只不过区块链分为6层,包括数据层、网络层、共识层、激励层、合约层、应用层。每层分别完成一项核心功能,各层之间互相配合,实现一个去中心化的信任机制。
<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

1、数据层

是最底层的技术,主要实现了两个功能,一个是相关数据的存储,另一个是账户和交易的实现与安全。数据存储主要通过区块的方式和链式结构实现。账号和交易的实现基于数字签名、哈希函数和非对称加密技术等多种密码学算法和技术,保证了交易在去中心化的情况下能够安全的进行。

主要封装了底层数据区块的链式结构,以及相关的非对称公私钥数据加密技术和时间戳等技术,这是整个区块链技术中最底层的数据机构。其建立的一个起始节点是“创世区块”,之后在同样规则下创建的规格相同的区块通过一个链式的结构依次相连组成一条主链条。随着运行时间越来越长,新的区块通过验证后不断被添加到主链上,主链也会不断地延长。

2、网络层

主要实现网络节点的连接和通讯,又称点对点技术,是没有中心服务器、依靠用户群交换信息的互联网体系。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,其具有去中心化与健壮性等特点。

每一个节点既接收信息,也产生信息。节点之间通过维护一个共同的区块 链来保持通信。区块链的网络中,每一个节点都可以创造新的区块,在新区块被创造后会以广播的形式通知其他节点,其他节点会对这个区块进行验证,当全区块链网络中超过51%的用户验证通过后,这个新区块就可以被添加到主链上了。

3、共识层

主要实现全网所有节点对交易和数据达成一致,防范拜占庭攻击、女巫攻击、51%攻击等共识攻击,其算法称为共识机制。共识机制算法是区块链技术的核心技术,因为这决定了到底由谁来进行记账,记账者选择方式将会影响整个系统的安全性和可靠性。区块链中比较常用的共识机制主要有:投注共识、瑞波共识机制、Pool验证池、实用拜占庭容错、授权拜占庭容错、帕克索斯算法等。

4、激励层

激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制,该层主要出现在公有链中,因为在公有链中必须激励遵守规则参与记账的节点,并且惩罚不遵守规则的节点,才能让整个系统朝着良性循环的方向发展。所以激励机制往往也是一种博弈机制,让更多遵守规则的节点愿意进行记账。而在私有链中,则不一定需要进行激励,因为参与记账者的节点往往是在链外完成了博弈,也就是可能有强制力或者有其它需求来要求参与者记账。

激励层主要实现区块链代币的发行和分配机制,比如以太坊,定位以太币为平台运行的燃料,可以通过挖矿获得,每挖到一个区块固定奖励5个以太币,同时运行智能合约和发送交易都需要向矿工支付一定的以太币。

5、合约层

主要封装各类脚本、算法和智能合约,赋予账本可编程的特性。区块链2.0通过虚拟机的方式运行代码实现智能合约的功能,比如以太坊的以太坊虚拟机(EVM)。同时,这一层通过在智能合约上添加能够与用户交互的前台界面,形成去中心化的应用(DAPP)。以太坊在比特币结构基础上,内置了编程语言协议,从而在理论上可以实现任何应用功能。如果把比特币看成是全球账本的话,那么就可以把以太坊看作是一台“全球计算机”。

6、应用层

主要封装了区块链的各种应用场景和案例,比如搭建在以太坊上的各类区块链应用就是部署在应用层,所谓可编程货币和可编程金融也将会搭建在应用层。

数据层、网络层和共识层是构建区块链应用的必要因素,否则将不能称之为真正意义上的区块链。而激励层、合约层和应用层则不是每个区块链应用的必要因素

实战

如何用js实现一个简单的记账本和钱包

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>BFW DEMO JS PAGE</title>
    <script id="bfwone" data="dep=jquery.17|crypto-js-3.1.9-1/crypto-js" src="http://repo.bfw.wiki/bfwrepo/js/bfwone.js"></script>
    <script>
        class Block {

            constructor(index, timestamp, data, previousHash = '') {

                this.index = index;

                this.previousHash = previousHash;

                this.timestamp = timestamp;

                this.data = data;

                this.hash = this.calculateHash();

            }

            calculateHash() {

                return CryptoJS.SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();

            }

        }
        class Blockchain {

            constructor() {

                this.chain = [this.createGenesisBlock()];

            }

            createGenesisBlock() {

                return new Block(0, "011/01/2019", "bfw init block", "0");

            }

            getLatestBlock() {

                return this.chain[this.chain.length - 1];

            }

            addBlock(newBlock) {

                newBlock.previousHash = this.getLatestBlock.hash;

                newBlock.hash = newBlock.calculateHash();

                this.chain.push(newBlock);

            }

            isChainValid() {

                for (let i = 1; i < this.chain.length; i++) {

                    const currentBlock = this.chain[i];

                    const previousBlock = this.chain[i-1];

                    if (currentBlock.hash !== currentBlock.calculateHash()) {

                        return false;

                    }

                    if (currentBlock.previousHash !== previousBlock.hash) {

                        return false;

                    }

                }

                return true;

            }

        }
        bready(function() {
            let bfwcoin = new Blockchain();

            bfwcoin.addBlock(new Block(1, "1/12/2019", {
                amount: 4
            }));

            bfwcoin.addBlock(new Block(2, "2/12/2019", {
                amount: 8
            }));
            // 检查是否有效(将会返回true)
            console.log('区块链是否有效? ' + bfwcoin.isChainValid());
            // 现在尝试操作变更数据
            bfwcoin.chain[1].data = {
                amount: 100
            };
            console.log(bfwcoin);
            // 再次检查是否有效 (将会返回false)
            console.log("区块链是否有效? " + bfwcoin.isChainValid());
 
        });
        
        
    </script>


</head>
<body>

</body>
</html>


三、应用领域

<a href='/tag/blockchain.html'>区块链</a>原理及js实现<a href='/tag/blockchain.html'>区块链</a>钱包例子

金融领域

区块链在国际汇兑、信用证、股权登记和证券交易所等金融领域有着潜在的巨大应用价值。将区块链技术应用在金融行业中,能够省去第三方中介环节,实现点对点的直接对接,从而在大大降低成本的同时,快速完成交易支付。

物联网和物流领域

区块链在物联网和物流领域也可以天然结合。通过区块链可以降低物流成本,追溯物品的生产和运送过程,并且提高供应链管理的效率。该领域被认为是区块链一个很有前景的应用方向。

公共服务领域

区块链在公共管理、能源、交通等领域都与民众的生产生活息息相关,但是这些领域的中心化特质也带来了一些问题,可以用区块链来改造。区块链提供的去中心化的完全分布式DNS服务通过网络中各个节点之间的点对点数据传输服务就能实现域名的查询和解析,可用于确保某个重要的基础设施的操作系统和固件没有被篡改,可以监控软件的状态和完整性,发现不良的篡改,并确保使用了物联网技术的系统所传输的数据没用经过篡改 。

数字版权领域

通过区块链技术,可以对作品进行鉴权,证明文字、视频、音频等作品的存在,保证权属的真实、唯一性。作品在区块链上被确权后,后续交易都会进行实时记录,实现数字版权全生命周期管理,也可作为司法取证中的技术性保障。

保险领域

在保险理赔方面,保险机构负责资金归集、投资、理赔,往往管理和运营成本较高。通过智能合约的应用,既无需投保人申请,也无需保险公司批准,只要触发理赔条件,实现保单自动理赔。

公益领域

区块链上存储的数据,高可靠且不可篡改,天然适合用在社会公益场景。公益流程中的相关信息,如捐赠项目、募集明细、资金流向、受助人反馈等,均可以存放于区块链上,并且有条件地进行透明公开公示,方便社会监督。


{{collectdata}}

网友评论0