在以太坊Testrpc下部署智能合约

运行testrpc

开启一个终端,输入testrpc运行测试节点。testrpc是一个完整的在内存中的区块链仅仅存在于你开发的设备上。相对于 Geth私有链环境,TestRPC 它在执行交易时是实时返回,而不等待默认的出块时间,这样你可以快速验证你新写的代码,当出现错误时,也能即时反馈给你。

启动 testrpc 经后,会默认创建10个帐号,Available Accounts是帐号列表,Private Keys是相对应的帐号密钥。

在当前home目录下新建testproject目录,进入目录执行

truffle init

等待一会发现会多出几个目录和文件:

  • contracts/: 智能合约存放的目录,默认情况下已经帮你创建 Migrations.sol合约。

  • migrations/: 存放部署脚本

  • test/: 存放测试脚本

  • truffle.js: truffle的配置文件

首先修改truffle.js文件,改成如下:

module.exports = {
  networks: {
        development: {
            host: "localhost",
            port: 8545,
            network_id: "*" // 匹配任何network id
         }
    }
};

这里是设置我们稍后要部署智能合约的位置, 否则会报网络错误。

编写合约

进入contracts目录,这里是存放合约代码的地方。我们可以使用sublime等工具编写测试合约代码,然后保存MyTest.sol文件。

pragma solidity ^0.4.4;
contract MyTest {
    function multiply(uint a) public pure returns(uint d) {
        return a * 7;
    }

    function say() public pure returns (string) {
        return "Hello Contract";
  }
}

合约内容很简单,就是输入一个整数,返回它乘以7的结果。然后有一个函数say()输出一串字符。函数声明为pure,在这种情况下,它们承诺不会从该状态中读取或修改该状态

编译部署

修改migrations下的1_initial_migration.js文件,改成如下:

var Migrations = artifacts.require("./Migrations.sol");
var MyTest = artifacts.require("./MyTest.sol");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
  deployer.deploy(MyTest);
};

原来的部署不动,只是新增一个我们自己写的合约(MyTest)。

然后使用命令开始编译

$ sudo truffle compile --compile-all

Truffle仅默认编译自上次编译后被修改过的文件,来减少不必要的编译。如果你想编译全部文件,可以使用–compile-all选项。

然后会多出一个build目录,该目录下的文件都不要做任何的修改。

接下来部署,

$ sudo truffle migrate --reset

这个命令会执行所有migrations目录下的js文件。如果之前执行过truffle migrate命令,再次执行,只会部署新的js文件,如果没有新的js文件,不会起任何作用。如果使用–reset参数,则会重新的执行所有脚本的部署。

执行

truffle migrate

如果以前有编译过别的乱七八糟的合约,怕环境出问题,可以使用

truffle migrate –reset。

如果要部署到指定的网络,可以使用–network参数,例如:

truffle migrate --network live

多个网络的配置格式如下:

networks: {
  development: {
    host: "localhost",
    port: 8545,
    network_id: "*" // match any network
  },
  live: {
    host: "178.25.19.88", // Random IP for example purposes (do not use)
    port: 80,
    network_id: 1,        // Ethereum public network
    // optional config values:
    // gas  Gas limit used for deploys. Default is 4712388
    // gasPrice Gas price used for deploys. Default is 100000000000 (100 Shannon).
    // from - default address to use for any transaction Truffle makes during migrations
    // provider - web3 provider instance Truffle should use to talk to the Ethereum network.
    //          - if specified, host and port are ignored.
  }
}

简单测试下, 进入truffle控制台,

$ truffle console
truffle(development)> var contract;
undefined
truffle(development)> MyTest.deployed().then(function(instance){contract= instance;});
undefined
truffle(development)> 
undefined
truffle(development)> 
undefined
truffle(development)> contract.multiply(3)
{ [String: '21'] s: 1, e: 1, c: [ 21 ] }
truffle(development)> 
undefined
truffle(development)> contract.say()
'Hello Contract'

输入.exit可以退出控制台。

你可能感兴趣的:(在以太坊Testrpc下部署智能合约)