以太坊學習筆記-從環境搭建到hello ethereum

來源:互聯網
上載者:User

以太坊入門學習筆記

原文發佈於:區塊鏈項目導航:

首先預設安裝完成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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.