以太坊

以太坊中的账户、交易、Gas和区块Gas Limit等概念

会有一股神秘感。 提交于 2020-01-23 05:37:57
什么是账户 以太坊账户与我们所知的账户概念有一定相似之处,却又有很大的区别,更不同于比特币中UTXO。 账户分两类: - 外部拥有账户(EOA),也就是普通账户 - 合约账户 普通账户 所谓的普通账户就是我们存放以太币的账户,可以随意生成,它具有以下特性: - 拥有以太币余额(以太币存放的地方,与比特币的UTXO模式不同)的balance。 - 用于确定每笔交易只能被处理一次的计数器(nonce)。 - 发送交易(以太币转账、发布合约、调用智能合约) - 通过私钥控制 - 没有相关联的代码 合约账户 合约账户也是最激动人心的概念和底层代码实现,它是功能和数据的集合,存在于以太坊的特定地址(发布智能合约的地址上),拥有一下特性: 拥有以太币余额 有相关联的代码 通过交易或消息调用的方式触发并由以太坊虚拟机(EVM)解释执行 当被执行时: 运行在随机复杂度(图灵完备性) 只能操作其拥有的特定储存,例如可以拥有其永久state 可以call其他合约 所有以太坊区块链上的操作都是由各账户发起的交易来出发。智能合约账户收到一笔交易,交易所带的参数都会成为代码的入参。合约代码会被以太坊虚拟机(EVM)在每一个参与网络的节点上运行,以作为它们新区块的验证。 交易和消息 交易 “交易”术语通俗来讲就是一个账户向另外一个账户发送一笔被签名的消息数据包的过程,区块链会记录并存储相应的数据。延伸一下

以太坊框架梳理

狂风中的少年 提交于 2020-01-16 15:32:54
一、整体框架 1、以太坊介绍 以太坊是一个开放的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供以太虚拟机(Ethereum Virtual Machine)来处理去中心化合约应用。 以太虚拟机 以太坊虚拟机(EVM):可以执行复杂算法的编码的,具备图灵完备的基于栈的虚拟机。 以太坊使用场景 支付系统:用于去中心数字货币交易,价值互换 去中心化应用:黄金和股票的数字化应用、金融衍生品应用、数字认证、追踪溯源、游戏等 以太坊特点 智能合约(smart contract):存储在区块链上的程序,由各节点运行,需要运行程序的人支付手续费给节点的矿工或权益人。 代币(tokens):智能合约可以创造代币供分布式应用程序使用。分布式应用程序的代币化让用户、投资者以及管理者的利益一致。代币也可以用来进行首次代币发行。 叔块(uncle block):将因为速度较慢而未及时被收入母链的较短区块链并入,以提升交易量。 账户系统和世界状态:以太坊不采用UTXO,容易支持更复杂的逻辑 状态通道(state channels):原理类似比特币的闪雷网络,可提升交易速度、降低区块链的负担,并提高可扩展性。尚未实现,开发团队包括雷电网络(Raiden Network)和移动性网络(Liquidity Network)。 以太坊缺点 性能有待提升

Mac环境搭建以太坊私有链

て烟熏妆下的殇ゞ 提交于 2020-01-16 08:24:42
原文地址: 石匠的blog 为了测试以太坊智能合约,最方便的是在本地搭建一个以太坊私有链。在mac上搭建环境主要需要以下步骤。 geth安装 geth是go-ethereum的简写,是一个用go语言编写的以太坊客户端,是在以太坊智能合约开发中最常用的命令行工具。 在mac上可以通过brew工具直接安装: brew tap ethereum/ethereum brew install ethereum 详细的安装说明也可以查看 官方文档 。 安装完成后,可以再mac的terminal中,用以下命令测试工具是否正常: geth -h 创建私有链创世区块 为了创建一个自己测试的私有链,需要首先创建一个创世区块,可以自定义创世区块信息信息genesis.json: { "config": { "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {}, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x20000", "extraData": "", "gasLimit": "0x2fefd8", "nonce": "0x0000000000000042", "mixhash":

以太坊私链与智能合约部署学习(博主修正篇)—— 第一篇

廉价感情. 提交于 2020-01-14 18:42:32
以太坊(Ethereum)自2017年5月诞生以来,发展迅速。作为了一个小白,博主初步打算上个车,过个瘾。那什么是以太坊?请参看度娘的解释(https://baike.baidu.com/item/%E4%BB%A5%E5%A4%AA%E5%9D%8A/20865117?fr=aladdin)。 事物是个新事物,也是个好东西,但资料不多,所以小白博主也只能慢慢找寻资料,慢慢记录自己填坑的过程。 第一篇的主题是:以太坊私链的创建:) 一、配置环境与软件安装 1、安装geth 以下的资料来自:http://8btc.com/article-4537-1.html MAC OSX 首先确保已安装 homebrew,没有安装过的可以在命令行下执行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 进行安装 brew tap ethereum/ethereum brew install ethereum WINDOWS 访问 https://geth.ethereum.org/downloads/ 下载并安装 Geth for Windows LINUX git clone https://github.com/ethereum/go

以太坊2.0或将于2020年推出

拜拜、爱过 提交于 2020-01-14 17:50:42
第二层技术的现状 最近的伊斯坦布尔硬分叉是以太坊1.0的最后一个阶段,引入了一些改进和调整。进入升级阶段的一些核心改进方案(EIP)与Zcash(ZEC)密切相关。EIP-152改进了与实际Zcash区块链的互操作性,而EIP-1108对Aztec和ZEther等项目使用的加密例程进行了优化。 Aztec协议旨在通过使用SNARK零知识 (zero-knowledge)在以太坊 (ETH)区块链中引入机密交易技术——与支持Zcash屏蔽交易的技术相同。 另一方面,Matter Labs正试图利用SNAKS实现可扩展性。在一个基本的层面上,它的ZK同步技术将允许将大部分交易计算转移到链外–使用零知识证明来保证它们的正确执行。 最后,Plasma专注于为特定的用例创建侧链。Plasma是这类技术,它可以让你在以太坊生态系统的第二层使用少数去中心化平台。在某些情况下,他们可以从完全信任中受益——有时他们也可以从部分信任中受益——但如果他们真正紧密的联系在一起,他们可以从基础信任层的完全信任中受益,并且你可以从两层中获利。 然而,这些技术还没有实现。在1月9日举行了可信的启动仪式后,似乎只有Aztec准备在本月推出其加密引擎。 非营利研究机构Plasma Group最近宣布,他们在这项技术上的理论工作已经完成,但是没有透露具体的开发工作正在进行。 “宁静”阶段路线图 虽然伊斯坦布尔(硬分叉

以太坊2.0如何实现“刷卡级”速度?

此生再无相见时 提交于 2020-01-14 12:21:08
文|JX kin 编辑|文刀 2020年没有减半可期的以太坊,同样有许多故事可以讲。 1月13日,加密货币评级机构韦氏评级(Weiss Crypto Ratings)在推特上称,以太坊创始人Vitalik Buterin表示,2.0版交易确认时间将缩短到3~6秒。 两天前,以太坊社区发布了2.0 Phase 0(0阶段)的代码规范版本,一些新构想已经开始落实,但新版版的具体上线时间还未敲定,“不是第一季度就是第二季度,没有具体时间。”Vitalik Buterin在中文社区如此回复。 进化到2.0的以太坊将是一个新的网络系统,现有基础下,共识协议 Casper 和分片技术将有望落地,技术的复杂性也意味着开发难度在加大。 全新的以太坊能否落地,关系到公链能否走出“不可能三角”的困境,进而影响商业应用是否能在其上展开。 “0阶段”代码规范出炉 1月13日,加密货币评级机构韦氏评级(Weiss Crypto Ratings)在推特发布一条关于以太坊2.0的消息,“V神透露,以太坊2.0版本完全实现时,确认交易所需的时间将从几分钟减少到3至6秒——大约相当于刷卡所需的时间”。 两天前,以太坊的 Github代码库显示,社区已经发布了2.0版本的Phase 0(第0阶段)代码规范,版本号为v0.10.0,重要信息是“新的BLS标准”将集成到以太坊2.0规范中

区块链 四大特征

寵の児 提交于 2020-01-14 08:44:39
这四个基础特征分别是:不可篡改,不可复制的唯一性,智能合约,去中心自组织或社区化(见图1)。 区块链不只是技术,它还将从经济、管理、社会层面带来变化,它可能改变人类交易的方式,它将改变货币、账本、合同、协同等方面,这是我们将在后续章节中讨论的。 图1:一张图看懂区块链:从基础到应用 接下来,我们先分别讨论区块链的这四个基础特性。 区块链的四大特征之一:不可篡改 区块链最容易被理解的特性是不可篡改的特性。 不可篡改是基于“区块+链”(block+chain)的独特账本而形成的:存有交易的区块按照时间顺序持续加到链的尾部。要修改一个区块中的数据,就需要重新生成它之后的所有区块。 共识机制的重要作用之一是使得修改大量区块的成本极高,从而几乎是不可能的。以采用工作量证明的区块链网络(比如比特币、以太坊)为例,只有拥有 51% 的算力才可能重新生成所有区块以篡改数据。但是,破坏数据并不符合拥有大算力的玩家的自身利益,这种实用设计增强了区块链上的数据可靠性。 通常,在区块链账本中的交易数据可以视为不能被“修改”,它只能通过被认可的新交易来“修正”。修正的过程会留下痕迹,这也是为什么说区块链是不可篡改的,篡改是指用作伪的手段改动或曲解。 在现在常用的文件和关系型数据中,除非采用特别的设计,否则系统本身是不记录修改痕迹的。区块链账本采用的是与文件、数据库不同的设计,它借鉴的是现实中的账本设计—

区块链概述

让人想犯罪 __ 提交于 2020-01-11 20:27:34
目录 引言: 挖矿: 开发: 区块链中的三权分立: 区块链的分类: 关于炒币: 什么是区块链/比特币? ②区块链分类 ③区块链安全保障 ④利益共同体 ⑤钱包 比特币(BTC)总量 搬砖: 引言: 中本聪, 中本聪于2008年发表了一篇名为《比特币:一种点对点式的电子现金系统》( Bitcoin: A Peer-to-Peer Electronic Cash System )的论文,描述了一种被他称为“比特币”的电子货币及其算法。2009年,他发布了首个比特币软件,并正式启动了比特币金融系统。2010年,他逐渐淡出并将项目移交给比特币社区的其他成员。中本聪据说持有约一百万个比特币。这些比特币在2013年底时的价值超过十亿美元。 区块链是去中心化/匿名的/安全的/不可篡改的/开放的下一代互联网。 区块链的典型代表就是比特币网络,比特币已经经过了时间的考验,在长期运行也未发生问题,也就将区块链的概念带到了风口浪尖。 挖矿: 根据比特币基本算法,比特币每10分钟产生1个区块(block),每个区块里有N个比特币作为报酬,这个区块包含了最近10分钟所有的比特币交易信息。制造比特币的过程叫做"挖矿"(mining),在这个过程中,计算机把最近收到的帐单打包在刚制造的区块里,这个打包的过程即制作的过程,只有极其稀少的几率被制造成功。(你可以理解成把新收到的帐单合在一起,一次成型不可修改

区块链100讲:浅析以太坊网络智能合约原理

不羁岁月 提交于 2020-01-08 13:32:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 以太坊图灵完备的智能合约丰富了区块链从比特币单一数字资产去中心化转移到去中心化的全球分布式计算机变为可能,虽然在以太坊网络运行代码成本比较高。相对于比特币的脚本,以太坊智能合约的出现是一种比较大的进步。这篇文章我们来讨论以太坊网络智能合约的工作原理。 1 区块链101 区块链简而言之就是非中心化的分布式账本,一种多方参与者共享的特定类型数据库。 账本中保存在区块链网络中发生所有的交易,每个加入网络的节点都有数据的全量拷贝。经济激励模型削弱甚至消除了独立节点之间的信任基础,在不需要信任的开放网络中转移数字资产。 区块链世界奉行 Don't trust, verify it 原则。 2 智能合约 图灵完备的智能合约让以太坊成为继比特币之后区块链技术最大的亮点。比特币是数字资产作为价值的载体,而以太坊超越了数字资产属性,赋能去中心化应用。智能合约是能够在区块链网络运行的代码逻辑。 3 以太坊账户模型和状态模型 比特币使用 UTXO 模型,而以太坊使用账户模型。智能合约在以太坊中也属于账户。以太坊网络有且仅有一个经常被更新的 State trie 全局状态。state trie 通过健值对维护所有在以太坊网络发生过交易的账户。 key 为长度为 160 bit 的以太坊地址,value 为下面四个要素使用 RLP

JavaScript实现简单区块链

不想你离开。 提交于 2020-01-07 07:41:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 用JavaScript来实现一个简单的区块链。通过实现过程,你将理解区块链是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表中包含着许多有序的记录。 然而,在通常情况下,当我们谈到区块链的时候也会谈起使用区块链来解决的问题,这两者很容易混淆。 像流行的比特币和以太坊这样基于区块链的项目就是这样。“区块链”这个术语通常和像交易、智能合约、加密货币这样的概念紧紧联系在一起。 这就令理解区块链变得不必要得复杂起来,特别是当你想理解源码的时候。下面我将通过 200 行 JS 实现的超级简单的区块链来帮助大家理解它,我给这段代码起名为 NaiveChain。你可以在[Github] https://github.com/lhartikk/naivechain ) 查看更多的技术细节。 块结构 第一个逻辑步骤是决定块结构。为了保证事情尽可能的简单,我们只选择最必要的部分:index(下标)、timestamp(时间戳)、data(数据)、hash(哈希值)和 previous hash(前置哈希值)。 这个块中必须能找到前一个块的哈希值,以此来保证整条链的完整性。 class Block { constructor(index, previousHash, timestamp, data, hash)