/ docs / release-notes / RELEASE-NOTES-6.0.0.md
RELEASE-NOTES-6.0.0.md
  1  # About this release
  2  
  3  [This](https://github.com/aeternity/aeternity/releases/tag/v6.0.0) is the stable Iris release.
  4  
  5  It:
  6  
  7  * Set height for `iris` hard fork to happen on block 441444, on 10 June 2021,
  8    around 9:11am UTC
  9  
 10  * Fixed buggy serialization of contract information - this means the compiler version is actually
 11    stored on chain, and isn't replaced by "unknown".
 12  
 13  * Added `AENS.update` to FATE VM
 14  
 15  * Added `AENS.lookup` and `Oracle.expiry` lookup functions to FATE VM
 16  
 17  * Fixed bug regarding TTL of preclaims in FATE VM - it was incorrectly always
 18    set to 0, from `VM_FATE_SOPHIA_2` it has the correct value.
 19  
 20  * Fixed a bug in `AENS.resolve` in FATE VM - for invalid names `VM_FATE_SOPHIA_1`
 21    will crash. From `VM_FATE_SOPHIA_2` it will not crash, rather return `None`.
 22  
 23  * Changed `Chain.block_hash` - in `VM_FATE_SOPHIA_2` it will return
 24    `Some(<blockhash>)` for `Chain.block_height` (i.e. current generation)
 25    previously it returned `None`. With Bitcoin-NG we do have the block hash of
 26    the current generation, so no reason not to allow this.
 27  
 28  * Extended AENS name max expiration time from 50000 generations (~100 days) to
 29    180000 generations (~375 days).
 30  
 31  * Changed how a meta transaction TTL's is being validated: so far it used to
 32    be the outermost transaction's ttl that was taken into account, now it is
 33    the innermost one instead. Meta transactions no longer have TTL.
 34  
 35  * Fixed a protocol issue: a valid force progress call with invalid CallData or
 36    failing call would result in on-chain transaction but tokens from the caller
 37    would still be moved to the forced contract. This is fixed and failed calls
 38    in successful force progress transactions result in rollback of the
 39    off-chain balances.
 40  
 41  * Improved the functionality of State Channel delegates: now they can provide
 42    `channel_solo_snapshot_tx` as well. This is really handy in cases one party
 43    is missing and the other is doing malicious force progress on-chain while the
 44    channel is still open.
 45  
 46  * Revisited the State Channel delegates: so far they were a shared list for
 47    both participants. From Iris on, delegates are per peer: there is a list of
 48    delegates for the `initiator` and another one for the `responder`. Old
 49    channel objects can still be used but users are strongly recommended to reset
 50    their `delegates` list if they had any. Note that the HTTP representations
 51    are changed accordingly.
 52  
 53  * Allowed delegates to force progress on behalf of the user that authorized
 54    them to do so.
 55  
 56  * Improved garbage collector for all Fate contracts form Iris
 57  
 58  * Fate contracts of different versions can now call each other (Fate1 can call Fate2 and vice-versa)
 59  
 60  * Opcode availability and behaviour now depends on VM version of the contract
 61    (Fate2 opcodes are available both when Fate2 contract is called directly and
 62    when called by another (possibly Fate1) contract)
 63  
 64  * Generalized accounts, allow access to the signed transaction within the authentication context:
 65  ```
 66  switch(Auth.tx)
 67    Spend(from, to, amount, payload) => ...
 68    AENSTransfer(from, to, name) => ...
 69    ...
 70  ```
 71    This enables more use-cases, for example in combination with PayingForTx.
 72  
 73  * Added more crypto primitives (mainly pairing operations) for BLS12-381. This
 74    enables for example Zero-knowledge proofs and more multi-signature schemes.
 75  
 76  * Added functions related to strings. It introduces `to_list` and `from_list`
 77    primitives that enables flexible string manipulation. `Strings.aes` standard
 78    library functions include many useful string functions.
 79  
 80  * Added the possibility to query an oracle by name hash. A name pointer can
 81    map `oracle_pubkey` to an oracle to enable query by name hash.
 82  
 83  * Added a new transaction to the protocol. `PayingForTx` allows an account to pay
 84    for a transaction on behalf of someone else. This means paying for fees and
 85    gas cost, but it will **not** cover the amount spent by the transaction just
 86    the "the cost of the transaction" (and the extra size added by wrapping the
 87    original transaction).
 88  
 89  * Fixed a bug in the contract store garbage collector causing maps to be
 90    more expensive than they should be.
 91  
 92  * Added support for protected contract calls. Making a contract call with the named
 93    argument `protected` set to `true` wraps the result of the call in an
 94    `option` type, returning `Some(res)` if the call succeeds with result `res`
 95    and `None` if the call fails for any reason. If the call fails, any
 96    side-effects it performed are rolled back.
 97  
 98  * AENS pointers are now limited, this is enforced when updating a name:
 99    - No duplicate pointer keys.
100    - Pointer keys are not longer than 256 bytes.
101    - A name can not have more than 32 pointers.
102    When a name is updated, or looked up, inside a Sophia contract keys
103    that are no longer valid are automatically removed.
104  
105  * Added support for `CREATE` opcode
106  
107  * Added support for `CLONE` opcode
108  
109  * Added support for `CLONE_G` opcode
110  
111  * Added support for `BYTECODE_HASH` opcode
112  
113  * Included full FATE 2 code with init in state trees. This also applies to off-chain contracts in state channels
114  
115  * Changed comparison and MAP\_TO\_LIST FATE opcodes to follow ordering as defined in `aebytecode`
116  
117  * Added a new FEE opcode that returns call transaction fee
118  
119  * Fixed `STR_REVERSE` to reverse on unicode codepoints instead of raw bytes
120  
121  * Deprecated Ubuntu 16.04 support. EOL Apr 2021.
122  
123  * Introduced a new HTTP API for asking the node to provide a correct
124    `paying_for_tx`. It is marked as `debug` and it is intended to be used while
125    developing tools that produce that transaction. This API must not be used in
126    real-life scenarios. Since the inner transaction has a specific
127    `network_id`, a proper check has been added to the API so attempts to create
128    an erroneous `paying_for_tx` will fail.
129  
130  * Revisited gas prices and gas charging mechanism. The main change is that gas
131    will, in some cases, be charged earlier - i.e. contracts run out of gas
132    before expensive operations rather than after. This should make the FATE VM
133    more efficient. Gas prices have also been adjusted and new operations have
134    been calibrated.
135  
136  * Introduced a new HTTP endpoint: `/dry-run`. It is part of the `external`
137    interface and should be preferred over the existing `debug` endpoint. It
138    comes with some protections for the node: all transactions/calls provided
139    are limited to a total amount of `gas` that they can consume. There is a new
140    setting in the config where the node operator can change this according to
141    their needs, the default value is 6 000 000 gas. The new endpoint is
142    disabled by default and can be enabled via the new API group `dry-run`.
143  
144  Please join the **mainnet** by following the instructions in the documentation below,
145  and let us know if you have any problems by [opening a ticket](https://github.com/aeternity/aeternity/issues).
146  Troubleshooting of common issues is documented [in the wiki](https://github.com/aeternity/aeternity/wiki/Troubleshooting).
147  
148  ## Documentation
149  
150  For an overview of the installation process for different platforms,
151  building the package from source, configuration and operation of the Aeternity
152  node please refer to [Aeternity node documentation](https://docs.aeternity.io/).