我们在编写solidity代码的时候经常需要传入参数,但如果某个参数需要从链外某个可信信源(哪怕它是中心化的)去读取,而不允许合约的调用者自己随意传入,应当如何实现呢?
一个比较常见的场景是预言机,其实也包括了从任何传统信源取得信息的情况。举个最简单的例子,我的合约里定义了一个uint a,某个方法function changeA()的功能,就是把a改为中央气象台公布的本日的北京市气温(这个数据是开源的和易见的),该如何实现呢?
一个方式是只有可信的地址,才能提交信息。
一个方式引入经济模型来解决,例如提交信息的时候,需要质押一些币, 来保证数据的正确性,如果被人挑战,就会被罚款。