以太坊智能合约编写

开发工具 Atom

  1. 首页安装nodjs然后在控制台输入

    npm install -g ethereumjs-testrpc truffle

  2. 终端输入testrpc启动以太坊开发环境,会生成10个钱包临时的地址和10个对应的钱包秘钥,部署合约需要花费以太币,每个钱包有10个以太币(不要关闭终端)
  3. 打开新的终端,创建项目,cd Desktop/ 切换到桌面,mkdir ContractDemo
  4. cd ContractDemo;然后执行truffle init创建新项目。ls查看文件目录
  5. 终端输入 atom ./ 用atom工具打开
  6. conteacts/xxx.sol  默认合约代码                               migrations/1_initial_migration.js 部署合约时监听合约的变化,2_deploy_contracts.js部署合约时往里边写部署合约的代码。test文件夹下的代码写测试用例
  7. 在contracts下新建一个HelloWorld.sol,输入以下代码

pragma solidity ^0.4.17; //编译版本的声明 ^代表兼容 0.4.17~0.4.9,不能超过0.5
//contract 相当于声明了一个类class HelloWorld extends contract 创建了一个合约
contract HelloWorld {
function HelloWorld() {
//构造函数。与类名相同
}
function sayHello() returns (string) {
//方法里的参数需要有类型。返回的参数也要有类型
return (“Hello World”);
}

}

 

8.编译,打开终端,在当前项目目录下输入命令

truffle compile      项目目录下会多出一个build文件夹

编译完成以后才能部署

9、在终端当前项目目录下执行truffle migrate开始部署

Error: No network specified. Cannot determine current network.报错了!!!!!,原因是

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

 

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


另一个监听控制台输出的:

Using network ‘development’ 代表的是开发环境

Transaction://部署合约的地址

Gas usage://部署合约花费的燃料费/手续费

Block Time://部署合约的时间

与合约互动

truffle 提供命令行工具,执行truffle console命令后,可用js与刚才部署的合约互动

let contract  //声明一个变量

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

       instance合约实例contract刚才声明的变量 instance 把这个合约存储起来

执行

contract.sayHello.call()控制台输出 

‘Hello World’

call()方法代表只读,简单的读取数据,不会消耗gas,

直接调用sayHello()会打印出交易的过程来,写入会消耗gas

写代码时加关键字constant声明,标示调用这个方法不会改变区块链的状态。如此一来,透过truffle-contract来调用此方法时,会自动选用call来呼叫,也不粗要额外提供gas

修改同一个文件编译后部署需要加参数  –reset

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注