Conflux與以太坊合約開發工具區別

Conflux中文社群發表於2022-01-13

概念的區別:Epoch & storageLimit

以太坊區塊鏈中只有主鏈上的交易是有效的,所以可以認為以太坊區塊鏈賬本是一條單鏈,從前往後每個區塊都有一個編號,叫做區塊號( block number),conflux 開發了一種全新的賬本結構: 樹圖,實現了高吞吐,低延遲。

在樹圖區塊結構中,如果只看父邊他是一個 Tree,如果父邊引用邊都看則是一個 Graph。正是這種結構使得 Conflux 網路可以併發出塊,即多個區塊可以都在某個區塊之後生成。因此在 Conflux 是沒有 block number 的概念。 但為了實現全序,Conflux 通過 GHAST 規則從創世區塊開始,在其所有子區塊中選擇最重子樹 block 為 pivot block,所有的 pivot block 鏈到一塊也形成一條鏈 定義為 pivot chain,如果只看 pivot chain 其跟普通的區塊鏈結構一致,在這條鏈上基於每個 pivot block 定義一個Epoch,因此你可以把 conflux 中的 Epoch 理解為跟 block number 對應的概念,只不過 conflux 中的每個 epoch 中可能會有多個 block。

在現實世界中,傳送轉賬交易需要給銀行付手續費,在比特幣中傳送交易需要給礦工付手續費,在以太坊中同樣如此。具體來講,以太坊網路的交易最終是由礦工 執行的 EVM 執行的,gas 是用來衡量一筆交易執行的工作量(可以理解為工作的工時),交易傳送者,傳送交易時可以指定願意給每個工作量付的價格即 gasPrice。 因此最終一筆交易的手續費為 gas * gasPrice。 在傳送一筆交易時指定的 gas 則是一個限制值,即傳送方最大願意為一筆交易支付 gas 這麼多的工時,如果交易需要的工作量超過 gas,則不會再付錢,交易不會被執行。

在 Dapp 系統中,交易執行除了需要礦工進行計算付出計算資源外,還需要礦工儲存合約的狀態,因此需要付出儲存資源。在 Conflux 系統中傳送交易時,還需要為狀態儲存 抵押一部分費用,因此在 conflux 中傳送交易時會比以太坊多一個 storageLimit 引數,用於設定願意為某筆交易儲存所抵押的費用上限。在合約釋放掉使用的儲存空間之後,抵押的費用 也會得到返還。

開發工具區別

Conflux區塊鏈現有開發工具主要有 Conflux TruffleConflux Studio, 其功能主要對應以太坊使用最廣的開發工具的TruffleRemix

Conflux-Truffle Vs Truffle

Conflux-Truffle 為以 Truffle 為原型改造的服務於conflux區塊鏈的合約開發工具。 詳細瞭解請參看Conflux-Truffle 使用教程。 其與Truffle的區別主要有以下幾點。

1. 名稱

專案名稱npmjs 包名安裝後的命令列程式名稱
Conflux-Truffleconflux-trufflecfxtruffle
Truffletruffletruffle

2. Ganache VS conflux-rust docker

Ganache 為 Truffle 官方提供的用於方便開發智慧合約時快速啟動以太坊私鏈的一個工具。

conflux暫時沒有Ganache對應版本,但conflux提供了conflux-docker,使用方法也很方便,啟動conflux-docker預設也會啟動一個私鏈,分配10個初始賬戶並分配cfx, 且會自動 unlock 這些賬戶。

它們的最大區別是Ganache提供了一個圖形化介面可以檢視私有鏈執行情況,及做一些簡單功能互動。conflux後續會提高使用者體驗相關的功能。

3. subcommand

子命令Truffle是否支援Conflux-Truffle是否支援
build已過時N
compileYY
configYY
consoleYY
createYY
debugYY
deployYY
developYN
execYY
helpYY
initYY
installYY
migrateYY
networksYY
obtainYY
opcodeYY
publishYY
runYY
testYY
unboxYY
versionYY
watchYY

ctxtruffle 除了不支援子命令 cfxtruffle develop外,其餘子命令名稱及使用方式均與trffule一致; 後續版本中會增加該功能。

4. subcommand context

當執行cfxtruffle console/exec/run時,依然可以通過 js-sdk 相關apiconflux 互動,同時也注入了js-conflux-sdkConfluxUtil模組,可以通過 cfxcfxutil 使用。 如下所示

# cfx
cfxtruffle(development)> await cfx.getBalance('0x148A9696F8DCf4d6cB01eC80F1047a3476bA5C56')
cfxtruffle(development)> await cfx.getNextNonce("0xbbd9e9be525ab967e633bcdaeac8bd5723ed4d6b")
# cfxutil
cfxtruffle(development)> let drip = cfxutil.unit.fromCFXToGDrip(0.1)
cfxtruffle(development)> let randomKey = cfxutil.sign.randomPrivateKey()

5. 本地簽名遠端部署

truffle中可以通過設定HDWalletProvider來呼叫本地錢包進行簽名,cfxtruffle只需要在網路配置中設定 privateKeys 欄位即可,該欄位是一個私鑰陣列,當傳送交易或部署合約時會自動從改 privateKeys 列表中選取對應的私鑰進行簽名。示例如下

Truffle設定

// truffle-config.js
testnet: {
    provider: new HDWalletProvider("3f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9580", "http://localhost:7545"),        
    network_id: "*",       
    // 注意:從 portal 獲取的私鑰需要新增 0x 字首,privateKeys 也可以指定單個 key,若配置了私鑰,請注意不要將程式碼上傳到公開程式碼倉儲中。
    // privateKeys: ['your-private-key']  
}

Conflux-Trffle 設定

// truffle-config.js
testnet: {
    host: "test.confluxrpc.org",
    port: 80,            
    network_id: "*",       
    // 注意:從 portal 獲取的私鑰需要新增 0x 字首,privateKeys 也可以指定單個 key,若配置了私鑰,請注意不要將程式碼上傳到公開程式碼倉儲中。
    // privateKeys: ['your-private-key']  
    privateKeys: ['0x3f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9583','0x4f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9581']
}

6. 呼叫rpc時的引數

如前文所示,由於conflux中的共識方式與以太坊不同,增加了epoch及storageLimit的概念,所以在通過rpc與conflux互動時經常需要傳這些引數,具體不同請參見rpc及sdk區別

Conflux Studio VS Remix

Conflux Studio 是一個幫助開發者快速開發 Conflux 智慧合約的整合化開發環境。其與Remix類似提供了圖形介面讓開發者與合約互動。
Remix是基於瀏覽器端的應用程式,而Conflux Studio 是一個獨立的可執行程式,除了程式型別區別外,其功能及使用方式上也有很多區別

功能RemixConflux Studio
編輯合約YY
除錯合約程式碼YN
合約錯誤檢查YN
編譯及部署合約YY 在Project頁面操作,內部實現為呼叫Conflux-Truffle編譯
顯示編譯及部署結果UI(包含 ABI 及 Bytecode)YY 在ABI Storage中檢視合約編譯歷史的ABI,
設定gaslimitYN
部署合約時設定建構函式引數YN
根據 ABI 和地址載入合約例項YN
Tuple傳參YN
支援編譯優化YN
支援自動編譯合約YN
合約互動UIYY 在Contract頁面操作
命令終端YY
在命令終端中與sdk互動命令終端中注入了web3N
連線節點通過設定node url連線提供Network選項卡,可以本地建立節點,也可以選擇testnet和mainnet
建立節點並管理節點YN
內建執行環境JavaScript VMYN
初始賬戶Accounts自動分配,或通過metamask匯入手動根據keystore匯入 或 通過IDE建立
支援外掛安裝YN
記錄交易供replay(包含交易雜湊,交易建立合約的abi)YN
Unit TestYN
匯入專案從本地及其它源匯入專案,如github,gist,ipfs等內建了智慧合約模板, 在 Project 頁面操作
賬戶瀏覽器NY 在Explorer頁面位址列中輸入賬戶地址檢視

相關資料庫:

相關文章