以太坊官网、钱包、矿池、交易平台全面介绍
imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
以太坊旨在整合和改进脚本、山寨币和链上元协议的概念,使开发人员能够创建任意的基于共识、可扩展、标准化、功能丰富、易于开发和可互操作的应用程序。以太坊通过构建最终的抽象基础层(内置图灵完备编程语言的区块链)来实现这一点,使任何人都能够使用自己的自定义所有权规则、交易方法和状态转换功能创建合约和去中心化应用程序。 的主要框架可以用两行代码实现,而货币和声誉系统等其他协议可以用不到二十行代码实现。智能合约(包含价值且仅在满足某些条件时才能打开的加密盒)也可以在我们的平台上创建,并且由于具有图灵完备、价值感知、区块链感知和多状态的附加功能,其功能比比特币脚本所能提供的功能强大得多。
以太坊账户
在以太坊系统中,状态由称为“账户”的对象(每个账户由一个 20 字节的地址组成)以及在两个账户之间转移价值和信息的状态转换组成。以太坊账户由四部分组成:
随机数,用于确保每笔交易只能处理一次的计数器
账户当前以太币余额
账户的合约代码(如果有)
账户存储(默认为空)
Ether 是以太坊内部的主要加密燃料,用于支付交易费用。一般来说,以太坊中有两种类型的账户:外部拥有的账户(由私钥控制)和合约账户(由合约代码控制)。外部拥有的账户没有代码,人们可以通过创建和签署交易从外部账户发送消息。每当合约账户收到消息时,合约内部的代码就会被激活,允许其读取和写入内部存储、发送其他消息或创建合约。
消息和交易
以太坊消息与比特币交易有些相似,但两者有三个重要区别。首先,以太坊消息可以由外部实体或合约创建,而比特币交易只能从外部创建。其次,以太坊消息可以随意包含数据。第三,如果以太坊消息的接收者是合约账户,则可以选择响应,这意味着以太坊消息也包含函数的概念。
在以太坊中,“交易”是一个签名的数据包imToken钱包,其中存储了从外部账户发送的消息。一笔交易包含消息的接收者、确认发送者的签名、以太币账户的余额、要发送的数据以及两个称为 and 的值。为了防止代码出现指数爆炸和无限循环,每笔交易都需要限制代码执行引起的计算步骤数——包括初始消息和执行引起的所有消息。也就是说,限制是每个计算步骤都需要支付矿工费。如果执行交易的过程中“耗尽了 gas”,所有状态变化都会恢复到原始状态,但已经支付的交易费无法收回。如果交易执行终止时仍有 gas 剩余,那么 gas 会返还给发送者。创建合约有单独的交易类型和相应的消息类型;合约的地址是根据账户随机数和交易数据的哈希计算得出的。
消息传递机制的一个重要后果就是以太坊的“一等公民”属性——合约拥有与外部账户相同的权利,包括发送消息和创建其他合约的权利。这使得合约可以同时扮演多个不同的角色,例如,用户可以让一个去中心化组织的成员(一个合约)成为一个中介账户(另一个合约),该账户使用自定义的量子证明 签名为偏执狂个人提供中介服务(第三个合约),以及一个共同签名实体,它本身使用由五个私钥保护的账户(第四个合约)。以太坊平台的强大之处在于,去中心化组织和代理合约不需要关心合约的每一方拥有什么类型的账户。
以太坊状态转换函数
以太坊的状态转换函数:APPLY(S,TX) -> S',可以定义如下:
检查交易是否格式正确(即有正确的值),签名是否有效,以及随机数是否与发送者账户的随机数匹配。如果不匹配,则返回错误。
计算交易手续费:fee=*,从签名中确定发送者的地址,从发送者的账户中减去交易手续费,加上发送者的随机数,账户余额不足则返回错误。
设置初始值GAS=,并根据交易的字节数减去一定量的gas值。
将价值从发送方账户转移到接收方账户。如果接收账户尚不存在,请创建它。如果接收账户是合约,请运行合约的代码,直到代码运行完毕或 gas 用完。
如果因为发送者的账户没有足够的钱或者代码执行耗尽gas导致价值转移失败,则会恢复原始状态,但是仍然必须支付交易费,并且交易费会被添加到矿工的账户中。
否则,所有剩余的 gas 都会被返还给发送者,而消耗的 gas 则会作为交易费发送给矿工。例如,假设合约代码如下:
如果 !self.[(0)]: self.[(0)] = (32)
需要注意的是,合约代码实际上是用底层以太坊虚拟机(EVM)代码编写的。上面的合约是用我们的高级语言编写的,可以编译成EVM代码。假设合约内存一开始是空的,值为10 ether,gas为2000,gas价格为0.001 ether,数据为64字节,前三十二个字节代表数字2,第二个字节代表单词。交易发送后,状态转换函数处理如下:
检查交易是否有效且格式正确。
检查交易发送者是否至少有 2000*0.001=2 以太币。如果是,则从发送者的账户中减去 2 以太币。
初始设定gas=2000,假设交易长度170字节,每字节手续费为5,减去850,所以还剩下1150。
从发送者的账户中减去 10 以太币,并向合约账户中添加 10 以太币。
运行代码。在这个合约中,运行代码很简单:它检查合约内存索引2是否被使用,注意到它没有被使用,然后将其值设置为。假设这消耗了187个单位的gas,那么剩余的gas是1150-187=963。6.向发送者的账户添加963*0.001=0.963个以太币并返回最终状态。如果没有合约收到交易,那么所有的交易费用都等于乘以交易的字节长度,交易数据与交易费用无关。另外,值得注意的是,合约发起的消息可以为其生成的计算分配gas限制。如果子计算的gas用完了,它就会简单地恢复到发送消息时的状态。因此,就像交易一样,合约也可以通过对其生成的子计算设置严格的限制来保护其计算资源。
代码执行
以太坊合约的代码是用低级的、基于堆栈的字节码语言编写的,称为“以太坊虚拟机代码”或“EVM 代码”。代码由一系列字节组成,每个字节代表一个操作。一般来说,代码执行是一个无限循环,每次程序计数器加一(初始值为零)时都会执行一次操作,直到代码执行完毕或遇到错误、STOP 或指令。操作可以访问三种类型的存储空间:
堆栈是一种后入先出的数据存储方式,可以将 32 字节的值压入堆栈并从堆栈弹出。
内存中可无限扩展的字节队列。
合约的长期存储,一个key/value的存储,其中key和value都是32字节大小。不同于计算完成后就重置的堆栈和内存,存储内容会长期保持。
代码可以像访问块头数据、发送者和收到的消息中的数据一样访问该值,并且代码还可以返回一个字节数组数据作为输出。
EVM 代码的正式执行模型出奇地简单。当以太坊虚拟机运行时,其完整的计算状态可以由元组 (、、、code、、stack、pc、gas) 定义,其中这是包含所有帐户余额和存储的全局状态。在每一轮执行中,通过调用代码的第 pc(程序计数器)字节来找到当前指令,并且每条指令都有自己的定义来说明它如何影响元组。例如,ADD 从堆栈中弹出两个元素并推送它们的和,将 gas 减少一并将 pc 增加一,从堆栈中弹出顶部两个元素并将第二个元素插入到第一个元素定义的合约存储位置,再次将 gas 成本降低多达 200 并将 pc 增加一。尽管有很多方法可以通过即时编译来优化以太坊,但以太坊的基本实现可以在几百行代码中实现。
区块链和挖矿
尽管存在一些差异,但以太坊的区块链在很多方面与比特币的区块链相似。它们的区块链架构的不同之处在于以太坊区块不仅包含交易记录和近期状态,还包含区块编号和难度值。以太坊中的区块确认算法如下:
检查该块引用的前一个块是否存在且有效。
检查块的时间戳是否大于引用的前一个块并且小于 15 分钟。
检查区块编号、难度值、交易根、叔根和 gas 限制(许多以太坊独有的低级概念)是否有效。
检查区块的工作量证明是否有效。
将 S[0] 分配给前一个块的值。
将TX分配到区块的交易列表中,总共有n笔交易。对于属于0...n-1的i,执行状态转换S[i+1] = APPLY(S[i],TX[i])。如果任何转换失败,或者程序到目前为止所花费的gas超过限制,则返回错误。
分配 S[n] 以向矿工支付区块奖励。8 检查 S-FINAL 是否与 相同。如果是,则该区块有效。否则,该区块无效。
这种确认方法乍一看似乎效率不高,因为它需要存储每个区块的所有状态以太坊和比特币区块链钱包,但实际上以太坊的确认效率与比特币相当。原因是状态存储在树形结构中,每增加一个区块只需要改变树形结构的一小部分。因此,一般来说,两个相邻区块的树形结构大部分应该相同,这样数据只需存储一次,就可以使用指针(即子树哈希)引用两次。一种称为“ 树”(“树”)的树形结构可以实现这一点,它包括对 树概念的修改,不仅允许更改节点,还允许插入和删除节点。此外,由于所有状态信息都是最后一个区块的一部分,因此无需存储整个区块历史记录 —— 如果这种方法可以应用于比特币系统,据计算,它可以节省 10-20 倍的存储空间。
ETH官网:
ETH钱包下载:
交易平台:(找到适合您的平台)
采矿池:
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。