-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rethinking Built-in Oracle Proposal #1676
Comments
AdditionalBoth solutions only solve the problem of data handling, but there is not much thinking about trusted data sources.We recommend introducing the concept of a trusted data source DataProvider. DataProvider |
option3 Verifiable OracleWhy do we need an Oracle like this?
Because of this, we consider introducing the
At this time, any node can become an Oracle miner, only responsible for transfering data on the chain. For non-verifiable data, oracle miner will also transfer it, but Oracle does not provide data verification, the developer should bear the responsibility. We advocate and encourage to transfer verifiable data. In this way, whether synchronous or asynchronous, I think the biggest difference between us and traditional Oracle is that we have built-in verifiable Oracle. |
I think that the sync oracle doesn't include a mempool attack, it can have the same checks than the currently memory pool, so there are no difference. According to the state of block, my opinion: if your request use any block data, you can be lucky and receive the right response, or a FAULT, there are no problem with this for me, users should not use this data for compose the url, but if they did it, oracle nodes will deals with it, usually with a FAULT. For me we don't need to do an extra work for oracle nodes in each block, otherwise you can have a spam attack, with sync or async version. Oracles should do his work, download the data, the rest of the work should be made by mempool when the receive the response or the request TX. |
I agree. I think this is not a oracle problem, it's the blockchain problem. For a contract, which use block height for switch, also face the problem. The tx may be valid and execute successful before packaged, but after that it may fail. if(height == xxx)
...
else if (height == yyy)
...
else
... |
I thought this one had already been discussed in #1527, but I can reiterate the main point here --- having the same level of fee payment guarantees as for regular transactions (and we do have it) should be enough for Oracle transactions.
And that one actually looks more like a feature to me, because long unpredictable delays between different requests and especially between initial blockchain state and blockchain state when the transaction will finally be executed will easily lead to distorted reality seen by the contract. It's almost like a rolling shutter effect, not something I'd like to see when executing a contract, especially if it somehow relates to any kind of asset.
I would probably not mix this (trust) issue in here, verifiable data is good, but it only works if your data provider signs it and you have some way to verify it on-chain (basically, there is a corresponding contract that knows the appropriate keys) and even then this data needs to be brought into the chain by Oracles and we're better concentrate on the way they gonna do that here. |
+1 - yes, this is akin to a feature from my perspective as well. Agree with Roman's comments wrt stale reference data. |
Got it |
Any conclusion? |
I already have a perfect asynchronous solution. |
Asynchronous solution it's something that any dapps can make, in any time, and probably better than us because they will be focused in that. What it's the sense of offer a core solution that can be improved in any time by third parties? There are no syncronous solutions in other blockchains only for one reason, they can't do that althought they want to, it's required to be integrated in the core of the blockchain, so... we only the chance now, with neo3. We can be unique. |
|
Agree, it's weird, but it only affect to the sort of the mempool. Both solutions will have weird things like
You will have the same problem in async version, you will need to invalidate the original request if the time changed. Because if OracleCN sign the transaction at block 1, and now it's block 2, it doesn't care if it's async or sync, it will require to be invalidated, if you want to be able to that, I think that it's not required.
This can be done by a smart contract. We have dapps in ethereum that currently are working without this issue, you need to deposit your token, and the bridge will take the reward. (https://witnet.io/about#bridges) |
We already have
And the |
What's the difference between it and the asynchronous oracle? |
No big difference, it's just pseudo-synchronization, and user does not need to set |
I don't think it is a good idea to create a new SYSCALL for just pseudo synchronization. And it is the same as calling the |
If so, why not we use the pseudo synchronization, very little code needs to be changed, and it can also be different from traditional asynchronous oracle. |
#1584
Currently, @shargon has submitted a implementation of built-in Oracle.The content is basically consistent with our discussion at the time, and of course, appropriate adjustments have been made.But we also found some problems in the review process.As @erikzhang said,"Maybe we should rethink each aspect of the two solutions and find out which suits us best."
Review
Synchronization
Flow Chart

Process:
Advantage
Disadvantages
ASynchronization
Flow Chart


Process:
Advantage
Disadvantages
Compare
The text was updated successfully, but these errors were encountered: