Polkadot 中的智能合约
本文来自 Polkadot Wiki,更新时间为 2020 年 5 月 4 日。
Polkadot 中继链并不原生支持智能合约。不过 Polkadot 上的平行链将支持智能合约。现在有像 Edgeware[1] 这样已公布的项目,并且由于 Substrate 有内置的合约模块[2],将来应该会有更多的平行链支持这一功能。
资源
对于那些想开始编写智能合约,并部署在基于 Substrate 的平行链上的开发者,我们列出了目前可以使用的资源。
ink![3]- Parity 出的用于编写智能合约的 ink! Substrate 合约工作坊[4] - 指导你完成使用 ink!
编写和部署 ERC20 token 的基础
实例
下面收集的是社区中使用 ink!
做的智能合约的一些案例。你正在做一个智能合约案例吗?请我们联系将其添加到本页!
Ownable[5] — OpenZeppelin Ownable 合约的端口。
开发智能合约和平行链有什么区别?
抽象层
当编写智能合约时,你创建的是将部署并关联到特定链地址的指令。
相比之下,runtime 模块是链的状态转换(即所谓的状态转换函数)的整个逻辑。
智能合约必须有意识地实现可升级性,而平行链将能够完全通过根命令或通过治理模块替换代码。
当你构建智能合约时,它最终将被部署到具有自己环境的目标链中。平行链允许开发人员声明自己链的环境,甚至允许其他人为其编写智能合约。
Gas 费
智能合约必须找到限制自身执行的方法,否则整个节点都容易受到 DOS 攻击。例如,智能合约中的无限循环可能消耗整个链的计算资源,从而阻止其他人使用它。停机问题[6]表明,使用足够强大的语言,不可能提前知道程序是否会停止执行。一些平台,比如比特币,通过使用一种非常受限的脚本语言来绕过这个限制。其他一些公司,比如以太坊,则收取智能合约 “gas” 费来作为执行代码的条件。如果智能合约确实进入了一个执行永远不会停止的状态,它最终会耗尽能量,停止执行,并且智能合约本应进行的任何状态转换都会回滚。
平行链可以实现任意强大的编程语言,并且也不包含 gas 的概念。这意味着某些功能对于开发人员来说更容易实现,但也意味着某些构造永远不该被实现,例如没有终止条件的循环。将某些逻辑(例如可能无限期运行的复杂循环)留给非智能合约层,甚至试着完全消除它,通常是明智的选择。
资源
我何时应该创建 Substrate runtime,何时应该创建 Substrate 智能合约[7] —— 从技术的角度回答了开发者什么时候可以选择开发 runtime,什么时候可以选择智能合约的问题。
参考链接
Edgeware: https://edgewa.re/
[2]合约模块: https://crates.parity.io/pallet_contracts/index.html
[3]ink!: https://github.com/paritytech/ink
[4]Substrate 合约工作坊: https://substrate.dev/substrate-contracts-workshop/#/
[5]Ownable: https://github.com/JesseAbram/foRust/
[6]停机问题: https://en.wikipedia.org/wiki/Halting_problem
[7]我何时应该创建 Substrate runtime,何时应该创建 Substrate 智能合约: https://stackoverflow.com/a/56041305
欢迎学习 Substrate:
https://substrate.dev/
关注 Substrate 进展:
https://github.com/paritytech/substrate
关注 Polkadot 进展:
https://github.com/paritytech/polkadot
申请 Bootcamp:
https://bootcamp.web3.foundation/
更多内容:
平行链必须是区块链,Plasm layer2 可以是单个数据库 | PW 专访
波卡周报 | Gavin 发推,波卡即使没有平行链或多线程,仍可保持 1000 tx/s
扫码关注公众号,回复 “1” 加入波卡群
关注 PolkaWorld
发现 Web 3.0 时代新机遇
点个 “在看” 再走吧!