2018年4月3日星期二

在windows 10上安装web3

先决条件

需要安装最新版的nodejs

安装

  • 首先使用npm install --global --production windows-build-tools安装用于编译本地模块所需要的windows编译工具;
  • 在项目根目录下,执行npm install web3进行web3js的安装;

验证

首先打开命令行接口,导航到项目根目录下,使用node命令,进入到node的交互环境中,然后使用require("web3")语句,如果没有报错,而是显示web3的描述页面,则表示web3安装成功;

问题处理

1、在web3安装过程中,会提示无法安装的信息,这时要使用如下命令进行npm自身的升级,需要升级到最新版:npm install npm@latest -g
2、在web3安装过程中,会提示无法找到window 8.1的SDK,如下图所示:

这个问题的出现主要是由于npm install --global --production windows-build-tools没有正确的安装build tools。
这个问题需要我们首先导航到%USERPROFILE%\.windows-build-tools目录下,查看是否有BuildTools_Full.exe文件,如果没有,则需要再次执行npm install --global --production windows-build-tools。
然后我们运行BuildTools_Full.exe,这个exe的显示页面就是build tools的安装页面,在这个页面中,会显示出错信息,我们可以根据出错信息,进行相应的处理。
最有可能的原因是,我们本机安装过visual studio 2015,在这种情况下需要先把visual studio 2015卸载,然后再次执行npm install --global --production windows-build-tools就可以解决问题。

2018年3月30日星期五

以太坊开发者指南中文版


编译和测试

Go环境

首先需要安装Go1.8和设置GOPATH环境变量。
注意:你应该在$GOPATHsrc/github.com/ethereum/go-ethereum目录下有一个副本。
在大多数情况下,你应该在自己的go-ethereumfork上进行工作。执行以下代码来克隆或移动你自己的fork到正确的位置:
git clone git@github.com:nirname/go-ethereum.git $GOPATH/src/github.com/ethereum/go-ethereum

管理依赖

Go-ethereum的所有的依赖都放在vendor/目录下。我们使用govendor进行依赖管理。
如果你增加了一个新的依赖需要运行govendor fetech <import-path>命令然后提交成果物。
如果你想更新所有的依赖到最新版本需要运行govendor fetch +v命令。
你也可以在go-ethereum的包上,运行govendor的某个命令。例如:重新创建所有产生的代码,运行govendor generate +l

编译可执行文件

进入到go-ethereum库的根目录。
你可以使用go工具编译全部代码,然后把结果的二进制文件放在$GOAPTH/bin目录下:
go install -v ./...
go-ethereum的各个执行文件也可以使用如下命令,来单独编译:
go install -v ./cmd/geth

GIT FLOW

为了简化操作我们也可以尝试git flow它可以建立和简化你的工作流程

测试

可以通过如下命令,来进行一个库的测试:
go test -v -cpu 4 ./eth  
推荐使用-cpu(允许使用的cpu核数)和-v(显示全部的日志)选项。
使用如下命令,可以只是测试某些方法:
go test -v -cpu 4 ./eth -run TestMethod
注意:在这种方式下,所有以TestMethod为前缀的测试都会被执行;
运行性能测试:
go test -v -cpu 4 -bench . -run BenchmarkJoin

度量和监控

Geth可以进行行为监控汇总和显示性能度量表详情请参考metrics and monitoring

获取堆栈信息

如果在启动geth时,使用—pprof选项,就会在6060端口上启动一个debug http服务。通过访问http://localhost:6060/debug/pprof可以查看堆、运行进程等信息。通过http://localhost:6060/debug/pprof/goroute?debug=2,可以产生对于除错有用的信息。
注意:如果运行多个geth实例,那么这个端口只对第一个启动的实例有效,如果要产生其他实例的堆栈信息,你可以在启动实例时,选择不同的pprof端口。而且要确保把stderr重定向到日志文件中,如:
geth -port=30300 -verbosity 5 --pprof --pprofport 6060 2>> /tmp/00.glog
geth -port=30301 -verbosity 5 --pprof --pprofport 6061 2>> /tmp/01.glog
geth -port=30302 -verbosity 5 --pprof --pprofport 6062 2>> /tmp/02.glog
如果要删除有堆栈信息的geth,要发送QUIT信号,如:
killall -QUIT geth 
这样会把堆栈信息,存储在他们对应的日志文件中;

贡献

为了向go-ethereum贡献代码,需要先fork库,然后修改、提交代码,然后发送一个pull request,以便维护者可以审查和merge到代码主干中。
如果你提交的是比较复杂的变更,你可以先在our gitter channel中与核心开发人员确认,以确保你的变更是符合以太坊基本设计思路的,或者也可以得到一些早期的反馈。Pull request要基于master分支。
以太坊鼓励Pull request早行的方式,即你可以在还没有解决问题或增加新特性的情况下,就创建Pull request。这会让核心开发人员和其他自愿者知道你要解决的问题。这些早期的Pull request暗示着“正在处理”状态。