Renaming and preparing to remove oracles (#985)
Sophia Tests / tests (push) Successful in 48m54s
Sophia Tests / tests (push) Successful in 48m54s
A few references to oracles still remain, but they have been removed as a feature, at least. Reviewed-on: #985 Reviewed-by: Ulf Wiger <ulfwiger@qpq.swiss> Co-authored-by: Craig Everett <zxq9@zxq9.com> Co-committed-by: Craig Everett <zxq9@zxq9.com>
This commit was merged in pull request #985.
This commit is contained in:
+12
-133
@@ -25,7 +25,6 @@ The out-of-the-box namespaces are:
|
||||
- [Crypto](#crypto)
|
||||
- [Int](#int)
|
||||
- [Map](#map)
|
||||
- [Oracle](#oracle)
|
||||
|
||||
The following ones need to be included as regular files with `.aes` suffix, for example
|
||||
```
|
||||
@@ -72,14 +71,6 @@ Address.is_contract(a : address) : bool
|
||||
Is the address a contract
|
||||
|
||||
|
||||
#### is_oracle
|
||||
```
|
||||
Address.is_oracle(a : address) : bool
|
||||
```
|
||||
|
||||
Is the address a registered oracle
|
||||
|
||||
|
||||
#### is_payable
|
||||
```
|
||||
Address.is_payable(a : address) : bool
|
||||
@@ -99,7 +90,7 @@ Cast address to contract type C (where `C` is a contract)
|
||||
### AENS
|
||||
|
||||
The old AENS namespace, kept in the compiler to be able to interact with
|
||||
contracts from before Ceres, compiled using aesophia compiler version 7.x and
|
||||
contracts from before Ceres, compiled using sophia compiler version 7.x and
|
||||
earlier. Used in [AENSCompat](#aenscompat) when converting between old and new
|
||||
pointers.
|
||||
|
||||
@@ -114,8 +105,9 @@ datatype name = Name(address, Chain.ttl, map(string, AENS.pointee))
|
||||
##### pointee
|
||||
|
||||
```
|
||||
datatype pointee = AccountPt(address) | OraclePt(address)
|
||||
| ContractPt(address) | ChannelPt(address)
|
||||
datatype pointee = AccountPt(address)
|
||||
| ContractPt(address)
|
||||
| ChannelPt(address)
|
||||
```
|
||||
|
||||
### AENSv2
|
||||
@@ -127,7 +119,7 @@ naming system (AENS). If `owner` is equal to `Contract.address` the signature
|
||||
`signature` is ignored, and can be left out since it is a named argument.
|
||||
Otherwise we need a signature to prove that we are allowed to do AENS
|
||||
operations on behalf of `owner`. The [signature is tied to a network
|
||||
id](https://github.com/aeternity/protocol/blob/iris/consensus/consensus.md#transaction-signature),
|
||||
id](https://git.qpq.swiss/QPQ-AG/protocol/src/branch/master/consensus/README.md#transaction-signature),
|
||||
i.e. the signature material should be prefixed by the network id.
|
||||
|
||||
#### Types
|
||||
@@ -141,8 +133,10 @@ datatype name = Name(address, Chain.ttl, map(string, AENSv2.pointee))
|
||||
##### pointee
|
||||
|
||||
```
|
||||
datatype pointee = AccountPt(address) | OraclePt(address)
|
||||
| ContractPt(address) | ChannelPt(address) | DataPt(bytes())
|
||||
datatype pointee = AccountPt(address)
|
||||
| ContractPt(address)
|
||||
| ChannelPt(address)
|
||||
| DataPt(bytes())
|
||||
```
|
||||
|
||||
Note: on-chain there is a maximum length enforced for `DataPt`, it is 1024 bytes.
|
||||
@@ -185,8 +179,7 @@ The [signature](./sophia_features.md#delegation-signature) should be a
|
||||
serialized structure containing `network id`, `owner address`, and
|
||||
`Contract.address`.
|
||||
|
||||
From Ceres (i.e. FATE VM version 3) the
|
||||
[signature](./sophia_features.md#delegation-signature) can also be generic
|
||||
The [signature](./sophia_features.md#delegation-signature) can also be generic
|
||||
(allowing _all_, existing and future, names to be delegated with one
|
||||
signature), i.e. containing `network id`, `owner address`, `Contract.address`.
|
||||
|
||||
@@ -287,7 +280,6 @@ namespace Chain =
|
||||
datatype ga_meta_tx = GAMetaTx(address, int)
|
||||
datatype paying_for_tx = PayingForTx(address, int)
|
||||
datatype base_tx = SpendTx(address, int, string)
|
||||
| OracleRegisterTx | OracleQueryTx | OracleResponseTx | OracleExtendTx
|
||||
| NamePreclaimTx | NameClaimTx(hash) | NameUpdateTx(string)
|
||||
| NameRevokeTx(hash) | NameTransferTx(address, string)
|
||||
| ChannelCreateTx(address) | ChannelDepositTx(address, int) | ChannelWithdrawTx(address, int) |
|
||||
@@ -305,7 +297,7 @@ Auth.tx_hash : option(hash)
|
||||
|
||||
Gets the transaction hash during authentication. Note: `Auth.tx_hash`
|
||||
computation differs between protocol versions (changed in Ceres!), see
|
||||
[aeserialisation](https://github.com/aeternity/protocol/blob/master/serializations.md)
|
||||
[aeserialisation](https://git.qpq.swiss/QPQ-AG/protocol/src/branch/master/serializations.md)
|
||||
specification for details.
|
||||
|
||||
|
||||
@@ -537,7 +529,6 @@ datatype paying_for_tx = PayingForTx(address, int)
|
||||
##### base_tx
|
||||
```
|
||||
datatype base_tx = SpendTx(address, int, string)
|
||||
| OracleRegisterTx | OracleQueryTx | OracleResponseTx | OracleExtendTx
|
||||
| NamePreclaimTx | NameClaimTx(hash) | NameUpdateTx(string)
|
||||
| NameRevokeTx(hash) | NameTransferTx(address, string)
|
||||
| ChannelCreateTx(address) | ChannelDepositTx(address, int) | ChannelWithdrawTx(address, int) |
|
||||
@@ -944,118 +935,6 @@ Returns a list containing pairs of keys and their respective elements.
|
||||
Turns a list of pairs of form `(key, value)` into a map
|
||||
|
||||
|
||||
### Oracle
|
||||
|
||||
#### register
|
||||
```
|
||||
Oracle.register(<signature : bytes(64)>, acct : address, qfee : int, ttl : Chain.ttl) : oracle('a, 'b)
|
||||
```
|
||||
|
||||
Registers new oracle answering questions of type `'a` with answers of type `'b`.
|
||||
|
||||
* The `acct` is the address of the oracle to register (can be the same as the contract).
|
||||
* The [signature](./sophia_features.md#delegation-signature) should be a
|
||||
serialized structure containing `network id`, `account address`, and
|
||||
`contract address`. Using the private key of `account address` for signing.
|
||||
Proving you have the private key of the oracle to be. If the address is the same
|
||||
as the contract `sign` is ignored and can be left out entirely.
|
||||
* The `qfee` is the minimum query fee to be paid by a user when asking a question of the oracle.
|
||||
* The `ttl` is the Time To Live for the oracle in key blocks, either relative to the current
|
||||
key block height (`RelativeTTL(delta)`) or a fixed key block height (`FixedTTL(height)`).
|
||||
* The type `'a` is the type of the question to ask.
|
||||
* The type `'b` is the type of the oracle answers.
|
||||
|
||||
Examples:
|
||||
```
|
||||
Oracle.register(addr0, 25, RelativeTTL(400))
|
||||
Oracle.register(addr1, 25, RelativeTTL(500), signature = sign1)
|
||||
```
|
||||
|
||||
|
||||
#### get\_question
|
||||
```
|
||||
Oracle.get_question(o : oracle('a, 'b), q : oracle_query('a, 'b)) : 'a
|
||||
```
|
||||
|
||||
Checks what was the question of query `q` on oracle `o`
|
||||
|
||||
|
||||
#### respond
|
||||
```
|
||||
Oracle.respond(<signature : bytes(64)>, o : oracle('a, 'b), q : oracle_query('a, 'b), 'b) : unit
|
||||
```
|
||||
|
||||
Responds to the question `q` on `o`. Unless the contract address is the same
|
||||
as the oracle address the `signature` (which is an optional, named argument)
|
||||
needs to be provided. Proving that we have the private key of the oracle by
|
||||
[signing](./sophia_features.md#delegation-signature) should be a serialized
|
||||
structure containing `network id`, `oracle query id`, and `contract address`.
|
||||
|
||||
|
||||
#### extend
|
||||
```
|
||||
Oracle.extend(<signature : bytes(64)>, o : oracle('a, 'b), ttl : Chain.ttl) : unit
|
||||
```
|
||||
|
||||
Extends TTL of an oracle.
|
||||
* `singature` is a named argument and thus optional. Must be the same as for `Oracle.register`
|
||||
* `o` is the oracle being extended
|
||||
* `ttl` must be `RelativeTTL`. The time to live of `o` will be extended by this value.
|
||||
|
||||
#### query\_fee
|
||||
```
|
||||
Oracle.query_fee(o : oracle('a, 'b)) : int
|
||||
```
|
||||
|
||||
Returns the query fee of the oracle
|
||||
|
||||
|
||||
#### query
|
||||
```
|
||||
Oracle.query(o : oracle('a, 'b), q : 'a, qfee : int, qttl : Chain.ttl, rttl : Chain.ttl) : oracle_query('a, 'b)
|
||||
```
|
||||
|
||||
Asks the oracle a question.
|
||||
* The `qfee` is the query fee debited to the contract account (`Contract.address`).
|
||||
* The `qttl` controls the last height at which the oracle can submit a response
|
||||
and can be either fixed or relative.
|
||||
* The `rttl` must be relative and controls how long an answer is kept on the chain.
|
||||
The call fails if the oracle could expire before an answer.
|
||||
|
||||
|
||||
#### get\_answer
|
||||
```
|
||||
Oracle.get_answer(o : oracle('a, 'b), q : oracle_query('a, 'b)) : option('b)
|
||||
```
|
||||
|
||||
Checks what is the optional query answer
|
||||
|
||||
|
||||
#### expiry
|
||||
|
||||
```
|
||||
Oracle.expiry(o : oracle('a, 'b)) : int
|
||||
```
|
||||
|
||||
Ask the oracle when it expires. The result is the block height at which it will happen.
|
||||
|
||||
|
||||
#### check
|
||||
```
|
||||
Oracle.check(o : oracle('a, 'b)) : bool
|
||||
```
|
||||
|
||||
Returns `true` iff the oracle `o` exists and has correct type
|
||||
|
||||
|
||||
#### check_query
|
||||
```
|
||||
Oracle.check_query(o : oracle('a, 'b), q : oracle_query('a, 'b)) : bool
|
||||
```
|
||||
|
||||
It returns `true` iff the oracle query exist and has the expected type.
|
||||
|
||||
|
||||
## Includable namespaces
|
||||
|
||||
These need to be explicitly included (with `.aes` suffix)
|
||||
@@ -1664,7 +1543,7 @@ point where the error would exceed the `loss` value.
|
||||
|
||||
For debugging. If it ever returns false in a code that doesn't call `frac` constructors or
|
||||
accept arbitrary `frac`s from the surface you should report it as a
|
||||
[bug](https://github.com/aeternity/aesophia/issues/new)
|
||||
[bug](https://git.qpq.swiss/QPQ-AG/sophia/issues/new)
|
||||
|
||||
If you expect getting calls with malformed `frac`s in your contract, you should use
|
||||
this function to verify the input.
|
||||
|
||||
Reference in New Issue
Block a user