学习任何技术之前,都需要搞清楚这个技术的由来以及专有名词,心中刻下大致的模型,有个大致理解。
-
比特币
区块链技术起源于 2008 年 10 月 31 日 中本聪(Satoshi Nakamoto)发表的比特币论文:《Bitcoin: A Peer to Peer Electronic Cash System》,即现在大家所说的比特币白皮书,该论文论述了基于 P2P 网络的电子现金系统的设计,系统中产生和流通的现金就是比特币(Bitcoin)。
-
以太坊
比特币网络的功能仅限于让用户进行财务交易(Financial Transactions),之后没多久,很多人意识到他们可以使用比特币创意中的区块链技术来进行金钱之外的价值交换,这些人中想得最清楚的 Vatalik Buterin(后来被大家尊称为"V神"的那个天才程序员)于 2013 年末发布了以太坊的白皮书:《Ethereum: The Ultimate Smart Contract and Decentralized Application Platform》,白皮书的最新版可以在 GitHub 看到。
-
DApp
基于智能合约创建更加复杂的去中心化应用(Decentralized Application,简称为 DApp)的技术设计
账户?交易?区块?区块链?
-
账户(Account)是用户在银行的户头+密码的组合,在区块链世界中也是如此,不论是比特币还是以太坊的账户都由地址、公钥、私钥 3 部分构成,其中地址相当于用户名,而公钥+私钥相当于密码,尤其是私钥,丢失或者泄露就意味着失去账户(敏感信息、资金)的控制权;
-
交易账本(Transaction)是账本中的任意一条收支记录,在区块链世界中可以指两个账户之间的转账交易、或者智能合约调用请求;
-
区块(Block)是账本中的一页,账本的每页可能包含多笔收入和支出,同样,区块链中的每个区块都可能包含多笔交易;
-
区块链(Blockchain)是装订成册的多页账本,账本不同页按照记录时间先后顺序组织,区块链中不同区块按被矿工打包的时间先后组织。
区块链技术通常被简单描述为:公开的、分布式、不可篡改的的数据库技术或记账技术,
块高度?出块时间?
-
块高度,可理解为账本的页数
在区块链世界里,块高度可以理解为自该区块链开始运行到现在共产生了多少个区块;
换个角度,我们可以认为块高度就是区块链世界的时间,每产生一个新的区块,块高度就会+1;
比特币最新块高度可以到 blockexplorer查看,以太坊最新块高度可以到 etherscan.io 查看。 -
出块时间,可以理解为记完每页账并在上面摁完手印儿需要花多少时间
即区块链上相邻两个区块产生出来的时间间隔,或者常说的交易确认时间;
(注意这里说的交易确认时间指某笔交易从发起到被打包进区块链的时间)
比特币的区块时间通常控制在 10 分钟;
以太坊的区块时间在 15 秒左右;
以太坊网络
关于什么是以太坊网络,可以从整体和个体两个视角来理解:
整体视角
以太坊网络本质是 P2P 网络系统,其用途是发起交易、存储交易历史,这里的交易可以是转账或者是调用智能合约中的方法;
以太坊区块链则是存储了以太坊网络上发生过的每笔交易的数据库;
以太坊网络类比到 Web 开发工程里面3 套环境,可将其归类如下:
-
主网:Mainnet,就是以太坊的线上环境,记录、保存用户和智能合约的交易,主网中存储的代币才具有真正的价值;
-
测试网:Testnet,就是以太坊的测试环境,目的是方便社区和开发者测试智能合约、转账等功能,典型的测试网络有 Rinkeby、Ropsten、Kovan,完整列表见 testnet.etherscan.io,其中的代币不具有任何价值;
-
其他网:就是以太坊的开发环境,常通过开发者在本地运行以太坊节点组成,或者使用各种便捷的工具启动的本地测试网,以及以内部测试为目的而搭建的私有网络等,随着以太坊区块链数据的累计,运行全节点的时间和硬件成本也越来越大,本我们将会摒弃传统教程自建测试网络的方式,转而使用更加轻量的开发环境搭建方式。
个体视角
P2P 网络通常包含多个节点,每个节点都需要运行以太坊客户端,而任何人都可以运行以太坊节点;
每个以太坊网络上的节点都包含了以太坊区块链数据库的整体副本;
每个以太坊网络节点都可以接收 RPC 交易请求并将请求广播给网络中的其他节点;
每个以太坊节点都会尝试进行交易的校验、打包(常说的挖矿);
即区块生产的任务,生产出的区块也会被广播给其他网络节点;
注意:
以太坊不同网络之间的账户可以完全相同;
就好比我们可以把线上数据库的数据全部同步到我们的测试环境数据库一样;
但是不同测试网络之间、测试网络和主网之间、本地开发网络和主网之间是完全隔离的;
即无法进行转账和智能合约功能调用。
与以太坊网络交互?
交互的具体定义是:向以太坊网络发送转账请求,或调用智能合约函数(调用api,获得res);
举个栗子:
微信小程序生态下,开发者、普通用户、平台之间的交互方式可简化如下:
微信小程序生态
以太坊生态中,开发者、普通用户、平台之间的交互方式可简化为:
以太坊生态
知识点:
- web3.js,是前端工程师通过代码和以太坊网络交互的桥梁,而实际的 DApp 测试离不开使用钱包(Metamask)
实际上,不论是开发者,还是普通用户,与以太坊网络的交互都会落地到具体的网络节点上面;
因为只有节点可以接收 RPC 请求并将其广播给其他节点;
任何代码或者应用如果需要同以太坊网络交互,都需要通过某个具体的节点。
智能合约
-
智能合约指以太坊网络上被代码控制的一个账户
不同于我们使用各种钱包软件 创建的账户(由创建账户的用户来控制),智能合约对应的账户是由代码控制的;
其他账户(包括智能合约账户、普通用户账户)可以通过交易(Transaction)的方式与智能合约账户交互;
部账户- 内部账户 :智能合约账户
- 外部账户:普通用户账户
我们常常用 智能合约 指代 智能合约源代码 或部署在 以太坊网络上的智能合约账户
但本质上两者是有明显区别的:
- 如果把智能合约源代码比作设计图,那么智能合约账户就是根据蓝图造出来的车或者建筑。
-
相同的源代码可以部署到不同的网络上,或者在相同的网络上部署很多次,都会产生不同的智能合约地址。
关系图
部署所产生的智能合约账户只存在于其被部署到的那个网络;
反过来亦然,普通账户则在不同网络间是通用的;
每个智能合约账户会有下面几个关键属性:
- balance,即该智能合约账户所控制的资产余额,比如某个抽奖智能合约中奖池的资金;
- storage,智能合约的相关数据会存储在这里,可粗暴的将其看做是 DApp 的数据库,比如抽奖智能合约里面存储参与人的地址;
- code,智能合约的字节码,由智能合约源代码编译而来,存储在区块链上方便任何节点接受智能合约的函数调用;
Cls1 end
网友评论