以太坊学习笔记-从环境搭建到hello ethereum
以太坊入门学习笔记
原文发布于:区块链项目导航:
首先默认安装完成Ubuntu16.04环境。
注:需要获得root用户,按照以下步骤:
sudo passwd -u root
输入密码
sudo passwd root
设置root用户密码
安装必要环境
git
sudo apt-get install git
跳出对话输入:Y(下面类同)
安装完成后查看git版本
git version
如图:
Curl
安装Curl
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash
NodeJS
安装NodeJS
sudo apt-get install -y nodejs
安装完成后查看NodeJS版本
nodejs -v
如图:
npm
安装npm
sudo apt-get install npm
安装完成后查看npm版本
npm -v
如图:
solc
安装solc和solc-cli
sudo npm install -g solc solc-cli --save-dev
truffle
安装truffle
sudo npm install -g truffle
安装完成后查看版本
truffle version
如图:
testrpc
sudo npm install -g ethereumjs-testrpc
Geth
安装Geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安装完成后查看版本信息
geth version
如图:
go(可选)
安装golang
wget https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
配置环境变量
cd ~ vi.bashrc
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
安装完成查看版本
go env
go version
如图:
web3
安装web3
npm install web3@^0.20.0
Ganache
安装Ganache
wget https://github.com/trufflesuite/ganache/releases/download/v1.0.1/ganache-1.0.1-x86_64.AppImage
chmod -x ganache-1.0.1-x86_64.AppImage
./ganache-1.0.1-x86_64.AppImage
安装完成后如图:
配置启动
初始化创世区块
选择目录创建genesis.json文件,编辑保存。
{
"config": {
"chainId": xxxx(修改任意数字),
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000"(修改难度值,便于挖矿),
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
mixhash:和nonce配合用于挖矿。
nonce:和mixhash配合挖矿。
difficulty:设置当前区块难度(这里设置小点,便于挖矿)。
alloc:用于设置账户及账号以太坊以太币的数量。
coinbase:矿工账号。
timestamp:时间戳。
parentHash:上一个区块的hash值,这里是创世区块所以为0.
extraData:附加信息。
gasLimit:gasg消耗总量设置。
完成后运行命令初始化:
geth init 所在目录/genesis.json
完成后输出如图:
启动私有链
geth --identity "OneTestETH" --rpccorsdomain "*" --nodiscover --rpcapi "*" --cache=1024 --networkid 9999 console
说明各个参数作用:
nodiscover 使用这个命令可以确保你的节点不会被非手动添加你的人发现。否则,你的节点可能因为你与他有相同的创世文件和网络ID而被陌生人的区块链无意添加。
maxpeers 0 如果你不希望其他人连接到你的测试链,可以使用maxpeers 0。反之,如果你确切知道希望多少人连接到你的节点,你也可以通过调整数字来实现。
rpc 可激活你节点的 rpc 服务。它在 geth 中通常被默认激活。
rpcapi "db,eth,net,web3" 决定允许哪些 API 开放 rpc 服务。在默认情况下只激活了 web3 api。
rpcport "8080" 将8000改变为你网络上开放的任何端口。Geth的默认设置是8080.
rpccorsdomain "https://xxxx.com" 这个可以指示什么URL能连接到你的节点来执行RPC定制端任务。务必谨慎,输入一个特定的URL而不是wildcard ( * ),后者会使所有的URL都能连接到你的RPC实例。
datadir "/home/TestChain1" 这是你的私有链数据所储存在的数据目录(在nubits下)。选择一个与你以太坊公有链文件夹分开的位置。
identity "TestnetMainNode" 这会为你的节点设置一个身份,使之更容易在端点列表中被辨认出来。这个例子说明了这些身份如何在网络上出现。
networkid 1999 数字类型,区分与其他的网络ID,以太坊公链的网络ID=1。必须区分,以放置钱包等误认为是以太坊公链。 2=Morden (disused), 3=Ropsten, 4=Rinkeby,默认为1。
port 30303 P2P网络监听端口,默认30303。
fast 这个命令是 Geth1.6.0之前的,只会被改成--syncmode=fast,但该命令继续有效。配置此命令能够快速的同步区块。
cache=1024 程序内置的可用内存,单位MB。默认是16MB(最小值)。可以根据服务器能力配置到56, 512, 1024 (1GB), or 2048 (2GB)。
创建解锁账户
创建账户
personal.newAccount("jacky")
personal.newAccount("bill")
解锁账户
personal.unlockAccount(eth.accounts[1],"jacky");
true
personal.unlockAccount(eth.accounts[2],"bill");
true
挖矿
开始挖矿
miner.start(1) 一个线程挖矿
停止挖矿
miner.stop()
普通转账
eth.sendTransaction({from: '发送者', to: '接受者', value: web3.toWei(1, "ether")})
可能会遇到lock的情况,那么把默认账号解锁
personal.unlockAccount("账号", "密码", 300)
常用命令:
查看账户:eth.accounts
查看余额:web3.fromWei(eth.getBalance(账号), "ether")
部署合约
http://remix.ethereum.org 在这里左边编辑代码:
pragma solidity ^0.4.21;
contract hello {
string greeting;
function hello(string _greeting) public {
greeting = _greeting;
}
function say() constant public returns (string) {
return greeting; }
}
右边Details生成部署代码,对话框弹出,选择WEB3DEPLOY-拷贝,粘贴到本地文本编辑器进行修改。
var _greeting = "hello ethereum" ;
var helloContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var hello = helloContract.new(
_greeting,
{
from: web3.eth.accounts[2],
data: '0x608060405234801561001057600080fd5b506040516102a83803806102a8833981018060405281019080805182019291905050508060009080519060200190610049929190610050565b50506100f5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009157805160ff19168380011785556100bf565b828001600101855582156100bf579182015b828111156100be5782518255916020019190600101906100a3565b5b5090506100cc91906100d0565b5090565b6100f291905b808211156100ee5760008160009055506001016100d6565b5090565b90565b6101a4806101046000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063954ab4b214610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561016e5780601f106101435761010080835404028352916020019161016e565b820191906000526020600020905b81548152906001019060200180831161015157829003601f168201915b50505050509050905600a165627a7a723058206b801e5b597ecc38167442c7a44a761b128cd92cf19d6a153f7c0a2caab455ba0029',
gas: '1700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
修改后部署到本地以太坊环境。
没有报错的情况下,说明合约部署完成,那么在console控制台中:
hello.say()
输出:hello ethereum
如图: