什么是以太坊

以太坊是一个分散的计算机/节点网络; 网络中的每个节点执行一些字节码(即智能合同)并将结果状态存储在区块链中。 由于区块链代表应用程序状态的属性,这导致“应用程序完全按照编程运行,没有任何停机,审查,欺诈或第三方干扰的可能性”。

以太坊与比特币相似吗?

好。 有点,但也不是真的。 相似之处在于它们都使用区块链,但这就是它结束的地方。 由于以太坊不仅仅是一种数字货币,它还提供了一个开发基于区块链的应用程序的平台,这些应用程序包含智能合约,以太坊虚拟机(EVM),并使用其名为ether的货币用于点对点合同。

什么是智能合约

智能合约是在区块链上运行的计算机代码,其中包含一组规则,在该规则下该智能合约的各方同意彼此交互。 如果满足预定义规则,协议将自动执行。 执行该代码的平台为这段代码提供了一些属性,例如:不变性,确定性操作,分布式和可验证状态等。由此代码管理的状态存储在区块链中,不可变,任何人都可以再次检查当前状态是正确的,通过重放从链开始的所有事务。

EVM - 以太坊虚拟机

EVM(或以太坊虚拟机)是以太坊智能合约字节码执行环境。 网络中的每个节点都运行EVM。 所有节点使用EVM执行所有指向智能合约的事务,因此每个节点都执行相同的计算并存储相同的值。 此外,EVM确保程序无法访问彼此的状态,确保通信可以在没有任何潜在干扰的情况下建立。

Web3&技术堆栈

众所周知,在90年代初,万维网(WWW)彻底改变了信息。 从那时起,互联网变得更加成熟和可编程,我们看到所谓的Web2的兴起,它带给我们社交媒体和电子商务平台,彻底改变了社交互动,使信息,商品和服务的生产者和消费者更加接近,并让我们在全球范围内享受P2P互动。 但总是有一个中间人:一个平台充当A和B之间不信任或相互信任的可信中介。 尽管这些平台在创建P2P经济方面做得非常出色,并且拥有更加复杂的内容发现层,但他们也规定了交易的所有规则,而这些平台拥有我们所有的数据。

在这种情况下,区块链似乎是下一代互联网,分散式网络或Web3的驱动力,并引发了分散式网络堆栈。

与构建普通网络或移动应用程序类似,创建dApp(分散式应用程序)通常需要几件事情:计算,文件存储,外部数据,货币化和付款,如下所述。

Web 3.0抽象堆栈

随着我们向分散式系统的发展,这并不意味着我们将完全摆脱集中式系统。 看起来从客户端 - 服务器互联网向分散网络的过渡将是渐进的而不是激进的。 随着分散式网络栈的不断成熟,转型似乎正在从集中式转向部分分散式转变为完全分散式转变。

从集中式转移到完全分散式应用

开发一个DApp。 如何访问以太坊。

试图从开发人员的角度解释以太坊。

当前客户端服务器webapp架构处于非常高的水平

当前的客户端服务器应用程

Web应用程序托管在托管服务提供商(如AWS,Heroku或任何其他VPS)上。 客户端与这一个中央应用程序交互。 客户端可以是浏览器,小部件,curl命令或其他api消费服务。 当客户端通过Web浏览器向服务器发出请求时,实现的服务器代码与CRUD操作的数据库和/或缓存进行交互并为客户端提供服务。

这就是以太坊戴普在高层的表现:

未来派分散式应用架构

如果观察每个客户端(浏览器)与它自己的应用程序实例通信。 没有所有客户端连接到的中央服务器。 这意味着,每个想要与dapp(分散式应用程序)交互的人都需要在其计算机/电话上运行的区块链的完整副本等。这意味着,在您使用应用程序之前,您必须下载整个区块链并然后开始使用该应用程序。 这听起来可能起初很荒谬,但它的优势在于不依赖于明天可能会消失的单个中央服务器。

入门

我们需要的基本工具 -

节点包管理器(npm) - NPM是Node.js包或模块的包管理器。

TestRPC - TestRPC是一个基于Node.js的Ethereum客户端,用于测试和开发。 它在本地运行100%,模拟完整的以太坊客户端,但速度要快得多,非常适合测试和开发。

松露 - 松露是以太坊的开发环境,测试框架和资产管道。 基本上,它可以帮助您将合同部署到区块链中,为新的合同交换旧合同(称为迁移),并将您的前端连接到已部署的合同

MetaMask - MetaMask是一个以太坊轻客户端和Chrome扩展程序,可让用户与区块链进行交互,而无需下载整个区块链。 换句话说,它允许您在普通的Chrome浏览器中与dApp进行交互

首先,我们需要安装我们的工具。 让我们先安装npm,如果你没有。 这里是如何安装它的说明。

一旦安装了npm,我们就可以使用它来安装testrpc,这是一个模仿真实以太坊节点的Node.js以太坊客户端。

  $ npm install -g ethereumjs-testrpc 

接下来我们需要安装松露

  $ npm install -g松露 

和最后一个MetaMask Chrome插件,你可以在这里找到。

启动TestRPC

  $ testrpc 

这将启动客户端并生成10个账户供您使用,每个账户有100个ETH。 你应该看到这样的东西:

  EthereumJS TestRPC v4.1.3(ganache-core:1.1.3) 
 可用的帐户 
  ================== 
  (0)0x3f999199f5ce31edd9876f3f29361978da1a1252 
  (1)0x2c80574fda0a4d9a712ca3d31096967a4635e8f6 
  (2)0x155c3a4d69cd82f1c4a99f4154bf9ecc68fbdc71 
  (3)0xa0df2d4d0e538fc44e059e8dbae25692d51c74cb 
  (4)0x94e40829d2ad19509af489e86d56f5c9634f6206 
  (5)0xa4878a85d6e1fd4cf7e081b1218dbe74bbd11dc1 
  (6)0x122a3cd1eb876e825bcea40ec7db929ba2f52ff8 
  (7)0x2dc1ed0a57144c51030ecd3e453ccd961698e373 
  (8)0xcb86ed11d282401400da299f43c3809d98c5007a 
  (9)0xa9e232738bb83f58f4a1fd68175f52dcfa2fe4ad 
 私人钥匙 
  ================== 
  (0)3e1a4466eadbb368835c5d57126c73ddc251dc490dd68c412d8c0ad76ee13789 
  (1)0e773bbdeae3b2e3f7030d13cdada12415659b18e634fbd39ff152bad95825d2 
  (2)9ffa6dcc4fcb563eb9ac57efdf5bd0cb0d22602a4b86daaedf81c756e5d11baf 
  (3)963efd39e8e9d7dcf18d72d9d4009cbc8ba1fce1fcdb47d98941c19d9813ad9d 
  (4)f7b741b1f88441c00a2023620d4c512ffa4e1267e24b06e12860331fdfd9cb78 
  (5)8f057cc01ec22c0ea27eaa7e50ca6857647299987d1dbe445297ac61b8fe42f9 
  (6)1e654bbb0d761b84bb738e91d6f4674bb76e0d024b8f24a6c8d301d6e45d5fad 
  (7)3222876792abbe5b8f5606ac9c6c0b1443c15a3dd5a74de661631a4a3f07fdae 
  (8)4906df7a8c8f8480a4ce8875016e68e03d52009214b0e5dbec0507005a9dbc23 
  (9)958b8735820c0fdb3ac142687733987d59677e589695ab6a11a866255df50672 
 高清钱包 
  ================== 
 助记符:2月超额牧场价格负荷宣布独自峡谷炉令人惊叹的领导阳台 
  Base HD Path:m / 44'/ 60'/ 0'/ 0 / {account_index} 
 听localhost:8545 

第一个列表是每个帐户的公开地址,第二个列表是与每个帐户关联的私人密钥。

安装Metamask

现在让我们设置MetaMask来使用我们的TestRPC作为它的网络。 打开MetaMask并按照初始设置步骤操作。

一旦设置了MetaMask,请选择左上角的网络菜单。 然后选择“Localhost 8545”作为您的网络,如下所示。

接下来,通过转到☰ - >导入帐户,然后在启动TestRPC时从终端中打印出的列表中复制一个私钥来添加几个帐户到MetaMask。 在我的情况下,它是 - 3e1a4466eadbb368835c5d57126c73ddc251dc490dd68c412d8c0ad76ee13789。

如上所示,我们可以看到账户(作为运行testrpc之后在终端中显示的第一个账户)。

我们的环境现在已经建立,我们准备好创建和部署我们的dApp。 首先创建一个新的项目目录,并使用集成的Webpack初始化默认的Truffle dApp。 我打算打电话给我的EthereumDapp项目,但你可以随心所欲地打电话给你。

初始化松露

  $ mkdir EthereumDapp 
  $ cd EthereumDapp 
  $ truffle init webpack 

部署合同并运行dApp

要将您的合同部署到TestRPC,请运行以下命令:

  $松​​露迁移 

迁移完成后,我们可以运行我们的dApp

  $ npm运行开发 

打开http:// localhost:8080 / 在浏览器中

您应该看到您的dApp正在运行并准备好使用! 如果您将当前的MetaMask账户切换到由TestRPC生成的第一个账户并刷新页面,您应该看到您的余额为10,000 META。 您可以使用dApp界面将META发送到其他帐户。

要在本地检查事务,我们可以安装etherparty explorer

安装etherparty

因为我们已经安装了nodejs和npm,所以只需要安装git。 以下是安装它的步骤。 一旦安装了git,打开一个终端并键入以下内容

  $ git clone https://github.com/etherparty/explorer 

这会将etherparty资源管理器克隆到本地目录资源管理器。 转到这个目录

  $ cd explorer 

现在让我们开始探索

  $ npm开始 
  > EthereumExplorer@0.1.0 start / Users / XXXX / explorer 
  > http-server ./app -a localhost -p 8000 -c-1 
 启动http-server,在端口8000上提供./app 
 点击CTRL-C停止服务器 

导航到http:// localhost:8000 /。 你会看到下面的东西。

现在让我们将一些Metacoin(10 Metacoin)从testrpc账户转移到metamask账户,并在explorer中验证事务,如下所示。 一旦我们转移了10个Metacoins,我们可以在Etherparty Block Explorer(块#6)中检查交易,

我们也可以检查帐户的余额,如下所示(帐户2有9990 META,帐户1有10个META)

要确认交易,请检查在终端上运行testrpc和在Etherparty块浏览器上散列的交易。


在第2部分中 ,我创建了一个简单的公证智能合约,并展示了如何使用带有Test RPC和Truffle的web3js库和TestRPC部署它。


https://medium.com/@itsromiljain/getting-started-with-ethereum-and-building-basic-dapp-ebb681fb3748

【译】Getting Started With Ethereum and Building Basic Dapp — Part 1相关推荐

  1. 【译】Getting Started With Ethereum and Building a Basic Dapp — Part 2

    在第一部分中,我们讨论了以太坊,智能合约,EVM和以太坊系统的主要组件. 复仇 在这一部分,我们将使用Solidity实现一个非常基本的分散式应用程序,并将使用Web3 / Truffle框架在Tes ...

  2. 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第二部分(封装,抽象,继承)...

    6.封装 封装就是对外部类隐藏成员或变量.我已经说过房子的保安仅仅被限制在房子的入口处,不需要知道屋内发生了什么.房主对保安隐藏了屋内所发生的任何事,以便更安全.隐藏和限制就被称为封装. 例如我们有两 ...

  3. Build a simple Ethereum + IPFS+ React.js DApp.

    WHY ARE WE BUILDING THIS? It is prohibitively expensive to store a lot of data on the Ethereum block ...

  4. 区块链开发指南_区块链开发权威指南

    区块链开发指南 by Haseeb Qureshi 由Haseeb Qureshi 区块链开发权威指南 (The authoritative guide to blockchain developme ...

  5. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_1

    吴恩达deeplearning.ai课程作业,自己写的答案. 补充说明: 1. 评论中总有人问为什么直接复制这些notebook运行不了?请不要直接复制粘贴,不可能运行通过的,这个只是notebook ...

  6. 基于pygtk的linux有道词典

    基于pygtk的linux有道词典 一.桌面词典设计 想把Linux用作桌面系统,其中一部分障碍就是Linux上没有像有道一样简单易用的词典.其实我们完全可以自己开发一款桌面词典,而且开发一款桌面词典 ...

  7. shopify 开发_播客第57集:从Shopify的作家到开发人员,与Adam Hollett一起

    shopify 开发 On this week's episode of the freeCodeCamp podcast, Quincy interviews Adam Hollett. He's ...

  8. vue脚手架vue数据交互_学习Vue:3分钟的交互式Vue JS教程

    vue脚手架vue数据交互 Vue.js is a JavaScript library for building user interfaces. Last year, it started to ...

  9. 1.深度学习练习:Python Basics with Numpy(选修)

    本文节选自吴恩达老师<深度学习专项课程>编程作业,在此表示感谢. 课程链接:https://www.deeplearning.ai/deep-learning-specialization ...

最新文章

  1. 使用Silverlight 2实现水中倒影效果
  2. 登陆共享服务器的位置,共享服务器哪里登陆
  3. 2-2 人工智能的前景|人工智能框架TensorFlow应用实践笔记
  4. Unity3D之Shader自定义编辑器功能拓展
  5. 二叉排序树的删除+图解
  6. C++ 连接数据库的入口和获取列数、数据
  7. node.js查询oracle,nodejs操作oracle数据库示例
  8. SpringCloud学习笔记014---可以使用json对rabbitmq进行封装,方便数据传输
  9. pandas删除有空值的一行
  10. java中的时间片概念_java中常用的时间处理类TimeUtil
  11. MATLAB中 / 和 \ 的区别
  12. Qt系列文章之(十三)表格窗体
  13. 花一个星期时间呕心沥血整理出高频软件测试/自动化测试面试题和答案
  14. UVa 1586 Molar mass(模拟)
  15. Gos ——内存管理系统
  16. nodejs stream 经典解析
  17. wordcloud OSError: cannot open resource
  18. 2022人工智能学习--完整入门攻略
  19. Python3 实现简易局域网视频聊天工具
  20. #读书笔记# 《人类简史》Chapter4

热门文章

  1. LVS NAT/DR
  2. PowerDesigner的逆向工程.
  3. Android应用程序运行方式以及优先级
  4. mootools脚本框架下载
  5. MapObjects2自带例子的问题
  6. Python学习笔记:list和tuple
  7. this指针的用法详解
  8. 迫零响应法用于MIMO系统
  9. 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
  10. 【随笔】深度学习的数据增强还分在线和离线?