fixes hans marked to do, fix broken sophia.md references

This commit is contained in:
Nikita Fuchs 2020-10-10 14:19:10 +02:00
parent 7ad6f57a8d
commit b7289dfadd
3 changed files with 8 additions and 106 deletions

View File

@ -174,7 +174,7 @@ If in doubt, it is possible to check if an address is payable using
#### Payable entrypoints #### Payable entrypoints
A contract entrypoint is by default *not* payable. Any call to such a function A contract entrypoint is by default *not* payable. Any call to such a function
(either a [Remote call](contracts.md#calling-other-contracts) or a contract call transaction) (either a [Remote call](#calling-other-contracts) or a contract call transaction)
that has a non-zero `value` will fail. Contract entrypoints that should be called that has a non-zero `value` will fail. Contract entrypoints that should be called
with a non-zero value should be declared `payable`. with a non-zero value should be declared `payable`.
@ -504,15 +504,6 @@ the hash functions described below.
Please refer to the `String` [library documentation](sophia_stdlib.md#String). Please refer to the `String` [library documentation](sophia_stdlib.md#String).
### Chars
There is a builtin type `char` (the underlying representation being an integer),
mainly used to manipulate strings via `String.to_list`/`String.from_list`.
Characters can also be introduced as character literals (`'x', '+', ...).
Please refer to the `Char` [library documentation](sophia_stdlib.md#Char).
### Byte arrays ### Byte arrays
Byte arrays are fixed size arrays of 8-bit integers. They are described in hexadecimal system, Byte arrays are fixed size arrays of 8-bit integers. They are described in hexadecimal system,
@ -617,44 +608,6 @@ Contracts can interact with the
[Aeternity Naming System](https://github.com/aeternity/protocol/blob/master/AENS.md). [Aeternity Naming System](https://github.com/aeternity/protocol/blob/master/AENS.md).
For this purpose the [AENS](sophia_stdlib.md#AENS) library was exposed. For this purpose the [AENS](sophia_stdlib.md#AENS) library was exposed.
#### Example
In this example we assume that the name `name` already exists, and is owned by
an account with address `addr`. In order to allow a contract `ct` to handle
`name` the account holder needs to create a
[signature](examples.md#delegation-signature) `sig` of `addr | name.hash | ct.address`.
Armed with this information we can for example write a function that extends
the name if it expires within 1000 blocks:
```
stateful entrypoint extend_if_necessary(addr : address, name : string, sig : signature) =
switch(AENS.lookup(name))
None => ()
Some(AENS.Name(_, FixedTTL(expiry), _)) =>
if(Chain.block_height + 1000 > expiry)
AENS.update(addr, name, Some(RelativeTTL(50000)), None, None, signature = sig)
```
And we can write functions that adds and removes keys from the pointers of the
name:
```
stateful entrypoint add_key(addr : address, name : string, key : string,
pt : AENS.pointee, sig : signature) =
switch(AENS.lookup(name))
None => ()
Some(AENS.Name(_, _, ptrs)) =>
AENS.update(addr, name, None, None, Some(ptrs{[key] = pt}), signature = sig)
stateful entrypoint delete_key(addr : address, name : string,
key : string, sig : signature) =
switch(AENS.lookup(name))
None => ()
Some(AENS.Name(_, _, ptrs)) =>
let ptrs = Map.delete(key, ptrs)
AENS.update(addr, name, None, None, Some(ptrs), signature = sig)
```
### Events ### Events
Sophia contracts log structured messages to an event log in the resulting Sophia contracts log structured messages to an event log in the resulting

View File

@ -14,7 +14,6 @@ The out-of-the-box namespaces are:
- [Bits](#Bits) - [Bits](#Bits)
- [Bytes](#Bytes) - [Bytes](#Bytes)
- [Char](#Char)
- [Int](#Int) - [Int](#Int)
- [Map](#Map) - [Map](#Map)
- [Address](#Address) - [Address](#Address)
@ -152,7 +151,6 @@ Bytes.split(a : bytes(m + n)) : bytes(m) * bytes(n)
Splits a byte array at given index Splits a byte array at given index
## Char
#### to_int #### to_int
``` ```
@ -348,7 +346,7 @@ 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 `acct` is the address of the oracle to register (can be the same as the contract).
* `signature` is a signature proving that the contract is allowed to register the account - * `signature` is a signature proving that the contract is allowed to register the account -
the account address + the contract address (concatenated as byte arrays) is the account address + the contract address (concatenated as byte arrays) is
[signed](./sophia.md#delegation-signature) with the [signed](./examples.md#delegation-signature) with the
private key of the account, proving you have the private key of the oracle to be. If the private key of the account, 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. 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 `qfee` is the minimum query fee to be paid by a user when asking a question of the oracle.
@ -381,7 +379,7 @@ Responds to the question `q` on `o`.
Unless the contract address is the same as the oracle address the `signature` Unless the contract address is the same as the oracle address the `signature`
(which is an optional, named argument) (which is an optional, named argument)
needs to be provided. Proving that we have the private key of the oracle by needs to be provided. Proving that we have the private key of the oracle by
[signing](./sophia.md#delegation-signature) the oracle query id + contract address [signing](./examples.md#delegation-signature) the oracle query id + contract address
#### extend #### extend
@ -505,7 +503,7 @@ let Some(Name(owner, FixedTTL(expiry), ptrs)) = AENS.lookup("example.chain")
AENS.preclaim(owner : address, commitment_hash : hash, <signature : signature>) : unit AENS.preclaim(owner : address, commitment_hash : hash, <signature : signature>) : unit
``` ```
The [signature](./sophia.md#delegation-signature) should be over `owner address` + `Contract.address` The [signature](./examples.md#delegation-signature) should be over `owner address` + `Contract.address`
(concatenated as byte arrays). (concatenated as byte arrays).
@ -514,7 +512,7 @@ The [signature](./sophia.md#delegation-signature) should be over `owner address`
AENS.claim(owner : address, name : string, salt : int, name_fee : int, <signature : signature>) : unit AENS.claim(owner : address, name : string, salt : int, name_fee : int, <signature : signature>) : unit
``` ```
The [signature](./sophia.md#delegation-signature) should be over `owner address` + `name_hash` + `Contract.address` The [signature](./examples.md#delegation-signature) should be over `owner address` + `name_hash` + `Contract.address`
using the private key of the `owner` account for signing. using the private key of the `owner` account for signing.
@ -525,7 +523,7 @@ AENS.transfer(owner : address, new_owner : address, name : string, <signature :
Transfers name to the new owner. Transfers name to the new owner.
The [signature](./sophia.md#delegation-signature) should be over `owner address` + `name_hash` + `Contract.address` The [signature](./examples.md#delegation-signature) should be over `owner address` + `name_hash` + `Contract.address`
using the private key of the `owner` account for signing. using the private key of the `owner` account for signing.
@ -536,7 +534,7 @@ AENS.revoke(owner : address, name : string, <signature : signature>) : unit
Revokes the name to extend the ownership time. Revokes the name to extend the ownership time.
The [signature](./sophia.md#delegation-signature) should be over `owner address` + `name_hash` + `Contract.address` The [signature](./examples.md#delegation-signature) should be over `owner address` + `name_hash` + `Contract.address`
using the private key of the `owner` account for signing. using the private key of the `owner` account for signing.

View File

@ -30,7 +30,6 @@
- [Updating a value](#updating-a-value) - [Updating a value](#updating-a-value)
- [Map implementation](#map-implementation) - [Map implementation](#map-implementation)
- [Strings](#strings) - [Strings](#strings)
- [Chars](#chars)
- [Byte arrays](#byte-arrays) - [Byte arrays](#byte-arrays)
- [Cryptographic builtins](#cryptographic-builtins) - [Cryptographic builtins](#cryptographic-builtins)
- [AEVM note](#aevm-note) - [AEVM note](#aevm-note)
@ -39,7 +38,6 @@
- [Example](#example) - [Example](#example)
- [Sanity checks](#sanity-checks) - [Sanity checks](#sanity-checks)
- [AENS interface](#aens-interface) - [AENS interface](#aens-interface)
- [Example](#example-1)
- [Events](#events) - [Events](#events)
- [Argument order](#argument-order) - [Argument order](#argument-order)
- [Compiler pragmas](#compiler-pragmas) - [Compiler pragmas](#compiler-pragmas)
@ -250,7 +248,7 @@ If in doubt, it is possible to check if an address is payable using
#### Payable entrypoints #### Payable entrypoints
A contract entrypoint is by default *not* payable. Any call to such a function A contract entrypoint is by default *not* payable. Any call to such a function
(either a [Remote call](contracts.md#calling-other-contracts) or a contract call transaction) (either a [Remote call](#calling-other-contracts) or a contract call transaction)
that has a non-zero `value` will fail. Contract entrypoints that should be called that has a non-zero `value` will fail. Contract entrypoints that should be called
with a non-zero value should be declared `payable`. with a non-zero value should be declared `payable`.
@ -577,15 +575,6 @@ the hash functions described below.
Please refer to the `String` [library documentation](sophia_stdlib.md#String). Please refer to the `String` [library documentation](sophia_stdlib.md#String).
### Chars
There is a builtin type `char` (the underlying representation being an integer),
mainly used to manipulate strings via `String.to_list`/`String.from_list`.
Characters can also be introduced as character literals (`'x', '+', ...).
Please refer to the `Char` [library documentation](sophia_stdlib.md#Char).
### Byte arrays ### Byte arrays
Byte arrays are fixed size arrays of 8-bit integers. They are described in hexadecimal system, Byte arrays are fixed size arrays of 8-bit integers. They are described in hexadecimal system,
@ -690,44 +679,6 @@ Contracts can interact with the
[Aeternity Naming System](https://github.com/aeternity/protocol/blob/master/AENS.md). [Aeternity Naming System](https://github.com/aeternity/protocol/blob/master/AENS.md).
For this purpose the [AENS](sophia_stdlib.md#AENS) library was exposed. For this purpose the [AENS](sophia_stdlib.md#AENS) library was exposed.
#### Example
In this example we assume that the name `name` already exists, and is owned by
an account with address `addr`. In order to allow a contract `ct` to handle
`name` the account holder needs to create a
[signature](#delegation-signature) `sig` of `addr | name.hash | ct.address`.
Armed with this information we can for example write a function that extends
the name if it expires within 1000 blocks:
```
stateful entrypoint extend_if_necessary(addr : address, name : string, sig : signature) =
switch(AENS.lookup(name))
None => ()
Some(AENS.Name(_, FixedTTL(expiry), _)) =>
if(Chain.block_height + 1000 > expiry)
AENS.update(addr, name, Some(RelativeTTL(50000)), None, None, signature = sig)
```
And we can write functions that adds and removes keys from the pointers of the
name:
```
stateful entrypoint add_key(addr : address, name : string, key : string,
pt : AENS.pointee, sig : signature) =
switch(AENS.lookup(name))
None => ()
Some(AENS.Name(_, _, ptrs)) =>
AENS.update(addr, name, None, None, Some(ptrs{[key] = pt}), signature = sig)
stateful entrypoint delete_key(addr : address, name : string,
key : string, sig : signature) =
switch(AENS.lookup(name))
None => ()
Some(AENS.Name(_, _, ptrs)) =>
let ptrs = Map.delete(key, ptrs)
AENS.update(addr, name, None, None, Some(ptrs), signature = sig)
```
### Events ### Events
Sophia contracts log structured messages to an event log in the resulting Sophia contracts log structured messages to an event log in the resulting