c++ eos智能合约开发_关于 PlatON 智能合约开发,看这篇就够了!

f934df39a5ec61a96403bb93694a4ec6.gif 548c81a14a5f913fe16e26db59b674ca.png

在上一篇文章《PlatON 支持哪些智能合约?》中,我们介绍了 PlatON 将支持三种类型的智能合约:状态合约无状态合约混合合约。本文将继续介绍开发者基于 PlatON 及其元网络 Alaya 开发和部署智能合约时需要知晓和注意些什么。

本文系此前PlatON联合无涯社区举办了主题为《PlatON智能合约开发》的活动,PlatON 技术副总裁傅志敬详细分享了 PlatON EVM 合约与 WASM 合约开发相关知识与操作及合约开发场景应用

Q:PlatON智能合约支持哪些语言?未来会有新的语言支持吗?

A:PlatON智能合约支持目前支持 C++ 和 Solidity 两种语言,C++ 语言对应的运行在 WASM 虚机上,Solidity 语言对应的运行在 EVM 虚拟机上。

未来在 WASM 虚机上还会支持 Rust、GO、Python 等高级语言。

Q:目前看到 PlatON 上支持 EVM 智能合约, 那么以太坊上现有的智能合约是直接兼容还是需要做一些调整可以部署在 PlatON 上?EVM 智能合约的完整技术栈包含哪些内容?

A:以太坊上现有 Solidity 合约是直接兼容的,如果合约中包含以太币单位和地址的话,需要做简单调整,改为 PlatON 的 LAT 相关单位和地址即可。

并且我们鼓励社区开发一键移植的工具,可以考虑用 Grants 的方式进行激励,欢迎开发者社区的高手贡献一份力量。

EVM 智能合约完整技术栈包含以下内容:

  • 对区块链和虚拟机有一个简单的理解,比如 gas 机制、交易、区块打包和上链流程等;

  • Solidity 语言相关知识,比如 Solidity 语言的语法、对应的类型和接口等;

  • 开发者工具,如:truffle。

Q:当前合约的部署成本的开销是怎么计算的?对 GAS 的开销有哪些建议给开发者?

A:当前合约的部署成本的开销主要还是看合约二进制大小,同时跟合约的参数的大小也有关系。

部署成本是 gas*gasprice

对 GAS 的开销的建议是:

  • 使用正确的类型,如:可以使用 uint 类型的情况下,不要使用 string 类型;

  • 避免使用不必要的代码等;

  • 避免在循环中执行 gas 成本高的操作。如:由于 SLOAD 和 SSTORE 操作码的成本高昂,因为管理storage变量的 gas 成本要远远高于内存变量,所以要避免在循环中操作 storage 变量;

  • 避免循环中的重复进行计算。

另外,我们现在正在与电子科大教授开发合作EVM gas优化项目。

Q:以太坊平台上的合约的安全问题层出不穷, 针对此问题PlatON对开发者有哪些建议?以及PlatON对安全的底层做了哪些工作?

A:关于以太坊平台上的合约的安全问题,我们的建议是:

可以参看我们的安全开发指南、包括从编译器、开发流程、以及怎么避免重入、发送 token、栈深度和权限控制等常见漏洞。

PlatON 对安全的底层做了如下工作:

  • PlatON 底层从 P2P 安全(异形攻击、节点连接数等)、RPC 安全、账户模型、虚拟机,共识安全等多方面做了验证和测试。

  • 同时慢雾进行了两轮安全审计,慢雾链安全审计负责人 Johan 表示:“慢雾安全团队针对 PlatON 的 WASM 虚拟机、EVM 虚拟机、节点激励模型等7个模块进行了新一轮安全审计,并重点审查了在第一轮审计之后修改的代码。据审计报告结果显示,PlatON 以极高的代码质量,确保了已被审计部分不存在任何安全风险。”

  • 我们非常重视安全问题,积极开展相关的工作,比如与慢雾合作漏洞赏金活动、请 Runtime 公司进行形式化验证和跟电子科大合作开发 EVM 安全项目等。

Q:基于 PlatON 开发智能合约在开发实践上有哪些更好的实践操作的建议给开发者?

A:我选 WASM 和 EVM 共性的几个要点简要说一下:

费用合理设置:

当需要在 PlatON 的主网上部署合约时,需要设置一个合理的费用限制

在 PlatON 网络中,默认最高 gas 的限制为 100,800,000,最低为 21,000,过低或者过高都会导致交易失败。在部署大型合约或者运行复杂功能时,可以将 gas 的限制调高。例如: 1,000,000,如果是普通转账则设置为最低值即可。

具体的值需要根据合约的规模及复杂度进行估算,在合约发布前可以调用接口 platon_estimateGas 进行大概估算,避免因不足而导致失败。

避免超时:

在 PlatON 网络上发送交易,没有超时的概念,但是最终会根据所设置的 gas 限制值停止,如果限制值低于合约部署所需要的消耗,则交易发送失败,同时会扣除对应的手续费。手续费的设定不可能无限大,因为在网络中,区块本身有一个最大的 gas 上限,当交易的 GasLimit 超过该值时,交易将无法被接收。

如果是针对已发布的合约执行 call 调用(call 调用指合约逻辑内无状态变更操作),存在 5s 超时的限制,如果在 5s 内合约逻辑没有执行完成,虚拟机会超时强制退出,导致查询失败。

为避免部署合约交易失败,请尝试将大型合约分成较小的块,并根据需要相互引用。为了避免无限循环,请注意常见的陷阱和递归调用。

非法操作处罚:

如果智能合约不是通过标准有效的编译器编译合约或者随意的更改指令码,都会导致操作码无效。此类合约不仅无法部署和执行成功,而且还会产生“GasLimit*GasPrice”的全额惩罚,当次交易的手续费会全部被扣除,这是一个力度很大的惩罚。如果操作者没注意该点,不断重试,那么付出的成本会更高,代价更重。

一般产生无效操作码有以下情况:

  • 对正常已编译出的合约手动更改了指令码;

  • 合约编译器版本与网络锁支持的合约版本不一致;

  • 使用浮点数运算。

在 PlatON 网络中操作合约时,请务必先确认当前网络所支持的智能合约版本,然后选择对应版本的编译器。

常规操作是使用PlatON官方提供的最新的 Truffle/PlatON-CDT 来编译/部署/执行合约,同时在切换到主网操作前,务必在测试网进行有效的验证。

其他还有编码规范、智能合约文件组织结构、WASM 合约特殊的一些 C++ 语言的限制和特性建议我就不在这里展开赘述了,有兴趣的朋友可以去我们的官方文档上面查阅学习,具体地址如下:

EVM

https://devdocs.platon.network/docs/zh-CN/EVM_Smart_Contract/#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5

WASM

https://devdocs.platon.network/docs/zh-CN/WASM_Smart_Contract/#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5

Q:WASM合约开发适合的场景有哪些?对于WASM技术PlatON未来会有什么动作吗?

A:我们在内部测试中对比 EVM 与 WASM 虚拟机的 TPS 可以看到,EVM 在执行业务逻辑比较简单的场景中具备更好表现,这主要原因在于EVM的加载启动简单,WASM 的启动在高级语言层面(C++)进行实现。

当执行的业务逻辑较为简单的情况下,WASM的加载启动在一笔交易的执行时间占比较大。但当业务逻辑复杂一些如测试中的插入排序测试,业务逻辑执行时间占比更高情况,WASM 的优势则体现出来,这归功于 WASM 与高级语言的结合,各个高级语言拥有强大的编译优化能力,对执行效率有极大的帮助。由此测试我们更推荐在业务模型复杂的情况使用 WASM 合约,在执行效率与业务抽象能力上都更具优势。

结论是:WASM 合约对于比较复杂的合约具有更好的性能和更低的 GAS 消耗

另外针对 WASM 我们持续在优化性能和GAS消耗。并且我们后续会在WASM上提供隐私计算的能力。

Q:当前智能合约上适合开发的应用场景会有哪些?

A:当前 PlatON 上的智能合约适合开发的应用场景有:金融,游戏,社交等。

我们后续会在 WASM 上提供隐私计算的能力,并正在以此为基础来建构下一代的数据资产权确认与价值交易的基础设施服务。

另基于 EOS 开发 Horseman GO 这款游戏,已经开始在往 PlatON 上面移植了,敬请期待!

Q:开发者在开发环境下如何使用PlatON的钱包接口?以及用户端是如何方便地使用Dapp访问钱包?

A:我们给开发者提供强大的开发者工具包:

Platon-truffle

https://platon-truffle.readthedocs.io/en/v0.11.1/

Java SDK

https://devdocs.platon.network/docs/zh-CN/Java_SDK/

JS SDK

https://devdocs.platon.network/docs/zh-CN/JS_SDK/

利用对应的 SDK 通过 RPC 接口来使用 PlatON 钱包接口。

目前我们官方提供了一个 ATON 钱包 Dapp,可以方便用户使用钱包:

https://devdocs.platon.network/docs/zh-CN/ATON-user-manual/

加入PlatON云图爱好者社区,了解更多PlatON信息哦~??

b768e7a63f751d9251308f411c221e50.png

关注公众号,获取更多信息~

公众号 : PlatON云图立方

公众号ID:PlatON_Cube

3ab006bf8bda340a8d90f47c85d004bd.png

添加小姐姐微信加入社群哦~

昵称: PlatON爱好者 小白

微信号:platonfans

喜欢就点个“在看”哦

1f28e238d4e4d6a3f289ebe04ccd919e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值