你离区块链智能合约开发只有一句docker-compose的距离

引言

你需要知道区块链的概念及实现一个无需信任的电子货币的运作原理。可以先看看长版,如果你觉得太长,可以看看短版

你需要准备什么

一个 docker 环境, 还有…… 没了

注:Mac下docker集成了docker-compose,其他系统需要安装docker-compose

开发环境架构

  • Ganache:以太坊测试网络, 使用Ganache,您可以快速查看应用程序如何影响区块链,并反应您的帐户,余额,合同创建和Gas等详细信息。
  • Geth:在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。
  • Truffle:Truffle是Dapp开发框架,他可以帮我们处理掉大量无关紧要的小事情,让我们可以迅速开始写代码-编译-部署-测试-打包DApp这个流程。

一步搭建智能合约开发环境

$ git clone --branch v1.0 --depth=1 https://github.com/gengxiankun/dockerfiles.git &&\
 docker-compose -f dockerfiles/ethereum/ethereum-stack-compose.yml up -d
复制代码

由于需要分别构建(ganache/geth/truffle)三个容器,请耐心等待。 执行成功后,查看以太坊容器:

$ docker-compose -f dockerfiles/ethereum/ethereum-stack-compose.yml ps
 Name           Command          State                Ports              
-------------------------------------------------------------------------
ganache   docker-entrypoint.sh   Up      0.0.0.0:7454->7454/tcp, 9454/tcp
geth      /usr/sbin/init         Up                                      
truffle   /usr/sbin/init         Up
复制代码

可以看到,truffle、ganache及geth容器均已运行,证明环境搭建成功了!

了解docker-compose.yaml文件再进行开发

以上,我们可以看出构建了三个容器来分别运行ganache、geth及truffle。通过dockerfiles/ethereum/ethereum-stack-compose.yml来看一下它们是如何相互运作的:

$ cat dockerfiles/ethereum/ethereum-stack-compose.yml
version: '2'

services:

    ganache:
        container_name: ganache
        build: ./Ganache/
        expose:
            - "7454"
        ports: 
            - "7454:7454"
        environment:
            - NETWORKID=6
            - PORT=7454
        restart: always

    truffle:
        container_name: truffle
        build: ./Truffle/
        volumes:
            - ~/data/ethereum/:/data/
        working_dir: /data
        links:
            - ganache:ganache
        restart: always

    geth:
        container_name: geth
        build: ./Geth/
        restart: always
        links:
            - ganache:ganache
复制代码

可以看到,Ganache开放出了network_id为6,端口是7454的以太坊网络接口 triffle及geth通过docker内部链路links连接ganache服务,直接访问host为ganache无序指定IP,比如truffle的网络配置及geth连接:

#truffle.js
module.exports = {
  networks: {
    development: {
      host: "ganache",
      port: 7454,
      network_id: "6" // Match any network id
    }
  }
};

#geth连接本地ganache网络
$ docker exec -it geth geth attach http://ganache:7454
Welcome to the Geth JavaScript console!

instance: EthereumJS TestRPC/v2.1.0/ethereum-js
coinbase: 0xd08734d6ca10a2acb464d26ed033df08dd93acc3
at block: 0 (Sun, 15 Apr 2018 03:54:12 UTC)
 modules: eth:1.0 evm:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0

> 
复制代码

truffle容器的工作目录/data与本地的~/data/ethereum目录挂载,执行truffle初始化,可以看到本地同步了容器的代码:

$ docker exec -it truffle truffle init
$ cd ~/data/ethereum
$ tree
.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js

3 directories, 4 files
复制代码

如此,便可方便的在本地使用IDE开发智能合约了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值