主页 > imtoken钱包ios版 > 【ERC20】标准协议及相关功能说明
【ERC20】标准协议及相关功能说明
笔记研究
更新记录:
一、基本概念。
1.账户
以太坊分为两种:外部账户和合约账户
外部帐户功能:
以太币余额
可以发送交易(以太币交易或触发合约代码)
由私钥控制
无相关代码
合约账户功能:
以太币余额
有相关代码
代码执行由交易或从其他合约收到的消息(调用)触发
执行时,执行任何复杂操作,永久保存,可调用其他合约
以太坊区块链上的所有行为都是由“外部账户”触发的交易来调动的。 合约账户每次收到一笔交易,合约代码都会根据输入的参数执行,并作为交易的一部分发送出去。 作为验证新块的一部分,合约代码由参与网络的每个节点上的以太坊虚拟机执行。
2.交易
交易是要签名的数据包,其中包含从外部帐户发送到区块链上另一个帐户的消息。
交易包括:
消息接收者
确认发件人身份的签名
VALUE字段,发送方转给接收方的wei数量
可选数据字段,包括发送给合约的消息
StartGas,代表交易执行允许的最大计算步数
GaspRice,代表发送方愿意支付的Gas费
3.新闻
消息本质上类似于交易,只是它是由合约创建的。 当正在执行代码的合约执行 Call 或 DeleGateCall 操作代码时,会生成消息。
消息包括:
发件人
接收器
VALUE字段,wei转出的数量连同要发送到合约地址的消息
发送给合约的实际数据
StartGas,限制一条消息可以触发代码执行的最大gas值
4. 智能合约
定义:部署在evm虚拟机中的一段代码不能自动执行,需要手动触发执行。 每次执行,发起执行的账户都需要扣除相应的gas作为手续费。
智能合约是以“数字形式”定义的一组“承诺”。
承诺:指合同双方同意的(通常是相互的)权利和义务,它定义了合同的性质和目的。 例如,合同规定卖方承诺发货,买方承诺支付合理的货款。
数字形式:数字形式是指合同部门必须以计算机可读代码编写的内容。 因为只要双方达成协议,智能合约所确立的权利和义务都是通过计算机或计算机网络来执行的。
达成协议
如何判断智能合约的参与者何时达成协议?
根据具体的智能合约实现,当各方通过在合约主机平台上安装合约来承诺执行合约时,就会发现合约。
合约执行
“执行”的真正含义还在于实施,实施就是通过技术手段实施。
智能合约其实和普通代码没什么区别,只是运行在以太坊这样的分布式平台上。 这个运行平台赋予了这些代码不可变性、确定性、分布性和自验证状态等特性。 代码执行期间的状态存储是不可变的。 每个人都可以开启自己的一个节点,重放整个区块链,得到相同的结果(能够控制所有节点达到一致的状态就是所谓的共识)
5. 区块链底层架构
区块链基础设施分为6层,包括数据层、网络层、共识层、激励层、合约层和应用层。 每一层分别完成一个核心功能,每一层相互协作erc20可以转以太坊地址码,实现去中心化的信任机制。
2. etherscan提供的功能
一、交易:
以太坊区块链浏览器提供三种类型的交易查询:
签名交易(Txns)
Pending Txns
合约内部交易
已签名的交易包括成功的交易和失败的交易
待处理交易是指等待区块确认的交易
合约内部交易:指将合约地址转入交易地址
合约内部交易示意图:
签署交易账户的特点和注意事项:
什么是“气体限制”?
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中有功能选项可以更改。
暂停交易账户:
待处理交易是尚未在区块中确认的交易。
合约内部交易:
2.块
以太坊区块链浏览器提供了三种类型的区块查询,分别是:block、uncle block和fork block(
区块链重组无效块)。
叉块
分叉分为软分叉、硬分叉和临时分叉。 ()
临时分叉:
由于区块链是去中心化技术,全球所有矿工同时工作,独立开采符合要求的区块。 由于独立工作,有可能两个独立的矿工发现了两个不同的符合要求的区块,称为临时分叉。
两个矿工都找到了一个高度为 2 的区块,那么应该使用谁呢?
于是开始比较,区块链是势利眼,只认最长的链。 谁先拥有后继块,谁成为黄色和绿色块之间最长的链,谁就会被认可,失败的将被丢弃。 双方矿工为了成为最长链,都拼命将自己挖到的区块广播给更多的节点,希望能将自己的区块传播得更广,让更多的矿工在你挖出的区块下挖下一个区块,最终做出自己的区块最长链的一部分。
如果区块中包含的挖矿奖励已过时,会发生什么情况?
对于比特币来说,赢者通吃,输者一无所有。 挖出的黄色区块在比特币中被称为“孤儿块”,在以太坊中被称为“叔块”
什么是“叔块”
对于高端3块,绿色块就是他的父块。 黄色块虽然失败了,但是属于高度为1的子块,绿色块的兄弟块。 因此,高度为3的区块尊称这个黄色区块为叔块。
一个不能成为主链一部分的孤儿块如果幸运地被后来的块通过叔叔字段接受到区块链中,就会成为叔叔块。 如果一个孤儿块没有被任何区块接受,这个孤儿块仍然会被丢弃,也就是说,孤儿块只有在被接纳后才会成为叔块。
在以太坊的GHOST协议中,挖出叔块的矿工也可以获得奖励。 叔块可以为主链的安全做出贡献,在未来的区块中,谁接受了叔块,接受了多个块的块仍然会得到奖励。 作为一个额外的好处,接待叔叔也被称为包括叔叔。
下图显示了一个高度为3的区块包含了一个叔块,但是只包含了叔块。 叔块中的交易会返回交易池等待重新打包。 一个块最多只能包含 2 个叔块。 片。
由于以太坊的出块时间在20秒左右,与比特币相比,更容易出现临时分叉和孤块,较短的出块时间也使得区块很难在全网充分传播,尤其是为了平衡为了各方利益,网速较慢的矿工设计了叔块机制。 叔块占所有挖出块的比例称为叔块率。 目前的叔叔块率为27.4%。
数据引用()
对了,这里是Spectrum公链。 Spectrum公链没有叔块。 Spectrum 区块生产没有奖励。 只有区块与交易打包在一起才会有奖励。 POC机制使得失去信用的地址被列入黑名单。 当区块周期更新时,它也会重新排列到候选列表中。
“叔块”的好处
原始参考 (@mattcondon/getting-up-to-speed-on-ethereum-63ed28821bbe)
以太坊解决了 2 个问题:
1、以太坊的十秒出块间隔大大增加了孤块的产生,降低了安全性。 通过鼓励对叔块的引用,对主链的引用可以获得更多的安全保障(因为孤块本身也是合法的)
3、在比特币中,由于大量矿池的集中,挖矿中心化是一个问题。 叔块的报酬可以在一定程度上缓解这个问题
对叔块的引用
叔块不能被引用,或者最多可以引用两个叔块
叔块必须是前2层~前7层块的祖先的直接子块
已引用的叔块不能重复引用
引用叔块的块可以获得挖矿奖励的1/32,即51/32=0.15625 Ether。 最多获得 20.15625=0.3125 以太币
对于引用的叔块,其矿工的奖励与叔块与块之间的层数有关。
软分叉:
软分叉是指当交易的数据结构(这就是广为流传的“共识”)发生变化时,非升级节点可以验证升级节点产生的区块,升级节点也可以验证非升级节点。 节点产生的块。
软分叉不涉及回滚,任何交易或区块都不会被逆转,即通过DAO Framework,任何DAO中的以太币都会被冻结,攻击者,以及其他所有人,将无法退出任何 DAO。 提取以太币。 但是这会导致持有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 遇到了两大挖矿困难。 一是因为计算能力的提升而变得更难,二是“难度炸弹(Difficulty Bomb)”。
由于PoS的应用会降低挖矿的门槛,不需要硬件矿机,只需要一定数量的ETH作为保证金,然后通过权益证明验证交易的有效性,并获得一定的奖励可以获得。 所以,对于之前的矿工来说,他们花高价买来的矿机都会报废,一定程度上会引起矿工的不满。 为了防止矿工在PoW转PoS的过程中联合起来抵抗,从而分叉出两条以太坊区块链,引入了“难度炸弹”。
难度炸弹:是指在计算难度时,除了根据出块时间和前一个区块的难度进行调整外,还增加了一个每100,000个区块呈指数增长的难度系数。 (参考链接:)
Homestead阶段进一步分为两个阶段:拜占庭和君士坦丁堡
拜占庭
什么是拜占庭将军问题?
拜占庭是一座富饶的城堡。 他周围有十个部落想要攻占城堡。 不过,只有五人以上同时出击,他们才能获胜。 部落之间的交流只能通过相互的信使来传递信息,所以每个部落都可以随时向自己信任的任何一个部落发送信息。 消息形式类似“我明天早上六点出击,你同意吗?” 收到信件的人可以在信件上盖上自己的邮票,然后将信息抄录并发送给9个邻居。 问题是,如果每个部落发9封信,系统一共有90封信,每个部落会收到9封信,每封信的攻击时间可能不同,其他一些部落会统一攻击不止一次时间,故意的背叛,再这样下去erc20可以转以太坊地址码,整个系统就会混乱不堪,不可信任。
因此,哈希计算率的限制,结合公钥加密,让一个不可信的网络变成可信的网络,让所有参与者可以就某些事情(比如攻击时间、一系列交易、域名记录、政治投票等)达成一致系统,或任何其他需要分销协议的地方)
顺便说一句,比特币系统中类似的方法,在比特币系统中加入哈希随机数的计算,即工作量证明机制。 人们普遍认为,不是每个人都可以在总账中添加信息,需要计算这个Hash值,广播出去,得到别人的肯定后,才能记录在账本中。 这样,哈希计算速率限制(在网络中增加时间延迟来验证每笔交易),加上用于身份认证的公钥加密,使不可信的网络变得可信。 这就是比特币去中心化的方式,以便所有参与者都能就某事达成一致。
拜占庭名称的由来:
以太坊升级到“大都市”阶段需要两次硬分叉。 由于创始人维塔利克是俄罗斯人,俄罗斯在历史上继承了拜占庭帝国的衣钵。 因此,以太坊团队以拜占庭和君士坦丁堡命名这两个硬分叉。
拜占庭在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:工作量证明,工作量证明
一个合格的 Block Hash 由 N 个前导零组成,零的数量取决于网络的难度值。 得到合理的 Block Hash 需要大量的试算,计算时间取决于机器的哈希速度。 当一个节点提供了一个合理的 Block Hash 值时,就意味着该节点确实经过了很多次计算尝试。 当然,不能得到计算次数的绝对值,因为找到一个合理的hash是一个概率事件。 当一个节点拥有全网n%的算力时,该节点有n/100的概率找到Block Hash。
PoS:股权证明,权益证明
类似于财产存放在银行,这种模式会根据你持有数字货币的数量和时间,为你分配相应的利息。 简单来说,它是一个根据你持有货币的数量和时间给你利息的系统。 在权益证明PoS模式中,有一个词叫做币龄,每个币每天产生1个币龄。 比如你持有了100个币,一共持有了30天。 那么,此时你的币龄为3000。 这时候如果你找到一个PoS区块,你的币龄就会被清零,每清零365个币龄,你就会从区块中获得0.05个币的利息(假设利息可以理解为5%的年利率),那么,这里利息=3000*5%/365=0.41币,也就是说,你持币赚取利息。
Dpos:Delegated Proof of Stake,指定权益证明
又称共享授权证明机制(受托人机制),其原理是让所有持有Token的人投票,产生101个代表,我们可以理解为101个超级节点或矿池,而这101个超级节点的权利是彼此完全平等。 从某种角度看,DPOS有点像会议系统或者人民代表大会系统。 如果代表未能履行职责(轮到他们时未能出块),他们将被除名,网络将选出新的超级节点来取代他们。 DPOS的出现主要是由于矿机的产生。 大量的计算能力被不了解或不关心比特币的人使用。 类似于演唱会黄牛,囤积大量门票,根本不关心演唱会的内容。
特征:
4.所有账户
所有账户:普通账户和合约账户
All Accounts提供普通账户、合约账户、交易所账户查询,合约账户和交易所账户地址会被特别标注,列表顺序按照持有ETH数量降序排列。
合约账户:余额、加入观察名单观察的地址、等值美元价值、合约创建者地址和哈希、交易笔数、地址内所有erc20余额交易。
合约账户交易列表:按最新区块的交易排序
合约内部交易清单:转入合约账户或从合约账户转出
代币转账:查询Erc20代币转账事件
合约源码查询
部分合约信息查询
合约日志查询