Metis 是 Patract 开发的 WebAssembly 合约标准库。Patract Labs 将联合社区力量一起制定各项 WebAssembly 合约标准,开发 ink! 和 Ask! 版本的对应实现,并进行专业机构审计。
以太坊 Openzeppelin-contracts 基础库
在基于 Solidity 的 EVM 合约开发中,Openzeppelin-contracts (https://github.com/OpenZeppelin/openzeppelin-contracts)是非常重要的基础库,Andreas M. Antonopoulos 与 Gavin Wood 合著的 「Mastering Ethereum」一书中,作者总结了五条编写安全智能合约的最佳实践:Minimalism/simplicity,Code reuse,Code quality,Readability / auditability 和 Test coverage,这些最佳实践也适用于基于 ink! 和 Ask! 的 Wasm 合约开发,在以太坊生态中,Openzeppelin-contracts 正是履行这些最佳实践的重要基础。
Openzeppelin-contracts 是一个面向安全性的智能合约开发库,通过合理的使用 Openzeppelin-contracts,开发者可以通过引入其组件的方式,复用经过审计的合约代码,隐藏一部分合约开发中的复杂性,同时 Openzeppelin-contracts 定义了一系列模式与元语,以此增加开发者与审计者间的共同知识(Common Knowledge),进而改善开发与审计效率。
Wasm 合约生态开发库 Metis
我们认为,Wasm 合约生态中,一个类似于 Openzeppelin-contracts 的开发库是十分必要的,这就是Metis。出于对简单性与可读性的考虑,这个库提供的模式与元语应该尽可能与 Openzeppelin-contracts 保持一致,这样可以减少开发者的负担,同时有效的吸收 Solidity 生态所积累的经验。
不过需要意识到,基于 ink! 与 Ask! 的 Wasm 合约开发,与基于 Solidity 的 EVM 合约开发有着很大的不同。Wasm 成熟的体系支持,使得开发者可以使用各种不同的语言与工具开发智能合约,通过基于这些成熟或者快速迭代中的平台,开发者可以享受到大量的底层设施支持与开发经验积累,但是不同的语言和工具,往往具有不同的考量和权衡。这意味着,开发者会使用完全不同的代码,表达同样的机制与设计,这将会给社区带来巨大的沟通成本与心智负担。面对这样的问题,我们需要总结与积累智能合约开发中的实现模式,这一思路由 Kent Beck 所著的「实现模式」一书中引入。总结实现模式的目的就在于,通过这些明确的模式清晰准确的表达出开发者的意图与想法,这样就可以实现"别人能懂的代码",在合约开发中,这中思路是非常重要的。从 Openzeppelin-contracts 中,我们可以看到其总结了数个智能合约开发中的实现模式,如基于 Solidity 继承语法的“合约拓展模式”,这些实现模式是 Solidity 生态中积累的宝贵经验。当然,不同的语言下,实践这些模式的方式有所不同,Metis 将会贯彻这些模式,并在不同平台提供对应的支持。例如在 Rust 中, 显然不能直接使用继承的方式实现合约拓展,对此 Metis 中将会提供代码实现范例,并提供一系列帮助库来减少开发者的心智成本。Metis 将不仅仅是一个 Wasm 合约标准库,我们希望通过 Metis 的实践,在充分继承吸收以往合约开发经验的同时探索 Wasm 合约开发最佳实践。公众号回台回复“Metis”获取意见稿。About Patract
Patract 为波卡 Wasm 合约生态的平行链和 DApp 开发提供解决方案。我们帮助社区平行链设计和开发链上合约模块和 Runtime 支持,并且为 DApp 开发者提供覆盖开发、测试、调试、部署、监控、数据提供和前端开发等阶段的全栈工具和服务支持。How to join Patract
1.对于合约开发者,可以访问官网 (https://patract.io),熟悉测试链和工具套件。欢迎加入官方开发群:Element(https://app.element.io/#/room/#PatractLabsDev:matrix.org)Discord(https://discord.gg/wJ8TnTfjcq)2.对于将要集成 Wasm 合约功能的平行链项目方,或者使用 Wasm 合约开发的 DApp 项目方,商务合作欢迎联系 santry@patract.ioTelegram(https://t.me/patract)Twitter(https://twitter.com/PatractLabs)4.对于求职者,我们在招聘区块链开发工程师、前端/全栈开发工程师、产品经理、开发者运营等岗位,可以联系 sean@patract.io