以太坊

以太坊Ethereum存储和数据结构 图示

白昼怎懂夜的黑 提交于 2020-01-04 23:39:11
下图表示以太坊的世界状态前缀树。实现源码可以在这里下载:https://github.com/liangyihuai/understanding_ethereum_trie 这个链接的readme文件还有一个油管视频的链接,推荐观看。 谢谢 reference https://ethereum.stackexchange.com/questions/268/ethereum-block-architecture 来源: CSDN 作者: 梁义怀 链接: https://blog.csdn.net/liangyihuai/article/details/103837566

【区块链】以太坊学习基础

旧巷老猫 提交于 2019-12-28 05:41:05
以太坊基础 简介 区块链是一种分布式流水账数据库; 以太坊=区块链+以太坊虚拟机(EVM),其本质是一个状态机; 以太坊的所有活动(状态变动)都是通过账户间发送交易来完成的; 以太坊上的所有操作都是要消耗gas的,gas是要用以太币(Ether)买的; 以太坊的生态系统出现端倪,DApp的雏形已经有了; 阅读以太坊黄皮书是最佳的学习方法 以太坊入门学习指南 以太坊DApp编程全流程 基本测试环境 Truffle编程框架 Solidity智能合约编程语言 Web3js合约调用 js/node.js基础 以太坊学习主要内容 以太坊简介 以太坊编程环境构建 js/nodejs简介:语言与服务设计基础 solidity编程:智能合约实现 web3.js编程:智能合约调用 案例一:数字通证系统设计 案例二:投票系统 区块链典型系统结构 应用层 合约层 激励层 共识层 网路层 数据层 以太坊技术框架 以太坊核心概念 点对点网络:所有节点都地位平等,没有中心服务器 区块链:去中心化存储数据库 EVM:虚拟机,运行程序 DApp:智能合约的应用 以太币(Ether):以太坊世界中使用的数字货币 Gas:以太坊里对所有活动进行消耗资源计量的单位。读取免费,写入收费。 矿工(Miner):挖矿,构建基础设施 什么是区块链? 共识算法有哪些? POW:Proof of Work,工作证明 POS

Ethereum overview

自闭症网瘾萝莉.ら 提交于 2019-12-28 00:25:12
以太坊综述Ethereum 为什么要学习以太坊? • 庞大的开发者社区,目前最大的区块链开发平台 • 相对较成熟,有代表性,资料众多 • 以应用入手,学习曲线不那么陡峭 • 与JavaScript结合紧密,方便开发人员上手 主要内容 学习目标 • 掌握以太坊的基本概念和工作原理 • 理解以太坊与比特币的联系和区别 • 掌握以太坊客户端的使用 • 深入理解智能合约 • 掌握 Solidity 语法,并能够写出复杂的合约 • 掌握 web3.js 的调用,并能够实现具体的 DApp • 综合运用各种工具,完成较复杂的项目 主要参考资料 《 精通以太坊》( Mastering Ethereum ) 《 以太坊白皮书》 ( A Next-Generation Smart Contract and DecentralizedApplication Platform ) 《以太坊黄皮书》(《以太坊:一种安全去中心化的通用交易账本 拜占庭版本》) 以太坊官方文档 ( Ethereum Homestead Documentation ) Solidity官方文档 涉及工具 • MetaMask - 浏览器插件钱包 • Remix - 基于浏览器的 Solidity 在线编辑器 • Geth -以太坊客户端(go语言) • web3.js – 以太坊 javascipt API库 • Ganache

以太坊

北城余情 提交于 2019-12-27 10:53:56
以太坊是什么? 以太坊(英语:Ethereum)是一个开源的有智能合约功能的公共区块链平台[1][2]。通过其专用加密货币以太币(Ether,又称“乙太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。 相较于较大多数其他加密货币或区块链技术,以太坊的特点包括下列: 智能合约(smart contract):存储在区块链上的程序,由各节点运行,需要运行程序的人支付手续费给结点的矿工或权益人。 叔块(uncle block):将因为速度较慢而未及时被收入母链的较短区块链并入。使用的是有向无环图的相关技术。 权益证明(proof-of-stake):相较于工作量证明,可节省大量在挖矿时浪费的电脑资源,并避免特殊应用集成电路造成网络中心化。(尚未实现) 闪电网络(lightning network):可提升交易速度、降低区块链的负担,提高可扩展性。(尚未实现) 开发社区稳固,不断成长,勇于使用硬分叉(hard fork)。 以太坊最初由 Vitalik Buterin 在2013年提出。Vitalik 本是一名参与比特币社区的程序员,曾向比特币核心开发人员主张比特币平台应该要有个更完善的编程语言让人开发程序,但未得到他们的同意,因此决定开发一个新的平台作此用途。Buterin

【观点】为什么此CRYPTO生态系统比EOS,TRON更适合DAPP?

…衆ロ難τιáo~ 提交于 2019-12-21 04:06:55
在去中心化互联网的未来之战中,三个竞争对手跃居首位:TRON,EOS.IO和以太坊。 作为分散式应用程序中存在时间最长,价值最高的平台,以太坊仍然处于领先地位,但另外两个被认为是潜在的“以太坊杀手”。 除了TRON和EOS.IO之外,还有许多其他平台可能会导致以太坊的死亡,例如Cardano,Stellar,NEO和IOTA以及其他众多平台。 所有这些区块链网络都认为,它们拥有超越比特币的简单货币或资产应用程序所需要的功能,而是成为去中心化应用程序(dapps)和智能合约的标准基础架构。 根据最近的研究,以太坊平台在dApps和开发人员方面领先于竞争对手。 以太坊用户群的增长 最近的行业评论为以太坊生态系统描绘了比其当前看跌价格所反映的更为乐观的景象。 分散式应用程序指标公司发布了其针对dApp平台的年度行业综述。通过比较顶级竞争者,得出结论,以太坊在使用和开发方面仍在支配地位。 该文件指出,以太坊仍然是最重要的智能合约区块链平台,2019年每日用户群增长118%。它补充说,它也是唯一扩展到四个dApp领域的平台; Defi,交流,游戏和赌博。 根据这项研究,以太坊的两个最接近的竞争对手,EOS和Tron表现不佳。由于网络垃圾邮件,EOS在性能方面有所下降,导致每日用户活动下降了48%。 同时,Tron在上半年的dApp使用量方面获得了强劲增长,但在下半年有所下滑。总体来说

区块链发展历程经历了哪几个版本?区块链各个版本有什么意义?

风格不统一 提交于 2019-12-15 09:06:09
前言 2018年开始,区块链迅速在国内掀起一股火热的风潮,随即成为第一个风口。这也吸引了大量的人走进这个行业,很多人对区块链的看法,也是相当看好的。 甚至有人评价:“区块链是世界第九大奇迹”,目前没有任何一种技术像区块链那样,会给未来社会的变革带来如此广泛的可能性。 区块链1.0:数字货币时代 区块链1.0时代是以比特币 、莱特币为代表的加密货币,具有支付、流通等货币职能。随着中本聪的第一批比特币被挖出来,区块链1.0时代也开启了。区块链1.0时代和老牌数字货币挂钩,将区块链概念带入到人们的视野中。 2008年,次贷危机发生在美国,导致全球金融危机。每个国家的法定货币大幅贬值。此时,声称是Nakamoto的人(或组织)在互联网上发表了一篇名为《比特币:一种点对点的电子现金系统》的文章。本文介绍了一种全新的数字货币系统——比特币。 在没有中央机构的情况下,比特币解决了一定数量的固定货币发行和流通的问题。通过比特币系统进行的交易转账将在整个网络中进行广播,使其透明,不可篡改且信誉良好。人们可以安全地将比特币转移到全球另一边通过比特币网络彼此不熟悉的人身上。比特币白皮书的出现标志着比特币底层技术——区块链的诞生。 此外,它还标志着1996年之前提出的数字货币概念是以真正意义上的这种方式实现的。随着Nakamoto的第一批比特币,它被挖出来,区块链作为底层

许子敬谈未来区块链

我与影子孤独终老i 提交于 2019-12-14 16:46:20
两年前,比特币和象征着区块链2.0 的以太坊汹涌而来,全世界都感受到了比特币自 2013 年后再次腾飞的疯狂,创造出单枚 2.2 万美金的历史最高价。几乎在一夜之间,区块链江湖急剧扩张,如同一场饕餮盛宴,无人愿意缺席。各类技术专家、金融翘楚、身怀梦想的创业者携海量资金入场,区块链盛宴将将开始,区块链的未来未知而遥远,也许正是这份未知,给了众多参与者无尽的遐想与勇气。自此,区块链三个字开始逐渐进入大众视野。 两年后,总书记在中央政治局的学习会上强调,将把区块链作为国家核心技术自主创新的重要突破口,加快推动区块链技术和产业创新发展。中央的战略布署掷地有声,区块链的战场再次点燃,而这次,区块链注定不会轻易离场。 许子敬 谈何为区块链 简单讲,区块链就是一个巨大的分布式的“账本”和数据库,具有去中心化、去信任、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。比如你和小张做一笔交易,如果只有一个帐本,交易有被篡改的风险;但区块链让每一笔交易都记录在无数个小账本上,共同构成那个巨大的大账本,如此全世界都知道你俩之间这笔交易,想赖帐或篡改根本不可能。因此,区块链让任何互不了解的个体通过一定的合约机制达成信用共识,而不再需要中间方,其最大益处就是建立了互联网时代的信用机制。 数字资产从金钱到音乐或是其他产品,并不储存在中央区域,而是分散于全球的帐本之中,使用的是最高级别的密码技术

基于Docker在Ubuntu+Jupyter上运行“以太坊”

馋奶兔 提交于 2019-12-10 16:23:03
以太坊( https://ethereum.org )是一个开放的开源区块链( 技术原理与发展趋势 , 区块链相关术语 )软件,可以实现无中心体系架构下的应用开发。 下面我们介绍在Docker中部署 以太坊 的方法(参见 以太坊安装方法 ),然后使用Jupyter Notebook进行基于浏览器的访问。一旦环境设置完毕,就可以在很多环境下部署Docker容器,使用非常方便。Jupyter Notebook是基于浏览器的编程“笔记本”,非常适合进行数据探索类的研究。 1.安装支持环境 1.1 安装Docker容器支持环境 我用的Mac OS X,现在的Docker已经原生支持了,不用像以前要安装VirtualBox,再使用Vagrant了。 到这里 http://www.docker.io 下载相应的版本,然后运行安装程序,就可以了。 如果使用Ubuntu,建议使用 http://get.docker.io 下载的脚本进行安装,官方的安装方法貌似与Ubuntu内置的lxd有冲突,经常出问题。方法如下: wget http://get.docker.io -O docker-setup.sh sudo chmod +x docker-setup.sh ./docker-setup.sh 如果Docker下载太慢,尝试加入这个镜像库: https://pee6w651.mirror

针对网站漏洞怎么修复区块链漏洞之以太坊

独自空忆成欢 提交于 2019-12-10 08:28:52
前段时间以太坊升级架构,君士坦丁堡的硬分叉一个升级代号,被爆出含有高危的网站漏洞,该漏洞产生的原因是由于开启了新的协议模式eip1283导致的,也是区块链漏洞当中危害较为严重的,可以让一些交易进行重入,一个转账可以导致写入2次,但该漏洞并不是确实的可以进行重入漏洞。以太坊区块链在发现该漏洞之后,紧急的停止了以太坊的硬分叉升级,并与上个星期五召开了内部会议对其漏洞进行修复,延期对以太坊的硬分叉升级。 区块链当中,以太坊属于比较大的虚拟币,位列于比特币,第二。关于该漏洞的详情我们来分析一下,关于这次以太坊的升级大家都可以提议,必须经过内部审核,才会通过提议,在这次的提议当中有个eip1283的升级建议, 以太坊的漏洞就是由他而生。 这个建议主要是对以太坊的操作码进行长久的保存数据以及更好的整理以太坊的交易手续费,便捷,快速,处理过程的逻辑更为人性化,大大节省了成本以及时间,使得该提议被提上了日程,以太坊也进行了采纳,公开与众,攻击者根据公开的一些细节,对其进行漏洞挖掘,才导致了今天发生以太坊漏洞。 区块链重入漏洞在同一个交易当中,1个买家1个卖家进行的合约交易,两种合约互相调用并产生了重复转账的一个漏洞,漏洞产生的根源并没有将转账当成一个事务处理来看待。我们来看一下下图: 我们模拟了一个合约,交易的虚拟币由deposits来存储,然后再推送到splits变量当中去分配这个存储比例

以太坊源码分析-BlockChain

末鹿安然 提交于 2019-12-10 08:15:36
BlockChain 位置: package core github.com/ethereum/go-ethereum/core/BlockChain.go release 1.8 作用 BlockChain管理具有创世纪数据库的规范链,主要实现管理区块(BLock)形成/引进链,reverts(恢复)、重组链 以太坊启动节点启动后后,系统中只存在一个BlockChain对象实例、BlockChain是以太坊中的一个类 BlockChain只保存规范链的头区块 规范链 在区块的创建过程中,可能在短时间内产生一些分叉, 在我们的数据库里面记录的其实是一颗区块树。 我们会认为其中总难度最高的一条路径认为是我们的规 范的区块链 。 有很 多区块虽然也能形成区块链, 但是不是规范的区块链。 Blockchain 数据结构 Blockchain管理所有的Block, 让其组成一个单向链表。Headerchain管理所有的Header,也形成一个单向链表, Headerchain是Blockchain里面的一部分,HeaderChain在全局范围内也仅有一个对象 type BlockChain struct { chainConfig *params.ChainConfig // Chain & network configuration cacheConfig *CacheConfig //