在第一部分中,我们讨论了以太坊,智能合约,EVM和以太坊系统的主要组件。

复仇

在这一部分,我们将使用Solidity实现一个非常基本的分散式应用程序,并将使用Web3 / Truffle框架在TestRPC网络上进行开发和部署。

入门

我们需要的基本工具 -

  • 节点包管理器(npm) - NPM是Node.js包或模块的包管理器。
  • Web3 js-web3js是一个库,可让您通过RPC与区块链进行交互。 该库将用于部署智能合约并与其进行交互。
  • Solidity - Solidity是实施智能合约的合同导向的高级语言。 它受C ++,Python和JavaScript的影响,旨在针对以太坊虚拟机(EVM)。
  • TestRPC - TestRPC是一个基于Node.js的Ethereum客户端,用于测试和开发。 它在本地运行100%,模拟完整的以太坊客户端,但速度要快得多,非常适合测试和开发。
  • Truffle / Embark - Truffle / Embark是以太坊的开发环境,测试框架和资产管道。 基本上,它可以帮助您将合同部署到区块链中,为新的合同交换旧合同(称为迁移),并将您的前端连接到已部署的合同
  • MetaMask / Mist - MetaMask / Mist是一款以太坊轻客户端和Chrome扩展程序,让用户无需下载整个区块链即可与区块链互动。 换句话说,它允许您在普通的Chrome浏览器中与dApp进行交互。 MetaMask是虚拟客户端,用于在部署在由Mist提供的实际以太坊网络之前测试和模拟合同。
  • Visual Studio代码 - Visual Studio代码是一个源代码编辑器。 它支持许多编程语言和一组可以或不可用于给定语言的功能。 它还具有对Solidity的扩展,这将有助于我们使用此IDE编写Smart Contracts。

所以让我们安装我们的工具。 我们将首先安装npm,如果没有的话。 这里是如何安装它的说明。

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

  $ npm install -g ethereumjs-testrpc 

ethereumjs-testrpc已被弃用,并已重新命名为ganache-cli,所以请从现在起使用此软件包。

  $ npm install -g ganache-cli 

启动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 

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

现在,我们将创建一个简单的合同,将公证文件并检查文件是否公证。 然后,我们将首先通过Web3和TestRPC部署此合同,然后将使用Truffle框架来执行相同的操作,因为Truffle框架提供了一些开箱即用的功能。

使用Web3 js Library和TestRPC进行部署

首先安装web3 js库和solidity编译器

  $ npm install -g web3  $ npm install -g solc 

让我们创建一个名称为EthereumDapp的文件夹,然后在其中创建一个子文件夹合约 。 现在我们将在合约子文件夹内创建一个智能合约NotarizeDocument.sol 。 从这里获取代码。

首先,我们必须编译这个文件并创建一个二进制(bin)和abi(应用程序二进制接口)

以下命令将在编译后创建一个二进制文件 我们可以看到在合同文件夹中创建的文件NotarizeDocument_sol_NotarizeDocument.bin

  $ solcjs NotarizeDocument.sol --bin 

和下面的命令将创建一个ABI(应用程序二进制接口)。 文件NotarizeDocument_sol_NotarizeDocument.abi将在合同文件夹中创建。

  $ solcjs NotarizeDocument.so l --abi 

现在运行节点控制台并使用TestRpc(http:// localhost:8545,其中testrpc正在运行)实例化Web3。 确保testrpc正在另一个终端中运行。

  $节点  > Web3 = require('web3')  > provider = new Web3.providers.HttpProvider(“http:// localhost:8545”)  > web3 =新的Web3(提供者) 

如果您遇到任何错误,如' 错误:无法找到模块'web3' ',请尝试在本地安装Web3。

  $ npm安装web3 

Web3为您提供解析合同ABI并提供JavaScript API与其交互的可能性。 然后,您只需要字节码就可以将该合同的一个新实例部署到testrpc 。 请按照下面的命令:

  > NotDocABIFile = fs.readFileSync('NotarizeDocument_sol_NotarizeDocument.abi')  > NotDocABI = JSON.parse(NotDocABIFile.toString() 

一旦你跑上面,你会看到只有两个公共职能的合同 - checkDocument和notarize。

让我们继续下去,

  > NotDocBINFile = fs.readFileSync('NotarizeDocument_sol_NotarizeDocument.bin')  > NotDocByteCode = NotDocBINFile.toString() 

一旦您有NotDocABI和NotDocByteCode,您现在可以将合同部署到testrpc的第一个帐户。

  > account = web3.eth.accounts [0]  > NotDocContract = web3.eth.contract(NotDocABI)  > contractData = {data:NotDocByteCode,from:account,gas:999999}  > deployedContract = NotDocContract.new(contractData) 

一旦你部署了契约,你可以看到在testrpc控制台中创建的块如下所示。 它具有交易散列和合同地址。

 交易:0x0c5467e66b20543117e64dd4e52608488f443e40d38be114a40fccba97ba6793 
 创建合同:0x1f85295bf0773d8c4653fbfae652e205a25b56bb 
 燃气用量:223516 
 区号:1 
 封锁时间: 

现在我们来调用合约的方法

  > contractAddress = deployedContract.address  > instance = NotDocContract.at(contractAddress) 
  > instance.notarize(“Hello Romil !!”,{from:account}) 

一旦您调用合约的notarize方法,您可以看到在testrpc控制台中创建的另一个块。

您可以通过调用合约的checkDocument方法来检查上面创建的文档。

  > instance.checkDocument(“Hello Romil !!”) 

这将在控制台中返回true 。 如果你愿意的话,你可以在这个合同中玩弄同时使用Truffle和TestRPC部署同样的合同。

使用Truffle框架和TestRPC进行部署

现在我们将通过Truffle和TestRPC部署相同的合同。 首先,我们需要安装松露。 让我们在全球安装松露。

  $ npm install -g松露 

在相同的终端窗口中,转到项目/文件夹'EthereumDapp',您有合同并在命令下运行。

  $ truffle unbox webpack 

这将设置完整的项目。 你可以看到更多的合同是合同文件夹下的生成。 在迁移文件夹下也会创建1_initial_migration.js和2_deploy_contracts.js。

让我们编译所有的合约并迁移来部署它们。

  $ truffle编译  $松​​露迁移 

一旦部署了合约,您可以看到在testrpc控制台中创建了块/ s。 请注意与其交互的合同地址。 在这种情况下,它是0xc0a80b11dae06421fe2ad2f5a1554c871f72383d

 利用网络“发展”。 
 正在运行迁移:1_initial_migration.js 
 部署迁移... 
  ... 0xd54733a2db0309e394c9b046a76757efbdc44776fa70bfec823fa46b1e6dccc7 
 迁移:0x361bbd4a761363db35983384aa710f421d7f124e 
 保存成功迁移到网络... 
  ... 0x448aca26f656f27647c3c3bb87d5d9fbd2cf66e732d07a883b02314946974c42 
 保存工件... 
 正在运行迁移:2_deploy_contracts.js 
 部署NotarizeDocument ... 
  ... 0x4d3f945d9d9160d3684a5ba204d0ed8571f865ec06496ad574b77a9923edabc5 
  NotarizeDocument:0xc0a80b11dae06421fe2ad2f5a1554c871f72383d 
 保存成功迁移到网络... 
  ... 0xf4d930ec9171e325bfb19631ff742268edba1e7af8011f52944fd06cdef45077 
 保存工件... 

通常松露将合同部署到由testrpc提供的第一个账户。 要与合同进行交互,请转到松露控制台并逐个键入以下命令,并在另一个窗口中继续检查testrpc控制台。

  $松​​露控制台 
 松露(开发)>帐户= web3.eth.accounts [0] 
 松露(开发)> contractAddress = NotarizeDocument.address 
 松露(开发)>实例= NotarizeDocument.at(contractAddress) 

当你得到实例时,让我们调用NotarizeDocument合同的第一个方法,它是公证并传递一些字符串值。

 松露(开发)> instance.notarize(“Hello Romil !!”,{from:account}) 

只要在松露控制台中执行此操作,您可以看到在testrpc控制台中创建的另一个块以及松露控制台中的下方。

  {tx:'0xd81ac2e71a97e457e814042a3593d7a07795c0839fc663107dfb4c47af45ec6d', 
 收据: 
  {transactionHash:'0xd81ac2e71a97e457e814042a3593d7a07795c0839fc663107dfb4c47af45ec6d', 
  transactionIndex:0, 
  blockHash:'0x24bdfb6252d25e1014766eb4fa49e082066fa79213024d6015b84fbc01b70c1d', 
  blockNumber:5, 
  gasUsed:44501, 
 累计使用天数:44501, 
  contractAddress: null
 日志:[], 
 状态:1}, 
 日志:[]} 

要检查是否创建了此文档,请调用合同的checkDocument方法。

 松露(开发)> instance.checkDocument(“Hello Romil !!”) 

这将在控制台中返回true

现在是你玩这个合同的时候了

https://medium.com/@itsromiljain/get-started-with-building-ethereum-dapps-and-smart-contracts-d86b9f7bd1c

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

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

    什么是以太坊 以太坊是一个分散的计算机/节点网络; 网络中的每个节点执行一些字节码(即智能合同)并将结果状态存储在区块链中. 由于区块链代表应用程序状态的属性,这导致"应用程序完全按照编程运 ...

  2. Helios Ethereum Client for Wallets and Dapp

    轻量级Rust构建的以太坊客户端,Dapp比较适用. GitHub - a16z/helios: A fast, secure, and portable light client for Ether ...

  3. NEO versus Ethereum: Why NEO might be 2018’s strongest cryptocurrency

    NEO is a platform with a purpose. Can it compete with Ethereum? Or better yet, does it even need to? ...

  4. 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 ...

  5. Rasa 文档 中英文翻译版本 3 - Tutorial: Building Assistants

    Rasa 文档 中英文翻译版本 3 - Tutorial: Building Assistants https://rasa.com/docs/rasa/user-guide/building-ass ...

  6. ⅰcp经济模型_干货!来自清华小哥哥的全家桶教程——手把手教你在本地构建 Nervos AppChain...

    本文作者邱飞旸是一位来自清华的 Nervos 忠实粉丝,他给我们带来了相当详尽的本地搭建 AppChain 全家桶教程,快来一起享用吧! 本文主要定位给对区块链有一定了解的,但是对 Nervos Ap ...

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

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

  8. 《Unix网络编程卷1-套接字联网API》第一个例子编译 不通过问题解决

    <Unix网络编程卷1-套接字联网API>是本好书. 但是第一个例子不是很好编译. 需要如下步骤: 本人机器CentOS 5.4 1.下载源码 unpv13e解压到任意目录 然后按其rea ...

  9. 如何开发一个区块链应用程序

    区块链是一项巧妙的发明,有望使数字世界更加安全和分散.通过允许数字信息的分发而不是复制,区块链技术创建了一种新型互联网.最初是为数字货币比特币而设计的,现在科技界正在寻找该技术的其他潜在用途.在不久的 ...

最新文章

  1. 学习Kali Linux必须知道的几点
  2. 这个高度站立办公十分的棒
  3. kubernetes(二)k8s组件
  4. POJ 4979 海贼王之伟大航路 【状压dp】【北大ACM/ICPC竞赛训练】
  5. Caret模型训练和调参更多参数解读(2)
  6. 4 关卡流 进阶_赛博朋克2077:实用玩法攻略,技术流玩法攻略
  7. 2021-06-28DOM节点插入
  8. ❄️全网最详细的Python入门基础教程,Python最全教程(非常详细,整理而来)
  9. mysql 创建函数报错_MySQL 创建函数时报错'ERROR 1336 (0A000): Dynamic SQL'
  10. linux http error 401,出现HTTP: 401 的时候的解析思路
  11. FIR内插滤波器的FPGA实现(一)-matlab实现
  12. 防火墙、IDS(入侵检测系统)与双机热备
  13. 有道云APP(生成文档目录)
  14. Unix Domain Socket
  15. Twitter账号总被关联封号? 如何解决?
  16. 百度网盘不限速下载器
  17. 哈尔滨工业大学2019年计算机复试线,2019年哈尔滨工业大学考研复试分数线信息分析...
  18. 什么是芯片?芯片内部制造工艺了解吗?
  19. 计算机统考-ppt操作题2
  20. 帝国理工计算机科学硕士学费,帝国理工学院硕士2021年学费贵吗?100多个专业供你参考!...

热门文章

  1. php pdo操作数据库
  2. c# 多线程中lock用法的经典实例
  3. JAVA中“==”与equals()方法区别
  4. shell获取当前进程pid和上一个进程pid
  5. csdn编辑器模板2
  6. 编程方法学4:计算机科学发展简史
  7. Opencv学习笔记——release和debug两个模式的运行问题
  8. [云炬创业基础笔记]第二章创业者测试16
  9. 手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)
  10. 从零开始带你一步一步使用 YOLOv3 测试自己的数据