我理解块链的确定性,因此,先知需要输入非确定性算法或对智能契约的API调用的输出。使用单个节点oracle将无法实现使用块链的目的,而是使用分布式Oracle网络( DON )。
据我所知,在给定的时间戳下,使用协商一致机制来商定给定的区块链状态。但是,在Oracle问题场景中,DON输出将用作确定更新的区块链状态的输入。一开始是如何达成共识的?
我测试了Truffle迁移项目Metacoin,并处理了这个错误。
$ truffle migrate
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'development'
> Network id: 1590824689051
&g
关于这个问题的所有讨论都提到,不可能在一个契约函数上运行sendTransaction()获得返回的值,在该函数中,契约状态正在被更改。我不明白为什么不能将返回的值记录在区块链上的事务日志中(类似于事件),因此可以在事务确认中检索它:
web3.eth.sendTransaction(...)
.on('confirmation', function(1, receipt){ ... // retrieving value returned by smart contract function here })