Web3 入门

冰岩作坊 October 19, 2023

区块链

web3主要基于区块链的去中心化机制。简单来说,区块链是去中心化的交易数据库,可以视作一个状态转换系统和共识系统。

区块链实际上是一个由去中心化网络运行的公开账本,网络中运行的节点不断尝试将交易记录打包成“区块”,每个区块包含时间戳、上一区块生成以来发生的所有交易列表和对上一个区块的引用(即哈希)等数据。随着时间推移就创建出了一个持续增长的区块链。

从技术角度讲,诸如比特币等加密货币账本可视作一种状态转换系统,该系统有一个“状态”,由全部现存比特币的所有权状态和一个“状态转换函数”组成,状态转换函数以状态和交易为输入并输出新状态作为结果。

共识机制

为了确保账本的安全可靠,区块链网络是基于非常安全的密码学。而为了确保记录正确的交易,并且防止恶意攻击,整个网络的所有节点需要对当前区块链的正确性达成共识。

共识机制包括了工作量证明(以太坊目前已经升级采用权益证明)和正确链选择方法。

工作量证明

区块由矿工竞争打包生成,一旦某个矿工成功生成一个区块,这个区块将会加入区块链,并且成功打包区块的矿工能得到 BTC 代币激励,这也是比特币发行的机制。

矿工竞争打包这个机制,意味着恶意攻击者可以先支付比特币达成一个交易,再从这笔交易所在区块的 上一个区块 重新生成虚假的不包含该笔交易的区块,用来替代旧的区块。

工作量证明,就是使 打包区块这个过程 需要大量的算力,也就是需要运算时间。

如果想要伪造区块,那么必须回溯之前的区块重新打包,那么虚假的区块链就会落后于真实的区块链,想要追赶真实的区块链的话,就必须要有更大的算力。

规定区块链发生分叉时,最长链被认为是诚实的区块链。此时攻击者为了使他伪造的区块链最长,他需要拥有比除了他以外的全网更多的算力来追赶(即“51%攻击”)。

权益证明

以太坊目前的共识机制的基础。

每个时隙,随机选择一个验证者成为区块提议者,负责创建新区块。随机选择一个验证者委员会,通过他们的投票确定所提议区块的有效性。

验证者通过质押他们的 ETH 来创建新的区块,如果它们试图串通恶意攻击,就会失去所有质押资产。

链的选择根据验证者投票的累积总数,并与验证者质押的以太币余额加权。

以太坊生态

区块链最初的应用是比特币,就目前的价值而言,是一个金融投资工具,整个系统本身并没有内在价值,而以太坊区块链上内置了以太坊虚拟机EVM,能够使用图灵完备的编程语言(Solidity) 在以太坊上部署并运行程序(智能合约),使得去中心化应用(Dapps),非同质化代币(NFT)等概念成为可能。

基于区块链去中心化构建应用的好处是,无需基于信任而是基于密码学,避免监管,一切数据公开透明。

智能合约开发

智能合约就是运行在以太坊链上的代码程序。dapps的开发,实际上就是智能合约的开发。合约通过transaction进行部署,所有与区块链的交互都被通过transaction进行。

合约开发语言 Solidity

以太坊支持使用 Solidity 语言进行链上交互,也就是开发和部署智能合约。

ethers.js / web3.js

使用 JavaScript 进行dapp的前端开发,需要与以太坊等区块链进行连接交互,通过ethers.js / web3.js 库提供的API可以非常便捷地操作。

ethers.js 库旨在为以太坊区块链及其生态系统提供一个小而完整的 JavaScript API 库,是基于web3.js的更便于调用的上层封装,可以用于在前端项目中与区块链进行交互,包括部署合约、发送transaction。