磨链(mochain)社区分享我爱编程

以太坊学习笔记-从环境搭建到hello ethereum

2018-06-19  本文已影响16人  磨链社区

以太坊入门学习笔记

原文发布于:区块链项目导航

首先默认安装完成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

如图: 

上一篇下一篇

猜你喜欢

热点阅读