区块链三圈:
- 币圈
- 链圈
- 矿圈
钱包:
- on-chain
- off-chain
区块链分类:
- 公有链
- 私有链
- 联盟链
一、比特币:
底层网络:
-
并不是虚拟货币比特币本质上是记账本
-
不可篡改
-
公开
-
安全
-
可编程
-
匿名
-
去中心
-
合约规定舍弃短的链(孤块),所以只能硬分叉,并且各自使用不同客户端运行维护
-
总共发行20999999.9769比特币,约为2100万枚
-
区块高度加210000 ,挖矿奖励减半(约到2137年,比特币的发行速率将递减在每区块1聪比特币)
-
大约10分钟开采一个区块,合约会根据难度控制时间(奖励减半周期为四年)
时间 | 挖矿奖励 | 高度 |
---|---|---|
2009.1 | 50 | 0 |
2012.11 | 25 | 210000 |
2016.7 | 12.5 | 420000 |
2020.5 | 6.25 | 630000 |
2024 | 3.125 | 840000 |
2028 | 1.5625 | 950000 |
矿机的算力大都消耗在争夺记账权上
比特币第一次区块奖励减半前的价格:2.55美元
比特币第一次区块奖励减半后一年的价格:1,037美元
比特币第二次区块奖励减半前的价格:268美元
比特币第二次区块奖励减半前一年的价格:2,525美元
二、以太坊
- 叔块
- 软分叉
- 十来秒产生一个区块
幽灵协议:孤块内容会回到交易池中,后面子节点越多,权重越大,根据权重选择分叉的链
侧链:完成其他功能,如前链找后链、增加区块大小、闪电网络、隔离见证(把校验信息单独放到一个块中,使主链中块记录更重要的交易信息)
ETH网络结构:
- 应用层:DAPP、钱包、Geth(go语言实现)、web3.js
- 网络层:p2p节点发现、数据传输广播socket、http
- 合约层:EVM、POW+POS、GHOST
- 激励层:挖矿奖励、叔块奖励、GAS
- 数据层:账户信息——>余额、代码、交易数据、levelDB
以太坊算力查看:https://ethstats.net/,计算单位 TH/s,H代表hash,
1KH/s=1000次/shash
1MH/s=10^6H/s
1GH/s=10^9H/s
1TH/s=10^12H/s
以太坊ICO 7200w币,挖矿奖励每年25%
eth旷工奖励:挖矿奖励、gas奖励、叔块奖励(引用者和挖叔块者获得)
网络发现:由于区块链网络没有中心节点,所以各个服务器之间是如何相互发现的呢?
在bt种子文件中,记录了广播服务器地址,链接广播地址后,会把自己节点信息注册上去,服务列表拉去下来(有点类似于注册中心)
纯中心化实现方法列举:
- scan
- 内置一些ip地址,或域名(比特币通过内置域名中解析到相邻的节点)
以太坊的区块大小 动态调整(根据gas调整,gas有上限(矿工投票决定上限))
EVM:
1、结构
- memory 内存:包含方法内容,生命周期随着方法结束,空间释放,临时变量,消耗gas比较小
- storage:链上,高gas,永久持久化
- 栈:后进先出,执行函数比较快,读写速度快,gas比较低,容量非常低
2、特点
-
交易验证
-
运行智能合约
-
完全隔离
-
全节点运行(资源浪费)
-
执行代码前,预付费
-
outOfGas,回滚
-
256位(浪费)
-
算术、位、逻辑运算,比较、跳转
solidity:静态语言;solidity
在线IDE:http://remix.ethereum.org/
智能合约代码:
pragma solidity ^0.5.12;
contract HelloWord {
//钱包地址类型位address
mapping(address => uint) map;
function getAge(address _addr) public view returns(uint age){
return map[_addr];
}
function seNowAge(uint _age) public {
map[msg.sender] = _age;
}
//无符号int,默认256位
uint age;
function setAge(uint _age) public{
age = _age;
}
//view表示该方法没有计算
function getAge() public view returns(uint){
return age;
}
//pure表示里面会有计算
function add(uint a,uint b)public pure returns(uint result,uint r_a){
return (a + b,a);
}
function getUserAccount()public view returns(address addr){
return msg.sender;
}
}
solidity的构造器是在部署到链上的时候被调起的,之后就不会被调起了。
pragma solidity ^0.5.12;
contract mycoin{
string name;
uint age;
//string必须必须加memory关键字
constructor(string memory initName, uint initAge) public {//构造器
name = initName;
age = initAge;
}
function getinfo()public view returns(string memory _name, uint _age){
return(name,age);
}
}
ERC 20协议,提供了接口,规范。
ERC 721协议
keystone=(私钥+地址)
三、其他币
EOS:
由持币的股东选举N个超级节点,只有超级节点可以在链上加区块