随着PlatON 1.2.0 升级完成,PlatON内置合约提供的VRF随机数能力也完全开放使用,智能合约的开发者可以利用PlatON提供的随机数合约获取去中心化、可验证、防篡改、安全的随机数。
在公有链上通过共识算法独立产生不可预知的随机数是困难的,一般的链上随机数获取方式是通过链上的参数作为随机源,如blockhash,虽然blockhash是随机的,但可能会受到矿工的扣留攻击。
Chainlink提出了一种链下解决方案。在Chainlink V2版随机数解决方案中,在链下由Chainlink产生一个随机的Seed,通过其节点的密钥生成一个随机数和一个可以在链上验证的证明,现在虽已被广泛应用,但需一定额外手续费。
中心化的随机数提供商可能会为了利益而操纵随机数。传统的RNG解决方案无法保障数据不被篡改,因此用户只能盲目相信随机数是真实可靠的。
PlatON的链上随机数来源于区块Header中的Nonce字段,该字段由父区块的Nonce作为种子,由当前区块的提议人私钥签名产生的随机数。在使用时,取该字段的第[1,33]字节为可验证的随机数的随机源。
PlatON的共识算法Giskard中使用了VRF算法做验证人选取,其链上Nonce(VRF和证明)天然的具备安全、可验证、随机性、不可篡改的特点。
由于PlatON网络中的所有验证人节点都将对区块Header中的Nonce字段做验证,该字段也会应用于PlatON共识节点的随机选取,安全性已经得到充分验证。
提议人虽然可提前获取随机数,但并不能做任何恶意行为,因此安全性是可以得到保障的。如果该字段非法,则当前区块不能获取验证人的签名,从而无法被确认。
PlatON最多支持返回500个随机数,合约开发者也无需在合约层重复验证即可使用,而且无需除Gas以外的费用,合约开发者直接通过合约调用即可获取随机数,真正做到简单、高效、易用。
参考:
PIP-8:
https://github.com/PlatONnetwork/PIPs/blob/master/PIPs/PIP-8.md
使用教程:
https://devdocs.platon.network/docs/zh-CN/get_vrf_random_number
本文转载自https://mp.weixin.qq.com/s/U6F0_KgVfXaWJZ8eV7V_cA