智能合约编写及部署

智能合约编写及部署

标签(空格分隔): 区块链


智能合约编写及部署

搭建开发环境

安装ethereumjs-testrpctruffle框架

npm install -g ethereumjs-testrpc truffle

启动Testrpc

通过testrpc命令来启动以太坊测试环境

testrpc

启动环境以后会返回

Available Accounts(自动生成的是个测试钱包地址)
==================
(0) 0x32800d037b4dfd8f8320f6fb0c838a653d3c6077
(1) 0xaf48606c5e631ea286c9b716cd4041d5fd3087f3
(2) 0xdeabcd9f5e099ef6643c382a9e791beba28b7fac
(3) 0x5a8bb792c081500d80e25de64ec28ad5e05aaf71
(4) 0x485c3f7cfbbe7914396cc1ece9d0f6569a11f670
(5) 0x8e97e5ca328e49332876a2a17a01d8e7ebda02ea
(6) 0x343523c0a5cb2b9d99dcc7dc7e52e8fbf88af3fd
(7) 0x116515201a3a29fa384f0cd00e971eeb607e47e9
(8) 0x78f0845496ce3c821498fd5992df68a7da81b35f
(9) 0x58063a2026e86b06cd8faa91de6c6ee7ef900a73

Private Keys(钱包的私钥)
==================
(0) a46e843998daa3df9b99362c405c7ce6614458e5abfac16832799df350af894a
(1) 639f8c6fdace297c00cf01036e501f761fe873499e603b1cbd16a313698540d1
(2) b3fba3c33c1611681bd3d9f9b533005e02b4d2d617fc76eefade2f65f096ed61
(3) d3b9dc7de1326ec12f14e55d1710a6b2610d8f81e6b09fe8f25812c5ad37f966
(4) efd0b1c9928c4578ac1ec19f8043a1a1e4a66b931f0fd5c97a25f10dacede7f0
(5) 2d5c53a8a1dfc6b1321a0480d6775fc076c3a2d713bafb4d6284e0234596f9a7
(6) 3af7794392313a3a3958ed9e0f35b822a52204a71a019697b051122b7eebc629
(7) fbdae4add706c1b61d93c9db22933fc0a978386e3fac566e23d6dc11b2cdcc57
(8) 0b40eb2190d284c42241bbbe260bbfcb89320fc80a9d169936dd466dc847d248
(9) 17885864f3e7ab339dadcf0a8b1aefc2fe36e01a45e41b855bc993ce0f05a257

此时测试环境终端不要关闭,重新启动一个终端来创建项目

创建项目

执行以下命令来创建项目

truffle init

执行完命令会生成以下项目目录

contracts:编写合约目录
migrations:部署合约配置的文件夹
test:测试目录

添加solidity代码

创建HelloWorld.sol文件,添加以下合约代码

pragma solidity ^0.4.4;

contract HelloWorld {
    function sayHello() returns (string) {
        return ("hello world");
    }
}

修改migrations/1_initial_migration.js文件代码如下

var HelloWorld = artifacts.require("./HelloWorld.sol");

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

编译合约

定位到项目所在目录,运行以下命令进行合约部署

truffle compile

部署合约

定位到项目所在目录,运行以下命令进行合约部署

// 部署
truffle migrate  

// 重新部署
truffle migrate --reset

如果部署过一次,再次部署的时候需要用重新部署的方式

与合约互动

truffle提供了命令行工具,执行truffle console命令以后,可以用JS于刚才部署的合约进行互动

truffle console
> let contract  // 声明变量,用于保存合约。相当于实例化了一个实例化对象

> HelloWorld.deployed().then(instance=>contract=instance)

> contract.sayHello.call()  // 调用执行sayHello方法

call()方法的使用,用了call()方法,相当于只是读取合约,不需要花费以太币。如果不使用call方法的话,如果涉及到写入的话,是需要支付一定的以太币的

遇到的错误问题

  • 部署过程中遇到了一下错误Error: No network specified. Cannot determine current network

解决方案; Error: No network specified. Cannot determine current network异常

导致上面异常的原因为是因为truffle.js里面未配置链接合约发布的环境地址,找到对应的truffle.js文件,修改代码为类似如下配置即可解决问题:

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

你可能感兴趣的:(智能合约编写及部署)