Ubuntu下搭建以太坊编程环境

Ubuntu下搭建以太坊编程环境

网上很多人写过类似的流程,这里每一个步骤,都是笔者测试过的。当然,随着更新,可能会略有不同,截至发布时间,这些可以使用的。ok,那就进入正题。

准备:windows 10下可以通过windows商店安装ubuntu 18.04 LTS版,请在安装前注意查看商店产品说明,否则闪退。Ubuntu系统下可以直接执行。

1. 安装geth

什么是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

测试安装
geth –help

如果显示版本和帮助说明,就表示安装成功

2. 安装Git

什么是Git?点击这里查看说明。

sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

# sudo apt-get install git-core

说明:

3. 安装npm

#安装curl
sudo apt-get install curl
#安装npm
sudo apt install npm
#查看npm版本
npm -v

 

4. 安装NodeJS

sudo npm install -g n
npm update -g
sudo n latest #安装最新版
或者
sudo n stable #安装稳定版
#查看node版本
node -v

说明:关于n 的说明https://www.npmjs.com/package/n
n- interactively manage your node.js versions
如果出现 node: No such file or directory
创建软连接
ln -s /usr/bin/nodejs /usr/bin/node

 

5. solc安装

solidity是以太坊智能合约的开发语言。想要测试智能合约,开发DAPP的需要安装solc。官方文档获取更多信息。

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc

 

6. *truffle和testrpc

truffle和testrpc(新版名字已更新为ganache)是配套的以太坊开发框架。通过truffle可以快速的编译和部署合约并进行测试,同时还有web前端交互界面。truffle官方文档 testrpc可以理解为快速生成以太坊测试账号。如果你在中国大陆,由于政府防火墙的原因,安装truffle比较慢,先设置淘宝源。

npm config set registry https://registry.npm.taobao.org

之后安装truffle和testrpc(请注意该项目已经更新为ganache,后面有说明)

sudo npm install -g truffle

查看版本号
>truffle –version

安装测试环境
(模拟接入以太坊)

ganache 命令行版
sudo npm install -g ganache-cli
Gui版
truffleframework.com/ganache下载

安装完毕后,执行命令验证安装成功:
~$ ganache-cli
Ganache CLI v6.0.3 (ganache-core: 2.0.2)

要了解ganache命令行的详细用法,可以查看以太坊ganache CLI命令行参数详解
https://my.oschina.net/u/3794778/blog/1799768

 

7. 安装go语言

sudo add-apt-repository ppa:gophers/archive
sudo apt-get update
sudo apt-get install -y build-essential golang

Set GOPATH and PATH
For Go to work properly, you need to set the following two environment variables:
Setup a go folder

mkdir -p ~/go; echo “export GOPATH=$HOME/go” >> ~/.bashrc

Update your path

echo “export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin” >> ~/.bashrc

Read the environment variables into current session:

source ~/.bashrc


什么是Gas

智能合约由区块链网络中的每个完整节点重复执行,使得合约执行的消耗变得昂贵,所以这也促使大家将能在链下进行的运算都不放到区块链上进行。对于每个被执行的命令都会有一个特定的消耗,用单位gas计数。每个合约可以利用的命令都会有一个相应的gas值。gas值的存在避免智能合约进入死循环,你不能编写永不结束的程序,因为你用尽了gas,计算将被节点拒绝。

在以太坊中,每笔交易都被要求包括一个gas limit和一个交易愿为单位gas支付的费用。矿工可以有选择的打包这些交易并收取这些费用。在现实中,由于矿工会优先选择打包费用高的交易,所以用户所选择支付的交易费用多少会影响到该交易被打包所需等待的时长。

如果该交易由于计算,包括原始消息和一些触发的其他消息,需要使用的gas数量小于或等于所设置的gas limit,那么这个交易会被处理。

如果gas总消耗超过gas limit,那么所有的操作都会被复原,但交易是成立的并且交易费任会被矿工收取。区块链会显示这笔交易完成尝试,但因为没有提供足够的gas导致所有的合约命令都被复原(out-of-gas)。

所有交易里没有被使用的超量gas都会以以太币的形式打回给交易发起者。因为gas消耗一般只是一个大致估算,所以许多用户会超额支付gas来保证他们的交易会被接受。


什么是以太坊虚拟机EVM

以太坊虚拟机(Ethereum Virtual Machine,EVM)是建立在以太坊区块链上的代码运行环境,其主要作用是处理以太坊系统内的智能合约。

简单来说,以太坊虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在EVM内部运行。由于EVM分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似JavaScript和Python等编程语言创建运行于EVM的应用程序;同时以太坊虚拟机又能与主网的其余部分隔离,运行时不影响主区块链的操作。出于这个原因,以太坊有时被形容为“世界电脑”。

为了减少资源耗费及保证系统性能,以太坊虚拟机并没有采用模拟完整计算机的模式,而是使用更为轻量级的虚拟机构架。以太坊开发者还推出了基于以太坊电子分布式代码合约的高级程序语言Solidity,但Solidity语言缺乏标准库、基于栈的架构易于优化但所需opcode更多等。