部署一个简单的智能合约

首先安装intellij ide,使用这个ide来部署一个简单的智能合约。然后在ide中安装nodejs和solidity插件,创建nodejs项目inbox

创建智能合约:

pragma solidity ^0.4.17;

contract Inbox {
    string public  message;
    function Inbox(string _message) public {
        message = _message;
    }
    function setMessage(string _message) public {
        message = _message;
    }
    function  getMessage() public view  returns (string) {
        return message;
    }
}

创建智能合约的编译器文件compile.js,在这之前先安装solidity的编译的第三方插件solc

 在使用npm工具安装第三方插件的话,最好配置npm的镜像源为国内的镜像源,这里配置的镜像源为淘宝镜像源

更改npm镜像源为淘宝镜像
1.在家目录中找到.npmrc文件,在文件中添加registry = https://registry.npm.taobao.org
2.通过npm命令指定镜像源:npm --registry https://registry.npm.taobao.org  info underscore

 安装solc

npm install  solc@0.4.24

 创建编译器文件compile.js

const path = require("path");
const fs = require("fs");
const solc = require("solc");
const srcpath = path.resolve(__dirname,"contracts","inbox.sol");
const source = fs.readFileSync(srcpath,'utf-8');
const result = solc.compile(source,1);
// console.log(result);
module.exports = result.contracts[":Inbox"];

编译完智能合约后,接下来要对智能合约做测试验证,这里就需要安装mocha、ganache、web3等第三方插件,mocha类似于其他语言的单元测试,ganache为区块链测试环境(使用这个插件就是为了在测试部署智能合约时不存在延迟。。。)。测试文件inbox.test.js这里省略

#安装nocha测试框架:
npm install mocha

#安装ganache区块链测试环境
npm install ganache-cli@6.1.6

#安装web3插件,测试环境需要web3插件连接ganache
npm install web3@1.0.0-beta.35

当测试部署智能合约没问题后,接下来就可以正式部署智能合约到真实的区块链网络了,这里以Rinkeby做为真实网络。在正式部署前,需要安装插件truffle-hdwallet-provider和钱包的12个助记词、infura提供的Rinkeby区块链节点,没有infura账号需要注册个账号

#安装插件truffle-hdwallet-provider
npm  install  truffle-hdwallet-provider@0.0.3 

 创建一个部署智能合约文件deploy.js

const Web3 = require('web3');
const HDWalletProvider = require('truffle-hdwallet-provider');
const {interface, bytecode} = require('./compile');
const  mnemonic = "12个助记词";
const provider = new HDWalletProvider(mnemonic, "https://rinkeby.infura.io/v3/30b8ce5e57fc42fa84c04b2bb2664650");
const web3 = new Web3(provider);
deploy = async ()=> {
    const accounts = await  web3.eth.getAccounts();
    console.log(accounts[0]);
    const result = await new web3.eth.Contract(JSON.parse(interface))
        .deploy({
            data:bytecode,
            arguments:['goser']
        }).send({
            from:accounts[0],
            gas:'1000000'
        });
    console.log('address:' + result.options.address);
};
deploy();

 执行node  deploy.js获得生成的智能合约地址为:0x1769De8C2c0020fa0F418e1899F0F787Ff7Dbe39,通过这个合约地址在https://etherscan.io/中可以查看生成的智能合约,首先切换到Rinkeby,在通过地址来查看。

点击go可以查看创建的智能合约的详细信息:

 

posted @ 2019-01-26 23:40  goser  阅读(513)  评论(0)    收藏  举报