sophia/master/CHANGELOG/index.html

1940 lines
56 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../favicon.png">
<meta name="generator" content="mkdocs-1.2.4, mkdocs-material-7.3.6">
<title>Changelog - æternity Sophia Language</title>
<link rel="stylesheet" href="../assets/stylesheets/main.a57b2b03.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.3f5d1f46.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="pink" data-md-color-accent="pink">
<script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<script>var palette=__get("__palette");if(null!==palette&&"object"==typeof palette.color)for(var key in palette.color)document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#changelog" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="æternity Sophia Language" class="md-header__button md-logo" aria-label="æternity Sophia Language" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
æternity Sophia Language
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Changelog
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="pink" data-md-color-accent="pink" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="pink" data-md-color-accent="pink" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08z"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/aeternity/aesophia" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="æternity Sophia Language" class="md-nav__button md-logo" aria-label="æternity Sophia Language" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
æternity Sophia Language
</label>
<div class="md-nav__source">
<a href="https://github.com/aeternity/aesophia" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item">
<a href="../sophia_syntax/" class="md-nav__link">
Syntax
</a>
</li>
<li class="md-nav__item">
<a href="../sophia_features/" class="md-nav__link">
Features
</a>
</li>
<li class="md-nav__item">
<a href="../sophia_stdlib/" class="md-nav__link">
Standard library
</a>
</li>
<li class="md-nav__item">
<a href="../sophia_examples/" class="md-nav__link">
Contract examples
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Changelog
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Changelog
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#unreleased" class="md-nav__link">
Unreleased
</a>
<nav class="md-nav" aria-label="Unreleased">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed" class="md-nav__link">
Removed
</a>
</li>
<li class="md-nav__item">
<a href="#fixed" class="md-nav__link">
Fixed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#701" class="md-nav__link">
7.0.1
</a>
<nav class="md-nav" aria-label="7.0.1">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_1" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_1" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#fixed_1" class="md-nav__link">
Fixed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#700" class="md-nav__link">
7.0.0
</a>
<nav class="md-nav" aria-label="7.0.0">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_2" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_2" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_1" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#610-2021-10-20" class="md-nav__link">
6.1.0 - 2021-10-20
</a>
<nav class="md-nav" aria-label="6.1.0 - 2021-10-20">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_3" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_3" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#602-2021-07-05" class="md-nav__link">
6.0.2 2021-07-05
</a>
<nav class="md-nav" aria-label="6.0.2 2021-07-05">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#changed_4" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#601-2021-06-24" class="md-nav__link">
6.0.1 2021-06-24
</a>
<nav class="md-nav" aria-label="6.0.1 2021-06-24">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#changed_5" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#600-2021-05-26" class="md-nav__link">
6.0.0 2021-05-26
</a>
<nav class="md-nav" aria-label="6.0.0 2021-05-26">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_4" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_6" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_2" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#500-2021-04-30" class="md-nav__link">
5.0.0 2021-04-30
</a>
<nav class="md-nav" aria-label="5.0.0 2021-04-30">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_5" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_7" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_3" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#430" class="md-nav__link">
4.3.0
</a>
<nav class="md-nav" aria-label="4.3.0">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_6" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_8" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_4" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#420-2020-01-15" class="md-nav__link">
4.2.0 - 2020-01-15
</a>
<nav class="md-nav" aria-label="4.2.0 - 2020-01-15">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_7" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_9" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_5" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#410-2019-11-26" class="md-nav__link">
4.1.0 - 2019-11-26
</a>
<nav class="md-nav" aria-label="4.1.0 - 2019-11-26">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_8" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_10" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_6" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#400-2019-10-11" class="md-nav__link">
4.0.0 - 2019-10-11
</a>
<nav class="md-nav" aria-label="4.0.0 - 2019-10-11">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_9" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_11" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_7" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#320-2019-06-28" class="md-nav__link">
3.2.0 - 2019-06-28
</a>
<nav class="md-nav" aria-label="3.2.0 - 2019-06-28">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_10" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_12" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_8" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#310-2019-06-03" class="md-nav__link">
3.1.0 - 2019-06-03
</a>
<nav class="md-nav" aria-label="3.1.0 - 2019-06-03">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_11" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_13" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_9" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#300-2019-05-21" class="md-nav__link">
3.0.0 - 2019-05-21
</a>
<nav class="md-nav" aria-label="3.0.0 - 2019-05-21">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_12" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_14" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_10" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#210-2019-04-11" class="md-nav__link">
2.1.0 - 2019-04-11
</a>
<nav class="md-nav" aria-label="2.1.0 - 2019-04-11">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_13" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_15" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#200-2019-03-11" class="md-nav__link">
2.0.0 - 2019-03-11
</a>
<nav class="md-nav" aria-label="2.0.0 - 2019-03-11">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_14" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_16" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#unreleased" class="md-nav__link">
Unreleased
</a>
<nav class="md-nav" aria-label="Unreleased">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed" class="md-nav__link">
Removed
</a>
</li>
<li class="md-nav__item">
<a href="#fixed" class="md-nav__link">
Fixed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#701" class="md-nav__link">
7.0.1
</a>
<nav class="md-nav" aria-label="7.0.1">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_1" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_1" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#fixed_1" class="md-nav__link">
Fixed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#700" class="md-nav__link">
7.0.0
</a>
<nav class="md-nav" aria-label="7.0.0">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_2" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_2" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_1" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#610-2021-10-20" class="md-nav__link">
6.1.0 - 2021-10-20
</a>
<nav class="md-nav" aria-label="6.1.0 - 2021-10-20">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_3" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_3" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#602-2021-07-05" class="md-nav__link">
6.0.2 2021-07-05
</a>
<nav class="md-nav" aria-label="6.0.2 2021-07-05">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#changed_4" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#601-2021-06-24" class="md-nav__link">
6.0.1 2021-06-24
</a>
<nav class="md-nav" aria-label="6.0.1 2021-06-24">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#changed_5" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#600-2021-05-26" class="md-nav__link">
6.0.0 2021-05-26
</a>
<nav class="md-nav" aria-label="6.0.0 2021-05-26">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_4" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_6" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_2" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#500-2021-04-30" class="md-nav__link">
5.0.0 2021-04-30
</a>
<nav class="md-nav" aria-label="5.0.0 2021-04-30">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_5" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_7" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_3" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#430" class="md-nav__link">
4.3.0
</a>
<nav class="md-nav" aria-label="4.3.0">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_6" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_8" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_4" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#420-2020-01-15" class="md-nav__link">
4.2.0 - 2020-01-15
</a>
<nav class="md-nav" aria-label="4.2.0 - 2020-01-15">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_7" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_9" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_5" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#410-2019-11-26" class="md-nav__link">
4.1.0 - 2019-11-26
</a>
<nav class="md-nav" aria-label="4.1.0 - 2019-11-26">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_8" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_10" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_6" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#400-2019-10-11" class="md-nav__link">
4.0.0 - 2019-10-11
</a>
<nav class="md-nav" aria-label="4.0.0 - 2019-10-11">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_9" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_11" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_7" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#320-2019-06-28" class="md-nav__link">
3.2.0 - 2019-06-28
</a>
<nav class="md-nav" aria-label="3.2.0 - 2019-06-28">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_10" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_12" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_8" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#310-2019-06-03" class="md-nav__link">
3.1.0 - 2019-06-03
</a>
<nav class="md-nav" aria-label="3.1.0 - 2019-06-03">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_11" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_13" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_9" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#300-2019-05-21" class="md-nav__link">
3.0.0 - 2019-05-21
</a>
<nav class="md-nav" aria-label="3.0.0 - 2019-05-21">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_12" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_14" class="md-nav__link">
Changed
</a>
</li>
<li class="md-nav__item">
<a href="#removed_10" class="md-nav__link">
Removed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#210-2019-04-11" class="md-nav__link">
2.1.0 - 2019-04-11
</a>
<nav class="md-nav" aria-label="2.1.0 - 2019-04-11">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_13" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_15" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#200-2019-03-11" class="md-nav__link">
2.0.0 - 2019-03-11
</a>
<nav class="md-nav" aria-label="2.0.0 - 2019-03-11">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#added_14" class="md-nav__link">
Added
</a>
</li>
<li class="md-nav__item">
<a href="#changed_16" class="md-nav__link">
Changed
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="changelog">Changelog</h1>
<p>All notable changes to this project will be documented in this file.</p>
<p>The format is based on <a href="https://keepachangelog.com/en/1.0.0/">Keep a Changelog</a>,
and this project adheres to <a href="https://semver.org/spec/v2.0.0.html">Semantic Versioning</a>.</p>
<h2 id="unreleased"><a href="https://github.com/aeternity/aesophia/compare/v7.0.1...HEAD">Unreleased</a></h2>
<h3 id="added">Added</h3>
<ul>
<li>Options to enable/disable certain optimizations.</li>
<li>The ability to call a different instance of the current contract
<div class="highlight"><pre><span></span><code>contract Main =
entrypoint spend(x : int) : int = x
entrypoint f(c : Main) : int = c.spend(10)
</code></pre></div></li>
<li>Return a mapping from variables to FATE registers in the compilation output.</li>
</ul>
<h3 id="changed">Changed</h3>
<ul>
<li>Type definitions serialised to ACI as <code>typedefs</code> field instead of <code>type_defs</code> to increase compatibility.</li>
</ul>
<h3 id="removed">Removed</h3>
<h3 id="fixed">Fixed</h3>
<h2 id="701"><a href="https://github.com/aeternity/aesophia/compare/v7.0.0...v7.0.1">7.0.1</a></h2>
<h3 id="added_1">Added</h3>
<ul>
<li>Add CONTRIBUTING.md file.</li>
</ul>
<h3 id="changed_1">Changed</h3>
<ul>
<li>Update Sophia syntax docs to include missing information about existing syntax.</li>
</ul>
<h3 id="fixed_1">Fixed</h3>
<ul>
<li><a href="https://github.com/aeternity/aesophia/issues/404">404</a> Contract polymorphism crashes on non-obvious child contract typing.</li>
</ul>
<h2 id="700"><a href="https://github.com/aeternity/aesophia/compare/v6.1.0...v7.0.0">7.0.0</a></h2>
<h3 id="added_2">Added</h3>
<ul>
<li>Added support for <code>EXIT</code> opcode via <code>exit : (string) =&gt; 'a</code> function (behaves same as <code>ABORT</code>, but consumes all gas).</li>
<li>Compiler warnings for the following: shadowing, negative spends, division by zero, unused functions, unused includes, unused stateful annotations, unused variables, unused parameters, unused user-defined type, dead return value.</li>
<li>The pipe operator |&gt;
<div class="highlight"><pre><span></span><code>[1, 2, 3] |&gt; List.first |&gt; Option.is_some // Option.is_some(List.first([1, 2, 3]))
</code></pre></div></li>
<li>Allow binary operators to be used as lambdas
<div class="highlight"><pre><span></span><code>function sum(l : list(int)) : int = foldl((+), 0, l)
function logical_and(x, y) = (&amp;&amp;)(x, y)
</code></pre></div></li>
<li>Contract interfaces polymorphism</li>
</ul>
<h3 id="changed_2">Changed</h3>
<ul>
<li>Error messages have been restructured (less newlines) to provide more unified errors. Also <code>pp_oneline/1</code> has been added.</li>
<li>Ban empty record definitions (e.g. <code>record r = {}</code> would give an error).</li>
</ul>
<h3 id="removed_1">Removed</h3>
<ul>
<li>Support for AEVM has been entirely wiped</li>
</ul>
<h2 id="610-2021-10-20"><a href="https://github.com/aeternity/aesophia/compare/v6.0.2...v6.1.0">6.1.0</a> - 2021-10-20</h2>
<h3 id="added_3">Added</h3>
<ul>
<li><code>Bitwise</code> stdlib</li>
<li><code>Set</code> stdlib</li>
<li><code>Option.force_msg</code></li>
<li>Loading namespaces into the current scope (e.g. <code>using Pair</code>)</li>
<li>Assign patterns to variables (e.g. <code>let x::(t = y::_) = [1, 2, 3, 4]</code> where <code>t == [2, 3, 4]</code>)</li>
<li>Add builtin types (<code>AENS.name, AENS.pointee, Chain.ttl, Chain.base_tx, Chain.ga_meta_tx, Chain.paying_for_tx</code>) to
the calldata and result decoder</li>
<li>Patterns guards
<div class="highlight"><pre><span></span><code>switch(x)
a::[] | a &gt; 10 =&gt; 1
_ =&gt; 2
</code></pre></div>
<div class="highlight"><pre><span></span><code>function
f(a::[]) | a &gt; 10 = 1
f(_) = 2
</code></pre></div></li>
</ul>
<h3 id="changed_3">Changed</h3>
<ul>
<li>Fixed the ACI renderer, it shouldn't drop the <code>stateful</code> modifier</li>
</ul>
<h2 id="602-2021-07-05"><a href="https://github.com/aeternity/aesophia/compare/v6.0.1...v6.0.2">6.0.2</a> 2021-07-05</h2>
<h3 id="changed_4">Changed</h3>
<ul>
<li><code>List.from_to_step</code> now forbids non-positive step (this change does
<em>not</em> alter the behavior of the previously deployed contracts)</li>
<li>Fixed leaking state between contracts</li>
</ul>
<h2 id="601-2021-06-24"><a href="https://github.com/aeternity/aesophia/compare/v6.0.0...v6.0.1">6.0.1</a> 2021-06-24</h2>
<h3 id="changed_5">Changed</h3>
<ul>
<li>Fixed a bug in calldata encoding for contracts containing multiple contracts</li>
<li>Fixed a missing <code>include</code> in the <code>Frac</code> standard library</li>
</ul>
<h2 id="600-2021-05-26"><a href="https://github.com/aeternity/aesophia/compare/v5.0.0...v6.0.0">6.0.0</a> 2021-05-26</h2>
<h3 id="added_4">Added</h3>
<ul>
<li>Child contracts</li>
<li><code>Chain.clone</code></li>
<li><code>Chain.create</code></li>
<li><code>Chain.bytecode_hash</code></li>
<li>Minor support for variadic functions</li>
<li><code>void</code> type that represents an empty type</li>
<li><code>Call.fee</code> builtin</li>
</ul>
<h3 id="changed_6">Changed</h3>
<ul>
<li>Contract interfaces must be now invocated by <code>contract interface</code> keywords</li>
<li><code>main</code> keyword to indicate the main contract in case there are child contracts around</li>
<li><code>List.sum</code> and <code>List.product</code> no longer use <code>List.foldl</code></li>
</ul>
<h3 id="removed_2">Removed</h3>
<h2 id="500-2021-04-30"><a href="https://github.com/aeternity/aesophia/compare/v4.3.0...v5.0.0">5.0.0</a> 2021-04-30</h2>
<h3 id="added_5">Added</h3>
<ul>
<li>A new and improved <a href="https://github.com/aeternity/aesophia/blob/master/docs/sophia_stdlib.md#string"><code>String</code> standard library</a>
has been added. Use it by <code>include "String.aes"</code>. It includes functions for
turning strings into lists of characters for detailed manipulation. For
example:
<div class="highlight"><pre><span></span><code>include &quot;String.aes&quot;
contract C =
entrypoint filter_all_a(s: string) : string =
String.from_list(List.filter((c : char) =&gt; c != &#39;a&#39;, String.to_list(s)))
</code></pre></div>
will return a list with all <code>a</code>'s removed.</li>
</ul>
<p>There are also convenience functions <code>split</code>, <code>concat</code>, <code>to_upper</code>,
<code>to_lower</code>, etc.</p>
<p>All String functions in FATEv2 operate on unicode code points.
- Operations for pairing-based cryptography has been added the operations
are in the standard library <a href="https://github.com/aeternity/aesophia/blob/master/docs/sophia_stdlib.md#bls12_381">BLS12_381</a>.
With these operations it is possible to do Zero Knowledge-proofs, etc.
The operations are for the BLS12-381 curve (as the name suggests).
- Calls to functions in other contracts (i.e. <em>remote calls</em>) can now be
<a href="https://github.com/aeternity/aesophia/blob/master/docs/sophia.md#protected-contract-calls"><code>protected</code></a>.
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 <code>protected : bool</code>
(default <code>false</code>).</p>
<p>If <code>protected = true</code> the result of the contract call is wrapped in an
<code>option</code>, and <code>Some(value)</code> indicates a succesful execution and <code>None</code>
indicates that the contract call failed. Note: any gas consumed until
the failure is still charged, but all side effects in the remote
contract are rolled back on failure.
- A new chain operation <a href="https://github.com/aeternity/aesophia/blob/master/docs/sophia.md#aens-interface"><code>AENS.update</code></a>
is supported.
- New chain exploring operations <code>AENS.lookup</code> and <code>Oracle.expiry</code> to
look up an AENS record and the expiry of an Oracle respectively, are added.
- Transaction introspection (<code>Auth.tx</code>) has been added. When a Generalized
account is authorized, the authorization function needs access to the
transaction (and the transaction hash) for the wrapped transaction. The
transaction and the transaction hash is available <code>Auth.tx</code>, it is only
available during authentication if invoked by a normal contract call
it returns <code>None</code>. Example:
<div class="highlight"><pre><span></span><code>switch(Auth.tx)
None =&gt; abort(&quot;Not in Auth context&quot;)
Some(tx0) =&gt;
switch(tx0.tx)
Chain.SpendTx(_, amount, _) =&gt; amount &gt; 400
Chain.ContractCallTx(_, _) =&gt; true
_ =&gt; false
</code></pre></div>
- A debug mode is a added to the compiler. Right now its only use is to
turn off hermetization.</p>
<h3 id="changed_7">Changed</h3>
<ul>
<li>The function <code>Chain.block_hash(height)</code> is now (in FATEv2) defined for
the current height - this used to be an error.</li>
<li>Standard library: Sort is optimized to do <code>mergesort</code> and a <code>contains</code>
function is added.</li>
<li>Improved type errors and explicit errors for some syntax errors (empty code
blocks, etc.).</li>
<li>Compiler optimization: The ACI is generated alongside bytecode. This means
that multiple compiler passes can be avoided.</li>
<li>Compiler optimization: Improved parsing (less stack used when transpiled).</li>
<li>A bug where constraints were handled out of order fixed.</li>
<li>Fixed calldata decoding for singleton records.</li>
<li>Improved the documentation w.r.t. signatures, especially stressing the fact that
the network ID is a part of what is signed.</li>
</ul>
<h3 id="removed_3">Removed</h3>
<h2 id="430"><a href="https://github.com/aeternity/aesophia/compare/v4.2.0...v4.3.0">4.3.0</a></h2>
<h3 id="added_6">Added</h3>
<ul>
<li>Added documentation (moved from <code>protocol</code>)</li>
<li><code>Frac.aes</code> library for rational numbers</li>
<li>Added some more meaningful error messages</li>
<li>Exported several parsing functionalities</li>
<li>With option <code>keep_included</code> it is possible to see which files were included during the parse</li>
<li>There is a function <code>run_parser</code> that be used to evaluate any parsing rule</li>
<li>Exported parsers: <code>body</code>, <code>type</code> and <code>decl</code></li>
</ul>
<h3 id="changed_8">Changed</h3>
<ul>
<li>Performance improvements in the standard library</li>
<li>Fixed ACI encoder to handle <code>-</code> unary operator</li>
<li>Fixed including by absolute path</li>
<li>Fixed variant type printing in the ACI error messages</li>
<li>Fixed pretty printing of combined function clauses</li>
</ul>
<h3 id="removed_4">Removed</h3>
<ul>
<li><code>let</code> definitions are no longer supported in the toplevel of the contract</li>
<li>type declarations are no longer supported</li>
</ul>
<h2 id="420-2020-01-15"><a href="https://github.com/aeternity/aesophia/compare/v4.1.0...v4.2.0">4.2.0</a> - 2020-01-15</h2>
<h3 id="added_7">Added</h3>
<ul>
<li>Allow separate entrypoint/function type signature and definition, and pattern
matching in left-hand sides:
<div class="highlight"><pre><span></span><code> function
length : list(&#39;a) =&gt; int
length([]) = 0
length(x :: xs) = 1 + length(xs)
</code></pre></div></li>
<li>Allow pattern matching in list comprehension generators (filtering out match
failures):
<div class="highlight"><pre><span></span><code> function somes(xs : list(option(&#39;a))) : list(&#39;a) =
[ x | Some(x) &lt;- xs ]
</code></pre></div></li>
<li>Allow pattern matching in let-bindings (aborting on match failures):
<div class="highlight"><pre><span></span><code> function test(m : map(int, int)) =
let Some(x) = Map.lookup(m, 0)
x
</code></pre></div></li>
</ul>
<h3 id="changed_9">Changed</h3>
<ul>
<li>FATE code generator improvements.</li>
<li>Bug fix: Handle qualified constructors in patterns.</li>
<li>Bug fix: Allow switching also on negative numbers.</li>
</ul>
<h3 id="removed_5">Removed</h3>
<h2 id="410-2019-11-26"><a href="https://github.com/aeternity/aesophia/compare/v4.0.0...v4.1.0">4.1.0</a> - 2019-11-26</h2>
<h3 id="added_8">Added</h3>
<ul>
<li>Support encoding and decoding bit fields in call arguments and results.</li>
</ul>
<h3 id="changed_10">Changed</h3>
<ul>
<li>Various improvements to FATE code generator.</li>
</ul>
<h3 id="removed_6">Removed</h3>
<h2 id="400-2019-10-11"><a href="https://github.com/aeternity/aesophia/compare/v3.2.0...v4.0.0">4.0.0</a> - 2019-10-11</h2>
<h3 id="added_9">Added</h3>
<ul>
<li><code>Address.to_contract</code> - casts an address to a (any) contract type.</li>
<li>Pragma to check compiler version, e.g. <code>@compiler &gt;= 4.0</code>.</li>
<li>Handle numeric escapes, i.e. <code>"\x19Ethereum Signed Message:\n"</code>, and similar strings.</li>
<li><code>Bytes.concat</code> and <code>Bytes.split</code> are added to be able to
(de-)construct byte arrays.</li>
<li><code>[a..b]</code> language construct, returning the list of numbers between
<code>a</code> and <code>b</code> (inclusive). Returns the empty list if <code>a</code> &gt; <code>b</code>.</li>
<li><a href="https://github.com/aeternity/aesophia/blob/master/docs/sophia_stdlib.md">Standard libraries</a></li>
<li>Checks that <code>init</code> is not called from other functions.</li>
<li>FATE backend - the compiler is able to produce VM code for both <code>AEVM</code> and <code>FATE</code>. Many
of the APIs now take <code>{backend, aevm | fate}</code> to decide wich backend to produce artifacts
for.</li>
<li>New builtin functions <code>Crypto.ecrecover_secp256k1: (hash, bytes(65)) =&gt; option(bytes(20))</code>
and <code>Crypto.ecverify_secp256k1 : (hash, bytes(20), bytes(65)) =&gt; bool</code> for recovering
and verifying an Ethereum address for a message hash and a signature.</li>
<li>Sophia supports list comprehensions known from languages like Python, Haskell or Erlang.
Example syntax:
<div class="highlight"><pre><span></span><code>[x + y | x &lt;- [1,2,3,4,5], let k = x*x, if (k &gt; 5), y &lt;- [k, k+1, k+2]]
// yields [12,13,14,20,21,22,30,31,32]
</code></pre></div></li>
<li>A new contract, and endpoint, modifier <code>payable</code> is introduced. Contracts, and enpoints,
that shall be able to receive funds should be marked as payable. <code>Address.is_payable(a)</code>
can be used to check if an (contract) address is payable or not.</li>
</ul>
<h3 id="changed_11">Changed</h3>
<ul>
<li>Nice type error if contract function is called as from a namespace.</li>
<li>Fail on function definitions in contracts other than the main contract.</li>
<li>Bug fix in variable optimization - don't discard writes to the store/state.</li>
<li>Bug fixes in error reporting.</li>
<li>Bug fix in variable liveness analysis for FATE.</li>
<li>Error messages are changed into a uniform format, and more helpful
messages have been added.</li>
<li><code>Crypto.&lt;hash_fun&gt;</code> and <code>String.&lt;hash_fun&gt;</code> for byte arrays now only
hash the actual byte array - not the internal ABI format.</li>
<li>More strict checks for polymorphic oracles and higher order oracles
and entrypoints.</li>
<li><code>AENS.claim</code> is updated with a <code>NameFee</code> field - to be able to do
name auctions within contracts.</li>
<li>Fixed a bug in <code>Bytes.to_str</code> for AEVM.</li>
<li>New syntax for tuple types. Now 0-tuple type is encoded as <code>unit</code> instead of <code>()</code> and
regular tuples are encoded by interspersing inner types with <code>*</code>, for instance <code>int * string</code>.
Parens are not necessary. Note it only affects the types, values remain as their were before,
so <code>(1, "a") : int * string</code></li>
<li>The <code>AENS.transfer</code> and <code>AENS.revoke</code> functions have been updated to take a name <code>string</code>
instead of a name <code>hash</code>.</li>
<li>Fixed a bug where the <code>AEVM</code> backend complained about a missing <code>init</code> function when
trying to generate calldata from an ACI-generated interface.</li>
<li>Compiler now returns the ABI-version in the compiler result map.</li>
<li>Renamed <code>Crypto.ecverify</code> and <code>Crypto.ecverify_secp256k1</code> into <code>Crypto.verify_sig</code> and
<code>Crypto.verify_sig_secp256k1</code> respectively.</li>
</ul>
<h3 id="removed_7">Removed</h3>
<h2 id="320-2019-06-28"><a href="https://github.com/aeternity/aesophia/compare/v3.1.0...v3.2.0">3.2.0</a> - 2019-06-28</h2>
<h3 id="added_10">Added</h3>
<ul>
<li>New builtin function <code>require : (bool, string) =&gt; ()</code>. Defined as
<div class="highlight"><pre><span></span><code>function require(b, err) = if(!b) abort(err)
</code></pre></div></li>
<li>New builtin functions
<div class="highlight"><pre><span></span><code>Bytes.to_str : bytes(_) =&gt; string
Bytes.to_int : bytes(_) =&gt; int
</code></pre></div>
for converting a byte array to a hex string and interpreting it as a
big-endian encoded integer respectively.</li>
</ul>
<h3 id="changed_12">Changed</h3>
<ul>
<li>Public contract functions must now be declared as <em>entrypoints</em>:
<div class="highlight"><pre><span></span><code>contract Example =
// Exported
entrypoint exported_fun(x) = local_fun(x)
// Not exported
function local_fun(x) = x
</code></pre></div>
Functions in namespaces still use <code>function</code> (and <code>private function</code> for
private functions).</li>
<li>The return type of <code>Chain.block_hash(height)</code> has changed, it used to
be <code>int</code>, where <code>0</code> denoted an incorrect height. New return type is
<code>option(hash)</code>, where <code>None</code> represents an incorrect height.</li>
<li>Event name hashes now use BLAKE2b instead of Keccak256.</li>
<li>Fixed bugs when defining record types in namespaces.</li>
<li>Fixed a bug in include path handling when passing options to the compiler.</li>
</ul>
<h3 id="removed_8">Removed</h3>
<h2 id="310-2019-06-03"><a href="https://github.com/aeternity/aesophia/compare/v3.0.0...v3.1.0">3.1.0</a> - 2019-06-03</h2>
<h3 id="added_11">Added</h3>
<h3 id="changed_13">Changed</h3>
<ul>
<li>Keyword <code>indexed</code> is now optional for word typed (<code>bool</code>, <code>int</code>, <code>address</code>,
...) event arguments.</li>
<li>State variable pretty printing now produce <code>'a, 'b, ...</code> instead of <code>'1, '2, ...</code>.</li>
<li>ACI is restructured and improved:<ul>
<li><code>state</code> and <code>event</code> types (if present) now appear at the top level.</li>
<li>Namespaces and remote interfaces are no longer ignored.</li>
<li>All type definitions are included in the interface rendering.</li>
<li>API functions are renamed, new functions are <code>contract_interface</code>
and <code>render_aci_json</code>.</li>
</ul>
</li>
<li>Fixed a bug in <code>create_calldata</code>/<code>to_sophia_value</code> - it can now handle negative
literals.</li>
</ul>
<h3 id="removed_9">Removed</h3>
<h2 id="300-2019-05-21"><a href="https://github.com/aeternity/aesophia/compare/v2.1.0...v3.0.0">3.0.0</a> - 2019-05-21</h2>
<h3 id="added_12">Added</h3>
<ul>
<li><code>stateful</code> annotations are now properly enforced. Functions must be marked stateful
in order to update the state or spend tokens.</li>
<li>Primitives <code>Contract.creator</code>, <code>Address.is_contract</code>, <code>Address.is_oracle</code>,
<code>Oracle.check</code> and <code>Oracle.check_query</code> has been added to Sophia.</li>
<li>A byte array type <code>bytes(N)</code> has been added to generalize <code>hash (== bytes(32))</code> and
<code>signature (== bytes(64))</code> and allow for byte arrays of arbitrary fixed length.</li>
<li><code>Crypto.ecverify_secp256k1</code> has been added.</li>
</ul>
<h3 id="changed_14">Changed</h3>
<ul>
<li>Address literals (+ Oracle, Oracle query and remote contracts) have been changed
from <code>#&lt;hex&gt;</code> to address as <code>ak_&lt;base58check&gt;</code>, oracle <code>ok_&lt;base58check&gt;</code>,
oracle query <code>oq_&lt;base58check&gt;</code> and remote contract <code>ct_&lt;base58check&gt;</code>.</li>
<li>The compilation and typechecking of <code>letfun</code> (e.g. <code>let m(f, xs) = map(f, xs)</code>) was
not working properly and has been fixed.</li>
</ul>
<h3 id="removed_10">Removed</h3>
<ul>
<li><code>let rec</code> has been removed from the language, it has never worked.</li>
<li>The standalone CLI compiler is served in the repo <code>aeternity/aesophia_cli</code> and has
been completely removed from <code>aesophia</code>.</li>
</ul>
<h2 id="210-2019-04-11"><a href="https://github.com/aeternity/aesophia/compare/v2.0.0...v2.1.0">2.1.0</a> - 2019-04-11</h2>
<h3 id="added_13">Added</h3>
<ul>
<li>Stubs (not yet wired up) for compilation to FATE</li>
<li>Add functions specific for Calldata decoding</li>
<li>Support for <code>Auth.tx_hash</code>, not available in AEVM until Fortuna release</li>
</ul>
<h3 id="changed_15">Changed</h3>
<ul>
<li>Improvements to the ACI generator</li>
</ul>
<h2 id="200-2019-03-11"><a href="https://github.com/aeternity/aesophia/tag/v2.0.0">2.0.0</a> - 2019-03-11</h2>
<h3 id="added_14">Added</h3>
<ul>
<li>Add <code>Crypto.ecverify</code> to the compiler.</li>
<li>Add <code>Crypto.sha3</code>, <code>Crypto.blake2</code>, <code>Crypto.sha256</code>, <code>String.blake2</code> and
<code>String.sha256</code> to the compiler.</li>
<li>Add the <code>bits</code> type for working with bit fields in Sophia.</li>
<li>Add Namespaces to Sophia in order to simplify using library contracts, etc.</li>
<li>Add a missig type check on the <code>init</code> function - detects programmer errors earlier.</li>
<li>Add the ACI (Aeternity Contract Interface) generator.</li>
</ul>
<h3 id="changed_16">Changed</h3>
<ul>
<li>Use native bit shift operations in builtin functions, reducing gas cost.</li>
<li>Improve type checking of <code>record</code> fields - generates more understandable error messages.</li>
<li>Improved, more coherent, error messages.</li>
<li>Simplify calldata creation - instead of passing a compiled contract, simply
pass a (stubbed) contract string.</li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../sophia_examples/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Contract examples" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Contract examples
</div>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.tabs.link", "search.highlight", "search.share", "search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../assets/javascripts/workers/search.fcfe8b6d.min.js", "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.b1047164.min.js"></script>
</body>
</html>