第一章 智能合约概述
智能合约是运行在区块链公链上的一种代码。
可以将区块链公链理解成操作系统,智能合约虚拟机则是编程语言编译之后的代码运行环境。
1. 区块链
1.1 区块链基础知识
区块链通常被理解为超级账本,账户与账户直接可以通过交易来完成转账,但这种转账区别于传统银行。
(1)这是一个完全去中心化的金融系统。因为整个系统中没有这样的中心化部门来管理账户信息。使用者只需要根据一种【非对称加密算法】来生成一个密钥对,其公钥作为账户地址,也就是常说的【区块链钱包地址】,这个地址可以在网络中传播,允许网络中所有的账户获取和使用。
由于私钥非常复杂,因此区块链钱包会将私钥进行对称加密,通过使用者输入人类能够理解的密码作为私钥加密的密钥,如果忘记解密密钥的密码,用户就失去了对账户的操作权限,只能查看余额但是没法进行转账和使用,这就是社交媒体经常报道丢失比特币的情况。
(2)这是一个完全无中心的账本系统。传统情况下,A给B转账100,银行给A扣除100,给B加100,生成两条记录。在区块链上发生的交易则完全不一样,每一笔交易都是一条转账记录,如果该交易成功被整个区块链网络认可则可转账成功,并且会将转账记录存储在区块链的数据库里面,每个区块链节点都可以访问和操作这个数据库,并且任何人都可以查询交易双方的账户信息。BTC的转账,除了转给对方,还要将账户下的余额转给自己,这样就会生成多条记录,这样做是因为BTC没有账户余额的设计。
(3)发生在区块链上的交易,是存储在区块链网络中的所有全节点上的,并且也是公开可查的。但是即使能看到某个账户下的所有交易和账户余额,也无法跟现实生活中的人联系在一起。
1.2 区块
区块的作用就是将不同时间阶段内的交易数据按照一定的格式和数量,打包成结构化数据,方便存储和管理。只有被打包到区块中并且被全公链网络认可的交易,才能算真正的有效交易。比如以太坊出块的时间间隔约为15s,而比特币网络则需要10min才生成一个区块。
1.3 链
1.4 挖矿
区块在被增加到区块链之前,并不是所有区块都可以生成区块数据。这个过程有一定的门槛,需要筛选出一个值得信任的节点来生成数据,然后由其他节点来验证其生成数据的有效性。这个生产区块的过程会得到数字货币的激励,因此很多节点会加入生产区块的竞争。这个过程被称作挖矿,而生成数据的节点被称作矿工。
成为出块人就可以成功拿到奖励,奖励分为系统的奖励和交易中的交易手续费,在每一笔交易数据中,转账人都可以手动设置手续费,这些手续费用于奖励矿工打包的工作。在转账时设置的手续费越高,转账时间就越短,转账速度就越快。
1.5 共识算法
为了持续生成区块而被所有网络节点认可的方案就叫做共识算法,被称作PoW (Proof of Word).
1.6 分叉
由于整个区块链系统是点对点的对等网络,没有统一的中心机构协调各个节点的行为,各个行为都是相互独立的,存在同时生产出区块的情况。为了解决这个问题,区块链采用了一种长链抛弃锻炼的决策方式。参考微信群的报名接龙,多个人选择了同一个序号的情况。
1.7 攻击
2. 以太坊智能合约
2.1 以太坊
以太坊在比特币网络的基础上增加了以太坊智能合约虚拟机,即EVM。就成了一个可编程的去中心化平台,任何系统开发者在支付一定的部署费用之后,就可以拥有一套完全去中心化的业务系统。
以太坊账户分为两种:(1)智能合约账户:nonce、余额、存储数据的Hash值 (2)外部账户:nonce、余额 组成。
2.2 智能合约
以太坊公链是操作系统,EVM是区块链代码的运行环境,而Solidity则是区块链的编程语言,通过编程语言编写的逻辑模块被称作智能合约。
2.3 DAPP Decentralized Application(去中心化应用)