步履不停:OpenAtom XuperChain V3.10新功能一覽

   OpenAtom XuperChain(下文簡稱XuperChain) V3.10正式發佈!爲了響應開源社區的對智能合約的多語言需求,並提高XuperChain的易用性、安全性,這個版本的亮點在於推出以太坊虛擬機(EVM,Ethereum Virtual Machine)、交易Txid生成方案升級、網絡層P2P連接對於TLS和Ipv6的支持,以及其他對性能和穩定性等進行優化和提高。並優化和增加了Go和java語言SDK,方便開發者與XuperChain進行交互。

主要內容:

  • 【合約】智能合約支持EVM虛擬機

  • 【共識】Smr穩定性提升

  • 【Kernel】確定性Txid生成

  • 【p2p】p2pv2支持TLS和Ipv6

  • 【XuperOS】Cli支持有背書的調用

  • 【SDK】Go、Java等語言SDK

  • 【羣組管理】平行鏈羣組主鏈增加addChain限制

  • 【p2p】平行鏈羣組節點消息轉發進行羣組過濾

  • 【Bug】未確認交易回滾等bug修復

1.  智能合約引擎支持EVM虛擬機

1.1 XuperChain 與EVM

EVM,是專門用於運行以太坊智能合約的虛擬機,合約可由solidity、viper等語言編寫。以太坊智能合約以及EVM在區塊鏈領域應用極其廣泛,已經成爲區塊鏈智能合約領域的事實標準之一。

得益於XuperChain獨創的XuperBridge的架構設計,將賬本數據、合約交互接口等進行封裝暴露,以適用於不同的合約VM。在版本3.10中,在原有的wasm、native虛擬機的基礎上,又新增了對EVM的支持,極大的方便以太坊的社區開發者,將以太坊Dapp遷移到超級鏈,充分發揮超級鏈高TPS、低手續費等優勢。

在XuperChain上部署、調用solidity合約,請參考solidity合約。

  • solidity合約

    https://xuperchain.readthedocs.io/zh/latest/advanced_usage/create_contracts.html#solidity

1.2 XuperChain與EVM地址的轉換

衆所周知,以太坊的賬戶分爲外部賬戶和內部賬戶,內部賬戶即爲合約。XuperChain的賬戶模型,包含AK(Access Key)、賬號(Account)、合約(Contract)。AK是具體一個address;賬號用來在XuperChain上部署合約,賬號可以綁定一組AK;合約,即爲部署在區塊鏈上的一段可執行字節碼,合約名具有唯一性,由用戶指定。XuperChain的賬戶模型請參閱賬戶模型

針對XuperChain與以太坊賬戶模型的不同,當AK,Account、Contract等存入EVM內部進行合約執行時,需要進行地址格式的轉換。具體的地址轉換規則請查閱超級鏈賬戶與以太坊賬戶地址轉換。

可以通過xchain-cli工具,執行addr-trans命令,進行幾類地址的相互轉換,列舉兩個例子具體如下:

# xchain合約賬戶地址轉evm地址,contract-account表示XuperChain合約賬戶

./xchain-cli evm addr-trans -t x2e -f XC1111111111111113@xuper

result, 3131313231313131313131313131313131313133    contract-account

# evm地址轉xchain合約賬戶,contract-account表示XuperChain合約賬戶

./xchain-cli evm addr-trans -t e2x -f 3131313231313131313131313131313131313133

result, XC1111111111111113@xuper     contract-account

  • 賬戶模型

    https://xuperchain.readthedocs.io/zh/latest/design_documents/permission_model.html

  • XuperChain賬戶與以太坊賬戶地址轉換

    https://xuperchain.readthedocs.io/zh/latest/advanced_usage/create_contracts.html#solidity

2.  確定性txid生成方案優化

之前版本的tx hash的計算方式採用的是go的官方json庫來進行序列化,受限於go自身的語言特性以及json庫的特性,當用戶使用其他語言來實現XuperChain的客戶端或者SDK時,可能會產生不同的序列化結果,即相同的交易,但計算得到的txid不同。具體問題舉例如下:

  • 對空列表有兩種序列化結果,null和[ ]

  • 對[]byte有兩種序列化結果 null和" "

  • ......

go的json庫的特性

  • 結構體的字段順序按照protobuf翻譯成go結構體的字段順序排列

  • 字段的默認值不會出現在json中,如int的0,字符串的“”, 數組的[ ]

  • ......

對比了社區開源區塊鏈解決方案Bitcoin、Ethereum、Fabric等的txid生成方案,XuperChain設計了自身的交易序列化方案,同時兼顧了執行效率、易實現等特點,txid的計算效率提升了近一倍。

確定性txid生成方案,請參閱代碼實現確定性txid生成方案。

  • 確定性txid生成方案

    https://github.com/xuperchain/xuperchain/commit/8787c83dcce75e02b730902cb3eb632094af7b97

3.  p2pv2支持TLS和ipv6

在聯盟鏈場景下,區塊鏈網絡需要支持標準CA,只有頒發證書的節點可以接入區塊鏈網絡。目前,p2pv1網絡已經支持基於CA的TLS證書認證功能,p2pv2僅具備對通信內容加密的功能,在這個版本增加了基於CA的TLS證書認證功能。

同時,這個版本也增加了對ipv6網絡的支持。需要修改如下配置:

  • isIpv6:當前節點中p2p網絡是否使用ipv6(僅對p2pv2有效,對p2pv1無效,p2pv1原本就支持ipv6)

  • 根據節點信息配置 bootNodes、init_proposer_neturl 的 multiaddr 

xchain.yaml文件

p2p:

  module: p2pv2

  port: 47101

  isIpv6: true

  bootNodes:

    - "/ip6/::1/tcp/47101/p2p/QmVcSF4F7rTdsvUJqsik98tXRXMBUqL5DSuBpyYKVhjuG4"

xuper.json文件

"init_proposer_neturl": {

  "1": [

    "/ip6/::1/tcp/47101/p2p/QmVcSF4F7rTdsvUJqsik98tXRXMBUqL5DSuBpyYKVhjuG4",

  ]

}

4.  cli命令行優化之支持有背書的調用

XuperChain開放網絡的合約調用,需要背書節點來提供背書服務,主要包括黃反檢測等。目前開放網絡僅支持通過SDK的方式來進行合約調用,爲了增強cli的易用性,在cli命令行則增加了有背書的合約調用。

需要對cli.yaml文件進行如下配置,isNeedComplianceCheck表示需要背書:

# endorseService Info

# testNet addrs

endorseServiceHost: "39.156.69.83:37100"

complianceCheck:

  # 是否需要進行合規性背書

  isNeedComplianceCheck: true

  # 是否需要支付合規性背書費用

  isNeedComplianceCheckFee: true

  # 合規性背書費用

  complianceCheckEndorseServiceFee: 400

  # 如果通過合規性檢查,簽發認證簽名的地址

complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n

#創建平行鏈所需要的最低費用

minNewChainAmount: "100"

crypto: "xchain"

 

命令行執行增加cliconf字段,用於指定cli.yaml文件讀取配置。示例如下:

// 不需要背書

./xchain-cli account new --desc account.des --fee 1000

// 需要背書

./xchain-cli account new --desc account.des --fee 1000 --cliconfpath conf/cli.yaml

5. SDK組件

爲了方便開發者與XuperChain進行交互,這個版本對之前go sdk進行了功能的擴充,並新增了java sdk。目前已經支持的功能列表如下,其中加紅部分爲新增功能:

  • 普通賬戶的創建、恢復、餘額查詢等

  • 合約賬戶的創建等

  • wasm合約的部署、調用、查詢等

  • solidity合約的部署、調用、查詢等

JavaScript sdk正在緊張的迭代中。

  • go sdk

    https://github.com/xuperchain/xuper-sdk-go

  • java sdk

    https://github.com/xuperchain/xuper-java-sdk

6.BUG修復

3.10版本針對共識、平行鏈功能以及區塊回滾等地方,進行了bug修復。

  • 平行鏈羣組主鏈增加addChain限制

  • 平行鏈羣組節點消息轉發進行羣組過濾

  • 未確認交易回滾bug修復

7.後續步驟

請參閱版本說明了解更多信息。如需獲取最新消息,敬請閱讀 百度XuperChain 公衆號(Baidu-XUPER)。如需提供反饋,請在 GitHub上提交問題。謝謝!

版本說明
https://github.com/xuperchain/xuperchain/releases

GitHub
https://github.com/xuperchain/xuperchain/issues

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章