+-
步履不停:OpenAtom XuperChain V3.10新功能一览
首页 专栏 区块链 文章详情
0
头图

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

xuperchain 发布于 3 月 8 日

   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.readthedoc...

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.readthedoc...

XuperChain账户与以太坊账户地址转换

https://xuperchain.readthedoc...

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...

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...

java sdk

https://github.com/xuperchain...

6.BUG修复

3.10版本针对共识、平行链功能以及区块回滚等地方,进行了bug修复。

平行链群组主链增加addChain限制 平行链群组节点消息转发进行群组过滤 未确认交易回滚bug修复

7.后续步骤

请参阅版本说明了解更多信息。如需获取最新消息,敬请阅读 百度XuperChain 公众号(Baidu-XUPER)。如需提供反馈,请在 GitHub上提交问题。谢谢!

**版本说明
**https://github.com/xuperchain...

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

区块链 智能合约
阅读 31 发布于 3 月 8 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
xuperchain

超级链(XuperChain)是百度计划开源的具备强大的网络吞吐力和高并发的通用智能合约处理能力的区块链3.0解决方案。

12 声望
5 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
xuperchain

超级链(XuperChain)是百度计划开源的具备强大的网络吞吐力和高并发的通用智能合约处理能力的区块链3.0解决方案。

12 声望
5 粉丝
关注作者
宣传栏
目录

   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.readthedoc...

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.readthedoc...

XuperChain账户与以太坊账户地址转换

https://xuperchain.readthedoc...

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...

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...

java sdk

https://github.com/xuperchain...

6.BUG修复

3.10版本针对共识、平行链功能以及区块回滚等地方,进行了bug修复。

平行链群组主链增加addChain限制 平行链群组节点消息转发进行群组过滤 未确认交易回滚bug修复

7.后续步骤

请参阅版本说明了解更多信息。如需获取最新消息,敬请阅读 百度XuperChain 公众号(Baidu-XUPER)。如需提供反馈,请在 GitHub上提交问题。谢谢!

**版本说明
**https://github.com/xuperchain...

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