Skip to content

WASM 智能合约 ​

Polkadot 中的智能合约 ​

当人们了解 Substrate、Polkadot 或 Kusama 时,我们通常最先被问到的问题之一是:什么时候应该开发平行链,什么时候应该开发智能合约?

这里的区别在于,在 Polkadot 和 Kusama 的语境中,平行链会租用一个插槽,租期从几个月到最长两年不等。租用的约定是:平行链获得一个固定的插槽来执行其业务逻辑(通常称为状态转换函数),并可以将修改后的状态持久化到区块中。在 Substrate 术语中,这个状态转换函数被称为链的运行时(runtime)。

与其他生态系统的区别在于,在 Polkadot 的语境中,平行链和智能合约位于技术栈的不同层级:智能合约位于平行链之上。平行链通常被描述为 Layer-1 区块链 ‒ 不同之处在于它们无需自行构建安全性,并且可升级、可互操作。

值得注意的是,平行链的状态转换函数不会受到进一步验证 ‒ 如何利用其插槽时间完全由平行链自行决定。平行链在 Polkadot 或 Kusama 上赢得插槽拍卖时,就已经预先支付了插槽费用。这意味着平行链可以构建属于自己的(区块链)世界!例如,它可以决定如何收取交易手续费 ‒ 甚至决定是否收取交易手续费。这些选项对于构建全新的或更加用户友好的商业模式至关重要。我们在实际中观察到的平行链之间的其他区别因素还包括治理运作方式或加密经济学方面的差异。不过,平行链在构建自己的世界时也存在一些约束。就像现实世界中的物理定律一样,它必须遵守某些基本规则。对于 Polkadot 和 Kusama 而言,这类规则包括中继链与平行链通信所使用的共识算法。Polkadot 和 Kusama 的优势正是源自这些基本规则,例如前面提到的共享安全、跨链通信或有保障的执行插槽时间。

而对于智能合约,现有的平行链必须包含 pallet-contracts,用户才能部署智能合约。已部署的智能合约始终是不受信任的代码。任何持有该链代币的人(或任何程序)都可以在无需许可的情况下上传智能合约。智能合约允许在区块链上无许可地部署不受信任的程序。pallet-contracts 必须假定这些程序具有恶意,因此必须建立一系列安全支柱,以确保合约不会导致链停滞或造成其他合约的状态损坏等问题。对于 pallet-contracts 而言,这些安全支柱包括 gas 计量或链上数据存储押金等机制。

再次强调这一重要区别:开发平行链运行时与开发智能合约是不同的 ‒ 智能合约位于平行链之上。

其中的权衡在于:使用平行链,您可以自由决定构成平行链的(几乎)所有规则;而使用智能合约,您会受到链所允许的范围以及必须具备的安全支柱的约束。智能合约的速度永远无法与内置于平行链运行时中的原生 pallet 相媲美 ‒ 两者之间存在太多中间逻辑。但另一方面,智能合约的开发和部署阻力更小。开发者无需操心治理、加密经济学等问题,只需少量代币即可轻松部署智能合约,就是这么简单。

关于 pallet-contracts 中随机性的免责声明 ​

使用随机性功能的代码无法上传,也无法基于使用此已弃用功能的现有代码实例化合约。该功能最终将被移除。因此,对于新的 pallet-contracts 部署,可以为此类型提供一个虚拟实现(因为它永远不会被使用)。

来源:https://github.com/paritytech/polkadot-sdk/blob/f60318f68687e601c47de5ad5ca88e2c3f8139a7/substrate/frame/contracts/src/lib.rs#L237