[ERC20]标准协议及相关功能说明

笔记学习
更新记录:
[ERC20]标准协议及相关功能说明_第1张图片
一、基本概念 .
1、账户
以太坊分外部账户和合约账户两种

外部账户特点:
有以太币余额
可以发送交易(以太币交易或引发合约代码)
由私钥控制
没有相关代码

合约账户特点:
有以太币余额
有相关代码
代码执行由从其他合约接收的交易或消息(调用)触发
执行的时候,执行任意复杂操作,它自己都永久存储,可以调用其他合约

以太坊区块链上的所有行为都由“外部账户”引发的交易调动,每次合约账户接收到交易时,合约代码会按照输入的参数指示执行,作为交易的一部分发送。合约代码由参与到网络的每个节点上的以太坊虚拟机执行,作为验证新区块的一部分。

2、交易
交易指待签署的数据包,而数据包里存着从外部账户发送到区块链上另一 账号的消息。

交易包括:
消息接收人
一个签名,用于确认发送方身份
VALUE 域,从发送方向接收方转移的wei的数量
可选数据域,包括发送到合约的消息
StartGas,代表交易执行允许采取的运算步骤的最大数量
GaspRice,代表发送人愿意支付的Gas费

3、消息
一条消息本质上就像一笔交易,只不过是由合约创造的,当正在执行代码的合约,执行Call 或者 DeleGateCall操作码时,消息就产生了。

消息包括:
发送方
接收方
VALUE域,和要发送到合约地址的消息的一起转移的wei数量
发送到合约的实际数据
StartGas,限制了消息可以触发的代码执行的gas最大值

4、智能合约
定义:一段部署在evm虚拟机中的代码,无法自动执行,需要人为的触发才能执行,每执行一次需要发起这次执行的账户扣除对应的gas作为手续费。

一个智能合约是一套以“数字形式”定义的“承诺(promises)”.

承诺:指合约参与方同意的(经常是相互的)权利和义务,这些承诺定义了合约的本质和目的。比如,合约规定销售是卖家承诺发送货物,买家承诺支付合理的货款。

数字形式:数字形式指合约部得不写入计算机可读的代码中。因为只要参与方达成协议,智能合约建立的权利和义务,是由一台计算机或者计算机网络执行的。

达成协议
如何判断智能合约的参与方在什么时候达成协议?
取决于特定的智能合约实施,当参与方通过在合约宿主平台上安装合约,致力于合约的执行时,合约就被发现了。

合约执行
“执行”的真正意思也依赖于实施,执行意味着通过技术手段实施。

智能合约与平时的代码其实没有什么区别,只是运行于一个以太坊这样的分布式平台上而已。这个运行的平台,赋予了这些代码不可变,确定性,分布式和自校验状态等特点。代码运行过程中状态的存储,是不可变的。每一个人,都可以开一个自己的节点,重放整个区块链,将会获得同样的结果(能控制所有节点都达到一致状态,就是所谓的共识)
5、区块链底层架构
区块链基础架构分为6层,包括数据层、网络层、共识层、激励层、合约层、应用层。每层分别完成一项核心功能,各层之间互相配合,实现一个去中心化的信任机制。

二、etherscan 提供的功能

[ERC20]标准协议及相关功能说明_第2张图片
1、交易:

以太坊区块链浏览器提供了三种交易查询:
已签名的交易(Txns)
挂起交易(Pending Txns)
合约内部交易(Contract Internal Txns)

已签名的交易包括交易成功的和交易失败的
挂起交易指等待区块确认的交易
合约内部交易:指合约地址转出到交易地址

合约内部交易示意图:
[ERC20]标准协议及相关功能说明_第3张图片

已签名交易账户功能及注释:

[ERC20]标准协议及相关功能说明_第4张图片

什么是”GasLimit”?
GasLimit 是单个区块允许的最多gas总量,可以用来决定单个区块中能打包多少笔交易。
例如:我们有5笔交易的GasLimit分别是10、20、30、40和50.如果区块GasLimit是100,那么前4笔交易就能被成功打包进入这个区块。矿工有权决定将哪些交易打包入区块。所以,另一个矿工可以选择打包最后两笔交易进入这个区块(50+40),然后再将第一笔交易打包(10)。如果你尝试将一个会使用超过当前区块GasLimit的交易打包,这个交易会被网络拒绝,你的以太坊客户端会反馈错误”交易超过区块GasLimit”。

”GasLimit”由谁来决定?
由在网络上的矿工决定的。与可调整的区块GasLimit协议不同的是,一个默认的挖矿策略,即大多数客户端默认最小区块GasLimit为4,712,388。

”GasLimit”如何改变?
矿工用一个挖矿软件(如:ethminer),它连接一个以太坊客户端(Geth或者Pairty),Geth 和Pairty里有更改的功能选项。

挂起交易账户:
挂起交易,是区块未确认完的交易。
[ERC20]标准协议及相关功能说明_第5张图片

合约内部交易:

[ERC20]标准协议及相关功能说明_第6张图片

2、区块
以太坊区块链浏览器提供三种区块查询,分别为:区块,叔块和分叉块(
区块链重组无效的块)。

分叉区块
分叉分为软分叉和硬分叉,临时分叉。(http://www.8btc.com/tan90d97)

临时分叉:
区块链由于是一种去中心化的技术,全世界所有的矿工同时工作,各自独立的挖掘满足要求的区块。由于是各自独立的工作,就有可能出现两个独立的矿工先后发现了两个不同的满足要求的区块,被称为临时分叉。

[ERC20]标准协议及相关功能说明_第7张图片

两位矿工都发现了高度2的区块,那么该采用谁的呢?
于是开始比较,区块链是个势利眼,只承认最长的链,黄色和绿色的块谁先有后继区块,变成长的链,谁就会被承认,失败的就被抛弃。为了成为最长的链,两个矿工都拼命的把自己挖到的区块通过广播的方式告诉更多的节点,并希望他们能把自己的区块传播的更广,从而使更多的矿工在自己挖出的区块下挖掘下一个区块,最终让自己的区块变成最长链的一部分。
[ERC20]标准协议及相关功能说明_第8张图片

如果区块被废弃了,其中包含的挖矿奖励如何处理呢?
对比特币来说,赢者通吃,失败者一无所有,竹篮打水一场控。挖出黄区块在比特币中称为“孤块”,以太坊中称为“叔块”

什么是“叔块”
对于高端3的区块来说,绿色区块是他的父区块。黄色区块虽然失败了,但他属于高度1的子区块,绿区块的兄弟区块。于是,高度3的区块尊称这个黄色区块为叔块。
[ERC20]标准协议及相关功能说明_第9张图片

不能成为主链的一部分的孤块,如果有幸被后来的区块通过uncles字段收留进区块链就变成了叔块,如果以个孤儿区块没有被任何区块收留,这个孤块还是会被丢弃,也就是说孤块被收留后才会变成叔块。

在以太坊的GHOST协议中,挖出叔块的矿工也是可以获得奖励的,叔块可以为主链的安全做出贡献,而且以后的区块谁收留叔块,收留了数块的区块还有额外的奖励,收留叔块也被称为包含叔块。

[ERC20]标准协议及相关功能说明_第10张图片
下图就是高度3的区块包含了一个叔块,不过叔块也就仅仅是被包含而已,叔块中的交易会重新回归交易池,等待重新打包,一个区块最多只能包含2个叔块。

由于以太坊的区块时间是20秒左右,相对于比特币,更容易出现临时分叉和孤儿区块,而且较短的区块时间,也使得区块在整个网络中难以充分传播,尤其是网速慢的矿工,为了平衡各方利益,设计了叔块机制,叔块在全部挖出来的区块中占的比例叫叔块率,目前叔块率在27.4%。

数据参考(https://www.etherchain.org/)

这里顺便说下Spectrum 公链,Spectrum 公链不存在叔块,Spectrum 出块是没有奖励的,只有出的这个块打包了交易才会有奖励,而poc机制使得失去信用拉入黑名单的地址,也会在区块周期更新的时候,重新排到备选列表中参选。

“叔块”的好处
原文参考(https://medium.com/@mattcondon/getting-up-to-speed-on-ethereum-63ed28821bbe)

在以太坊中解决了2个问题:
1、以太坊十几秒的出块间隔,大大增加了孤儿的区块的产生,并且降低了安全性。通过鼓励引用叔块,使引用主链获得更多的安全保证(因为孤块本身也是合法的)

3、比特币中,由于大量的矿池较集中,挖矿中心化是个问题,给叔块报酬,可以一定程度上缓解这个问题

叔块的引用
叔块可以不引用,或者最多引用两个叔块
叔块必须是区块的前2层~前7层的祖先的直接的子块
被引用过的叔块不能重复引用
引用叔块的区块,可以获得挖矿报酬的1/32,也就是51/32=0.15625 Ether。最多获得20.15625=0.3125 Ether
被引用的叔块,其矿工的报酬和叔块与区块之间的间隔层数有关系。

软分叉:
软分叉是指交易的数据结构(这就是被广泛流传的“共识”)发生改变时,未升级的节点可以验证已经升级的节点生产出的区块,而且已经升级的节点也可以验证未升级的节点生产出的区块。
软分叉不涉及回滚,没有任何交易或区块会被撤销,也就是说,通过DAO Framework,任何DAO里的以太币都会被冻结,攻击者,以及所有其他人,都无法从任何DAO里提取ETH。但是这会导致,持有ETH的真正用户也无法提款。

如:假设从第1760000个区块起(直达追溯到恶意代码提交前),任何降低这个账户余额的转账操作,包都会被算作无效。通过这种方式防止被盗走的以太币被提走。

DAO Framework:DAO框架,数据库里的访问对象的框架

硬分叉:
硬分叉是指比特币区块格式或交易格式(这就是广泛流传的“共识”)发生改变时,未升级的节点拒绝验证已经升级的节点生产出的区块,不过已经升级的节点可以验证未升级节点生产出的区块,然后大家各自延续自己认为正确的链,所以分成两条链

·把所有Token从原合约地址转入到一个新的合约地址(退款合约),然后再循环查找主DAO提议表里所有被分割的DAO。
·用一个只可以退款的单函数合同,来代替主DAO的合同。这个函数只有一个输入项(即子DAO的地址),来计算主DAO和子DAO的总余额,然后再依次进行退款(就可以归还已经进行了分割的DAO Token 持有人的资金)

以太坊团队在2015年的时候,推出“四步走”发展战略,在前期使用POW建立一套可信赖的加密货币体系,之后将基于体系转到Pos体系上,通过权益人交保证金的方式去保证其信誉度,就是咱们一直说的押金机制,要转成Pos体系,以太坊硬分叉需要经历四个阶段:Frontier(前言),Homestead(家园),Metropolis(大都会),Serenity(宁静),

Frontier 阶段是以太坊初期的试验阶段,可以进行基本的挖矿,学习,试验。系统运行后,吸引了很多开发者参与开发。
Homestead阶段,以太坊上线第一版,采用POW挖矿,POW遇到2大挖矿难度,一是因为算力增长难度加大,还有一个是“难度炸弹(Difficulty Bomb)”。

由于PoS的运用将会降低挖矿的门槛,不需要硬件矿机,只需要有一定数量的ETH,将其作为保证金,再通过权益证明的方式验证交易有效性,即可拿到一定的奖励。因此,对之前的矿工来说,他们花了高价购买的矿机将被废掉,一定程度上会引起矿工的不满。为了防止PoW转PoS的过程中矿工联合起来抵制,从而分叉出两条以太坊区块链,“难度炸弹”被引入。

难度炸弹:指的是计算难度时除了根据出块时间和上一个区块难度进行调整外,加上了一个每十万个区块呈指数型增长的难度因子。(参考链接:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md)

Homestead 阶段又分为两个阶段:拜占庭将军(Byzantium)和君士坦丁堡(Constantinople)

拜占庭

什么是拜占庭将军问题?
拜占庭是一座富饶的城堡,他的周围有十个部落,想要攻占城堡,但是,只有他们其中五个以上的部落同时进攻才可以取得胜利。部落之间通信只能通过互派信使传递信息,那么每个部落都可以在任意时间给任意他信任的部落发送信息,信息形式类似于“我将在明天早上六点进攻,你同意吗?”收到信的人可以在信件上盖上自己的章,然后把信息拷贝,发送给9个邻居。问题是,如果每个部落都发送9封信件,系统中一共有90封信在传输,每个部落会收到9封信,可能每一封都有一个不同的攻击时间,另外一些部落会统一超过一个的攻击时间,故意背叛,如此下去,整个系统就会混乱,不可信任。

因此,哈希计算速率的限制,加上公钥加密,使得一个不可信网络变成了一个可信网络,使得所有参与者可以在某些事情上达成一致(比如说攻击时间、一系列交易、域名记录、政治投票系统、或者任何其他的需要分布协议的地方)

顺便提下在比特币系统中的类似的方法,比特币系统中是加入了哈希随机数的计算,即工作量证明机制,公认的总账并不是谁都可以在上面添加信息,你需要计算这个哈希值,广播,得到其他人的肯定之后才可以记在总账上。如此,哈希计算速率限制(网络中加入时间的延迟来验证每一笔交易),加上公钥加密进行身份认证,使一个不可信的网络变的可信。这就是比特币去中心化的方法,使所有参与者可以在某件事上达成统一。

拜占庭命名由来:
以太坊升级到“大都会”的阶段,需要经过两次硬分叉,由于创始人Vitalik是俄罗斯人,俄罗斯在历史上继承了拜占庭帝国的衣钵,因此以太坊团队以拜占庭与君士坦丁堡为两次硬分叉命名。
拜占庭在第437万区块(北京时间2017-10-16 20:00-21:00)进行了硬分叉,本次硬分叉是对以太坊底层协议的改变,协议改变在某个特定的区块上被激活。所有的以太坊客户端都需要升级。拜占庭硬分叉只是软件的更新,升级后,早期软件版本将不再与新网络兼容。
当分叉发生后,用户未完成升级,仍然使用老版本的客户端,那么他的客户端将同步旧区块链,用户将停留在遵循旧规则的老链上,同时不能在新链上发送以太币或者做其他操作。

拜占庭要解决的问题:
1)在分布式的分散系统中达成共识;
2)解决信息流通不畅;
3)其他矿工在场。

拜占庭容错机制:PBFT(Practical Byzantine Fault Tolerance)
PBFT是一种状态机副本算法,即服务作为状态机进行建模,状态机分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。将所有的副本组成的集合使用大写字母R标识,使用0到R-1的整数表示一个副本。为了描述方便,假设R =3f+1,这里f是有可能失效的副本的最大个数。尽管可以存在多于3f+1个副本,但是额外的副本除了降低性能之外不能提高可靠性。

拜占庭将军的问题是点对点通讯中的基本问题,不可能存在不可靠的信道上的消息,通过消息传递的方式与其他信道的消息达到一致性的情况。拜占庭假设是对现实世界的模拟化,由于硬件错误、网络拥堵或者断开、遭到恶意攻击,或其他不可以预料的行为,拜占庭容错协议需要处理这些问题,并且这些协议还要满足所要解决的问题的规范要求。

君士坦丁堡:?

顺便说些共识机制:

PoW:Proof of work,工作证明
一个符合要求的Block Hash 由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block Hash.

PoS:Proof of Stake,股权证明
类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明PoS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0,你每清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可以理解为年利率5%),那么,在这利息=3000*5%/365=0.41个币,也就是说,你持币有利息。

Dpos:Delegated Proof of Stake,委任权益证明
也叫股份授权证明机制(受托人机制),它的原理是让每一个持有Token的人进行投票,由此产生101位代表,我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点儿像是会议制度或人民代表大会制度。如果代表们不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来代替他们。DPOS的出现最主要还是因为矿机的产生,大量的算力在不了解也不关心比特币的人身上,类似演唱会的黄牛,大量囤票而丝毫不关心演唱会内容。

[ERC20]标准协议及相关功能说明_第11张图片

功能:

[ERC20]标准协议及相关功能说明_第12张图片

4、所有账户
All Accounts:普通账户和合约账户

All Accounts提供普通账户,合约账户,交易所账户查询,合约账户和交易所账户地址会特殊注明,列表顺序按照持有ETH的数量依次递减排序。

合约账户:余额,地址加入观察列表观察,对等美元值,合约创建者地址和哈希,交易笔数,地址里所有的erc20的余额交易。

合约账户交易列表:按最新区块的交易排序
合约内部交易列表:转进合约账户或从合约账户转出
令牌传输:查询Erc20 令牌传输事件
合约源代码查询
合约一部分信息查询
合约日志查询
帖子评论查询

普通账户提供交易列表查询,Erc20令牌交易查询,帖子评论查询

All Accounts所有功能:

[ERC20]标准协议及相关功能说明_第13张图片

5、已核实的合约
已核实的合约提供已经验证过的合约地址查询,查询包括合约名称,编译器及余额,和已启用的优化,已使用的库及构造函数参数。

6、令牌查看
基于ERC20的币的列表,排列方式是按照DESC订单中的MarketCap 值排序
查看ERC20的代币交易,基于时间倒叙排列显示
资源
7、资源
一些交易所资源,钱包资源,ICO 服务资源,新闻论坛,活动,学习资源,智能合约,挖矿资源

挖矿提供了采矿池和一些操作方法,矿池显示了矿工在线数量,矿池的算力,网络的算力,网络难度,eth当前价格,上一个区块出块时间,目前矿池里采矿区块的数量,所占百分比

8、其他
1、预期收益计算:采矿计算器将显示预期收益的eth 和对应的美元。计算的机制是基于所有条件不变(难度和价格)的情况下,并且不考虑叔块奖励和假设。
2、API 相关功能提供:
介绍,账号,合约API代码,检查合同执行状态,BlockNo获得Block和Uncle奖励。
事件日志API旨在提供本地eth_GetLogs的替代方案。并提供了支持的过滤器参数列表。
GETH/Parity代理API
WebSocket API允许开发人员接收有关新事务的实时通知
通过ContractAddress获取ERC20-Token TotalSupply
获取Ether的总供应量
由社区创建的第三方工具和实用程序
3、查看已经验证过的合约源代码
4、字节码转换器
5、已验证的消息签名列表
6、以十六进制格式(即字符0-9,af)粘贴签名的原始交易并通过以太坊网络进行广播。

你可能感兴趣的:(学习笔记)