想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!

2018年03月19日 16:25:00 CSDN_AF 阅读数:701
翻译自:https://medium.com/@mattcondo...
如果你想了解以太坊当前可以做到什么程度,通过什么,如何做到。请往下细读。
预备知识:
1.你需要知道区块链的概念及实现一个无需信任的电子货币的运作原理。可以先看看长版,如果你觉得太长,可以看看短版。但我还是建议,看那个长的视频。
如果你是一名软件工程师,拥有软件开发的经验。能知道从系统、架构角度学一个东西,其实能倍增学习效果。 
如果有一周的空闲时间。好了,下面开始就不再是废话了。 
你需要了解Merkle tree的基本概念,看他是如何做到防止信息篡改,以及信息自校验的。 
不用必须读白皮书,只需要了解一些基本概念。但说实话,如果不读,不会相信这些概念,从而不能真正明白这些概念,所以读白皮书也许仍然是最快的方式。 
我建议你完整的读一下本文,从一个较高的层面了解一下,然后再挑感兴趣的,一一钻研,也许要花几天时间哦。
你最后会发现,区块链就是建立在朴实无华的基本技术之上,一点也不神奇。虽然最近各种ICO把它炒得非常热。每个人都是站在巨人的肩膀上,如果你是程序员,你能对这些项目和技术,理解得更深。所以不要因为其它一些糟粕,而失去了一个提升自己的机会。
以太坊
以太坊,Ethereum是一个分布式的计算机,有许多的节点,其中的每一个节点,都会执行字节码(其实就是智能合约),然后把结果存在区块链上。由于整个网络是分布式的,且应用就是一个个的状态组成,存储了状态就有了服务;所以它就能永不停机,没有一个中心化的结点(没有任何一个节点说了算,去中心化的),任何第三方不能干预。
显然上面这一段话,直接解释了以太坊是什么。但你可能有非常多的问题。可以先读一下以太坊的白皮书。或者看下这个视频,25分钟理解以太坊。(译者注:以太坊入门,确实没有什么好的办法,就是看白皮书最好,最快)
智能合约
智能合约与平时的代码其实没有什么区别,只是运行于一个以太坊这样的分布式平台上而已。这个运行的平台,赋予了这些代码不可变,确定性,分布式和可自校验状态等特点。代码运行过程中状态的存储,是不可变的。每一个人,都可以开一个自己的节点,重放整个区块链,将会获得同样的结果(译者注:能控制所有节点都达到一致状态,就是所谓的共识)。
在以太坊中,每个合约都有一个唯一的地址来标识它自己(由创建者的哈希地址和曾经发送过的交易的数量推算出来)。客户端可以与这个地址进行交互,可以发送ether,调用函数,查询当前的状态等。
智能合约,本质上来说就是代码,以及代码运行后存储到区块链上的状态两个元素组成。比如,你用来收发ETH的钱包,本质上就是一个智能合约,只是外面套了一个界面。
概念非常强大,而我相信你已经看完了。而你在看相关的新闻,经常听到这个非常有潜力,经常听到资产/权利管理,分权自治组织(DAO),身份,社交网络等炫酷。但他本质就是这些。
Gas
智能合约,就是一些代码,运行整个分布式网络中。由于网络中的每一个节点都是一个全节点。这样的好处是容错性强,坏处是效率低,消耗资源与时间(译者注:原来只在一个节点执行一次就行,现在所有节点中每一个,都要执行一模一样的运算)。因为执行计算要花钱,而要执行的运算量与代码直接相关。所以,每个在网络运行的底层操作都需要一定量的gas。gas只是一个名字,它代表的是执行所需要花费的成本(译者注:由于以太坊是图灵完备的,随便一个死循环就将导致网络不可用,所以引入了gas的概念)。
整个分布式网络引入了强制限制,来避免停机问题。因此如果你写一个死循环,当gas耗尽后,网络就会拒绝执行接下来的操作,并且回滚你之前的所有操作。
gas的价格由市场决定,类似于比特币的交易费机制。如果你的gas价格高,节点则将优先因为利益问题打包你的交易。
一般来说,在Ethereum中计算和存储东西比在传统环境中做的更为昂贵,但是,Ethereum为您的代码提供了上述我们讨论过的那些好的属性,这可能是一样有价值的。
一般来说,在以太坊网上读取状态是免费的,只有写入状态是收费的。下面这个文章是gas概念的一些深度解析。
分布式APP(ĐApp / Dapp / dapp/ dApp)
一个分布式App是指,服务端运行于以太坊网络上一个或多个智能合约。
一个分布式的App不用将所有状态都存储在区块链上,或者在链上进行所有计算(译者注:比如图形渲染),这样就太花gas了。所以一个分布式App把需要大家共同信任的状态存在区块链上就好了。许多的分布式应用使用后面提到的技术,如IPFS和Gelem,在链下进行分布式存储和计算。虽然没在以太坊上,但仍使用的是区块链技术。
我不知道谁开始在D上使用这个小小的缺点,是看起来酷,但会影响搜索。 你可以自由使用,但尽量方便别人的搜索。
以太坊的github上,有一个dapp-bin的目录,有一些文档和示例。使用前,你需要看看文件最近的状态,因为他们将很可能已经被淘汰。
DApp客户端
大多数的分布式应用都通过一些用户友好的前端提供服务,因为不是所有人都愿意通过命令行,通过自己手动组装哈希串和操作指令码进行交易。
一个DApp与传统的开发中的,客户端或前端是类似,区别仅在于它们与以太坊的区块链进行交互(也可以同时与其它服务交互)。这些客户端往往用JS编写,因为当前还暂时没有完成全部的向NodeJS的转换。
另外,大多数的Dapp客户端使用JS的原因,是因为它可以在浏览器中运行,因为大家都有浏览器,这样每个人都可以运行了。由于有更多的go语言的开发工具,使用go语言来写客户端的也不少。在现在这个激烈的发展期,这意味着,除非你有自己的偏好,否则可能要从go和JS(也许还有,Rust)来选择一种语言,来与以太坊区块链,以及基于以太坊开发的协议进行交互了。
以太坊的一个核心开发者,写了一篇关于使用Meteor工具来创建Dapp的文章,这意味着Meteor已经成为Dapp客户端开发的新标准。这绝对是基于JS建立全栈应用时的一个首选方法。但需要注意的是Meteor只是提供了一个开发工具,与DApp客户端并不等同,DApp客户端也完全可以由其它方式开发。(译者注:还有一些其它的开发工具,如Truffle,也是非常不错的哦)。
因为围绕Meteor和DApp开发的活跃,有非常多的包在Atmophere(Meteor的包管理工具),它提供了许多常见的操作,如帐户管理,从区块链中获得最新的50个区块等等。
DApp浏览器
一个DApp浏览器,正如它字面所表达的,用来让DApp客户端(常常使用JS与以太坊的智能合约进行交互)的使用更加容易。
DApp浏览器的主要目的是:
提供到一个以太坊节点的连接(或者连接到一个本地节点或者远程节点),和一个方便的切换不同节点(甚至是不同的网络)。 
提供一个帐户(或者一个钱包)来方便用户与DApp交互。
Mist是以太坊官方的DApp浏览器。一个漂亮的界面来与以太坊节点交互,与智能合约发、收交易。
Status是一个手机上可以使用的DApp浏览器。
MetaMask是一个Google浏览器扩展,把Chrome变成了一个DApp浏览器。它的核心特性是注入以太坊提供的js客户端库web3,到每一个界面,来让DApp连接到MetaMask提供的以太坊节点服务。不过这个Chrome扩展,可以允许你管理你的钱包,以及连接到不同的以太坊网络(译者注:包括本地的开发网络)。
Parity是一个以太坊客户端(也是一个全节点的实现),集成到了Web浏览器,并使之成为一个DApp浏览器。
以太坊节点
与比特币的节点类似。每个节点都存储了整个区块链的数据,并重放所有的交易以验证结果的状态。你可以通过geth来运行一个全节点(官方的节点,go语言),或者parity来运行一个轻节点,它是第三方的,Rust语言写的。
你的节点需要知道从哪个区块链下载数据,以及与哪些节点交互,后面会说明一些常见的网络。
你也许可以运行下所有这些节点客户端。如果你不想自己运行一个这样的节点,有第三方的网关服务,比如Infura可以选择。另外还有专门用于测试和开发的,本地版本的节点,后面会提到。
如果你正在开发一个DApp的客户端,你并不总是需要主动提供连接到以太坊的节点。因为DApp的浏览器一般会提供对应的连接(译者注:话说这样,那使用这个,还得额外安装一个DApp浏览器呀)。
以太坊代币
现在你应该知道我们可以通过写智能合约,并将状态存到区块链上了?那如果,在状态这块,我们存的是一个Map类型,键是地址,值是整数。然后我们将这些整数值叫做余额,谁的余额呢?它就是我们要说的代币(译者注:代币的数据结构就是这样简单,存的就是某个用户,它当前的余额)。
是的,所有你刚才听到的代币,只是一些数据,存储在一个哈希表里,通过api或者所谓的协议,来进行增删改查。这是一个简单的基本合约。
你可以看看ethereum的创建一个众筹合约的官方教程。你将会发现它仅仅是一个合约(Crowdsale)与另一个合约(MyToken)交互,和前面的基本合约类似。并没有什么神奇的地方。
人们使用代币来做各种各样的事情,阻拦大家如何使用的只有想像力。代币常常用来激励用户与某个协议进行交互,或者证明对某个资产的所有权,投票权等等。

以太坊概念知识入门篇相关推荐

  1. 以太坊概念知识入门篇 1

    翻译自:https://medium.com/@mattcondon/getting-up-to-speed-on-ethereum-63ed28821bbe 如果你想了解以太坊当前可以做到什么程度, ...

  2. 第一课 以太坊开发从入门到精通学习导航

    辉哥认为,区块链是人类社会伟大的革命,改变了生产关系.但是作为技术人员,有必要了解全部底层技术和算法吗?依稀记得,以前有些培训机构培训使用电脑时先教五笔输入法,然后才开始学习使用WINDOWS,让很多 ...

  3. JavaScript 基础知识 - 入门篇(二)

    11. 函数 11.1 函数的基础知识 为什么会有函数? 在写代码的时候,有一些常用的代码需要书写很多次,如果直接复制粘贴的话,会造成大量的代码冗余: 函数可以封装一段重复的javascript代码, ...

  4. 以太坊教程:入门学习开发以太坊dapp

    一.区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量.既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链 ...

  5. 以太坊:快速入门 Truffle

    快速入门 Truffle 本文主要入门介绍如何创建 Truffle 项目以及将智能合约部署到区块链. 注解 在开始之前,最好对以太坊有基础的了解,推荐阅读 以太坊是什么 - 以太坊开发入门指南 或阅读 ...

  6. 以太坊DApp开发入门教程——Node.js和truffle框架打造区块链投票系统

    第一节 课程概述 本课程面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. 通过本课程的学习,你将掌握: 以太坊区块链的 ...

  7. 以太坊智能合约入门项目-众筹项目

    一.智能合约 智能合约(英语:Smart Contract)是一种旨在以信息化方式传播.验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进行可信交易.这些交易可追踪且不可逆转.智能合约概念 ...

  8. 区块链(一): 以太坊基础知识

    目录 什么是区块链? 什么是以太坊? 什么是加密货币? 以太坊与比特币有什么不同? 以太坊能做什么? 什么是智能合约? 以太坊社区 以太坊白皮书 什么是区块链? 区块链是一个交易数据库,在网络中的众多 ...

  9. 推荐系统实战-概念理解入门篇

    最近组内需要对一款涂色游戏上推荐系统,需要学习相关内容,做一个记录供其他同学参考.学习内容主要涉及极客时间刑无刀的<推荐系统36式>.因本人工作内容偏后台,所以本专题内容主要会是推荐系统的 ...

  10. 以太坊区块链入门之实现简单DApp开发

    前期准备 本dapp是采用ganache-cli的私链开发,用express来创建项目,web3js来连接私链 //安装ganache-li sudo npm install -g ganache-c ...

最新文章

  1. 摄像头与毫米波雷达(Radar)融合
  2. liferay学习(源码调试问题)
  3. python内置函数open_Python的内置函数open()的注意事项
  4. 搞大了,修改一个参数后重启数据库服务器出错CRS-0184
  5. 初学Hibernate
  6. Java 远程mapduce_java – 如何远程运行mapreduce作业
  7. 循环矩阵的快速幂(bzoj 2510: 弱题)
  8. Android 4.4 NotificationManagerService使用详解与原理分析(二)__原理分析
  9. 互联网架构师祝大家中秋节快乐!快领红包了!
  10. FTP工具FileZilla Client出现中文乱码问题解决
  11. 凸优化 - 3 - Jensen不等式、共轭函数、Fenchel不等式
  12. 阿里巴巴国际站组合标题的小技巧
  13. pytohn 操作excel表格常用模块 xlwt xlsxwriter
  14. _3_body_标签
  15. 企业如何借助百度百家号进行网络推广?
  16. 华信短信平台接口文档
  17. “5G通达,AI赋能“ AI在网络规划中的应用实践(人工智能应用案例)
  18. 墨珩科技入选工业和信息化重点领域产业人才培训项目评审合格名单
  19. 涛思数据TDengine征稿 — 保姆级教程TDengine客户端服务器安装教程
  20. 【python】pandas库pd.DataFrame.corr、numpy库np.corrcoef求解相关系数

热门文章

  1. 一本通1619【例 1】Prime Distance
  2. bzoj4571/luogu3293 美味 (主席树+贪心)
  3. 手机弹出键盘 窗口改变事件
  4. c++11 线程的互斥量
  5. Android开发-无法新建Activity及新建后编译错误
  6. C++请不要问我string s=”a”+”b”分配了几次内存
  7. openg es 之一
  8. the JAR file spring-beans-4.0.0.RELEASE.jar has no source attachment
  9. LeetCode 148 排序链表
  10. ethtool查看网卡以及修改网卡配置