以太坊背景:
为了解决比特只能应用于支付领域而设计的一种新的公链
概念:
以太坊是一个建立区块链技术之上的去中心化应用平台。允许任何人在该平台中建立和使用通过区块链技术运行的去中心化应用,被称为区块链2.0。
优点
- 以太坊平台对底层的区块链进行了封装,让区块链开发者可以直接上层应用平台进行开发,只需要专注于应用本身的开发,降低开发难度
- 与bitcoin相比,以太坊采用的是账户模型,不再使用UTXO
①:节省空间,每笔交易只有一个输入,一个输出,一个签名
②:更加容易理解
③:编码简单,不需要写复杂的脚本
- 共识
①:以太坊采用改进的POW,避免了比特币的能耗问题
②:Ethash内存难解,不再是单纯依靠算力
- 智能合约:和比特币相比,以太坊引入的是一个图灵完备的智能合约开发语言
缺陷
- TPS低,不适合快速大量的交易
- 以太坊网络节点不适合存储大文件
钱包与浏览器
- 以太坊钱包可以理解为以太坊客户端,也可以认识是一个开发者工具,主要提供账户管理,转账,挖矿,智能合约的部署与执行
- 图形化钱包:Mist
- 数据浏览器
- etherscan.io:可以浏览以太坊各项数据包括区块链相关信息以及token
- myetherwallet.com:可以通过该网站做以太坊相关操作
- stateofthedapps:浏览以太坊DAPP的网站
智能合约
- 概念:在计算机领域,智能合约批一种计算机协议,这类协议一旦部署就能自称执行和自我校验,不再需要人为干预
- 优点:
- 较低的人为干预
- 精确执行
- 运行成本较低
- 去中心化权威
- 缺点:合约本身一旦出现问题,将会无法修改与修复
- 合约部署流程
- 启动一个以太坊节点
- 可以使用web3.js等库提供的API进行合约调用
- 部署到以太坊上
- 编译智能合约
- 编写智能合约
- GAS:手续费(燃料)
以太坊货币
- 1 eth = 10^18 wei
- 1 eth = 10^9 gwei
以太坊架构详解
- 上层:DAPP,钱包,客户端,JS框架
- 底层:相关的框架模块
以太坊核心概念
- 账户
- 外部账户:就是管理以太币的账户,被公钥-私钥控制
- 合约账户:合约账户被存储在账户中的合约代码控制
- 共同点:都可以持有以太币;都可以发送交易
- 区别:
①:控制方不同,合约账户由合约代码控制,外部账户由私钥控制
②:外部账户不包含代码,合约账户包含合约代码
5.以太坊账户内部结构
外部账户 |
合约账户 |
|
Nonce |
该账户地址发送的交易数量。出现在交易字段中,防止双花 |
该账户所创建的合约数量 |
Balance |
账户余额 |
账户余额 |
storageRoot |
Merkle根节点哈希 |
Merkle根哈希 |
codeHash |
默认为空 |
账户的EVM code(编译后的智能合约字节码) |
- EVM(以太坊虚拟):以太坊智能合约的运行环境
- 交易:从外部账户发出的消息(签名数据包)
①:交易内容
- Gas
- 发送的额外数据‘
- 账户余额
- 用于确认发送者的签名
- 消息接收者
②:TPS(交易吞吐量):以太坊每秒能处理的交易数量
③:Gas
- 燃料,也就是手续费,以太坊每执行一笔交易都会收取一定数量的gas,设置gas的目的是限制交易执行所需要的工作量。
- 在执行交易的过程中,如果gas消耗完了,但是,交易还没有执行完成,会触发out-of-gas,同时,当前调用 的所有状态都会被回滚。被消耗的gas不会退还
- Gaslimit:由交易发起人决定,在交易过程最多允许消耗的gas数量
- Gasprice:gas单价,以gwei表示,gasprice是打包交易时选取交易的衡量标准之一
- gasUsed:实际消耗的gas
- 在交易执行过程中,如果实际消耗的gas小于gaslimit,的gas会以ether的方式退还给交易发起者。
- 以太坊状态转换:交易执行过程中,以太坊从一个正确的状态转换为另一个正确的状态的过程
- 常见的DAPP
- Cryptokitties:以太坊游戏
- DAO:去中心化的自治组织
- WeFund:去中心化的众筹平台
- 事件:利用现有的规则解析日志记录
- 共识:
- 以太坊当前采用的共识算法仍然是POW(ethash)
- 与比特币的工作证明机制不同,该算法加入内存难度,使得以算力为核心不再可靠
- 叔区块
- 从比特的意义上来说,就是一个废区块
- 概念:符合了难度条件,但是在区块的交易中没有被确认的区块