搭建编译和测试智能合约流程

步骤
1. node.js开发环境     https://nodejs.org/zh-cn/下载安装   
2. 开发环境,remix      http://remix.ethereum.org/       (暂时不用,可以先跳过)
安装本地remix环境
remix:Windows、Mac OS X和Linux。
remix
git clone https://github.com/ethereum/browser-solidity
cd browser-solidity
npm install
npm start
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

3. 编写智能合约

在E:\work_document\blockchain\solidity\calc下创建Calc.sol文件,编写如下智能合约

pragma solidity ^0.4.0;

contract Calc
{
    function add(uint a, uint b) returns(uint)
    {
        return a + b;
    }
}
4. 安装Solidity编译器
在命令行输入  npm install –g solc
查看版本:solcjs  --version

5. 编译Solidity程序

重新打开cmd命令行到Calc.sol目录下执行  solcjs --abi  --bin Calc.sol
生成两个文件:
Calc_sol_Calc.abi:接口文件
Calc_sol_Calc.bin:以太坊运行的二进制文件(EVM字节码)

6. testrpc安装  testrpc是在本地使用内存模拟的一个以太坊环境

npm install -g ethereumjs-testrpc

ps:简介truffle和testrpc

truffle是本地的用来编译、部署智能合约的工具。testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,当合约在testrpc中测试通过后,再部署到geth中去。所以可以说truffle和testrpc就是两大杀器。)


7. 启动testrpc

重新打开cmd命令行执行 testrpc

默认端口号:8545,
testrpc会自动生成10个用于测试的address和10个private key。

8. 安装web3.js
【web3.js与合约交互】 web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。
npm install [email protected]


9. 初始化(web3.js)
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
eth = web3.eth


10. 装载abi和bin文件
 abi = JSON.parse(fs.readFileSync('E:\\work_document\\blockchain\\solidity\\calc\\Calc_sol_Calc.abi').toString())
code = fs.readFileSync('E:\\work_document\\blockchain\\solidity\\calc\\Calc_sol_Calc.bin').toString()


11. 发布智能合约
contract = eth.contract(abi)
deployed = contract.new({from:eth.accounts[0],data:code,gas:470000})
//eth.accounts[0]  发布智能合约的账户,使用的是testrpc提供的默认账户第一个。
//data 发布的二进制文件
//gas  发布智能合约最大的成本上线,尽量大一些  发布智能合约必须要付出一定的费用



deployed.address   //智能合约的地址
12. 通过web3.js调用智能合约
contract1 = eth.contract(abi)
instance = contract1.at(deployed.address)

instance.add.call(1,2)  //  本地调用

如下图可看到执行结果两者之和。

搭建编译和测试智能合约流程_第1张图片

你可能感兴趣的:(区块链)