restructure doc files for readTheDocs #773
@ -550,7 +550,7 @@ Example for an oracle answering questions of type `string` with answers of type
|
|||||||
contract Oracles =
|
contract Oracles =
|
||||||
|
|
||||||
stateful entrypoint registerOracle(acct : address,
|
stateful entrypoint registerOracle(acct : address,
|
||||||
sign : signature, // Signed oracle address + contract address
|
sign : signature, // Signed network id + oracle address + contract address
|
||||||
qfee : int,
|
qfee : int,
|
||||||
ttl : Chain.ttl) : oracle(string, int) =
|
ttl : Chain.ttl) : oracle(string, int) =
|
||||||
Oracle.register(acct, signature = sign, qfee, ttl)
|
Oracle.register(acct, signature = sign, qfee, ttl)
|
||||||
@ -571,13 +571,13 @@ contract Oracles =
|
|||||||
Oracle.extend(o, ttl)
|
Oracle.extend(o, ttl)
|
||||||
|
|
||||||
stateful entrypoint signExtendOracle(o : oracle(string, int),
|
stateful entrypoint signExtendOracle(o : oracle(string, int),
|
||||||
sign : signature, // Signed oracle address + contract address
|
sign : signature, // Signed network id + oracle address + contract address
|
||||||
ttl : Chain.ttl) : unit =
|
ttl : Chain.ttl) : unit =
|
||||||
Oracle.extend(o, signature = sign, ttl)
|
Oracle.extend(o, signature = sign, ttl)
|
||||||
|
|
||||||
stateful entrypoint respond(o : oracle(string, int),
|
stateful entrypoint respond(o : oracle(string, int),
|
||||||
q : oracle_query(string, int),
|
q : oracle_query(string, int),
|
||||||
sign : signature, // Signed oracle query id + contract address
|
sign : signature, // Signed network id + oracle address + contract address
|
||||||
r : int) =
|
r : int) =
|
||||||
Oracle.respond(o, q, signature = sign, r)
|
Oracle.respond(o, q, signature = sign, r)
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
- [Language Features](#language-features)
|
- [Language Features](#language-features)
|
||||||
- [Contracts](#contracts)
|
- [Contracts](#contracts)
|
||||||
- [Calling other contracts](#calling-other-contracts)
|
- [Calling other contracts](#calling-other-contracts)
|
||||||
- [Protected contract calls](#protected-contract-calls)
|
|
||||||
- [Mutable state](#mutable-state)
|
- [Mutable state](#mutable-state)
|
||||||
- [Stateful functions](#stateful-functions)
|
- [Stateful functions](#stateful-functions)
|
||||||
- [Payable](#payable)
|
- [Payable](#payable)
|
||||||
@ -141,36 +140,6 @@ without calling it you can write
|
|||||||
Chain.spend(v.address, amount)
|
Chain.spend(v.address, amount)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Protected contract calls
|
|
||||||
|
|
||||||
If a contract call fails for any reason (for instance, the remote contract
|
|
||||||
crashes or runs out of gas, or the entrypoint doesn't exist or has the wrong
|
|
||||||
type) the parent call also fails. To make it possible to recover from failures,
|
|
||||||
contract calls takes a named argument `protected : bool` (default `false`).
|
|
||||||
|
|
||||||
The protected argument must be a literal boolean, and when set to `true`
|
|
||||||
changes the type of the contract call, wrapping the result in an `option` type.
|
|
||||||
If the call fails the result is `None`, otherwise it's `Some(r)` where `r` is
|
|
||||||
the return value of the call.
|
|
||||||
|
|
||||||
```sophia
|
|
||||||
contract VotingType =
|
|
||||||
entrypoint : vote : string => unit
|
|
||||||
|
|
||||||
contract Voter =
|
|
||||||
entrypoint tryVote(v : VotingType, alt : string) =
|
|
||||||
switch(v.vote(alt, protected = true) : option(unit))
|
|
||||||
None => "Voting failed"
|
|
||||||
Some(_) => "Voting successful"
|
|
||||||
```
|
|
||||||
|
|
||||||
Any gas that was consumed by the contract call before the failure stays
|
|
||||||
consumed, which means that in order to protect against the remote contract
|
|
||||||
running out of gas it is necessary to set a gas limit using the `gas` argument.
|
|
||||||
However, note that errors that would normally consume all the gas in the
|
|
||||||
transaction still only uses up the gas spent running the contract.
|
|
||||||
|
|
||||||
|
|
||||||
### Mutable state
|
### Mutable state
|
||||||
|
|
||||||
Sophia does not have arbitrary mutable state, but only a limited form of
|
Sophia does not have arbitrary mutable state, but only a limited form of
|
||||||
|
Loading…
x
Reference in New Issue
Block a user