分类
最好的外汇交易系统

以太坊是银行帐户

以太坊是什么?

外部账户(EOA),由私人密码控制 合约账户,由它们的合约编码控制,只能由外部账户“激活” 对于大部分用户来说,两者基本的区别在于外部账户是由人类用户掌控——因为他们能够控制私钥,进而控制外部账户。而合约账户则是由内部编码管控。如果他们是被人类用户“控制”的,那也是因为程序设定它们被具有特定地址的外部账户控制,进而被持有私钥控制外部账户的人控制着。“智能合约”这个流行的术语指的是在合约账户中编码——交易被发送给该账户时所运行的程序。用户可以通过在区块链中部署编码来创建新的合约。

以太坊是银行帐户

账户是安全地进行以太坊交易的基础。 与在银行开户不同的是,以太坊的账户可以离线生成而不需要得到任何工作人员的许可, 并且这些账户是 完全匿名 的。 适用于生成账户的开源工具有很多,如网页工具、桌面软件、手机APP等。 它们遵循同一套账户生成标准。 一个用户也可以同时生成、保存、持有多个账户。

账户与账户状态¶

外部账户 (Externally Owned Account, EOA ) 与 智能合约 (Contract Account, CA )。

外部账户由 一把私钥 与该私钥对应的公开地址来表示。在一般情况下,私钥掌握在用户的手中。

智能合约账户 没有私钥 ,仅有公开的地址,它的行为由合约自身包含的代码逻辑来控制。

账户的状态(Acccount State)描述了一个账户当前的情况。 以太坊公链时时刻刻跟踪并维护着每一个账户的状态。 一个账户在初次接收或者发出交易后,都会形成初始状态。 随着时间的推移,每次针对该账户的交易将不断修改其状态。

../_images/Picture8.png

账户状态的内涵¶

  • nonce 已执行交易总数,用来标示该账户发出的交易数量;
  • balance 持币数量,记录用户的以太币余额;
  • storage hash 存储区的哈希值,指向智能合约账户的存储数据区;
  • code hash 代码区的哈希值,指向智能合约账户存储的智能合约代码。

../_images/Picture9.png

已执行交易总数¶

该值会随着用户不断发送交易而递增,保障用户发出的交易是按照顺序被收纳入最终的区块链。 因为在同一个账户中,已执行交易总数不可以在区块链中再次出现。 当用户创建智能合约时,要指定合约地址,该地址是由用户账户的已执行交易总数和用户账户地址联合计算而得出的。

假设我拥有一个账户,该数值为 13 如果我给人转账,则该数字增加到 14

存储区的哈希值¶

该值为 智能合约独有 ,外部账户不包含该值。 存储区即为智能合约在运行中,产生的数据的存储地。 在合约的生命周期里,该区域的内容被合约代码不断写入、读取。 存储区存放于以太坊网络节点的硬盘上。 存储区的内容通过散列函数得出校验哈希值,该值即为存储区的哈希值。

代码区的哈希值¶

该值为 智能合约独有,外部账户不包含该值。 代码区即为智能合约代码本身。 在合约的生命周期中,该区域的内容是不可更改的 只读状态。 代码区存放于以太坊网络节点的硬盘中,当运行时被读入虚拟机执行。代码区的内容通过散列函数得出校验哈希值,该值即为代码区的哈希值。

哈希算法就是通过一定的数学算法 y=Ϝ(x) 的单向函数,将不定长的输入值, 以太坊是银行帐户 经过函数变换后变成定长的哈希值。 这个数学算法是不可逆向运算操作的(意即不可通过输出推断输入,却可通过输入轻松运算出输出), 并具有良好的抗碰撞特性。 唯一的输入对应了唯一输出,哪怕是改动一个输入字符,都可以让输出哈希值产生翻天覆地的变化。[1] 在数据校验领域中,哈希算法被用来对文档进行签名,以防止文档中途被篡改或者丢失字符。 在区块链中常用的安全哈希算法是 SHA3-256算法,即输出定长为256位的第三代哈希算法。[2]

没有钱包App, 如何生成账户?¶

普通用户最频繁使用的账户主要是外部账户(Externally Owned Account, EOA)。 这个账户可以用来发送/接受以太币,也可以发起部署智能合约的行为。 以太坊的外部账户仅由私钥(private key)与它所相对应的公开地址(address)组成。

Okay, 第一步,我如何生成私钥?

私钥 是一个32 bytes (256 bits) 长度的随机数。用户需要一个可靠的随机源来产生该随机数,该随机数取值在0~2 以太坊是银行帐户 256 之间。 私钥的举例如下所示(16进制表示)。生成私钥的逻辑如代码清单2-1所示。

私钥 bdb2c8d55b47e7c37dabdead589eec3d463b2de656ed6ba9b75143e72180ae09

在代码清单2-1中主要逻辑是生成一个32字节长度的随机数。我们选用了 Javascript 的 randombytes 库函数辅助我们生成该随机数。

第二步,公开地址是如何从私钥派生的呢?

这分为几个步骤:首先,我们特殊选定的椭圆曲线(ECDSA-secp256k1)算法 [3], 代入 私钥 作为参数进行运算,得出的结果为 公钥 。

这个过程是不可逆的,并且是唯一与私钥对应的。 其次,在生成公钥后,再将其进一步放入一个哈希算法生成哈希值,截取哈希值的最后40位16进制字符得到地址(160 bits或20 bytes)。 对于上述我们举例的的私钥,由其派生的 地址 如下表所示。

地址 0xda36cd6F5aF1CA5A226c02B3BD74E3F1BA354B9F
私钥 bdb2c8d55b47e7c37dabdead589eec3d463b2de656ed6ba9b75143e72180ae09

  • 32 字节私钥生成的长度为 65 字节的公钥。
  • 删除为首的一个字节 0x04 ,还剩 64 字节。
  • 将其放入 keccak256 哈希算法,生成一个 256 位的哈希值。
  • 截取哈希值的最后 20 字节, 即为所求的公开地址。
  • (可选)辅以 0x 的开头装饰,表明这是一个16进制的书面记录形式。

我生成的账户安全吗?

和一般的网站申请账户不同, 加密货币的账户仅需要可靠的软件在离线状态下生成 , 而不需要去特殊网站进行注册。 很多虚拟货币交易所的管理大额虚拟货币的账户都是通过上述方法在一台离线的计算机上生成的。 那么,如何保证每次生成的私钥不是已经被他人生成过的?在现实中,两个私钥碰撞的概率有多大呢?

我们已知:私钥地址空间有 2 以太坊是银行帐户 256 ,而宇宙中的已知原子总数有 10 80 , 两者比较谁大谁小?我们做一个除法。

从上述算式可以看出,私钥空间比我们宇宙空间的原子总数的倍数还要多。 可以说在全人类都参与使用加密货币的情况下,即使每次交易都使用新的地址, 碰巧遇上他人私钥的概率比生活中选中一个原子去砸中另外一个原子的概率还要小。

智能合约地址的生成¶

  • 合约转出以太币,并非通过私钥签名方式。
  • 只有合约自身的逻辑代码能够管理它的以太币,除极少数例外(例如合约创建者销毁合约,合约收到的以太币将默认打给该创建者)。

我们将在动手实践环节中,用 web3 向读者展示合约的部署生成过程,在这里仅演示当创建一个合约时,究竟发生了什么。代码如清单2-3所示。

  • 合约创建人(发送方)的账户地址( 20字节 )。
  • 发送方账户内的已发生交易总数 nonce 值。

为了得出合约的部署地址,将上述两个参数放入 RLP 函数进行编码,经由 keccak256 哈希算法算出哈希值,最终取出结果中的20 bytes,将其设定为合约地址。

RLP (Recursive Length Prefix)函数 [4] ,全名递归长度前缀编码函数,是以太坊序列化所采用的序列化和反序列化的主要方式。在进行网络传输、数据库存储之前,二进制数组数据都会经过这个函数进行编码,该函数的详细定义请参见以太坊的官方维基 以及本书4.2章节。

以太坊:什么是它,历史和如何购买

图象显示手持移动设备并检查其加密货币状态的手。在本文中,SmartAsset仔细万博官方唯一网站看看Ethereum是什么以及如何购买它。

截至2021年3月,一个ETH价值超过1775美元。在过去五年里,该指数上涨了14000%以上。2016年3月,ETH的交易价格略高于10美元。2018年1月26日,比特币达到1231.94美元,因为投资者在一项被称为“翻转”的行动中从比特币转向了这种替代货币。首次代币发行(ico)也使用了基础以太坊技术,提高了人们对以太坊的兴趣。由微软和摩根大通组成的企业以太坊联盟(Enterprise 以太坊是银行帐户 Ethereum Alliance)帮助验证了人们对这种货币的信心。但到那年秋天,由于加密货币面临更严格的监管限制,Ether的价格下跌了70%。随着加密货币在2020年末和2021年初的兴起,以太坊已经达到了新高,在2021年2月19日达到了1,957.16美元的峰值。

以太坊是银行帐户

以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。

以太坊 产生背景

以太坊 设计原则

以太坊 简洁原则

以太坊 通用原则

以太坊 模块化原则

以太坊 无歧视原则

以太坊 功能应用

以太坊是一个平台,它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。具体来说,以太坊通过一套图灵完备的脚本语言(Ethereum Virtual Machinecode,简称EVM语言)来建立应用,它类似于汇编语言。我们知道,直接用汇编语言编程是非常痛苦的,但以太坊里的编程并不需要直接使用EVM语言,而是类似C语言、Python、Lisp等高级语言,再通过编译器转成EVM语言。

以太坊 发展历史

2013年年末,以太坊创始人Vitalik Buterin发布了以太坊初版白皮书,启动了项目。2014年7月24日起,以太坊进行了为期42天的以太币预售。2016年初,以太坊的技术得到市场认可,价格开始暴涨,吸引了大量开发者以外的人进入以太坊的世界。中国三大比特币交易所之二的火币网及OKCoin币行都于2017年5月31日正式上线以太坊。 [1]