由于以太坊又慢又貴的POW共識(盡管如此,以太坊依舊是最受歡迎的DApp平臺),催生了各種以太坊側鏈的方案用來減少以太主網的擁塞,前面我們介紹了Loom SDK, 這篇博客介紹下POA Network以及xDai。如果大家想穩定的數字貨幣做一些智能合約應用,在Libra[1]還沒有上線之前,也許你可以嘗試一下xDai。
什么是POA 網絡
POA 網絡定位于以太坊的側鏈(兼容以太坊協議),它使用一個全新的POA的共識機制。
備注:POA項目官方現在更愿意把POA作為自治證明共識(Proof of Autonomy)的縮寫,而不是使用權威證明(Proof of Authority)
POA共識是一種更直接有效的POS共識形式,它的驗證者必須經過身份驗證(貌似還會簽署法律文件),在POS上通常是需要獲得足夠的選票(代幣)來提高作惡成本,而POA則是靠驗證者的信譽來做擔保,作為一個二層網絡,通常只有較小額的交易,追求性能而犧牲一些網絡安全性可以理解,這也是二層網絡通常的做法。
POA網絡啟動時有12個驗證者(現在有20多個),這些驗證者通過智能合約來管理,智能合約也加入了治理模式,驗證者可以投票添加或刪除驗證者甚至是更新治理合約。驗證者驗證者出塊的幾率均等,每產生一個塊可以過得一個POA幣(側鏈的原生代幣)以及所有的手續費。
PoA網絡平均每5秒出一個塊, 區塊大小是800萬Gas,Gas price 固定為1GWei(1POA=1,000,000,000Gwei), 因此可以推算PoA網絡大概比以太坊快3倍,而運行DApp的gas費用則大大降低,當前一個POA的價格不到0.2元,歷史最高時也只有6元,不像一個以太幾千上萬的價格。
PoA網絡出塊信息可以在blockscout瀏覽器[2] 查看詳情, 值得提一下,BlockScout 是POA Network的另一個貢獻,這是一個功能強大的開源的區塊瀏覽器,支持所有以太坊協議的網絡。Github庫[3]
POA 網絡的主網稱為POA Core,他還有一個測試網絡為POA Sokol。其實以太坊主網也有一個POA共識的測試網叫 Kovan 。
POA的橋接技術(TokenBridge)
POA最大的價值在于其橋接技術,TokenBridge是一個互操作性協議,它使得以太坊網絡和POA網絡之間可以相互通信(交互)。
備注:TokenBridge 之前為 POA Bridge, 因此很多文檔里沒有及時跟隨更改, TokenBridge代碼庫[4]。
目前橋接技術已經完成的功能有:
1.允許用戶把自己在POA網絡的原生代幣 POA 轉移到以太坊網絡,在以太坊網絡生成對應的POA20代幣,POA20是以太坊網絡的ERC 20代幣。
2.允許把以太坊網絡的ERC 20代幣轉移到POA 網絡(或其他鏈),這些轉移并不會重復產生新的幣,它會在接收鏈創建對應的幣而在發起鏈銷毀對應的幣。
3.不同網絡之間的ERC20代幣相互轉移,有了這個技術我們就可以把昂貴的鏈上交易轉移價格低廉的側鏈,讓區塊鏈落地有了更多的可能。
其實,POA橋接技術不僅僅可以用于以太坊網絡和POA網絡相互通信,也有其他的項目使用TokenBridge來進行token的轉移,如:Sentinel Chain 和 Virtue Poker。
穩定幣鏈 xDai Chain
最近Libra關注度太高,很多朋友知道它是Facebook發行的一個穩定幣鏈,穩定幣鏈要排個輩分的話,Libra應該叫xDai一聲大哥。
DAI是以太坊上通過抵押數字資產發行的穩定幣,一個Dai=1美元, 不熟悉的同學可以看我一篇文章理解去中心化穩定幣 DAI[5], xDai Chain是DAI背后的團隊MakerDAO和POA Network合作推出的一條基于穩定幣的POA共識鏈,xDai Chain 也是POA 共識機制及TokenBridge相結合的最好的一個例子。
xDai鏈和POA Core一樣是以太坊網絡上的側鏈,XDAI是側鏈上原生代幣(用來支付鏈上交易的Gas),DAI是對應在以太坊的ERC20代幣,注意,xDai鏈是不支持挖礦的,而是必須通過把Dai通過TokenBridge轉移到xDai鏈產生XDAI幣。其他的特性和POA Core一樣, 如5秒的塊生成時間,每筆交易的gas成本為1Gwei,這樣在xDai鏈上的交易成本就非常低。
xDai解決了阻礙數字貨幣用于日常交易的兩個主要因素:價格波動大及手續費高,把一些應用部署到xDai鏈上來會是個不錯的選擇。 后面我們會有文章介紹。
xDai網絡出塊信息可以在blockscout瀏覽器[6] 查看詳情。
在POA 網絡上部署應用
我之前有一個教程在以太坊網絡上開發了一個記事本應用[7], 這個應用每添加一條記錄會消耗不少的gas費用,現在我們把這個記事本應用部署到 POA 網絡上。
利用水管獲取POA幣
把應用部署到 POA 網絡上,需要要消耗一點POA幣,我們得先想方法獲得一些POA,這里我們我使用POA測試網絡POA Sokol提供的水管 https://faucet-sokol.herokuapp.com 獲取(如果要使用POA主網則需要去交易所購買POA),進入頁面之后,可以看到如下界面:
注意一下:Sokol水管為了防止被程序擼羊毛,加入了Google人機身份驗證,所以這個頁面需要大家翻墻訪問,輸入自己的以太坊賬號,點擊“REQUEST 0.5 SPOA”,就可以獲取到POA Sokol測試的代幣 0.5 SPOA。
### Metamask 連接到POA網絡
接下來在 Metamask 查看下賬號的 SPOA 余額,看看是否到賬,由于Metamask默認網絡里面沒有POA網絡,所有我們通過“CUSTOM RPC”添加一個網絡,在“New RPC URL”里輸入https://sokol.poa.network ,如下圖:
查了使用Metamask錢包插件之外,還可以使用POA基于MetaMask定制的Nifty 錢包[8],Nifty默認就支持POA的各個網絡,Nifty 錢包如下圖:
備注:查看下賬號也可以在sokol的blockscout瀏覽器 [9]查看,Metamask 連接POA網絡也是為后面使用DApp做準備。
使用 Truffle 部署合約到POA網絡
Truffle 的基本使用,以及開發這個記事本DApp,本文就不再重復介紹,參考前面的文章:Truffle教程[10], 用 Truffle 開發一個鏈上記事本[11],這里主要介紹如果Truffle如何了連接到POA網絡。
先把DApp代碼克隆到本地,大家可訂閱跨鏈技術小專欄[12]獲取源代碼。
truffle配置加入POA網絡
然后打開truffle-config.js 文件,加入一個sokol網絡, 方法如下:
module.exports = {
networks: {
。..
sokol: {
provider: function() {
return new HDWalletProvider(mnemonic, “https://sokol.poa.network”)
},
network_id: 77,
gasPrice: 1000000000
},
。..
上面 mnemonic 處大家用自己的助記詞代替。
部署合約
然后使用命令truffle migrate --network sokol 進行部署:
》 truffle migrate --network sokol
。..
2_deploy_contract.js
====================
Deploying ‘NoteContract’
------------------------
》 transaction hash: 0x48dbba680f3f227b0e6aba42ecf467bf4xlb1324e0d765dcd
》 Blocks: 2 Seconds: 9
》 contract address: 0xb89ccfF5c3D4A15F69xLB9D0a9C3ce4a87047a6a
》 block number: 9867109
》 block timestamp: 1563892140
》 account: 0x1a197940bd151xlb53aF8eD04996A880a251D454
》 balance: 0.999159377
》 gas used: 537207
》 gas price: 1 gwei
》 value sent: 0 ETH
》 total cost: 0.000537207 ETH
》 Saving migration to chain.
》 Saving artifacts
-------------------------------------
》 Total cost: 0.000537207 ETH
Summary
=======
》 Total deployments: 2
》 Final cost: 0.0007986 ETH
#### 啟動DAPP應用
npm run dev 啟動DAPP服務, 在瀏覽起輸入地址:http://localhost:3000 運行DApp,因為剛剛MetaMask已經連接好了POA 的測試網絡Sokoa, 現在可以直接和DApp進行交付。
在穩定幣鏈xDai網絡上部署應用
在xDai網絡上部署和前面的POA測試網絡步驟完全一起,只需要把上面 RPC URL更改為 https://dai.poa.network 下面是一個各個網絡對應RPC URL 及網絡ID的表格:
評論
查看更多