什么是以太坊(Ethereum)

以太坊(Ethereum)是一个基于区块链技术,允许任何人构建和使用去中心化应用的区块链平台。像比特币一样,以太坊是开源的,并由来自全世界的支持者们共同维护。与比特币仅提供了有限功能的脚本不同,以太坊提供了一个“图灵完备”的虚拟机,称为以太坊虚拟机(Ethereum Virtual Machine),简称EVM,用户可以在EVM上创建智能合约(Smart Contract)。以太坊平台中的通用货币为以太币(Ether),简称ETH,以太币可用于账号间的转账交易或者为EVM上运行的合约消耗的资源付费。

以太坊的创始人

维塔里克·布特林(Vitalik Buterin),1994年1月31日生于俄罗斯,后移居加拿大,拥有俄罗斯和加拿大双国籍。2011年,通过比特币,他了解到了区块链和加密货币技术,并被区块链技术深深的吸引。2011年9月,作为联合创史人之一,创办了旨在向读者提供及时准确的区块链相关资讯的网站:Bitcoin Magazine

此后的两年半里,布特林一直在思考区块链技术的更多创新应用,并最终在2013年9月,发布了以太坊白皮书(Ethereum White Paper),当时他只有19岁。

现在,作为以太坊的灵魂人物,他正领导着以太坊团队,致力于以太坊的开发和推广。

众筹计划

为了筹措开发以太坊需要的资金,布特林发起了一次众筹。与一般的众筹不同,这次众筹只接受比特币支付,并会在以太坊正式发布后,使用以太坊中的通用货币以太币作为回报。这次众筹的简要情况如下:

  • 时间:2014年7月22日-2014年9月2日,共42天。
  • 兑换比例:前14天每1BTC兑换2000ETH,之后每天1BTC兑换的ETH数额减少30,直到1337ETH后不再减少。

  • 分配:众筹发行的ETH数额的19.8%将由以太坊基金会拥有,也就是说,初始发行的以太坊中,有1 / ( 1 + 19.8% ) = 83.47%属于参与众筹的人,剩下的16.53%由以太坊基金会所有。
  • 用于接收众筹比特币的地址为:36PrZ1KHYMpqSyAQXSG8VwbUiq2EogxLo2

这种形式的众筹,在今天我们一般称为首次公开电子币众筹(Initial Coin Offering),也就是大家常说的ICO。

技术细节

要想成功的完成这次众筹,要解决几个问题:

  • 证明众筹的地址是以太坊团队能够控制的
  • 众筹过程公开透明,筹到了多少BTC要对大家公开
  • 要能够及时准确的发放以太币给相应的参与众筹的人

以太坊团队在众筹开始的前一天,花费了这个地址的一个UTXO,从而证明了他们持有这个地址的私钥,证明了是他们在控制这个地址。可以在这里看到这个交易:592eaf32d83a7db47321642c4b3837d38edfbe57910f4f6abd548e578f51f80a

公开透明,这不难做到,筹到了多少BTC,只要看一看比特币区块链中地址36PrZ1KHYMpqSyAQXSG8VwbUiq2EogxLo2在众筹期间收到了多少BTC就可以了。

最后一点比较麻烦,新生的以太坊和比特币根本就是两个区块链,完全没有任何交集,怎么能够建立起关系呢?以太坊的开发者们想到了一个办法,甚至为了方便小白,还提供了一个脚本ethereum/pyethsaletool

步骤如下:

  1. 用户自己生成一个随机数seed
  2. 使用seed生成一个以太坊的公私钥对(pub , priv)
  3. 将公钥pub使用SHA-3摘要算法转换成Hash值,也就是以太坊中的钱包地址eth_address
  4. 将eth_address使用SHA256摘要算法生成Hash值,并转换成一个比特币地址btc_address
  5. 最后,参与者将想要支付给众筹项目的金额分为三部分,0.0002BTC的交易费,0.0001BTC支付到btc_address,剩下的金额支付到众筹地址36PrZ1KHYMpqSyAQXSG8VwbUiq2EogxLo2
  6. 把eth_address发送给以太坊项目组,eth_address将被写入创世区块,从而使参与者获得以太币。
  7. 保管好eth_address对应的公私钥对(pub , priv),以太坊正式发布后,就可以拥有和消费以太币了。

支付给步骤4中生成的btc_address的0.0001BTC将被销毁,为什么这么说呢?比特币的地址其实是一个公钥的Hash值,当你想花费输出到某个地址的比特币时,你要提供两个东西,你的公钥和你使用对应私钥对交易的签名。当接收者验证一个交易时,先检查你提供的公钥的Hash值是不是和你要花费的地址相符,如果相符,再检查签名是不是这个公钥对应的私钥生成的。这个btc_address不是使用公钥生成的,如果想花费它,要从Hash反推出公钥,再从公钥反推出对应的私钥,这都是不可能的。因而这些比特币永远的被销毁了,好在0.0001BTC并不多。

那么为什么要这么做呢?为了解决众筹的比特币和未来产生的以太币的关联问题,以太坊项目组只要扫描以自己的地址36PrZ1KHYMpqSyAQXSG8VwbUiq2EogxLo2为输出的所有交易,再使用同样的方法用你提供的eth_address生成一个btc_address,就可以证明,某笔包含btc_address为输出的交易是你支付的,也就可以把eth_address和众筹金额关联起来了。

举个例子

区块链最大的好处就是永恒和公开,我们可以任意挖掘历史。让我们看看当年的参与者留下了什么吧。

我们随意从以太坊创世区块中找一位众筹参与者出来,看看他是怎么参与众筹的。

  1. 生成eth_address:9c9de44724a4054da0eaa605abcc802668778bea
  2. 生成btc_address:1FH7ZSAiBqeJExWZ7ZWZyqDrK2ehF1g9xz
  3. 创建一个比特币交易,支付0.0002BTC的交易费,支付0.0001BTC到btc_address,剩下的金额支付到众筹地址36PrZ1KHYMpqSyAQXSG8VwbUiq2EogxLo2
  4. 把自己的eth_address告知以太坊项目组

完成这些后,他在比特币区块链中留下了一个交易:37324fd32620179fd1b2746d13981680067deeb0fbb5055f06cec507208f1260

因为上面讲过的原因,1FH7ZSAiBqeJExWZ7ZWZyqDrK2ehF1g9xz上的0.0001BTC永远不可能被花费,可以在图中看到,三年过去了,它仍然是未使用状态,如果有一天这0.0001BTC被花费了,那么就将是比特币毁灭的一天。

下面以太坊项目组上场:

以太坊项目组收到参与者用邮件或者其他方式发来的eth_address(9c9de44724a4054da0eaa605abcc802668778bea),使用相同的算法转换成btc_address(1FH7ZSAiBqeJExWZ7ZWZyqDrK2ehF1g9xz),然后到比特币区块链中去找这个地址,发现了这个地址和交易37324fd32620179fd1b2746d13981680067deeb0fbb5055f06cec507208f1260相关联,这个交易中有支付给众筹地址的比特币,从而证明了eth_address的主人确实支付了众筹款项0.146BTC。

这位众筹参与者于2014年8月26日支付了0.146BTC,按当时的比率,1BTC=1370ETH,最终他获得了0.146 * 1370 = 200.02ETH。

如果你对这个eth_address转换成btc_address的过程感兴趣,我准备了个python脚本,有兴趣的朋友可以去github查看:eth_address_to_btc_address.py

众筹结果

众筹地址共收到8,947个交易,来自8,892个不重复的地址,有两个地址是在众筹时间段之外支付的,所以这两个地址不能获得以太币。通过此次众筹,以太坊项目组筹得31,529.356,395,51BTC,当时价值约1800w美元,0.8945BTC被销毁,1.7898BTC用于支付比特币交易的矿工手续费。

同时,以太坊发布后,需要支付给众筹参与者共计60,108,506.26以太币。

毫无疑问,这次众筹是极为成功的,正是这次成功的众筹,为以太坊项目组筹集了足够的启动经费。

创世区块

在众筹成功一年后的2015年7月30日,以太坊正式发布。项目组兑现了承诺,创世区块中包含了8893个交易。

为什么是8893个交易呢?这其中包含8890个众筹参与者,他们获得了用BTC兑换的以太币,共计60,108,506.26以太币,2个没能在规定时间参与的地址,虽然没有得到以太币,但是也被记录在区块链中。

另有11,901,484.239480以太币被支付给了以太坊基金会0x5abfec25f74cd88437631a7731906932776356f9

所以,从创世那一刻起,以太坊中就有了72,009,990.49948以太币。

通常创世区块都是预先生成好的,以太坊的创世区块就是使用这个脚本genesis_block_generator.py生成的。这个生成好的创世区块的Hash(0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3)会被写进钱包软件中,从那一刻起,以太坊便正式宣告诞生。如果你想看看它在哪儿,这个Hash在params/config.go中。

以太币的来源

与比特币不同,以太坊中的以太币并不全是矿工挖掘出来的,有大约7200w以太币是在创世时就已经创造出来了。到本文写作时,已经存在94,418,166.44以太币,其中76.3%是创世区块中包含的,挖矿产生的2100w以太币仅占到不足四分之一。

数据来源:Ethereum Market Capitalization and Supply Statistics

严谨的说,以太币的来源有两个,创世区块中包含的7200w和大约每年挖矿产生的1872W,并且目前为止,总量无上限。

关于ICO的看法

众筹时均价0.3美元的以太币,而今已经超过300美元,升值1000倍。然而,以太坊的成功不是偶然,也不是暴利,更不是圈钱。以太坊实现了图灵完备的EVM,这是区块链技术领域划时代的创新,为智能合约提供了基础。短短两年时间,以太币市值不断上升,成为仅次于比特币的第二大电子币,并被新的ICO项目用来筹集资金。

ICO仅仅是一种融资手段,不应该被妖魔化。

IPO是用美元、人民币等法币换股权证书,ICO是用有一定价值的数字资产换代币,二者如果都在合理的监管下,确保资金不被挪用,都是利国利民的好事儿。

然而,现在ICO已经被曲解和利用,成为了投机者手中圈钱的工具。看过《华尔街之狼》的人可能知道,主角贝尔福特利用了未公开上市的低价股,也被称为仙股,或者垃圾股,电影中称之为“粉红单”来骗取投资人的资金。如果缺乏监管,股票和ICO都可以用来圈钱,都可以扰乱市场。违法、欺骗、圈钱,这不应该是ICO的原罪。

ICO本无罪,有罪的是贪婪的人性和小白的愚蠢,只要监管得当,技术原理为更多人所了解,我相信它终会有所作为。

转自:https://zhuanlan.zhihu.com/p/29028693

(转)以太坊(Ethereum)创世揭秘 以太坊(Ethereum)创世揭秘的更多相关文章

  1. [ethereum源码分析](3) ethereum初始化指令

    前言 在上一章介绍了关于区块链的一些基础知识,这一章会分析指令 geth --datadir dev/data/02 init private-geth/genesis.json 的源码,若你的eth ...

  2. Kakfa揭秘 Day2 Kafka内核再揭秘

    Spark Streaming揭秘 Day33 Kafka内核再揭秘 优秀的框架会把引擎做到极致,Kafka就是这样,让我们再深入一下研究. 设计目标 kafka系统有着比较独特的的设计,包括5点: ...

  3. [ethereum源码分析](4) ethereum运行开启console

    前言 在上一章我们介绍了  ethereum初始化指令 ,包括了系统是如何调用指令和指令的执行.在本章节我们将会介绍 geth --datadir dev/data/ --networkid cons ...

  4. 区块链入门(2):搭建以太坊私有链(private network of ethereum),以及挖矿的操作..

    在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有 ...

  5. 以太坊的crypto模块--以太坊源码学习

    以太坊的crypto模块 该模块分为两个部分一个是实现sha3,一个是实现secp256k1(这也是比特币中使用的签名算法). 需要说明的是secp256k1有两种实现方式,一种是依赖libsecp2 ...

  6. 以太坊系列之三: 以太坊的crypto模块--以太坊源码学习

    以太坊的crypto模块 该模块分为两个部分一个是实现sha3,一个是实现secp256k1(这也是比特币中使用的签名算法). 需要说明的是secp256k1有两种实现方式,一种是依赖libsecp2 ...

  7. [ethereum源码分析](2) ethereum基础知识

    前言 上一章我们介绍了如何搭建ethereum的debug环境.为了更深入的了解ethereum,我们需要了解一些ethereum的相关的知识,本章我们将介绍这些知识. ethereum相关知识 在学 ...

  8. 02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维

    以太坊(Ethereum)是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机.审查.欺诈.第三方人为干预的可能.以太坊平 ...

  9. [中文] 以太坊(Ethereum )白皮书

    以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...

随机推荐

  1. spark - Locality Level

    这几个值在图中代表 task 的计算节点和 task 的输入数据的节点位置关系 PROCESS_LOCAL: 数据在同一个 JVM 中,即同一个 executor 上.这是最佳数据 locality. ...

  2. AJAX基本操作 + 登录 + 删除 + 模糊查询

    AJAX练习显示页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  3. 关于device tree中的interrupts选项

    http://blog.csdn.net/jiang__jiang/article/details/52064715 随着Linux的发展,dts技术是大势所趋.里面的interrupts = < ...

  4. ASP.NET Core 实现用户登录验证的最低配置

    背景是在一个项目中增加临时登录功能,只需验证用户是否登录即可,所需的最低配置与实现代码如下. 在 Startup 的 ConfigureServices() 方法中添加 Authentication ...

  5. 两种Python基于OpenCV的固定位置半透明水印去除方案

    1. 基于 inpaint 方法(网上的方法,处理质量较低) 算法理论:基于Telea在2004年提出的基于快速行进的修复算法(FMM算法),先处理待修复区域边缘上的像素点,然后层层向内推进,直到修复 ...

  6. Oracle 分区表 收集统计信息 参数granularity

    GRANULARITY Determines the granularity of statistics to collect. This value is only relevant for par ...

  7. LeetCode 896 Monotonic Array 解题报告

    题目要求 An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is ...

  8. Java Web----------response&&request

    1.response 代表响应, 可以理解为一个空的箱子,我们在里面填入要发送到浏览器的内容. 服务器会把这些内容组装成http响应. 1.1 响应首行 协议/版本号 状态码 状态码描述 添加状态码 ...

  9. mysql 数据库操作 数据库的增删改查

    一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...

  10. docker+redis安装与配置,主从+哨兵模式

    docker+redis安装与配置 docker安装redis并且使用redis挂载的配置启动 1.拉取镜像 docker pull redis:3.2 2.准备准备挂载的目录和配置文件 首先在/do ...