精华内容
下载资源
问答
  • 如何获得以太坊
    千次阅读
    2022-03-13 20:09:32

    目录

    一、技术背景

    二、 关键技术

    2.1 智能合约

    2.2 共识算法

    2.3 加密技术

    2.4 P2P模型

    2.5 账户模型

    三、 创新方向

    3.1 零识证明

    3.2 智能合约钱包

    3.3 信用委托

    3.4 玩赚模式

    四、典型应用

    4.1 MetaMask

    4.2 Swarm

    4.3 BTCRelay

    五、个人展望

    以太坊技术探究

    摘要:区块链技术是近十年来的新兴技术,具有去中心化、不可篡改、数据公开透明等优点,是分布式数据存储、P2P 网络和公钥密码学等技术的新型应用模式。区块链技术的发展带动了互联网、金融、电信等各个领域的产业技术革新,同时为了更好地适配这些领域的发展,区块链也从1.0时代的比特币发展到了2.0时代的以太坊时代[1]。以太坊是一款在区块链上实现智能合约,开源的底层系统,可以把它理解为一个区块链操作系统,每个人都可以在以太坊上开发应用程序。上面所说的应用,其实就是合约,这是以太坊的核心。合约所能提供的业务,几乎是无穷无尽的,因为图灵完备的语言提供了完整的自由度,让用户搭建各种应用。白皮书举了几个例子,如储蓄账户、用户自定义的子货币等。为了更好地探究以太坊,本文将从以太坊的关键技术、创新方向、典型应用等角度深入浅出地对以太坊进行探究。

    关键词:区块链;以太坊;智能合约;

    一、技术背景

    在区块链1.0时代,比特币技术让人们看到了数字货币的优点,借助比特币技术,我们获得了一种新的技术思想,即如何在无第三方机构的情形下构建可信机制。“工作量证明链(Proof—of-work Chain)”[2]的等关键技术开始被大众所熟知。同时人们开始着眼于加密货币以外的领域,希望将区块链技术融入其他领域,推动金融服务、公共服务、物联网(IoT)等领域的技术革新。

    2013年底,以太坊发明人Vitalik Buterin发布以太坊初版白皮书,召集了一批认可以太坊理念的开发者启动项目,其中就有项目联合创始人Gavin Wood和Jeffrey Wilcke[3]。他们希望能够开发出一种能够允许开发人员通过编写智能合约来构建和发布分布式应用程序的平台,希望以太坊成为像TCP/IP协议这样的标准,能让以太坊区块链协议内置编程语言,兼容各种区块链的应用,不用像以前那样各自为政分别定义自己的区块链协议。以太坊(Ethereum)作为区块链开发平台,可以用来担保、编程和交易诸如此类的事务:电子投票,金融交易,众筹产品,公司和企业管理,签署合同,协议,知识产权保护以及受益于硬件集成的智能资产。

    2015 年,智能合约在以太坊区块链中首次被实现。开发人员可以通过内置的完全成熟的图灵完整编程语言(例如,Solidity)构建和部署智能合约,在以太坊上设计各种应用程序。以太坊使用一种专门为以太坊创建的,基于 PoW 的共识算法,称为 Ethash[4]。

    随着 DeFi 等项目的迅速升温,以太坊上交易量不断激增,这使得交易费用不断攀升,交易时间不断加大。总的来说,以太坊 1.0 已经难以满足用户的使用需求和发展需求。在2020年以太坊社区和技术团队开始了以太坊2.0的测试,以太坊 2.0 采用了信标链、分片、PoS 及 EWASM 等技术。目前“阶段0”信标链已经上线,它将协调网络,为以太坊生态系统提供了利害关系证明。预计在2022年中,以太坊主网将与信标链权益证明系统“合并”[5]。下图为以太坊 2.0 完全实现后的样子。


    图1-1 以太坊2.0设计图

    截至2022年1月,以太坊是全球第二大受欢迎的密码货币。它依赖于区块链技术,这是一个应用程序、唯一的账簿。BlockChain是由一个分散和开放的成员点对点网络来维护的,BlockChain的目的是消除银行维持中央角色的财务分类账。作为区块链技术2.0的典型代表,以太坊具备以下关键技术:

    2.1 智能合约

    与1.0相比,这是BlockChain 2.0的最大突破,使用了以太坊的底层应用

    平台。本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。简单讲,智能合约就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。智能合约不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。”开发者可以发布和编写各种类型的智能合约,用来实现应用程序的功能,并能通过web3.js或者web3.java与其他外部的电子网络系统进行数据的交互和处理,从而在各种应用场景中得到广泛的应用[6]。

    2.2 共识算法

    1993年,工作量证明的概念最早被提出。1997年一种用于防止DoS攻击和垃圾信息的哈希现金被创造 ,中本聪基于哈希现金的原理设计了比特币系统的共识算法工作量证明(Proof of Work,PoW)共识算法。PoW共识算法的核心思想是通过解决一个基于SH A-256哈希函数的谜题来竞争生成区块,这个谜题需要节点消耗一定的算力才可以解决。在比特币中,节点在解决PoW问题时,需要将区块头(时间戳、Merkle树根哈希值以、对前一个区块进行哈希运算的结果值以及其他属性字段)的哈希值结合随机值作为输入进行双重SHA-256运算。在此过程中,随机值是不停变换的,每变换一次重新进行双重SHA-256运算,直到得到一个满足目标难度值的随机值,第一个计算出满足目标难度值随机值的节点将会获得生成区块的机会[7]。

    以太坊1.0使用一种改进的基于 PoW 的共识算法Ethash。Ethash算法是基于运算能力的授权/封印过程。Ethash实现的Seal()函数,其基本原理可简单表示成以下公式:

    RAND(h, n)  <=  M / d  公式2-1

    这里M表示一个极大的数,比如2^256-1;d表示Header成员Difficulty。RAND()是一个概念函数,它代表了一系列复杂的运算,并最终产生一个类似随机的数。这个函数包括两个基本入参:h是Header的哈希值(Header.HashNoNonce()),n表示Header成员Nonce。整个关系式可以大致理解为,在最大不超过M的范围内,以某个方式试图找到一个数,如果这个数符合条件(<=M/d),那么就认为Seal()成功。

    由于该算法内存大,不适合使用矿机挖矿,因此在保证系统安全的同时达到抵制矿机的作用。不过以太坊中任然造成了大量资源的消耗。

    以太坊目前处于家园阶段,100%采用PoW挖矿。从家园到宁静,从PoW到PoS,这个过程中,以太坊通过难度炸弹的调节来避免以太坊被分成两条链,引导大家平稳过渡到PoS。PoS要求节点提供一定数量的代币证明来竞争区块链记账权。但是如果单纯依靠代币余额来决定记账者必然使得富有者胜出,导致记账权的中心化,降低共识的公正性,因此不同的PoS机制在权益证明的基础上,采用不同方式来增加记账权的随机性来避免中心化。例如根据你持有货币的量和时间来竞争记账权,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(可理解为年利率5%)。比如你有365个币,如果年利率是1%,那每天你得到的利息就是0.001个币。

    以太坊2.0计划采用基于保证金的经济激励共识协议,通常称为Casper。协议中的节点,作为“锁定保证金的验证人(bonded validators)”,必须先缴纳保证金才可以参与出块和共识。Casper共识协议通过对这些保证金的直接控制来约束验证人的行为。具体来说就是,如果一个验证人作出了任何Casper认为“无效”的事情,他的保证金将被罚没,出块和参与共识的权利也会被取消。保证金的引入解决了'nothing at stake',也就是经典POS协议中做坏事代价很低的问题。现在有了代价,而且被客观证明做错事的验证人将会付出这个代价。

    2.3 加密技术

    以太坊借助椭圆曲线加密算法算法(ECC),随机生成一个私钥然后通过椭圆曲线加密算法算法得到一个公钥,且无法反向然后再使用椭圆曲线签名算法(ECDSA)和私钥结合进行签名。

    椭圆曲线密码体制(Elliptic Curve Cryptosystem,ECC)在同等密钥长度的情况下安全强度要远高于RSA体制等其他密码体制,因而ECC在网络信息安全领域有着非常重要的理论研究价值和广阔的实际应用前景。另一方面,在安全性相当的情况下,ECC所使用的密钥长度更短,这也就意味着对于带宽和存储空间的需求相对较小[8]。并且到目前为止,还没有出现针对椭圆曲线的亚指数时间算法。因此,ECC成为当下的主流公钥加密技术之一。

    在ECC中,最常使用的便是secp256k1曲线。一般的椭圆曲线表示为:

      y^2=x^3+a*x^2+b 公式2-2

    其中a,b为系数。当参数a=0,b=7时,得到函数:
    y^2=x^3+7 公式2-3

    这个方程产生的曲线就是secp256k1曲线。图示如下:

          图2-1 secp256k1曲线

    椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。它在1998年既已为ISO所接受,并且包含它的其他一些标准亦在ISO的考虑之中。与普通的离散对数问题(discrete logarithm problem  DLP)和大数分解问题(integer factorization problem  IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm problem  ECDLP)没有亚指数时间的解决方法[9]。因此椭圆曲线密码的单位比特强度要高于其他公钥体制。

    ECDSA的整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。

    签名过程如下:

    1、选择一条椭圆曲线Ep(a,b),和基点G;

    2、选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG;

    3、产生一个随机整数r(r<n),计算点R=rG;

    4、将原数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y);

    5、计算s≡r - Hash * k (mod n)

    6、r和s做为签名值,如果r和s其中一个为0,重新从第3步开始执行

    验证过程如下:

    1、接受方在收到消息(m)和签名值(r,s)后,进行以下运算

    2、计算:sG+H(m)P=(x1,y1), r1≡ x1 mod p。

    3、验证等式:r1 ≡ r mod p。

    4、如果等式成立,接受签名,否则签名无效。

    2.4 P2P模型

    P2P(peer-to-peer)网络又称为对等式网络,或者点对点网络。这是一种无中心的服务器、完全由用户群进行交换信息的互联网体系,P2P网络的每一个用户即是一个客户端,同时也具备服务器的功能。从技术方面来分析,区块链技术就是——P2P+共识机制+密码学。具体来说,区块链就是P2P的网络架构,通过密码学来保证数据的安全,通过共识算法来保证数据的一致性。对于其他架构来说,故障是不可避免的。但是对于区块链的分布式P2P网络来说,其基本不存在单点故障。就算节点频繁的进退也不会对整个系统产生影响。

    图2-2 P2P模型

    2.5 账户模型

    与比特币不同,以太坊在实现余额的处理上,采用了不同的机制,比特币采用了UTXO未花费交易输出;而以太坊采用了维护账户状态机制。

    UTXO英文全称为:Unspent Transaction Output,翻译为中文:未花费交易输出。在比特币中,每一笔UTXO都不可分割,必须在一次交易中,通过设置不同的输出将其拆分给不同的地址[10]。

    图2-3 UYXO模型

    而在以太坊中,其实账号模型是比较好理解的,因为以太坊的账户模型跟传统的账户模型是一致的。在以太坊中,账户地址有两种,分别是:

    外部账户地址:普通用户拥有的公私钥配对的账户,也就是我们常用的存储自己代币的账户地址。

    合约账户地址:合约账户地址指智能合约的账户地址。

    在以太坊账户中,维护以下几个状态:

    nonce:外部账户为交易次数,合约账户为创建的合约序号。

    balance:此地址的以太币余额。

    storageRoot:账户存储内容组成的默克尔树根的哈希值。

    codeHash:账户EVM代码的hash值。合约账户即为合约代码的哈希值,外部账户为空字符串的哈希值。

    • 创新方向

    3.1 零识证明

    零识证明是一项由密码学实现的革命性技术。证明者能在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零识证明或将以太坊的发展推向新水平。

    3.2 智能合约钱包

    智能合约钱包是DeFi被广泛采用的必要条件。它是一种由合约代码而非私钥控制的钱包,能降低单点故障、拥有社交恢复功能、花费更少的Gas费,为整个行业创造更多新机遇。

    3.3 信用委托

    在信用委托贷款中,存款人可以委托他们的信贷额度给其他人。信用委托利用智能合约,通过编程来执行预定的功能,从而消除信任。这是DeFi协议在无需抵押品的情况下获取流动性的一种方式。

    3.4 玩赚模式

    “ETH+NFT”的应用很多是在游戏领域。当加密货币经济与游戏结合,所有玩家都倾向于能够发挥他们最大能力的游戏。这将会产生非常强大的网络效应。《魔兽世界》在巅峰时期拥有超过1200万用户,游戏中金币的价值几乎跟真钱一样。全球各地的用户开始“挖金子”,并将其发展成为一个价值超过9亿美元、雇佣了数百万玩家的产业。区块链与GameFi是相辅相成的,只有与去中心化网络、可编程的智能合约和创造者经济相结合,游戏才能展现其全部潜力。

    四、典型应用

    4.1 MetaMask

    MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便[11]。它通过浏览器扩展(目前支持chrome扩展,后续计划支持更多浏览器),使你的浏览器成为一个以太坊的客户端(轻客户端),从而让浏览器可以直接运行以太坊的DApp。

    4.2 Swarm

    Swarm(群蜂,http://swarm-gateways.net/)是以太坊的一个功能扩展。严格说,它和Whisper类似,不能算是一个应用。Swarm使得以太坊支持分布式文件存储(类似于IPFS)。它是以太坊生态中的重要一环,它使得以太坊不但是个DApp的平台,还是个分布式文件存储平台,它将文件存放在以太坊客户端宿主机器的存储空间里,并且奖励给客户端相应的费用(以太币)。

    4.3 BTCRelay

    BTCRelay(http://btcrelay.org/)通过将比特币blockchain的头部不断写入其智能合约存储,以实现以太坊其它智能合约对比特币网络信息的获取,如:某个比特币交易是否已经进块某个比特币交易的深度。BTCRelay本身以智能合约的形式存在,因其内部存储了另一个blockchain(比特币的blockchain头部),因此也称为以太坊的一条侧链。

    五、个人展望

    自从2015年区块链技术(此处特指以太坊区块链)发布以来,它获得了世界各国的关注。由于整个加密货币经济圈代币价格的飞速增长也使得关注区块链技术的人们的数量显著增加。分布式应用程序(DApps)是以太坊区块链的主要卖点。作为一个开源的、图灵完备的世界计算机,以太坊可以被任何开发人员利用来构建他自己的一系列智能合约(即一个去中心化的应用程序)。分布式应用程序(DApps)的开发场景包括了方方面面,从预测市场到游戏,随着网络的不断改进,它将变得更加强大。同时各行各业也将受到以太坊的影响,通过以太访

    这个平台,会有更多应用形成区块链+模式或者以太坊+模式,从而推动诸多领域的去中心化与更深层次的隐私加密。

    更多相关内容
  • 以太坊概述 比特币和以太坊是两种最主要的加密货币 比特币被称为区块链1.0,以太坊被称为区块链2.0 以太坊的设计上针对比特币的运行过程中出现的一些问题进行了一些改进

    以太坊概述

    比特币和以太坊是两种最主要的加密货币

    比特币被称为区块链1.0,以太坊被称为区块链2.0

    以太坊的设计上针对比特币的运行过程中出现的一些问题进行了一些改进,

    1. 说出块时间,比特币的区块时间是十分钟,以太坊的出块时间大幅度降低到了十几秒,而且为了适应这种新的出块时间,以太坊还设计了一套基于Ghost的共识机制。

    2. 以太坊的另一个改进就是挖矿使用的mining puzzle,比特币的mining puzzle是计算密集型的,比拼的是计算哈希值的算力,这样造成的结果是挖矿设备的专业化,这样跟以前宣扬的去中心化是不符合的,所以以太坊设计的mining puzzle对内存的要求就是很高的,叫mining hard mining puzzle,这样设计的目的是限制了ASIC芯片的使用,管它叫做ASIC resistance,将来以太坊还会有些革命性的改变,用权益证明(proof of stake)来替代工作量证明(proof of work)。

    • 权益证明: 不挖矿,而是按照类似于股票投票的方法决定下一个区块怎么产生。

    除此之外,以太坊还增加了一个重要的功能,对智能合约(smart contract)的支持。

    • BitCoin:decentralized currency(去中心化的货币),符号是BTC,叫比特币,最小计量单位是Satoshi,也就是一聪

    • decentralized currency:货币本来是应该由政府发行的,货币的价值建立在政府公信力的基础上,然后政府通过一些司法手段来维护货币的正常运行,比特币的出现用技术手段把政府的这些职能给取代了,通过密码学,共识机制,来维护加密货币的体系的正常运行

    比特币成功之后,人们思考了一个问题,如果货币可以去中心化,还有什么是可以去中心化的。

    • Ethereum:decentralize contract(去中心化的合约),符号是ETH,它的币通俗地叫做以太,也叫Ether,最小计量单位是Wei。

    • decentralize contract:现实生活中,合约的重要性也是应该通过司法手段,通过政府来维护的,比如和人签一个合同,这个合同如果出现纠纷,通过打官司,法院判决,法院先看一些这个合同是谁签的,有没有当事人的合法签名,合同当中如何规定,是谁违反了合同,看看哪一方有错,对于违约方,按照合同中的条款,应该给予什么样的处罚,这就是现实生活中的合同,通过司法手段维护合同的有效性,类似于去中心化的货币,那么我们也能不能也用技术手段那这些司法手段给取代了,这就是以太坊智能合约的设计目的。

      如果合同中的内容是可以通过程序代码来实现出来的,那么就可以把代码放到区块链上,通过区块链的不可篡改性来保证代码的正确运行,当然,不是所有的合同内容都用编程语言来实现,也不是所有的合同条款都是可以被量化的,但是有一些逻辑比较简单,比较清晰的合同是可以写成智能合约的形式的。

    decentralized currency的好处

    跟法币相比,像美元,人民币这些都属于法币。

    应用场景:

    跨国转账,比如说从美国转一笔钱到埃及,用法币是很麻烦的,时间很长,要办很多手续,交易费也贵,如果用比特币转账,就会好很多,这是比特币的一个优势,虽然说比特币每十分钟才出一个区块,有各种各样不是很完美的地方,但是用比特币跨国转账还是比法币要快很多

    decentralize contract的好处

    现实生活中的合同体系已经运行得很好了,干嘛要搞一个去中心化的合同。

    智能合约也有与比特币类似的应用场景

    如果合同的签署方是来自世界各地的,没有一个统一的司法管辖权,这个时候用司法手段来维护合同的有效性比较困难,就像在网上弄一个众筹,众筹的这些参与方来自全国各地,彼此之间不认识,打官司也不知道到哪儿去打,如果这种情况下,通过事先写好的程序代码来保证每个人都只能按照规则来执行,这是一种比较好的解决方法,就算合同的参与方都在同一个司法管辖权之内的,想通过司法手段来维护合同的执行也是一个比较费时费力的过程,打官司要花好多时间和精力,就算官司赢了,也不一定能拿到钱,还得申请冻结对方资产,申请强制执行之类的。

    所以最好是用技术手段保证合同的参与方从一开始就不能违约。

    智能合约的好处

    智能合约的好处就在于这个代码一旦发布到区块链上,那么区块链的不可篡改性,只能按照代码中制定的规则来执行。

    以太坊的账户

    基于交易的账本

    比特币中是用的基于交易的账本,这种模式下,系统中并没有显示的记录每个账户上有多少钱,要根据UTXO里的信息推算,包括想知道这个人一共总资产有多少个比特币,就算一下这个人的所有账户,就他有私钥的那些账户在UTXO里面一共有多少个币就可以了,好处是隐私保护比较好,你有多少钱,可能连你自己都说不清楚,那别人就更不清楚了。

    但是这样就带来一个问题,就他使用上比较别扭,跟我们的日常体验不太一样,像转帐的时候,A要转给B 10BTC,A要说明这10个币的来源,其中七个币是前面这个交易中收到的,另外三个币是之前另外一个交易收到的,证明币的来源的合法性,和我们平时去银行的体验是不太一样的,银行是你存钱的时候要说明钱的来源,下次花钱的时候是不用说明每一笔钱是从哪儿来的。另外一个比较别扭的地方,你在前面交易中收到一笔输出,收到一些币,将来要花的时候,必须要一次性都花出去,不能只花一部分,如果只花一部分,会出现什么情况
    image-20210813133447080

    剩下的7个比特币会当做交易费给花出去了,这个时候,矿工就会很高兴了,但是你不高兴,这个时候应该转回给自己,如下图

    image-20210813133504005

    很多比特币钱包可以自动生成接收余额的地址,每次交易换一个新地址,也是有利于隐私保护的,但同样跟我们的日常生活习惯不太一样,比如说,银行当中,别人转给你十万块钱,你要把三万块钱转出去,剩下七万块钱就不用管,就放在账户上就行了,问题在于比特币系统当中没有显示的维护账户的交易概念。

    基于账户的模型

    以太坊采用的是基于账户的模型(account-based ledger),这种模型跟银行账户是比较相似的,系统中要显示的记录,每个账户上有多少个以太币。

    比如 A转给B 10ETH,这个交易的合法性只要检查一下A账户上有没有足够的钱就行了,比如A账户上有一百个以太币,要转10个给B,这就没问题,不用说明这100个以太币中是具体把哪十个转给了B,不用说明币的来源,是来自之前哪个交易,将来B要转给C三个以太币也是可以的,不用把剩下的转给他自己,因为有显示的这种余额的概念,所以剩下的币就直接发到账户上就行了,哈希指针也不用,不用说明币的来源。

    这样做的好处是对double spending attack有天然的防御作用,因为不用管币的来源,每花掉一次钱,就从你的账户上扣掉,花两次就扣两次。

    replay attack (重放攻击) A->B(10ETH)发布到网络上,过一段时间之后,这个交易被写到区块链里了,A就以为转账交易完成了,假设B是有恶意的,把这个交易在网上重新广播一遍,其他节点一看是个新的转账就把A的钱扣掉了。

    解决方案:
    加一个计数器nonce,记录一下这个账户有史以来一共发布过多少交易,然后转账的时候,交易次数要成为交易内容的一部分,一起包含进去,都是受到发布交易的签名的保护的。

    比如A->B(10ETH),A一共发布过20个交易,这是是21个,所以写上nonce=21,然后整个内容写上A的签名,如下图
    image-20210813133839441

    然后把上图这个交易发布到网上,因为有签名的保护,所以nonce的值,别人是改不了的,然后系统中的每个节点维护A这个状态,不仅要维护A账户上的钱,还要维护nonce的值,一开始nonce=0,每次收到A发布的一个交易,nonce+1。

    比如一开始的时候,A这个节点一开始的nonce=20,然后现在发布一个交易,这个节点一看,这个交易来了,是合法的,这个交易是可以执行的,同时更新一下,nonce=21,以后如果有人重放这个交易,这个节点一看,这个nonce已经是21了,已经被执行过了,就不会再执行一遍了。

    以太坊账户的分类

    externally owned account(外部账户)

    定义:前面比特币说的那个账户,公私钥控制的,本地产生一个公私钥对,私钥掌握账户的控制权,也叫普通账户。

    状态:balance(账户余额),nonce(计数器)

    smart contract account(合约账户)

    合约账户不是通过公私钥对控制的,除了balance和nonce之外还有code(代码),storage(相关状态-存储,包括每个状态的取值),一个合约可以调用另外一个合约,所以要通过nonce值记录一下调用的次数,但是合约账户不能主动发起一个交易,以太坊中的一个规定,所有的交易只能由外部账户发起,外部账户发起一个交易如果调用了一个合约账户,这个合约账户可以发送一个message调用另外一个合约,但是他不能自己品平白发起一个交易。

    合约账户的调用

    创建一个合约会返回一个地址,知道这个合约的地址,就可以调用这个合约,调用的过程当中状态会发生变化,所以存储(storage)就会变。

    系统设计上账户模型的改进

    以太坊的创始人叫Vitalik,是个19岁的小孩,他当初创建以太坊的时候,比特币已经有比较成熟的代码可以作为参考,他为什么不用比特币已有的代码,而要另弄一套。

    系统设计上可以改进,改出块时间,mining puzzlem,不一定一定要改账户系统,比特币基于交易模型的一个好处是隐私保护,但是以太坊要支持的智能合约,智能合约要求参与者有比较稳定的身份,这跟日常生活当中是比较类似的,比如说,你跟某个人签个合同,如果说你跟他签合同的时候,他是一个身份,签完之后,他身份变了,你找不到了,那这就有问题了,也有可能突然冒出了另外一个人,说他当初就是跟你一块签合同的,只不过换了一个身份,这就给合同的执行带来一些困难,包括将来出现纠纷的时候,你也是需要知道这个合同当初是跟谁签的。

    现在有人提出来用智能合约实现一些金融衍生品,就所谓的叫financial derivative,比如说像期权期货,往合约里投一笔钱,预测未来的价格走势,如果预测正确,给你一些收益,把钱还给你,但问题是,如果你投钱的这个账户,投完钱就变了,那到时候怎么把钱还给你呢,这个不光是对于外部账户有这个问题。合约账户的问题就更严重了,如果你投钱投到一个合约账户,投完之后地址变了,找不到就麻烦了,所以以太坊创建这个系统的时候,考虑了过去的一些已有的模型的利弊得失,最终没有采用比特币中基于交易的账户模型,而是采用了基于account的账户模式,这个从目前的状况来看,还是比较合适的一个决策,就以太坊的账户是希望保持稳定的,无论是个人账户还是合约账户,如果你有隐私保护的需要,同样可以创建很多个账户,根据情况使用不同的账户进行不同的交易。

    展开全文
  • 分散存储以太坊+ IPFS 该项目是通过。 产品特点 带钩的React-Redux Ethers.js客户端库 Material-UI CSS框架 松露框架配置 使用Chai在JavaScript中进行Solidity智能合约测试 区块浏览器 通过Infura网关进行IPFS存储...
  • 开发 DApp 时要调用在区块链上的以太坊智能合约,就需要智能合约的 ABI。本文希望更多了解 ABI,如为什么需要 ABI?如何解读 Ethereum 的智能合约 ABI?以及如何取得合约的 ABI? 数字猫合约 ABI ABI(Application ...
  • Second State 是领先的面向区块链智能合约的开源基础架构软件的提供者,因为对开源SOLL编译器项目的贡献,获得以太坊的现金奖励。 (右一为Second State 工程师Hydai,右四为以太坊创始人Vitalik) 2019年10月20...

    2019年10月20日,台北

    Second State 是领先的面向区块链智能合约的开源基础架构软件的提供者,因为对开源SOLL编译器项目的贡献,获得了以太坊的现金奖励。

    在这里插入图片描述
    (右一为Second State 工程师Hydai,右四为以太坊创始人Vitalik)

    2019年10月20日在台北举行的CrossLink活动中,以太坊基金会的Vitalik Buterin向Second State 团队颁发了5000美元的奖金。

    SOLL是世界上第一个将Solidity智能合约编译为WebAssembly字节码,并成功部署到以太坊基金会官方Ewasm(以太坊WebAssembly)测试网中的工具链。

    本月初,Second State团队在日本大阪的2019年以太坊基金会Devcon5上demo 了SOLL编译器项目的早期版本

    在这里插入图片描述
    (Second State 工程师正在给以太坊团队demo 如何使用SOLL 在Solidity 中编译ERC20 合约,然后将其部署到官方Ewasm测试网上)

    走向ETH 2 的重要路径

    根据ETH 2 路线图的规划,ETH 2 需要一种新的智能合约执行引擎,称为Ewasm(以太坊WebAssembly)虚拟机。但是,经过多年的开发,针对Ewasm 的开发工具链仍然缺失。在SOLL 之前,没有简单的工具可以将Solidity 智能合约编译并部署到基于Ewasm 的区块链上。

    通过对LLVM 的支持,SOLL 不仅完善了Ewasm 缺少的工具链,还把现代编译器基础结构引入了Solidity 编程语言。

    有了对LLVM 的支持,SOLL 不仅可以在前端支持多种智能合约编程语言,例如Rust和C ++,而且可以在后端支持各种VM,例如Ewasm和EVM1.x。区块链上的应用程序开发将更加灵活和高效。

    Second State首席执行官Michael Yuan 博士解释了SOLL 项目背后的基本原理,“ SOLL 项目在企业开发人员和区块链世界之间架起了一座桥梁。我们欢迎所有开发人员使用为Ewasm 设计的SOLL 工具链。”

    超越Ewasm

    能够在后端支持多个执行引擎,这是基于LLVM的编译器工具链的主要优点。例如,Second State与ETC Labs之间正在进行的合作,正在朝着SOLL的EVM 1.0 后端努力。这使得基于LLVM的工具和优化功能可以在现有的基于EVM的区块链上使用,例如以太经典(Ethereum Classic),CyberMiles等。

    以太经典的核心开发Alan Li表示:“ SOLL EVM 项目的前进非常令人兴奋,将有效地塑造以EVM执行环境为基础构建的整个DApp 生态系统。”

    此外,Second State将把SOLL 编译器工具链合并到非常易于使用的基于Web 的BUIDL IDE 中。BUIDL IDE 以智能合约作为后端,以web3作为前端,可以在数分钟内构建和部署完整的DApp。

    延伸阅读

    1. SOLL项目源代码repo
      https://github.com/second-state/soll

    2. 关于Ewasm的SOLL的视频演示
      https://www.youtube.com/watch?v=X-A6sP_HTy0

    3. EVM-LLVM项目
      https://github.com/etclabscore/evm_llvm

    4. Second State BUIDL IDE项目
      https://github.com/second-state/buidl

    5. BUIDL入门指南
      https://docs.secondstate.io/buidl-developer-tool/getting-started

    关于Second State

    Second State专注于开源区块链基础设施软件的构建和商业化。它为智能合约平台开发了一整套开发工具(包括BUIDL IDE)和runtime技术。Second State总部位于得克萨斯州奥斯汀,在中国(北京和台北)和澳大利亚设有开发办事处。作为ETC Labs孵化器计划的成员,它最近完成了由Susquehanna International Group带领的300万美元融资。

    Second State成立于2019年,其愿景是复杂、多功能的商业应用将推动企业对区块链的采用。与专注于数据分类账的传统区块链软件提供商不同,Second State开发和商业化了“区块链中间件”,该中间件包括虚拟机,规则引擎,搜索引擎和数据服务,这些功能可为新一代区块链应用程序提供强大的用户体验,大幅提高开发人员的生产力。

    展开全文
  • 以太坊公钥加密功能python实现 1.什么是公钥、私钥、地址 私钥:32字节(256位),私钥需要保管和隐蔽(非公开)(截取《以太坊技术详解与实战》) 公钥:(由私钥生成)64字节(512位),公钥是公开的,不需要保密...
  • C#以太坊开发详解.doc

    2021-05-20 22:32:28
    本课程详细讲解如何使用C#开发基于.Net的以太坊应用,课程内容即涉及以太坊中的核心概念,例如账户管理、状态与交易、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用C#与以太坊进行交互,是C#工程师...
  • 以太坊的GHOST协议

    2021-01-20 13:17:44
    以太坊1.0将出块时间降低到15s左右,发布的区块在网络上传播时间本身就需要10几秒,其他节点没有充足时间来接收区块,会使得分叉变成常态,且分叉数量会很多,大量孤块(orphan block)得不到收益。同时这些分叉造成...
  • 以太坊基础概念

    千次阅读 2022-03-20 21:28:12
    1、以太坊的组成部分:P2P网络、交易、以太坊虚拟机(EVM)、以太坊账本、客户端 2、以太坊中的重要概念:账户,分为普通账户(EOA)和合约账户(Contract)、地址、交易、gas 3、以太发行规则:挖矿前、挖矿产出、...

    目录

    以太坊的组成部分

    P2P网络

    交易(Transaction)

    以太坊虚拟机(EVM)

    数据库(Blockchain)- 以太坊账本

    客户端

    以太坊中的重要概念

    账户(Account)

    普通账户(EOA)

    合约账户(Contract)

    地址(Address)

    交易(Transaction)

    gas

    以太坊货币

    以太币单位

    以太发行规则

    挖矿前(Pre-mine, Genesis)

    挖矿产出(Mining)

    以太币产量未来的变化

    以太坊的挖矿产出

    区块奖励(Block rewards)

    叔块奖励(Uncle rewards)

    叔块引用奖励(Uncle referencing rewards)

    以太坊区块收入

    普通区块收入

    叔块收入

    “幽灵”协议(GHOST)

    以太坊和图灵完备

    以太坊钱包

    私钥、公钥和地址

    私钥

    公钥

    地址


    以太坊的组成部分

    P2P网络

    以太坊在以太坊主网络上运行,该网络可在TCP端囗30303上寻址,并运行一个名为 ÐΞVp2p 的协议。

    Ð :DApp

    Ξ :以太坊标志

    交易(Transaction)

    以太坊交易是网络消息,其中包括发送者(send),接收者(receiver),值(value)和数据的有效载荷(payload)。

    以太坊虚拟机(EVM)

    以太坊状态转换由以太坊虚拟机(EVM)处理,这是一个执行字节码(机器语言指令)的基于堆栈的虚拟机。

    数据库(Blockchain)- 以太坊账本

    以太坊的区块链作为数据库(通常是Google的LevelDB)存储在每个节点上,包含序列化后的交易 和系统状态。

    LevelDB是非关系型数据库。

    客户端

    以太坊有几种可供操作的客户软件实现,其中最突出的是Go-Ethereum(Geth)。

    以太坊中的重要概念

    账户(Account)

    包含地址,余额和随机数,以及可选的存储和代码对象。

    普通账户(EOA)

    普通账户的存储和代码均为空

    合约账户(Contract)

    合约账户包含存储和代码

    地址(Address)

    一般来说,这代表一个EOA或合约,它可以在区块链上接收或发送交易。更具体地说,它是ECDSA公钥的keccak散列的最右边的160位。

    以太坊地址生成与比特币地址生成一样:私钥生成公钥,公钥生成地址

    交易(Transaction)

    可以发送以太币和信息

    向合约发送的交易可以调用合约代码,并以信息数据为函数参数

    向空用户发送信息,可以自动生成以信息为代码块的合约账户

    gas

    以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核算机制来衡量gas的消耗量并限制计算资源的消耗。

    以太坊货币

    以太币单位

    以太坊的货币单位称为以太(ether),也可以表示为ETH或符号 Ξ 。

    ether被最小单位为wei,1ether = 10^{\18}wei

    以太的值总是在以太坊内部表示为以wei表示的无符号整数值。

    以太的各种单位都有一个使用国际单位制(SI)的科学名称和一个通用名称。 

    值(wei)指数通用名称国际单位(SI)名称
    11weiwei
    1,00010^{\3}babbagekilowei or femtoether
    1,000,00010^{\6}lovelacemegawei or picoether
    1,000,000,00010^{\9}shannongigawei or nanoether
    1,000,000,000,00010^{\12}szabomicroether or micro
    1,000,000,000,000,00010^{\15}finneymilliether or milli
    1,000,000,000,000,000,00010^{\18}etherether
    1,000,000,000,000,000,000,00010^{\21}grandkiloether
    1,000,000,000,000,000,000,000,00010^{\24}megaether

    以太发行规则

    挖矿前(Pre-mine, Genesis)

    2014年7月到8月之间,为了众筹大约发行了7200万以太币。这些币有的时候被称为“矿前”。众筹阶段之后,以太币每年的产量基本稳定,被限制不超过7200万的25%,即不超过1800万。

    挖矿产出(Mining)

    区块奖励(block reward)

    叔块奖励(uncle reward)

    叔块引用奖励(uncle referencing reward)

    以太币产量未来的变化

    以太坊出块机制从工作量证明(PoW)转换为权益证明(PoS)后,以太币的发行会有什么变化尚未有定论。权益证明机制将使用一个称为Casper的协议。在Casper协议下,以太币的发行率将大大低于目前的幽灵协议(GHOST)下的发行率。 

    以太坊的挖矿产出

    区块奖励(Block rewards)

    每产生一个新区块就会有一笔固定的奖给矿工,初始是5个以太币,现在是2个以太币(拜占庭阶段由5ETH降至3ETH,君士坦丁阶段由3ETH降至2ETH)。

    叔块奖励(Uncle rewards)

    有些区块被挖得稍晚一些,因此不能作为主区块链的组成部分。比特币称这类区块为“孤块”,并且完全舍弃它们。但是以太坊称它们为“叔块”,并且在之后的区块中可以引用它们。如果叔块在之后的区块链中作为叔块被引用,每个叔块会为挖矿者产出区块奖励的7/8,这被称为叔块奖励。

    叔块引用奖励(Uncle referencing rewards)

    矿工每引用一个叔块,可以得到区块奖励的1/32作为奖励(最多引用2个叔块)。

    这样的一套基于POW的奖励机制,被称为以太坊的“幽灵协议”。

    以太坊区块收入

    普通区块收入

    固定奖励(挖矿奖励),每个普通区块都有

    区块内包含所有程序的gas花费的总和

    如果普通区块引用了叔块,每引用一个叔块可以得到固定奖励的1/32

    叔块收入

    叔块收入只有一项,就是叔块奖励,计算公式为:

    叔块奖励 = (叔块高度 + 8 - 引用叔块的区块高度) * 普通区块奖励 / 8

    “幽灵”协议(GHOST)

    以太坊出块时间:设计为12秒,实际在14~15秒左右

    快速确认会带来区块的高作废率,由此链的安全性也会降低

    “幽灵”协议:Greedy Heaviest Observed SubTree

    计算工作量证明时,不仅包括当前区块的祖区块、父区块,还包含祖先区块的作废的后代区块(叔块),将他们进行综合考虑。

    目前的协议要求下探到第七层(最早的简版设计是五层),也就是说,废区块只能以叔区块的身份被其父母的第二代至第七代后辈区块引用,而不是更远关系的后辈区块。

    以太坊给以“叔区块”身份为新区块确认作出贡献的废区块7/8的奖励,把它们纳入计算的“侄子区块”将获得区块奖励的1/32,不过,交易费用不会奖励给叔区块。

     P2P网络把信息广播给全网覆盖99%的节点大约需要2s

     引用叔块为了鼓励大家挖矿,解决分叉问题

    以太坊和图灵完备

    1936年,英国数学家艾伦.图灵(Alan Turing)创建了一个计算机的数学模型,它由一个控制器、一个读写头和一根无限长的工作纸带组成。纸带起着存储的作用,被分成一个个的小方格(可以看成磁带);读写头能够读取纸带上的信息,以及将运算结果写进纸带;控制器则负责根据程序对搜集到的信息进行处理。在每个时刻,机器头都在从当前纸带上读入一个方格的信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动纸带。

    如果一个系统可以模拟任何图灵机,它就被定义为“图灵完备”(Turing Complete)的。这种系统称为通用图灵机(UTM)。

    以太坊能够在以太坊虚拟机的状态机中执行存储程序,同时向内存读取和写入数据,使其成为图灵完备的系统,因此成为通用图灵机。考虑到有限存储器的限制,以太坊可以计算任何由任何图灵机计算的算法。

    简单来说,以太坊中支持循环语句,理论上可以运行“无限循环”程序。

    以太坊钱包

    以太坊钱包是进入以太系统的门户。它包含了私钥,可以创建和广播交易。

    MetaMask:一个浏览器扩展钱包,可在浏览器中运行。

    Jaxx:一款多平台、多币种的钱包,可在各种操作系统上运行,包括Android、IOS、Windows、Mac和Linux。

    MyEtherWallet(MEW):一个基于web的钱包,可以在任何浏览器中运行。

    Emerald Wallet:旨在与ETC配合使用,但与其他基于以太坊的区块链兼容。

    私钥、公钥和地址

    私钥

    以太坊的私钥实际上是一个256位的随机数,用于发送以太的交易中创建签名来证明自己对资金的所有权。

    公钥

    公钥是私钥通过椭圆曲线加密secp256k1算法单向生成的512位数。

    地址

    地址是由公钥的Keccak-256单向哈希,取最后20个字节(160位)派生出来的标识符。

    展开全文
  • 18 以太坊的共识机制

    2021-01-08 04:26:18
    以太坊的共识机制 以太坊把出块时间降低到十几秒,但是这样也带来了很多问题,较频繁的出现分叉,这对于共识协议来说有什么影响呢? 在比特币中,只有最长合法链的中才是合法链, GHOST协议:假如一条区块链没有成为...
  • 1 以太坊基本原理

    千次阅读 2022-04-22 13:47:57
    以太坊开发包括:以太坊客户端,以太坊钱包,搭建以太坊私有链,智能合约,redmix-ide开发智能合约 1.以太坊基本原理 1.1 以太坊简介 以太坊是一个开源的有智能合约功能的公共区块链平台,它提供了一个虚拟机来处理...
  • 以太坊账户分为两种类型,一种是外部账户,一种是合约账户。不论是何种账户,都存在四个区域,Nonce,智能合约,账户余额,账户存储。
  • 工作量证明(PoW)被大家诟病的是能耗太大,比特币一笔交易需要1000度电左右,以太坊因出块时间短,一笔交易大概是67度电左右。 工作量证明中矿工通过购买矿机、GPU等来挖矿,从而获得出块奖励,获得的奖励由算力...
  • 它是公链之王,有人说它可能会超越比特币(BTC),其应用非常广泛,在以太坊世界里挖矿可以得到奖励,那么怎么挖矿?一下是以太坊的挖矿教程,相信看完教程后,你也能迅速的开始自己的挖矿之旅!我来详细道来。 开始...
  • PHP与以太坊交互详解

    2020-10-18 04:01:21
    在这篇文章中我们给大家分享了关于PHP与以太坊交互的相关知识点内容,有兴趣的朋友们阅读下吧。
  • 以太坊智能合约

    万次阅读 2021-11-10 15:34:50
    FROM你 AMOUNT 可以是0或者任意你想放在合约里的以太坊数量 调用智能合约 TO字段是智能合约账户地址 DATA字段包含函数名称和参数– 如何调用智能合约 FROM你 AMOUNT可以是0或者任何数量的以太坊,比如你需要为一项...
  • 友情提示:入门连载已经 200 多期了,大白建议新入门的...但当以太坊难度炸弹设置为“引爆”时,矿工通过挖矿获得奖励的难度将成倍增加。今天我们就来聊聊为什么要引入难度炸弹,以及它会有何影响?  01 为什么要引入
  • 七种方法教你如何获取以太坊测试网Token
  • 以太坊学习:第一天

    2022-06-29 13:10:46
    以太坊区块收入 普通区块收入: 固定奖励(挖矿奖励),每个普通区块都有 区块内包含的所有程序的gas花费的总和 如果普通区块引用叔块,每引用一个就可以获得固定奖励的1/32 叔块奖励:(叔块高度 + 8 - 引用叔块的...
  • 1.什么是以太坊? 以太坊是由社区驱动的技术,为加密货币以太币(ETH)和成千上万的去中心化应用程序提供动力。 属于所有人的银行服务 现实生活中不是每个人都能使用金融服务。但是只要您有网络,就可以...
  • 以太坊技术要点 ethereum/wiki ethereumbook 密钥、地址、钱包账户 参考:keys-addresses 加密算法:Keccak256、ECDSA、RIPEMD-160、PBKDF2PBKDF2(Password-Based Key Derivation Function,基于密码的密钥推导函数2...
  • 以太坊之Gas

    千次阅读 2022-02-03 23:34:45
    Gas:以太坊中资源消耗的基础单位 GasLimit:允许消耗的最大Gas值 GasUsed:执行后消耗的最大Gas值 GasPrice:用户为消耗的每个Gas单位支付的以太币 在交易的执行过程中,每笔交易都带有基础 Gas 消耗值。 用户在...
  • 【钱包·RPC搭建】以太坊主网节点搭建以及如何通过web3j操作以太坊钱包 1.去官网:https://www.ethereum.org/下载你对应的版本 2.搭建节点需要什么配置 最低配置: 推荐配置: 配置如果低了,同步区块的速度就慢...
  • 该工程支持java web3j直连以太坊节点(自建或使用免费节点) 支持助记词遍历(该遍历根据助记词生成规则进行了部分反推判断,可将单词组4.8亿种情况缩短至0.3亿种,缩短16倍) 根据助记词生成地址,并直接与以太坊...
  • 以太坊合约部署

    千次阅读 2022-04-19 12:00:27
    = nil { panic("连接以太坊出错") } // 查询等操作可以连接返回后关闭连接 // defer conn.Close() // 生成合约实例 , // NewCONTF创建一个新的ERC20实例,绑定到一个特定的部署契约。 gethObject, err := ...
  • 一、以太坊简介 以太坊(Ethereum)项目的最初目标是打造一个运行智能合约的平台(Platform for Smart Contract),支持图灵完备的应用,按照智能合约的约定逻辑自动执行,理想情况下将不存在故障停机、审查、欺诈以及...
  • Polygon 架构 Polygon 是一个区块链应用平台,提供POS共识和Plasma的侧链, 从架构上,它有一个通用的验证层,与各种不同的执行环境...以太坊是Polygon支持的第一个基链,但Polygon打算根据社区建议和共识,提供对其他
  • TheDao事件与以太坊分叉

    千次阅读 2022-05-03 07:11:03
    以太坊的代币众筹曾经历了一次大的灾难性事件,这次事件甚至导致了以太坊区块链的分叉。 2016 年 4 月 30 日,The DAO 项目在以太坊中进行代币众筹,到 5 月 28 日,这个项目筹集了 1150 万个以太币,以当时以太币的...
  • 本文介绍一个利用以太坊区块链管理物联网IoT设备的身份识别、验证和声誉的IoT设备管理系统。该系统使用Web界面在以太坊智能合约中注册物联网设备,并通过密码学签名消息验证Iot设备对平台的 使用权。 以太坊教程链接...
  • JustaDuel:以太坊游戏

    2021-03-31 10:03:48
    以太坊游戏(#ChainlinkHackathon2021) 灵感来自yu-gi-oh(经典动漫) 概括 根据硬币的价格变化(使用Chainlink提价预言机)而不是随机性来打印自己的卡。 如果您擅长于价格预测,则将获得功能强大的卡。 不同...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,444
精华内容 12,177
关键字:

如何获得以太坊