以太坊开发(truffle框架) Hello,I'm solidity。

xyj2156 区块链 2018-06-04

以太坊开发(truffle框架) Hello,I'm solidity。

运行测试 以太坊环境

  1. 打开新的终端 运行 testrpc 命令。
  2. 运行 以太坊环境到后台 testrpc > std.log &

    • 这样不好之处就是 如果想看testrpc的输出,你需要到 std.log 查看,因为输出重定向到 std.log 了。
    • 好处就是,可以把输出记录到 std.log 文件中。

初始化 truffle 项目

  1. 找一个你想要放项目的地方。新建一个目录,mkdir test(1️以test 为例)。
  2. 进入这个目录,运行初始化命令,cd test; truffle init;

初始化之后的目录结构是这样的:

.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js
  • 其中 truffle-configtruffle 留一个即可,目的是防止 Windowstruffle.jstruffle 命令发生冲突,所以,留下任意一个即可,还是留下 truffle-config,这样即容易移植,按照字面意思,也好理解。这个文件的目的是配置连接的网络,由于我们用的是本地测试网络,配置如下:
module.exports = {
    networks: {
        development: {
            host: "localhost",    // 主机名
            port:8545,            // 端口号
            network_id:"*"        // 匹配任何network id
        }
    }
};
  • contracts 目录就是我们放编写的合约文件了。
  • test 目录放置测试文件。
  • migrations 目录放置,部署文件。

编译之后我们会发现 多出一个 build 文件夹,这个是放置编译后可以部署的json 格式的文件的。
官网说明还有一个app目录,到现在为止,我还没有弄明白怎么用。mark 一下)

写一个合约

我使用的环境是,虚拟机,配置samba服务,所以,直接Windows开发(sublimit 3),linux 中(xshell)编译测试。

新加一个 合约文件。(命令可以使用 touch contracts/Hello.sol

合约内容如下:


pragma solidity ^0.4.23;    // 版本信息

contract Hello {            // 合约声明 类似于 class
    address a;                // 值类型 变量名
    string Name;
    uint i;

    constructor (string name) { // 构造函数 变量值类型 变量名
        Name = name;
    }

    function say() constant public returns (string){ // 函数关键字 函数名 常函数标记 权限标记 返回值标记 函数体
        return Name;
    }
}

编写合约部署文件

合约部署文件必须是:数字_字符串.js

新建一个合约部署文件。(命令 touch migrations/1_Hello.js注意文件名和合约名的大小写

内容如下:


var Hello = artifacts.require("./Hello.sol"); // 引入 合约

module.exports = function(deployer) {
  deployer.deploy(Hello, 'Hello, I\'m solidity。'); // 引入合约,并传参,合约名 合约参数,依次传入。
};

编译部署合约

这里要保持 testrpc 是运行状态。

执行命令 truffle migrate(直接部署,会自动编译),truffle migrate --reset(带上 --reset,是重新部署的意思)

终端的内容:


Using network 'development'.

Running migration: 1_helle.js
  Replacing Hello...
  ... 0x83260341cce252269a1a590dcd6713f90402dd4b00bb853535b996c48287dc87
  Hello: 0x701881ed6ff8e198e93bf822457e4f650cfde551 // 注意这里是 合约的地址
Saving successful migration to network...
  ... 0x88c2280517ef5c852db5af5980301cca62a2a2c3482bb3f45a2e7976b77d5b96
Saving artifacts...
Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0x10535c3fb99d06b22b146ab7a8c06a599d702d7e22fe501dfd1e467c6babe01f
  Migrations: 0x7d47b73572f48878829617a87265c46af74f0755
Saving successful migration to network...
  ... 0x977693cb1d0331b54d4eb917a7156f6d194584ba5eb25435ef0929b1aeb5b3db
Saving artifacts...

调试

使用命令 truffle console 进入控制台。

输入 a = Hello.at("0x701881ed6ff8e198e93bf822457e4f650cfde551") 得到合约的实例。

a 变量代表的就是 Hello 的实例。

我们在合约中写了 say 方法,在这里我们可以这样调用。

a.say()

然后输出就是我们写部署函数时传入的参数。

'Hello, I\'m solidity。'

注意

  1. contractsmigrations 目录下已有的文件不要删除。那两个文件是部署相关文件。如果删除了,可以通过在项目根目录重新初始化获取。
  2. 合约部署文件中的,部署函数的参数问题,一定注意。
  3. 部署合约的时候,一定保证 testrpc是运行状态。
  4. 函数定义中的 constant 是常函数定义关键字,意思是:承诺自己不修改区块链上任何状态。

    • 版本为pragma solidity ^0.4.23; 当我给一个修改属性的函数添加 constant 的时候,编译时直接不通过。
PREV
notepad++ 实现 markdown 语法和实时预览
NEXT
以太坊开发(truffle框架)验证区块链记录合约相关

评论(0)

评论已关闭