1. 程式人生 > >Geth以太坊搭建私有鏈

Geth以太坊搭建私有鏈

Truffle
用來本地編譯、部署智慧合約的工具,屬於Solidity的開發框架。

Testrpc
在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,當你的合約在testrpc中測試通過後,再可以部署到geth中去。

Geth
全稱 go-ethereum 目前使用最廣泛的以太坊客戶端,使用go語言開發,可以使用geth搭建以太坊私有網路、挖礦、管理帳號、部署智慧合約等。本文介紹使用geth來搭建本地私有網路。

1、安裝

https://ethereum.github.io/go-ethereum/install/#install-on-ubuntu-via-ppas

本機在macOS系統中進行安裝:

brew tap ethereum/ethereum
brew install ethereum

安裝完成後,在命令列輸入

geth --help //能成功顯示輸出幫助,則表示已經成功安裝

2、搭建私有鏈

一、準備創世區塊配置檔案
以太坊支援自定義創世區塊,要執行私有鏈,我們就需要定義自己的創世區塊,創世區塊資訊寫在一個json格式的配置檔案中。

{
  "config": {
        "chainId": 10, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block
": 0 }
, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }

二、初始化:寫入創世區塊

準備好創世區塊配置檔案後,需要將配置檔案寫入區塊鏈中。
建立目錄:privateChain和privateChain/data0
進入privateChain,執行初始化命令:

 geth --datadir data0 init genesis.json

看到以下輸出,說明初始化成功

WARN [03-12|16:03:09] No etherbase set and no accounts found as default
INFO [03-12|16:03:09] Allocated cache and file handles         database=/Users/hiracer/Documents/Learn/ethereum/privateChain/data0/geth/chaindata cache=16 handles=16
INFO [03-12|16:03:09] Writing custom genesis block
INFO [03-12|16:03:09] Successfully wrote genesis state         database=chaindata                                                                 hash=5e1fc7…d790e0
INFO [03-12|16:03:09] Allocated cache and file handles         database=/Users/hiracer/Documents/Learn/ethereum/privateChain/data0/geth/lightchaindata cache=16 handles=16
INFO [03-12|16:03:09] Writing custom genesis block
INFO [03-12|16:03:09] Successfully wrote genesis state         database=lightchaindata                                                                 hash=5e1fc7…d790e0

初始化成功後,會在資料目錄data0中生成geth和keystore兩個資料夾
其中geth/chaindata目錄中存放的是區塊資料,keystore存放的是賬戶資料

三、啟動私有鏈節點
在命令列中輸入以下命令啟動節點:

geth --datadir data0 --networkid 1108 console

上述主題命令是geth console,表示啟動節點並進入互動式控制檯, –networkid 1108表示這個私有鏈的網路id為1108,網路id在連線到其他節點的時候會用到,以太坊公網的網路id是1,為了不與公有鏈網路衝突,執行私有鏈節點的時候要指定自己的網路id。

Welcome to the Geth JavaScript console!

instance: Geth/v1.7.3-stable/darwin-amd64/go1.9.3
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

這是一個互動式的Javascript執行環境,在這裡面可以執行Javascript程式碼,其中>是命令提示符。在這個環境裡也內建了一些用來操作以太坊的Javascript物件,可以直接使用這些物件。這些物件主要包括:

eth:包含一些跟操作區塊鏈相關的方法
net:包含以下檢視p2p網路狀態的方法
admin:包含一些與管理節點相關的方法
miner:包含啟動&停止挖礦的一些方法
personal:主要包含一些管理賬戶的方法
txpool:包含一些檢視交易記憶體池的方法
web3:包含了以上物件,還包含一些單位換算的方法

3、geth console使用

進入以太坊Javascript Console後,就可以使用裡面的內建物件做一些操作,這些內建物件提供的功能很豐富,比如檢視區塊和交易、建立賬戶、挖礦、傳送交易、部署智慧合約等。

一、建立賬戶
前面只是搭建了私有鏈,並沒有自己的賬戶,可以在js console中輸入eth.accounts來驗證:

> eth.accounts
[]

接下來使用personal物件來建立一個賬戶:

> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2"

賬戶預設會儲存在資料目錄的keystore資料夾中。檢視目錄結構,發現data0/keystore中多了一個檔案,這個檔案就對應剛才建立的賬戶,這是json格式的文字檔案,可以開啟檢視,裡面存的是私鑰經過密碼加密後的資訊。

二、檢視賬戶餘額
eth物件提供了檢視賬戶餘額的方法:

> eth.getBalance(eth.accounts[0])
0
> eth.getBalance(eth.accounts[1])
0

也可以直接使用賬戶地址檢視:

> eth.getBalance('0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2')
0

三、啟動/停止挖礦
通過miner.start()來啟動挖礦:

> miner.start(2)
INFO [03-13|11:29:08] Updated mining threads                   threads=2
INFO [03-13|11:29:08] Transaction pool price threshold updated price=18000000000
INFO [03-13|11:29:08] Starting mining operation
null
> INFO [03-13|11:29:08] Commit new mining work                   number=1 txs=0 uncles=0 elapsed=148.187µs

其中start的引數表示挖礦使用的執行緒數。第一次啟動挖礦會先生成挖礦所需的DAG檔案,這個過程有點慢,等進度達到100%後,就會開始挖礦,此時螢幕會被挖礦資訊刷屏。

如果想停止挖礦,在js console中輸入miner.stop():

> miner.stop()

本地測試過程中,發現miner.start()之後,一直沒有進行挖礦,翻閱部分資料說是,需要傳送一筆交易才能觸發挖礦。

出現此問題的原因在於geth版本更新之後,–dev模式下新增了一個引數項:

--dev               Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled
--dev.period value  Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)

我們先看一下上面的兩個引數,–dev是我們常用的引數,之前版本中我們只用使用–dev然後執行miner.start()就可以挖礦,但是在後面的版本中,當我們會發現只有傳送交易了才會挖一個塊。

引起此問題的原因就是新增了–dev.period value配置項。此配置預設值為0,也就是說只有有pending中的交易才會挖礦。

明白了這個引數的含義之後,解決問題就很簡答了,之前的–dev引數依舊使用,然後再在後面新增–dev.period 1,注意,引數值為1,不是預設的0。

再重新啟動節點,然後執行挖礦,先不管返回是否是null,執行之後,無論檢視日誌或執行eth.blockNumber都會發現塊在不停的增高。

挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做coinbase,預設情況下coinbase是本地賬戶中的第一個賬戶:

> eth.coinbase
"0x0416f04c403099184689990674f5b4259dc46bd8"

現在的coinbase是賬戶0,要想使挖礦獎勵進入其他賬戶,通過miner.setEtherbase()將其他賬戶設定成coinbase即可:

> miner.setEtherbase(eth.accounts[1])
true
> eth.coinbase
"0xb89bf2a212484ef9f1bd09efcd57cf37dbb1e52f"

挖到礦以後,賬戶裡0裡面應該就有餘額了:

> eth.getBalance(eth.accounts[0])
150000000000000000000

getBalance()返回值的單位是wei,wei是以太幣的最小單位,1個以太幣=10的18次方個wei。要檢視有多少個以太幣,可以用web3.fromWei()將返回值換算成以太幣:

> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
150

四、傳送交易

目前賬戶1的餘額還是0:

> user1=eth.accounts[1]
"0x4f2e33670d20c57fe440846c46f03cc4816e5815"
> eth.getBalance(user1)
0

傳送一筆交易,從user0轉移5個以太幣到user1

> user0=eth.accounts[0]
"0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2"
> amount = web3.toWei(5,'ether')
"5000000000000000000"
> eth.sendTransaction({from:user0,to:user1,value:amount})
Error: authentication needed: password or unlock
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at <anonymous>:1:1

發現會報錯,原因是賬戶每隔一段時間就會被鎖住,要傳送交易,必須先解鎖賬戶,由於我們要從賬戶0傳送交易,所以要解鎖賬戶0:

> personal.unlockAccount(user0)
Unlock account 0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2
Passphrase:
true

然後再發送交易:

> eth.sendTransaction({from:user0,to:user1,value:amount})
INFO [03-13|13:52:35] Submitted transaction                    fullhash=0xb36f58e4e44f923de4ca9503d5654a2991ad14189879c03a55579c2c8c92a976 recipient=0x4F2E33670d20c57FE440846c46f03cC4816E5815
"0xb36f58e4e44f923de4ca9503d5654a2991ad14189879c03a55579c2c8c92a976"

此時交易已經提交到區塊鏈,返回了交易的hash,但還未被處理,這可以通過檢視txpool來驗證:

> txpool.status
{
  pending: 1,
  queued: 0
}

pengding表示已經提交但還未被處理的交易。
要使交易被處理,必須要挖礦。這裡我們啟動挖礦,然後等待挖到一個區塊之後就停止挖礦:

> miner.start(1);admin.sleepBlocks(1);miner.stop();

當miner.stop()返回true後,txpool中pending的交易數量應該為0了,說明交易已經被處理了:

> txpool.status
{
  pending: 0,
  queued: 0
}

此時,交易已經生效,賬戶一應該已經收到了5個以太幣了:

> web3.fromWei(eth.getBalance(user1),'ether')
5

五、檢視交易和區塊
檢視當前區塊總數:

> eth.blockNumber
31

通過交易hash檢視交易

> eth.getTransaction("0xb36f58e4e44f923de4ca9503d5654a2991ad14189879c03a55579c2c8c92a976")
{
  blockHash: "0x92d70c7673ea8083f69a37b6d4bf69799dcbd9fa56fe17629ba2553c1a50b0c2",
  blockNumber: 31,
  from: "0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2",
  gas: 90000,
  gasPrice: 18000000000,
  hash: "0xb36f58e4e44f923de4ca9503d5654a2991ad14189879c03a55579c2c8c92a976",
  input: "0x",
  nonce: 0,
  r: "0x694540553d29725cab204cd511983de5437c28ad691a9633a2fda38394a4e2ec",
  s: "0x1960d4a3e849b7e1d869672ae57f396703087565c537ef4bd5d9a0fd88cd7e56",
  to: "0x4f2e33670d20c57fe440846c46f03cc4816e5815",
  transactionIndex: 0,
  v: "0x38",
  value: 5000000000000000000
}

通過區塊號檢視區塊:

> eth.getBlock(23)
{
  difficulty: 132416,
  extraData: "0xd883010703846765746887676f312e392e338664617277696e",
  gasLimit: 3212883,
  gasUsed: 0,
  hash: "0xf7d601b8f3403747fb695c7484cc6f8be363d96e25071bfc63bee4eb30f202b7",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2",
  mixHash: "0x2a7fa527f2c97ec2869b75bebb663384df29a0b1e9c2bba0aedd24f2870e82a2",
  nonce: "0x181678361a1e7007",
  number: 23,
  parentHash: "0xd7c668fe589f3c882640dadb64866625af313c3871022ee70c88614fa97f31e4",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 536,
  stateRoot: "0xc32b875f230c79adfd35bbe333b1d31eca4264f56600fdd5f4c1d4b7a1623062",
  timestamp: 1520912662,
  totalDifficulty: 3160512,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

4、建立私有鏈叢集

1、啟動第一個節點

geth --datadir data0 --networkid 1108 console

2、獲取節點例項的encode url:

> admin.nodeInfo.enode
"enode://6b5d0336c25f49ae871fa8c4b35368bbb45090f12da33efa3038aa79ae9561c5d[email protected][::]:30303?discport=0"

3、再開啟一個終端,初始化第二個節點:

geth --datadir data1 --networkid 1108 init genesis.json
geth --datadir data1 --networkid 1108 --port 30304 --bootnodes "enode://c1f6afa8c620b842b6ff36b9321ec2f7dd6a08037a31ee093e9acc4c5a13bcb93[email protected]172.16.70.76:30303" console

> personal.newAccount("111")

上面的命令中,–bootndoes是設定當前節點啟動後,直接通過設定–bootndoes的值來連結第一個節點,–bootnoedes 的值可以通過在第一個節的命令列中,輸入admin.nodeInfo.enode命令打印出來,需要注意的是需要把@[::]換成實際電腦的IP地址
也可以不設定 –bootnodes, 直接啟動,啟動後進入命令列, 通過命令admin.addPeer(enodeUrlOfFirst Instance)把它作為一個peer新增進來.

為了確認連線成功,第二個節點輸入:

> admin.nodeInfo
{
  enode: "enode://705569b7356248896e755e50058be4be2882fe9daeab38a7e0d9739ffff7d93fd[email protected][::]:30304",
  id: "705569b7356248896e755e50058be4be2882fe9daeab38a7e0d9739ffff7d93fd9317495f2d515842fddc4de590fa203abbd5b36544313b79ec6b15abe069391",
  ip: "::",
  listenAddr: "[::]:30304",
  name: "Geth/v1.7.3-stable/darwin-amd64/go1.9.3",
  ports: {
    discovery: 30304,
    listener: 30304
  },
  protocols: {
    eth: {
      difficulty: 4482432,
      genesis: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
      head: "0x01ffb031dbfb969b97016aa656d5e51f24d00c66376feb1bf47441e49a011582",
      network: 1108
    }
  }
}

第一個節點輸入:

> net.peerCount
1
> admin.peers
[{
    caps: ["eth/63"],
    id: "705569b7356248896e755e50058be4be2882fe9daeab38a7e0d9739ffff7d93fd9317495f2d515842fddc4de590fa203abbd5b36544313b79ec6b15abe069391",
    name: "Geth/v1.7.3-stable/darwin-amd64/go1.9.3",
    network: {
      localAddress: "192.168.0.164:30303",
      remoteAddress: "192.168.0.164:60307"
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
        version: 63
      }
    }
}]

從得到的結果可以看出,第一個節點有1個peer連結, 連結的node id為:
“705569b7356248896e755e50058be4be2882fe9daeab38a7e0d9739ffff7d93fd9317495f2d515842fddc4de590fa203abbd5b36544313b79ec6b15abe069391”
這個id,正好就是第二個節點的id.

3、連線成功後,使用第一個節點挖礦的賬戶,向第二個節點賬戶傳送以太幣

先檢視第二個節點賬戶資訊:

> user0 = eth.accounts[0]
"0x47f411dda34b1948ea52b9c002ae208e59309971"
> eth.getBalance(user0)
0
> eth.blockNumber
33

在第一個節點命令列中,執行下面操作:


> personal.unlockAccount(user0)
Unlock account 0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2
Passphrase:
true
> eth.sendTransaction({from:user0,to:"0x47f411dda34b1948ea52b9c002ae208e59309971",value:web3.toWei(1,"ether")})
INFO [03-15|10:26:33] Submitted transaction                    fullhash=0xb4ac38d07a1399cf92ec0d19c6c494b068246b09adefc98ba6f9650e23116a58 recipient=0x47F411ddA34b1948Ea52B9C002Ae208E59309971
"0xb4ac38d07a1399cf92ec0d19c6c494b068246b09adefc98ba6f9650e23116a58"
> eth.pendingTransactions
[{
    blockHash: null,
    blockNumber: null,
    from: "0x23c93c3f08b7a1c4322b8738c471d4dd40cd29e2",
    gas: 90000,
    gasPrice: 18000000000,
    hash: "0xb4ac38d07a1399cf92ec0d19c6c494b068246b09adefc98ba6f9650e23116a58",
    input: "0x",
    nonce: 2,
    r: "0x37cd321e669372cec0f60708ffda00af765ddd67faa8d0508f4d90490460aaa4",
    s: "0x51e682f348e53d66e22fc58923ad016861f18858ee80cffc240e1a7cd95fdf4",
    to: "0x47f411dda34b1948ea52b9c002ae208e59309971",
    transactionIndex: 0,
    v: "0x38",
    value: 1000000000000000000
}]

eth.sendTransaction就是執行傳送以太幣的操作, 引數from, to分別是傳送賬戶和接收賬戶, web3.toWei(1, “ether”)是將1單位”ether”轉換為相應的”Wei”數量.

執行挖礦

再在第二個節點的命令列輸入:

> eth.getBalance(eth.accounts[0])
1000000000000000000

相關推薦

Geth搭建私有

Truffle 用來本地編譯、部署智慧合約的工具,屬於Solidity的開發框架。 Testrpc 在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,當你的合約在testrpc中測試通過後,再可以部署到geth中去。 Geth 全稱

-windows-私有-搭建(非源碼)

消耗cpu log 由於 復制 () diff ror 文件 道理 初 接觸以太坊,只安裝,不講道理: 1.win10系統,64位 2.以太坊錢包 3.以太坊geth客戶端 geth 和 錢包可以到ethfans.org的資料庫裏下載,那裏提供國內鏡像和官網地址。 錢包工具

基於私有環境搭建介紹

本文是基於virtalbox的ubuntu1804的虛擬機器環境,配置是1核2GB記憶體(建議記憶體越多越好)。 安裝geth apt-get install software-properties-common add-apt-repository -y ppa:ethereum/et

(ETH)私有搭建指南

前期準備 Git sudo yum install -y git Go Geth git clone https://github.com/ethereum/go-ethereum cd go-ethereum/ make geth #測試是否安裝正確

本地私有開發環境搭建

ethereum-bootstrap是我建立的一個github專案,目的是幫助剛接觸以太坊的同學快速的搭建起自己的本地開發環境,體驗智慧合約的開發。閱讀本文需要有基本的程式設計知識。專案地址:https://github.com/janx/ethereum-boots

系列-001】基於私有環境搭建-以及搭建過程的問題記錄

本文是基於virtalbox的ubuntu1804(ubuntu-18.04.1-server-amd64,不要使用live-server安裝)的虛擬機器環境,配置是1核2GB記憶體(建議記憶體越多越好)。 本文基於網上的文件,加上自己安裝部署過程遇到的問題,進行了整理。

區塊開發(一)基於私有環境搭建介紹

Window上安裝ubuntu系統搭建私有鏈操作步驟 前提是 geth 已經安裝,可以參考上一節內容講解 Step 1: 建立目錄和genesis.json 在命令列模式建立一個目錄,例如geths ,這裡geths目錄命名任意。 命令:mkdir geths

搭建聯盟詳細教程

urn ror 當前 self rate 詳細 比特幣 日誌 chris 蟲洞社區簽約作者介紹 風逝 區塊鏈 雲旗天下 安裝以太坊geth客戶端 需要先安裝go環境安裝教程 下載以太坊源碼github.com/ethereum/go-ethereum 進入 go-ethe

搭建聯盟教程

Quorum是一種基於以太坊的分散式分類賬協議,具有交易/合同隱私和新的共識機制。 Quorum是go-ethereum的一個分支,並根據go-ethereum釋出進行更新。 go-ethereum的關鍵改進: 隱私 - 仲裁通過公共/私有分離和利用Constellat

私有和聯盟的機會與挑戰》報告

以太坊平臺評估 私有鏈和聯盟鏈的機會與挑戰 作者:Vitalik Buterin  翻譯:萬向區塊鏈實驗室/ChinaLedger 聯盟  排版/校對:區塊鏈鉛筆(ChainB.com) (注:本文屬於學習資料,請勿用於商業用途。轉載請註明作者與出處。)

如何配置PoA私有

NOTE: This chapter is work in progress. TurboEthereum supports Proof-of-Authority (PoA) private chains through the Fluidity core ethereu

私有和測試網的區別

一、概述 我們想要學習一門新技術,那麼一般都是先網上查查相關概念,然後下載下來demo進行測試,本地跑通之後就可以嘗試在專案中使用。那麼學習以太坊該如何學習呢? 博主也是一位初學者,這裡和大家一起學習下。 二、以太坊測試網路 TestNet 以太坊的

區塊--構建私有

構建私有鏈 構建私有鏈,其實最大目的還是為了挖礦,所以需要注意,網路埠一定不要選擇和主網一樣的 –networked 1,而是取與1 不同的,這樣就避免了同步環節。 創世區塊位置: 建立多個賬號備用:personal.newAccount(“123456”) 初始化上帝

區塊開發(一)Windows平臺搭建基於的區塊開發環境

引言 Ethereum(以太坊)是一個使開發人員能夠建立和釋出下一代分散式應用的公共區塊鏈平臺。 通過其專用加密貨幣以太幣(Ether)提供去中心化的虛擬機器(稱為“以太虛擬機器”Ethereum Virtual Machine)來處理點對點合約。具體可以訪問

基於的區塊瀏覽器搭建

區塊鏈目前發展很火,有很大發展前景,本文主要是在本地私有鏈搭建成功後,利用web3.js、AngularJS和servlet對搭建的私有鏈上區塊資訊包括地址、區塊資訊、交易資訊等資訊的展示。 效果展示: 相關連結:web3.js api:https://github.c

【區塊】從0開始搭建基於的區塊開發環境

Ethereum(以太坊)是一個使開發人員能夠建立和釋出下一代分散式應用的公共區塊鏈平臺。 通過其專用加密貨幣以太幣(Ether)提供去中心化的虛擬機器(稱為“以太虛擬機器”Ethereum Virtual Machine)來處理點對點合約。本文從0開始搭建了以太坊的開發環境,猶如當年初學其他語言一樣,這是我

F3D系統開發Fomo3D區塊模式

inno 定制 dap 擁有 style 獎勵 開發 最終 理論 Fomo3D(F3D)以太坊ETH底層技術系統開發空氣-陳洋1 5 0 1*3 1 5 1*7 4 0電T微。現代經濟體系正在朝著分布式、點對點、網絡化的結構進行演化。分布式賬本技術吸收了現代密碼學、安全通訊

EOS和那個區塊平臺更好?

擔憂 strong acc 中控 結束 ethereum web 都在 另一個 顯然,你已經聽說過兩個最受歡迎的智能合約區塊鏈,但想知道EOS與以太坊之中哪個更好?或許你想比較一下兩種技術?好吧,你來對了地方,因為我要告訴你你需要知道的一切! 在這個EOS vs Ether

詳解17000tps的snark側方案

此前以太坊創始人Vitalik根據ZK-SNARKs技術提出的500tps擴容方案,引發了社群對區塊鏈擴容的更多思考,而此後由以太坊研究者Barry Whitehat,Alex Gluchowski,Harry R,Yondon Fu和Philippe Castonguay共同提出的snar

的私上釋出智慧合約

如何搭建以太坊私鏈請參考: https://blog.csdn.net/Ssuper_X/article/details/83272170 #這是一個簡單的乘法例子 pragma solidity ^0.4.2; contract test { fu