• 国酒茅台·国之栋梁 希望工程圆梦行动获第十二届人民企业社会责任奖年度案例奖 2019-12-06
  • 湖州日报社党委书记、社长沈振建祝贺人民日报创刊70周年 2019-12-06
  • 是什么时候颠覆了“文艺应当为千千万万劳动人民服务”这一社会主义文艺路线的?!那一股“伤痕潮”功不可灭,可惜的是“旧伤痕”已经烟灭,取代其的是“挖根潮”。留给工农 2019-11-24
  • 我国居民人均预期寿命又提高了 2017年提高至76.7岁 2019-11-24
  • 《格萨尔》史诗藏译汉16册完成终审 2019-11-10
  • 干惊天动地事  做崇德守廉人 2019-10-20
  • 新一代宝马8系首发亮相 运动旗舰正式回归 2019-10-20
  • 全纪录600名工人为“重庆铁路咽喉”动手术  奋战7个通宵为旅客节约1小时 2019-10-19
  • 共享单车押金安全受关注 部分平台已引入银行存管 2019-10-16
  • 视频--江苏频道--人民网 2019-10-16
  • 回复@看着就想笑:历史至今的客观事实是奴隶主剥削奴隶、封建地主剥削农奴、资本家剥削雇佣劳动者、师傅剥削徒弟都是建立在私有制基础上的,而且小私有和他人联合顾工生 2019-10-14
  • 把党的十九大精神全面落实在重庆大地上——华龙网 2019-10-06
  • 高一年级组“经典永流传”诵读比赛精彩回顾—wydzx.blog的博客—强国博客—人民网 2019-10-06
  • 欢迎访问《南开管理评论》官方网站! 2019-10-04
  • 新华网评:秉“真诚”之态 谋共同发展 2019-10-04
  • 青海麻将258 www.jncff.tw 青海麻将258 > 上网技巧 > 电脑小技巧 > 基于windows10以太坊私有链eth安装DApp开发环境

    基于windows10以太坊私有链eth安装DApp开发环境

    时间:2019-10-31 17:23 作者:QQ地带 我要评论

    本文是学习篇,参考网络上一系列的DApp开发环境搭建,结合自己在本机测试验证所写,便于加深对智能合约了解。
     
    1.1  准备阶段
    本文搭建的环境基于windows10(家庭版),获取相关软件版本如下:
     
    Node.js:v8.11.3
    solcjs :0.40.2+commit.3155dd80.Emscripten.clang
    web3:0.20.2
    Truffle:v4.1.3 (core 4.1.3)
    Webpack:3.11.0
    备注:本文搭建的环境没有安装节点仿真器ganache,是直接部署以太坊私有链eth。
     
     
     
    第一步:安装Node.js
     
    打开官网下载链接:https://nodejs.org/en/download/ 下载对应你系统的Node.js版本
     
    Node.js 就是运行在服务端的 JavaScript。Node.js 是一个 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。下载64位包装包,下载后直接安装即可。安装完毕,打开一个控制台窗口,可以使用node了:
     
    C:\Users\45014>node -v
     
    v8.11.3
     
    此处说明下:新版的Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西。
     
    说明:这里的环境配置主要配置的是npm安装的全局??樗诘穆肪?,以及缓存cache的路径,之所以要配置,是因为以后在执行类似:npm install express [-g] (后面的可选参数-g,g代表global全局安装的意思)的安装语句时, 会将安装的??榘沧暗?nbsp; C:\Users\45014\AppData\Roaming\npm
     
    第二步:安装solidity编译器
     
    C:\Users\45014> npm install –g solc
     
    安装完毕后,执行命令验证安装成功
     
    C:\Users\45014> solcjs –version
     
    0.40.2+commit.3155dd80.Emscripten.clang
     
    第三步:安装web3
     
    C:\Users\45014> npm install –g [email protected]
     
    安装验证:
     
    C:\Users\hubwiz> node –p 'require("web3")'
     
    {[Function: Web3]
     
      providers:{…}}
     
    第四步:安装truffle框架
     
    执行以下命令安装truffle开发框架:
     
    C:\Users\45014> npm install –g truffle
     
    验证安装:
     
    C:\Users\45014> truffle.cmd version
     
    Truffle v4.1.3 (core 4.1.3)
     
    第五步:安装webpack
     
    执行以下命令安装webpack:
     
    C:\Users\45014> npm install –g [email protected]
     
    验证安装:
     
    C:\Users\45014> webpack –v
     
    3.11.0
     
    1.2  智能合约开发
    1.2.1  创建合约项目
     D:\Study\geth> mkdir test
     
    D:\Study\geth\test>cd test
     
    D:\Study\geth\test>mkdir HelloWorld
     
    D:\Study\geth\test>cd HelloWorld
     
    D:\Study\geth\test\ HelloWorld >truffle init
     
    此时会出现如下错误:
     
    truffle initDownloading…Error: Truffle Box
     
    at URL https://github.com/truffle-box/bare-box.git doesn’t exist. If
     
    you believe this is an error, please contact Truffle support.
     
    解决方法可以是直接git代码取代truffle init命令
     
    git clone https://github.com/truffle-box/bare-box
     
    后续的命令需要先执行:cd bare-box
     
    以上两条命令的功能就相当于truffle init,自动生成好了框架。
     
      
     
     
     
    目录结构说明:
     
    contracts/:Truffle默认的合约文件存放地址;
     
    migrations/:存放发布的脚本文件;
     
    test/:存放测试应用和合约的测试文件;
     
    truffle-config.js:Truffle的配置文件。
     
     
     
    1.2.2  编写与部署合约
    第一步:在 contracts 文件夹下新建 HelloWorld.sol 文件:
     
    D:\Study\geth\test\ HelloWorld\ bare-box> cd contracts/
    D:\Study\geth\test\ HelloWorld\ bare-box\contracts> truffle create contract HelloWorld
     
     
     
     
     
    编写一个简单的HelloWorld代码如下: 
     
    复制代码
    pragma solidity ^0.4.22;
     
    contract HelloWorld {
     
      function sayHello() public pure returns (string) {
     
        return ("Hello World");
     
        }
     
    }
    复制代码
     
     
     第一行指名目前使用的 solidity 版本,不同版本的 solidity 可能会编译出不同的 bytecode。^ 代表兼容。
     
    contract 关键字类似于其他语言中较常见的 class。因为solidity 是专为智能合约(Contact)设计的语言,声明 contract 后即内置了开发智能合约所需的功能。也可以把这句理解为 class HelloWorld extends Contract。
     
    函数的结构与其他程序类似,但如果有传入的参数或回传值,需要指定参数或回传值的类型(type)。
     
     
    第二步: 编译合约:
     
    现在执行 truffle compile 命令,我们可以将 HelloWorld.sol 原始码编译成 Ethereum bytecode:
     
    D:\Study\geth\test\HelloWorld\bare-box>truffle compile
     
    Compiling .\contracts\HelloWorld.sol...
     
    Writing artifacts to .\build\contracts
     
    命令运行成功后会多出一个 build 的目录,如下:
     
     
     
    在 HelloWorld 文件夹下面的 build/contracts 文件夹下面会看见 HelloWorld.json 文件:
     
     
     
     
     
    第三步:修改 truffle-config.js 文件内容:
     
    添加以下内容到truffle-config.js文件并保存 :
     
      networks: {
     
          development: {
     
          host: 'localhost',
     
          port: 8545,
     
          network_id: '*' // Match any network id
     
        }
     
    第四步:在 migrations 目录下创建移植文件:
     
    D:\Study\geth\test\HelloWorld\bare-box\migrations>truffle create migration deploy_helloworld
     
    查看目录,生成如下文件:
     
      
     
    修改1552730530_deploy_helloworld.js
     
    var HelloWorld = artifacts.require("./HelloWorld.sol");
     
     module.exports = function(deployer) {
     
      deployer.deploy(HelloWorld);
     
    };
     
     
     
    使用 artifacts.require 语句来取得准备部署的合约。
    使用deployer.deploy 语句将合约部署到区块链上。这边HelloWorld 是 contract 的名称而不是文件名。因此可以用此语法读入任一 .sol 文件中的任一合约。
     
     
     
    第五步:执行 truffle migrate 命令:
     
    D:\Study\geth\test\HelloWorld\bare-box>truffle migrate
     
    Using network 'development'.
     
     
     
    Running migration: 1_initial_migration.js
     
      Deploying Migrations...
     
      ... undefined
     
    Error encountered, bailing. Network state unknown. Review successful transactions manually.
     
    Error: account is locked
     
        at Object.InvalidResponse (C:\Users\45014\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\errors.js:38:1)
     
    在部署合约时需要一个解锁的账户。在geth控制台使用personal对象的unlockAccount()方法来解锁指定的账户,参数为账户地址和账户密码(在创建账户时指定的那个密码):
     
    在eth执行:
     
    > personal.unlockAccount(eth.accounts[0])
     
    Passphrase:
     
    true
     
     
     
    然后再次执行:
     
    D:\Study\geth\test\HelloWorld\bare-box>truffle migrate
     
    Using network 'development'.
     
    Running migration: 1_initial_migration.js
     
      Deploying Migrations...
     
      ... 0x87a3f9c57e1d01bcd8f138c67167028444c1de145596338a0af9e571f654984f
     
      Migrations: 0x5980c9cfbe8dac5a7f0b100c6fad75ec7b7763bb
     
    Saving artifacts...
     
    Running migration: 1552730530_deploy_helloworld.js
     
      Replacing HelloWorld...
     
      ... 0x1e24213f8f21917d9d2159b3b43845b1fb13f19ebc5045b0b8976224ba136294
     
      HelloWorld: 0x613f2408babedbadd55783bd60a893cd4a89c0b9
     
    Saving artifacts...
     
     
     
    (此时会停在部署阶段,需要启动挖矿,才可以部署完成)
     
     
     
     我们先看下是否有交易在处理,在eth下执行命令。
     
    > txpool.status
     
    {
     
      pending:1,
     
      queued:0
     
    }
     
     
     
    的确有一个挂起的交易!下面开启启动挖矿:
     
    > miner.start(1)
     
     ...
     
    I0316 21:08:35.926452 eth/api.go:1191] Tx(0x1e24213f8f21917d9d2159b3b43845b1fb13f19ebc5045b0b8976224ba136294) created: 0x613f2408babedbadd55783bd60a893cd4a89c0b9
     
    I0316 21:08:37.285819 miner/worker.go:339] ??  Mined block (#224 / 2190b58b). Wait 5 blocks for confirmation
     
    I0316 21:08:37.286816 miner/worker.go:573] commit new work on block 225 with 1 txs & 0 uncles. Took 0
     
    I0316 21:08:37.288811 miner/worker.go:435] ?? ??  Mined 5 blocks back: block #219
     
    I0316 21:08:37.289809 miner/worker.go:573] commit new work on block 225 with 1 txs & 0 uncles. Took 0
     
    I0316 21:08:42.536780 miner/worker.go:339] ??  Mined block (#225 / d5e9a63b). Wait 5 blocks for confirmation
     
    I0316 21:08:42.536780 miner/worker.go:573] commit new work on block 226 with 0 txs & 0 uncles. Took 0
     
    I0316 21:08:42.538776 miner/worker.go:435] ?? ??  Mined 5 blocks back: block #220
     
    I0316 21:08:42.542765 miner/worker.go:573] commit new work on block 226 with 0 txs & 0 uncles. Took 964.2μs
     
    部署成功以后,我们可以得到合约的地址:0x613f2408babedbadd55783bd60a893cd4a89c0b9,后面会使用这个地址来实现与合约的交互,这里需要先记录下来。
     
     
     
    稍等一段时间,再查看交易池的状态:
     
    > txpool.status
     
    {
     
      pending:0,
     
      queued:0
     
    }
     
    交易已经成功提交了,然后我们可以停止挖矿了:
     
    > miner.stop()
     
     
     
    1.3  与合约交互
    第一步:首先我们找到build/contracts/Helloworld.json中的abi的value,通过json压缩成一行在eth命令行执行:
     
    abi= [{ "constant": true, "inputs": [], "name": "sayHello","outputs": [ { "name": "", "type": "string" } ],"payable": false,"stateMutability": "pure", "type": "function"}]
     
     
     
     第二步:注册合约对象:
     
    > hello = eth.contract(abi).at('0x613f2408babedbadd55783bd60a893cd4a89c0b9')
     
    {
     
      abi: [{
     
          constant: true,
     
          inputs: [],
     
          name: "sayHello",
     
          outputs: [{...}],
     
          payable: false,
     
          stateMutability: "pure",
     
          type: "function"
     
      }],
     
      address: "0x613f2408babedbadd55783bd60a893cd4a89c0b9",
     
      transactionHash: null,
     
      allEvents: function(),
     
      sayHello: function()
     
    }
     
    第三步:对象注册成功以后,就可以像正常合约那样去调用了。
     
     
     
    > hello.sayHello()
     
    "Hello World"
     
    > hello.sayHello()
     
    "Hello World"
     
     
    这就是一个最基本的部署完成了第一个智能合约,也验证了合约确实可以运作,虽然没有实际意义,但可以帮助我们开始学习并了解智能合约

    标签: 以太坊
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%

    Google提供的广告

  • 国酒茅台·国之栋梁 希望工程圆梦行动获第十二届人民企业社会责任奖年度案例奖 2019-12-06
  • 湖州日报社党委书记、社长沈振建祝贺人民日报创刊70周年 2019-12-06
  • 是什么时候颠覆了“文艺应当为千千万万劳动人民服务”这一社会主义文艺路线的?!那一股“伤痕潮”功不可灭,可惜的是“旧伤痕”已经烟灭,取代其的是“挖根潮”。留给工农 2019-11-24
  • 我国居民人均预期寿命又提高了 2017年提高至76.7岁 2019-11-24
  • 《格萨尔》史诗藏译汉16册完成终审 2019-11-10
  • 干惊天动地事  做崇德守廉人 2019-10-20
  • 新一代宝马8系首发亮相 运动旗舰正式回归 2019-10-20
  • 全纪录600名工人为“重庆铁路咽喉”动手术  奋战7个通宵为旅客节约1小时 2019-10-19
  • 共享单车押金安全受关注 部分平台已引入银行存管 2019-10-16
  • 视频--江苏频道--人民网 2019-10-16
  • 回复@看着就想笑:历史至今的客观事实是奴隶主剥削奴隶、封建地主剥削农奴、资本家剥削雇佣劳动者、师傅剥削徒弟都是建立在私有制基础上的,而且小私有和他人联合顾工生 2019-10-14
  • 把党的十九大精神全面落实在重庆大地上——华龙网 2019-10-06
  • 高一年级组“经典永流传”诵读比赛精彩回顾—wydzx.blog的博客—强国博客—人民网 2019-10-06
  • 欢迎访问《南开管理评论》官方网站! 2019-10-04
  • 新华网评:秉“真诚”之态 谋共同发展 2019-10-04
  • 福建快3查询规则 辛运28赌单双技巧 教你诈金花出老千视频 娱乐圈是最好赚钱 江西快三今日预测号码 福彩3D开奖号码 新11选5杀号 广西福利彩票中奖规则 扑克游戏有哪些 彩35游戏