3 large

如何搭建一个测试网络并运行一个简单的 dapp

tomlion · 于 发布 · 最后由 yy158954945回复 · 1640 次阅读

对于开发者而言,在一个新平台上开发应用之前,一个可控的测试环境是必不可少的。
对于普通用户而言,在正式的链上开始使用钱包转账,在etherex挂单等等严肃操作之前,先在一个demo程序上熟悉下功能,也能减少出错概率。

以太坊作为一个“去中心化的应用平台”,也确实给搭建测试网络提供了很多便利。以下我们就一步一步的介绍如何搭建一个测试链,并在测试链上运行ethereum.org上的hello world程序。

准备工作

  1. 安装geth
  2. 如果你准备连接到我在阿里云上的testnet, 下载这个创世块
  3. 如果你要搭建自己的testnet,可以参照这里的格式创建创世块

开始

  • 首先打开你的终端输入如下命令启动geth
geth --bootnodes "enode://7cc0c2e8abd944d6bee8966fc21b0597de27ef912614ff1b7b4f2c51b7d72078d05038435686f8821aa7ce6918a6065192368bb05cd50a908ed2f8958dfa7197@115.29.32.87:30303" --datadir "YOURTESTNETDATADIR" --genesis "EXAMPLEGENESIS.json"  --networkid 12345 --nodiscover console
  • 当屏幕上出现这样的文字后 modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0 你就进入了以太坊的命令行控制界面

  • 在以太坊的命令行界面输入如下命令创建一个新的账户

personal.newAccount('ethfans')
  • 加入阿里云上我搭建的testnet node(如果你搭建一个人的testnet,不需要这一步)
admin.addPeer("enode://7cc0c2e8abd944d6bee8966fc21b0597de27ef912614ff1b7b4f2c51b7d72078d05038435686f8821aa7ce6918a6065192368bb05cd50a908ed2f8958dfa7197@115.29.32.87:30303")

然后输入admin.peers检查是否已添加成功远程节点, 添加失败的话会返回null

  • 开始挖矿(第一次挖矿需要生成一个2G的DAG文件,耗时10分钟左右,具体时长取决于电脑性能)
miner.start()

待续

  • 128
    yy158954945

    我geth安装成功了,但是
    geth --bootnodes "enode://7cc0c2e8abd944d6bee8966fc21b0597de27ef912614ff1b7b4f2c51b7d72078d05038435686f8821aa7ce6918a6065192368bb05cd50a908ed2f8958dfa7197@115.29.32.87:30303" --datadir "YOURTESTNETDATADIR" --genesis "EXAMPLEGENESIS.json" --networkid 12345 --nodiscover console
    执行结果始终不对
    第一步的命令能解释一下吗 我始终弄不对!

  • 3 large
    tomlion

    你先得描述不对的情况,我才能分析原因。

    另外bootnodes请替换成ethfans的这个长期专用节点enode://91922b12115c067005c574844c6bbdb114eb262f90b6355cec89e13b483c3e4669c6d63ec66b6e3ca7a3a462d28edb3c659e9fa05ed4c7234524e582a8816743@120.27.164.92:13333

  • 128
    yy158954945

    #2楼 @tomlion
    I0123 20:34:43.594920 18676 blockchain.go:1243] imported 1 block(s) (0 queued 0 ignored) including 0 txs in 4.031388ms. #892191 [ad2c1fbc / ad2c1fbc]
    I0123 20:34:57.707323 18676 blockchain.go:1243] imported 1 block(s) (0 queued 0 ignored) including 1 txs in 4.810293ms. #892192 [a9e18d83 / a9e18d83]
    ^CI0123 20:36:05.373863 18676 cmd.go:123] Got interrupt, shutting down...
    I0123 20:36:05.649619 18676 blockchain.go:690] Chain manager stopped
    I0123 20:36:05.649649 18676 handler.go:192] Stopping ethereum protocol handler...
    I0123 20:36:05.649689 18676 handler.go:202] Ethereum protocol handler stopped
    I0123 20:36:05.649702 18676 transaction_pool.go:149] Transaction pool stopped
    I0123 20:36:05.649716 18676 backend.go:630] Automatic pregeneration of ethash DAG OFF (ethash dir: /Users/pro/.ethash)
    I0123 20:36:05.651184 18676 database.go:158] closed db: /Users/pro/Library/Ethereum/chaindata
    I0123 20:36:05.651667 18676 database.go:158] closed db: /Users/pro/Library/Ethereum/dapp
    promote:~ mycomputer$ geth --bootnodes "enode://7cc0c2e8abd944d6bee8966fc21b0597de27ef912614ff1b7b4f2c51b7d72078d05038435686f8821aa7ce6918a6065192368bb05cd50a908ed2f8958dfa7197@115.29.32.87:30303" --datadir "YOURTESTNETDATADIR" --genesis "EXAMPLEGENESIS.json" --networkid 12345 --nodiscover console
    I0123 20:36:07.386219 18692 flags.go:425] WARNING: No etherbase set and no accounts found as default
    I0123 20:36:07.386433 18692 database.go:71] Alloted 16MB cache to YOURTESTNETDATADIR/chaindata
    I0123 20:36:07.390724 18692 database.go:71] Alloted 16MB cache to YOURTESTNETDATADIR/dapp
    I0123 20:36:07.392856 18692 backend.go:314] Protocol Versions: [63 62 61], Network Id: 12345
    Fatal: open EXAMPLEGENESIS.json: no such file or directory
    promote:~ mycomputer$

  • 3 large
    tomlion

    你是普通用户吧??请出门左拐
    这个帖子是给程序员开发用的。命令行的参数需要根据本机环境替换的

  • 128
    yy158954945

    #4楼 @tomlion 我是小白程序员 有的救吗?

    admin.peers
    [{
    caps: ["eth/61", "eth/62"],
    id: "7cc0c2e8abd944d6bee8966fc21b0597de27ef912614ff1b7b4f2c51b7d72078d05038435686f8821aa7ce6918a6065192368bb05cd50a908ed2f8958dfa7197",
    name: "Geth/ethfans/v1.2.3/linux/go1.5",
    network: {
    localAddress: "192.168.1.170:49512",
    remoteAddress: "115.29.32.87:30303"
    },
    protocols: {
    eth: {
    difficulty: 316038583,
    head: "f7a1b4ca02ad1b49252711adeeb36b87705f2aeaf64a68f07e81c419da80556a",
    version: 62
    }
    }
    }]
    我这样是不是连接你的虚拟网络成功了?

  • 3 large
    tomlion

    是的,连接成功,恭喜!

    我服务器上跑的那个geth版本挺老了,好久没更新。有空我更新下

  • 128
    yy158954945

    #6楼 @tomlion 哈哈 没事的 能用就行 我还在你上面挖了好多币

    你后续的教程在哪里能看到呢 ?

    望大神分享一下!

  • 3 large
    tomlion

    还没写...

    如果想学以太坊上的智能合约开发的话,我前几周写了这个 http://ethfans.org/wiki/newbie2ethereum

  • 128
    yy158954945

    #8楼 @tomlion teahour.fm 上面的两集谈论以太坊的都听过了,感觉要学习很多东西,对一个没接触过这方面的人有没有好点的学习建议?

    还有就是 我 Truffle 这个安装成功了 但是 init 就报错

    promote:~ mycomputer$ Truffle list
    Truffle v0.3.1 - a development framework for Ethereum

    Usage: truffle [command] [options]
    .......
    promote:~ mycomputer$ Truffle init
    Error: The libsass binding was not found in /usr/local/lib/node_modules/truffle/node_modules/node-sass/vendor/darwin-x64-46/binding.node
    This usually happens because your node version has changed.
    .......
    promote:~ mycomputer$ node -v
    v4.2.3
    能不能指导一下,谢谢了!

  • 1 large
    jan

    Error: The libsass binding was not found in /usr/local/lib/node_modules/truffle/node_modules/node-sass/vendor/darwin-x64-46/binding.node
    This usually happens because your node version has changed.

    把node-sass uninstall掉,然后重新安装下truffle试试

  • 128
    yy158954945

    #10楼 @jan 多谢了 刚更新了还是有问题 仔细看是 truffle 目录下的node-sass 少文件了