使用Nodejs部署智能合约

JavaScript014

使用Nodejs部署智能合约,第1张

实现智能合约的方式很多种,可以用truffle框架来实现,编译,部署。

这里介绍一种简单的使用nodejs来实现,编译,部署的方法。

创建一个nodejs项目,实现一个简单的智能合约。

这个合约实现了一个造币和转币的逻辑。

我们的合约是运行在evm上面的字节码,solidity是静态语言,需要通过编译器生成evm的字节码。

调用 node compile.js ,对BaseToken进行编译,生成字节码。web3中提供了一个部署合约的接口,使用如下,

利用编译生成的abi和bytecode,创建一个合约对象,然后进行发布,等待着异步执行的方法输出合约地址 contractAddress ,这样就完成了部署。不过这种方式有一个问题,就是在发布合约时,你的私钥处于联网状态,

处于安全策略,我们需要尽量避免私钥在联网状态。

以太坊上部署合约是向空地址发送一个附有字节码的签名交易,其中发送者就是这个合约的拥有者。因此我们只需要将合约构建成一笔交易,我们在无网状态下对这笔交易进行签名,然后将签名发送到以太坊网络中。这样能够降低我们私钥被泄漏的风险。

对合约的签名方法如下:

以上对一个合约签名,这里需要注意的问题是,to的地址需要是,空地址。

完成签名之后,我们把这笔交易发送出去就好,最简单的方法就是使用 etherscan的发送Tx的方式 ,一旦发送完成,部署完成,就可以看到合约地址。

跟你在本地开发是相同的。

1、安装指定版本的node.js(服务器基本软件的安装)

2、上传代码到服务器(可以通过ftp、ssh、git等方式)

3、安装项目依赖的模块

> npm install

4、启动应用(也可以通过forever、pm2等工具进行管理)

> node ./www/bin

当然,如果你深谙运维之道,可以直接通过docker等方案将运行环境容容器化。

基本的Linux运维知识的话可以参考linuxprobe.com。

还有几个需要注意的点:

1、运行权限:注意做好应用之间的隔离(使用低权限用户、文件系统隔离等),避免应用崩溃导致系统宕机等风险

2、80端口:通过nginx等进行反向代理,应用本身占用1024后的端口(无需root权限)

服务器推荐用nginx,配置简单,性能强悍。

nginx可以使用代理访问后端的Node.js应用服务器。

配置方法:

1)在配置文件http段内容添加后端服务器:

http {

#添加后端服务器,和nginx负载均衡配置一样

upstream nodejs {

server 127.0.0.1:8080

}

...

}

2)给应用添加虚拟主机:

server {

listen 80

server_nameIP

location / {

proxy_pass nodejs#名字和前面的对应,将所有的请求转发给后端的node

}

access_log logs/nodejs.access.log main#如果需要日志的话

}

推荐将静态文件如css、js和图片和应用服务器分开。