天天看點

Quorum區塊鍊開發入門

title: Quorum企業以太坊環境搭建教程

date: 2019-6-7 11:39:30

categories:

  • 以太坊

    tags:

  • 企業以太坊
  • Quorum

Quorum是一個許可制的以太坊聯盟區塊鍊實作,包含了金融巨頭JP摩根開發的一個GETH分支版本,

可以在節點之間實作私有和快速的交易。Quorum為保證隐私對節點之間的私有交易進行了專門的設計,

它使用Raft和Istanbul算法實作共識,使用Tessara和Constellation實作節點資料的加密和共享。

在Quorum網絡中交易不需要付費,交易的驗證是由投票共識算法完成的。總體上來講Quorum

類似于以太坊,隻是它更關注的企業環境下的交易隐私性與可控性,是以每個節點都需要Quorum

網管生成的密鑰對。

學習Quorum區塊鍊的最好的辦法,就是運作官方提供的7節點示例。雖然有多種方法來搭建7個

節點,我還是建議使用docker,因為這應該是最簡單的辦法。下面我使用Google雲的Ubuntu 18.04。

如果你在本地機器或AWS上有ubuntu,也是一樣的。請先确認docker和docker-compose已經

安裝就緒。

在下面的示範中,我們要搭建7個Quorum節點,然後考察節點之間的私有交易是如何運作的。

1、搭建節點

運作下面的指令來搭建全部7個節點:

git clone https://github.com/jpmorganchase/quorum-examples.git
cd quorum-examples
QUORUM_CONSENSUS=raft docker-compose up -d           

預設情況下,使用Tessera交易管理器和Istanbul BTF共識來搭建Quorum網絡。是以為了

修改為Raft共識算法,我們設定環境變量

QUORUM_CONSENSUS=raft

,然後啟動7個節點

的背景運作。

你可以運作

docker ps

來檢視每個容器的運作狀态以及其ID。需要稍等一會兒以便

容器啟動就緒。

2、部署智能合約

如果要快速掌握以太坊區塊鍊開發,推薦彙智網的線上互動課程: java以太坊開發詳解 | python以太坊開發詳解
php以太坊開發詳解 C#以太坊開發詳解
以太坊智能合約與DApp開發入門
以太坊電商DApp實戰 ERC721以太坊通證明戰

要在節點上部署智能合約,我們需要運作下面的指令進入該節點的geth控制台:

docker exec -it quorum-examples_node1_1 geth attach /qdata/dd/geth.ipc            

指令中的

quorum-examples_node1_1

是節點1的容器ID。上面的指令進入節點1的geth控制台,

現在我們可以在控制台中進行操作。

下面我們要運作部署合約的javascript腳本。如果你檢視示例代碼目錄,可以看到在

quorum-examples/examples/7nodes目錄下有

private-contract.js

simplestorage.sol

檔案。

在geth控制台運作:

> loadScript('/examples/private-contract.js')           

指令執行需要稍等一會兒。一旦部署成功,上面的指令将傳回合約位址,記得拷貝下來

或者抄到紙上。上述腳本在節點1上部署了一個簡單的狀态值為42的存儲合約,交易是節點1

和節點7之間私有的,這意味着其他節點将看不到這個狀态值。

要驗證這一點,我們可以開啟節點2的geth終端,使用ABI和合約位址建立合約執行個體:

> var abi=<Paste ABI here>;
> var address="<paste Contract Address here>";
> var contract=eth.contract(abi).at(address);

>contract.get() //calling get() method
0           

果然。

現在進入節點7的geth終端,同樣使用ABI和合約位址建立合約執行個體,然後嘗試讀取狀态值:

>contract.get()
42           

和預期一樣。

3、發送私有交易

現在我們嘗試在節點7和其他任選節點之間建立一個新的私有交易,調用合約的

set()

方法來修改狀态值。這需要使用節點的公鑰,可以在

quorum-examples/examples/7nodes/keys/

目錄下找到全部7個節點的對應公鑰。

contract.set(4,{from:eth.coinbase,privateFor:["<your preferred node public key>"]});           

上面的腳本将設定合約狀态值為4,并且僅對指定的節點保持可見。你可以打開這些指定節點

的geth終端檢視合約狀态值,你看到的應該是4。

原文:

Quorum企業以太坊開發環境搭建

繼續閱讀