Ubuntu 16.04下安装以太坊编译环境以及设置合约功能(支持geth 1.6以及solc 0.4.16版本以上)

由于没有苹果电脑,所以在这里使用Linux环境进行操作,Windows也可以,但是没有试过,也看过不少文章,说道会遇到很多问题。
本文解决了下面几个问题:
1.geth升级到1.6版本后,不再使用eth.getCompilers()或者admin.setSolc()等通过JS的方式实时编译,而是采用了ABI合约接口的二进制表示。通过转化为json方式到geth的console平台进行编译
具体看下面文章说明:
https://ethereum.stackexchange.com/questions/15435/how-to-compile-solidity-contracts-with-geth-v1-6/15436
2.最新的solc0.4.16版本做了改变,以前用solc命令来将.sol文件转成abi合约接口二进制,现在使用solcjs来转变,转变后,要将.abi和.bin用文本编辑器做下修改。要修改成大致这样的格式:
生成的*.abi要改成如下样子,原始没有eth.contract([{这些:
var simpleContract = eth.contract([{"constant":false,"inputs":[{"name":"_a","type":"uint256"},{"name":"_b","type":"uint256"}],"name":"multiply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"uint256"},{"name":"_b","type":"uint256"}],"name":"arithmetics","outputs":[{"name":"o_sum","type":"uint256"},{"name":"o_product","type":"uint256"}],"payable":false,"type":"function"}])
生成的.bin文件要改成如下样子,原始没有simpleContract.new(,from,data这些
var simple = simpleContract.new(
{ from: eth.accounts[0],
data: "0x6060604052341561000f57600080fd5b5b6101178061001f6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063165c4a161460475780638c12d8f0146084575b600080fd5b3415605157600080fd5b606e600480803590602001909190803590602001909190505060c8565b6040518082815260200191505060405180910390f35b3415608e57600080fd5b60ab600480803590602001909190803590602001909190505060d6565b604051808381526020018281526020019250505060405180910390f35b600081830290505b92915050565b600080828401915082840290505b92509290505600a165627a7a72305820389009d0e8aec0e9007e8551ca12061194d624aaaf623e9e7e981da7e69b2e090029",
gas: 500000
}
)

1.1.1. 安装Ubuntu 16.04版本

1.1.1.1. 安装和配置SSH

Ubuntu下允许root用户ssh远程登录
http://www.linuxidc.com/Linux/2016-07/133256.htm
1.1.1.2. UBUNTU的默认root密码是多少,修改root密码

http://jingyan.baidu.com/article/5225f26b0ac250e6fb09084e.html
1.1.1.3. 安装Ethereum和solc

$sudo apt-get install software-properties-common
$sudo add-apt-repository -y ppa:ethereum/ethereum
$sudo apt-get update
$sudo apt-get install ethereum
$sudo apt-get install solc
1.1.1.4. 安装Node.js下载源码.tar.gz,进行编译和安装

tar -zxvf node-v6.9.2.tar.gz cd node-v6.9.2
sudo ./configure
sudo make
sudo make install
1.1.1.5. 安装solc

$solc --help是否有效?如果没有笑,可以再试着用下面方式安装solc
$npm install -g solc
$npm install -g solc-cli
操作完后,再试下$solc --help
1.1.1.6. 挖矿,创建用户,建立简单合约

请查看下面这篇文章
https://alanbuxton.wordpress.com/2017/07/19/first-steps-with-ethereum-private-networks-and-smart-contracts-on-ubuntu-16-04/
归纳操作如下面所示:

打开一个xshell终端,连接Ubuntu,运行ethereum dev环境
geth --datadir "~/ethdev" --dev --ipcdisable --rpcapi "db,eth,net,web3"
打开一个xshell终端,进入console操作环境
geth --dev console 2>> file_to_log_output
打开一个xshell终端,查看日志
tail -f file_to_log_output

console操作环境,运行下面命令

personal.newAccount('123456')
personal.newAccount('123456')
eth.accounts
user1 = eth.accounts[0]
user2 = eth.accounts[1]

eth.getBalance(user1)

eth.sendTransaction({from: user1, to: user2, value: web3.toWei(3,"ether")})
personal.unlockAccount("0x","123456")

miner.start()
miner.stop()

eth.blockNumber()

编译合约
linux的默认路径是/root/,
在默认路径下面生成Test.sol文件
$ more simple.sol
pragma solidity ^0.4.13;

contract Simple {
function arithmetics(uint _a, uint _b) returns (uint o_sum, uint o_product) {
o_sum = _a + _b;
o_product = _a * _b;
}

function multiply(uint _a, uint _b) returns (uint) {
return _a * _b;
}
}

ethuser@host01:~/contract$ cat Simple.abi
var simpleContract = eth.contract([{"constant":false,"inputs":[{"name":"_a","type":"uint256"},{"name":"_b","type":"uint256"}],"name":"multiply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"uint256"},{"name":"_b","type":"uint256"}],"name":"arithmetics","outputs":[{"name":"o_sum","type":"uint256"},{"name":"o_product","type":"uint256"}],"payable":false,"type":"function"}])
and

ethuser@host01:~/contract$ cat Simple.bin
personal.unlockAccount(eth.accounts[0])

var simple = simpleContract.new(
{ from: eth.accounts[0],
data: "0x6060604052341561000f57600080fd5b5b6101178061001f6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063165c4a161460475780638c12d8f0146084575b600080fd5b3415605157600080fd5b606e600480803590602001909190803590602001909190505060c8565b6040518082815260200191505060405180910390f35b3415608e57600080fd5b60ab600480803590602001909190803590602001909190505060d6565b604051808381526020018281526020019250505060405180910390f35b600081830290505b92915050565b600080828401915082840290505b92509290505600a165627a7a72305820389009d0e8aec0e9007e8551ca12061194d624aaaf623e9e7e981da7e69b2e090029",
gas: 500000
}
)

loadScript("Simple.abi")
loadScript("Simple.bin")
simple.multiply
miner.start(1)
miner.stop()
simple.multiply.call(5,6)


时间: 2025-01-20 18:23:53

Ubuntu 16.04下安装以太坊编译环境以及设置合约功能(支持geth 1.6以及solc 0.4.16版本以上)的相关文章

Ubuntu 12.04 下安装 Eclipse

方法一:(缺点是安装时附加openjdk等大量程序并无法去除,优点是安装简单) $ sudo apt-get install eclipse   方法二:(优点是安装内容清爽,缺点是配置麻烦)1.安装JDK,参考 Ubuntu 12.04 下安装 JDK 7 2.下载 Eclipse   从 http://www.eclipse.org/downloads/index-developer.php下载合适版本,如:Eclipse IDE for C/C++ Developers 3.解压文件$ s

Ubuntu 15.04下安装Node.JS的不同方式

如果你要在Ubuntu 15.04上安装Node.js的话,这篇教程对你来说肯定很重要.Node.js从本质上来说就是一个运行在服务端上的封装好了输入输出流的javascript程序.Node.js巧妙的使用单线程的事件循环来处理高吞吐量和非阻塞IO.同时它也是一个提供了通过操作系统读写文件和网络操作功能的平台层.所以这篇文章将展示在Ubuntu 15.04 server上不同的安装Node.Js的方式. 安装Node.JS 的方法 有许多安装Node.JS的不同的方法,我们可以选择其一.通过本

Ubuntu 11.04 下安装配置 JDK 7

第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586.tar.gz (注:如果下载不下来,建议使用迅雷下载,然后拷贝到Linux系统上.) 第二步:解压安装 sudo tar zxvf ./jdk-7-linux-i586.tar.gz -C /usr/lib/jvm cd /usr/lib/jvm sudo mv jdk1.7.0/ java-7-

Ubuntu 13.04下安装了lazarus后一直crash怎么办

  安装了 Ubuntu 13.04 后,发现 appmenu 已经很好用了,无需再将其删除.但是在安装了 lazarus (from source) 后,它一直 crash,经查是 appmenu 的问题,当然官方源内的 lazarus 也并不是完全正常的.所以解决方案么,把 lazarus 换成最新版,并且想办法让它在运行时不加载 appmenu. 具体操作过程如下: 1. 先卸载lazarus相关的全部文件,包括fpc: $ sudo apt-get purge lazarus fpc f

ubuntu 9.04下安装google earth

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 从Google官方站点下载最新的google地球程序(我下载的是企业版,而不是个人版),安装很顺利,也能运行起来,只是在我的系统上(ubuntu 9.04 desktop kernel 2.6.28-11-generic)是乱码,菜单基本上只能看到菜单快捷键,反正是看不到中文的. 解决的办法是: 1)以我的安装位置为例,进入/home/wgz

Ubuntu 14.04下安装JDK8

1.下载最新的jdk安装,地址:http://www.oracle.com/technetwork/java/javase/downloads/ 2.解压jdk-8u20-linux-x64.gz,我解压后放置在/opt下 sudo tar zxvf ./jdk-8u20-linux-x64.gz -C /opt 3.配置环境变量 vim ~/.bashrc 按shit+g在文件末尾加入以下内容 export JAVA_HOME=/opt/jdk1.8.0_20 export JRE_HOME=

Ubuntu 8.04下安装DB2方法

 参考文献: How-to: Ubuntu 7.10 Server x86 32-bit and DB2 Express-C v9.5 DB2 v9.7 Infomation Center   场景:在IBM System x3550服务器上,Ubuntu Server 8.0.4操作系统中以db2_install 命令安装DB2 v9.7 ESE trial数据库.   一.安装前的步骤     1.安装几个包,执行命令:         sudo apt-get install libaio

Ubuntu 14.04下安装Golang以及LiteIDE

安装配置Golang 可以从Golang中国这里下载,下载好后使用sudo tar -xvzf ~/Downloads/go*.linux-amd64.tar.gz -C /usr/local/命令将其解压到/usr/local/位置,然后配置环境变量. 使用命令vim ~/.bashrc打开.bashrc文件,然后在最后追加下面内容: export GOROOT=/usr/local/go  export PATH=$PATH:$GOROOT/bin  export GOPATH=~/Go 然

Ubuntu 8.04下安装eclipse和PHP

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   1.官方下载PDT All-in-one版本:http://downloads.zend.com/pdt/all-in-one/ 2.解压到指定目录:/usr/local 可先解压到当前目录然后 mv eclipse /usr/local (1)如果想把eclipse目录的更改为root拥有,可以执行下面的命令 sudo chown -R root:root /