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