以太坊智能合约开发环境及总结

今年上半年开始接触基于区块链的以太坊智能合约编程。由于网络现有资料大多使用truffle2.0框架,而更新的truffle3.0在使用习惯上有较大改动,很多教程已经不太适合新手使用。这里在吸收了部分网络资源,及多次自我尝试后,较为详细总结了linux系统下利用truffle3.0+testrpc完成以太坊智能合约+DApp开发用到的环境搭建过程,并归纳了开发过程中遇到的一些问题及解决方案,合约编程语言为solidity。

如有问题欢迎与我交流,转载请注明出处。


环境搭建

(打开终端:同时按住Ctrl + Alt + T键)

1.安装git

sudo apt-get install git

* 如果在安装git时出现E:Package 'git' has no installation candidate错误提示,即可使用:sudo apt-get install git-core

* git --version 查看是否安装成功

2.安装nodejs

sudo apt-get install curl

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

sudo apt-get install -y nodejs

* nodejs -v 查看是否安装成功

3.安装solc和solc-cli

sudo npm install -g solc solc-cli --save-dev

* solcjs --help查看是否安装成功

4.安装solc二进制包(使用geth要用到)

sudo add-apt-repository ppa:ethereum/ethereum

sudo apt-get update

sudo apt-get install solc

4.1 建立软链接(可不用)

5.安装testrpc

sudo npm install -g ethereumjs-testrpc

* testrpc安装失败,找不到script,解决方法可参考

http://blog.csdn.net/wo541075754/article/details/53155578

* testrpc 查看是否安装成功

6.安装truffle3.0

sudo npm install -g truffle

* truffle version 查看是否安装成功

7.安装Geth

sudo apt-get install software-properties-common

sudo add-apt-repository -y ppa:ethereum/ethereum

sudo apt-get update

sudo apt-get install ethereum

 

Truffle3.0使用教程(按顺序)

窗口1:

mkdir myproject 新建子目录

cd myproject

truffle init webpack初始化项目

truffle compile 编译

窗口2:

testrpc 启动testrpc

窗口1:

truffle migrate (truffle2.0以上)部署项目

npm run build

truffle serve 启动服务

窗口3:

打开浏览器,访问http://localhost:8080/

*运行多次时可能报错,将后两个指令改为npm run dev

 

项目文档说明

app/:存放前端javascript文件和stylesheets文件,在开发Dapps时使用;
contracts/:智能合约文件的存放目录;
migrations/:存放部署脚本;
test/:存放智能合约测试文件

 

DApp开发总结(truffle3.0)

1.对于一个不会改写区块链状态的f()函数,使用instance.f.call();而对于一个会改写区块链状态的函数f(),使用instance.f()。底层在实现调用上,会使用不同gas计算方式。

 

2.报错invalid address

原因:未设置默认账户地址

解决方案:

Test.defaults({

  from : "0x299127d72e28cb92d09f856aaedeb139d1e7e74a"

});

*Test是合约初始化变量

 

3.合约交互抽象层语法

MyContract.setProvider(someWeb3Provider);

MyContract.deployed().then(function(instance) {  

  return instance.someFunction();

  }).then(function(result) {

});

 

4.DApp界面读写数据

4.1 整型

var test = parseInt(document.getElementById("test").value);

meta.write(test);

      

meta.read.call().then(function(value) {

var value_element = document.getElementById("value");

value_element.innerHTML = value.valueOf();  });

 

4.2 字符串

var test = document.getElementById("test").value;

meta.write(test);

 

meta.read.call().then(function(value) {

var value_element = document.getElementById("value");

value_element.innerHTML = web3.toAscii(value);  });





阅读更多

更多精彩内容