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