以太坊学习笔记-从环境搭建到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

如图: 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • 概要 由于上一次 Ubuntu 12.04 LTS 安装 ethereum 遇到了好多问题,所以系统直接升级到了...
    Daemon_Shell阅读 3,105评论 1 2
  • 本文是对以太坊文档 Ethereum Frontier Guide 和 Ethereum Homestead 的整...
    趁风卷阅读 9,512评论 0 16
  • 最近天冷,不少地区还时不时的各种大风XX级预警。北风那个吹啊……吹的后台不少同学都纷纷求问:寒冷的冬天,户外运动怎...
    硬派健身阅读 853评论 1 3
  • 突然想失忆,忘记一切,从新开始面对所有的人和事,在这个复杂的环境中,有一颗简单安静的心,也是最快乐幸福的,但愿如此甚好。
    紫_67ae阅读 237评论 0 1
  • 经文: “我是耶和华你祖亚伯拉罕的神,……我要将你现在所躺卧之地赐给你和你的后裔”(创 28:13)。 雅各在逃难...
    术兵阅读 155评论 0 1