Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 13.1.0 #1848

Merged
merged 81 commits into from
Jul 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
80d97fa
fix(aepp): call `onDetected` always with `newWallet`
davidyuk Apr 26, 2023
f7f3dc2
refactor: enable strictPropertyInitialization
davidyuk Apr 27, 2023
03bc24c
refactor: enable useUnknownInCatchVariables
davidyuk Apr 27, 2023
d93e163
refactor: enable noImplicitThis
davidyuk Apr 27, 2023
6cbaaf5
chore: use `strict` instead of separate options
davidyuk Apr 27, 2023
5b1e4c7
ci: update GH actions and conda.yml
davidyuk May 2, 2023
e2e286d
docs: links to the latest version of sdk
davidyuk May 5, 2023
1f8c70a
docs(chain): document possible address lengths
davidyuk May 5, 2023
9462add
fix: reject prefixes other then provided in isAddressValid
davidyuk May 5, 2023
f4a0ebc
test: use ensureEqual instead of throwing exception
davidyuk Apr 29, 2023
75af445
chore: update node to 6.8.1
davidyuk May 5, 2023
3d8b336
docs(aepp): extract SpendCoins component
davidyuk May 6, 2023
359f6c6
docs(aepp): assume sdk is always provided
davidyuk May 6, 2023
42cf70f
docs(aepp): add message sign example
davidyuk May 6, 2023
0b18173
docs: fix path not found warnings
davidyuk May 9, 2023
8046aef
Merge pull request #1801 from aeternity/feature/on-detected-fix
davidyuk May 9, 2023
a7cfe39
Merge pull request #1807 from aeternity/feature/update-actions
davidyuk May 9, 2023
7693fc1
Merge pull request #1809 from aeternity/feature/address-length-docs
davidyuk May 9, 2023
98f4f3f
Merge pull request #1814 from aeternity/feature/aepp-message-signing
davidyuk May 9, 2023
7859338
Merge pull request #1810 from aeternity/feature/update-node-2
davidyuk May 9, 2023
194588f
Merge pull request #1803 from aeternity/feature/ts-strict
davidyuk May 9, 2023
68edc25
docs: deploy example aepps
davidyuk May 9, 2023
9a138a7
docs: fix link to vue@3 compatibility
davidyuk May 10, 2023
0dcf36c
Merge pull request #1820 from aeternity/feature/fix-link
davidyuk May 12, 2023
290758b
fix: `onAccount` option in AeSdkMethods
davidyuk May 17, 2023
0dcb239
Merge pull request #1825 from aeternity/feature/fix-AeSdkMethods
davidyuk May 22, 2023
efebbd1
fix: converting proxied options to JSON
davidyuk May 25, 2023
f628d8c
docs(wallet): remove Node and Compiler from tx confirmation popups
davidyuk May 25, 2023
332d1b5
fix(wallet): emit internal error if something broke while broadcast
davidyuk May 25, 2023
276699b
fix(wallet): throw reason of internal error to handle it in wallet
davidyuk May 25, 2023
f623684
docs: update badges
davidyuk May 27, 2023
725782b
feat(aepp,wallet): support inner transaction signing
davidyuk May 27, 2023
db0d96f
fix(tx-builder): decode tag in entry error message
davidyuk May 27, 2023
bcc9bbf
refactor(node): remove unused NodeInfo export
davidyuk May 30, 2023
dbd19e7
fix: provide types in exports field of package.json
davidyuk May 30, 2023
7c46ed7
ci(docs): generate report for example aepps
davidyuk Jun 2, 2023
fe2e23e
Merge pull request #1837 from aeternity/feature/fix-types
davidyuk Jun 5, 2023
5f24d8d
Merge pull request #1831 from aeternity/feature/update-readme
davidyuk Jun 5, 2023
517c875
Merge pull request #1828 from aeternity/feature/dont-expose-internal-…
davidyuk Jun 5, 2023
3661126
Merge pull request #1833 from aeternity/feature/inner-tx-in-aepp-wallet
davidyuk Jun 5, 2023
3653b13
Merge pull request #1830 from aeternity/feature/fix-stringify
davidyuk Jun 5, 2023
f50aa10
chore: inline versions into docker-compose
davidyuk May 28, 2023
68fcd5e
ci: run tests only on pull request
davidyuk May 28, 2023
6ccd9fc
chore(compiler): use fetch instead of https to get swagger file
davidyuk May 28, 2023
40bff1d
chore: update autorest deps
davidyuk May 28, 2023
e1fddf3
chore(node): remove unnecessary autorest transformation
davidyuk May 28, 2023
583a543
Merge pull request #1835 from aeternity/feature/update-autorest
davidyuk Jun 5, 2023
b51b0a3
feat(middleware): implement MiddlewareSubscriber
davidyuk Apr 29, 2023
14099b1
Merge pull request #1805 from aeternity/feature/middleware
davidyuk Jun 5, 2023
bd08a08
feat(middleware): generate autorest wrapper
davidyuk May 28, 2023
3d94c83
Merge pull request #1834 from aeternity/feature/middleware-autorest
davidyuk Jun 5, 2023
01546ed
refactor: explicitly specify exports to ease breaking changes tracking
davidyuk Jun 11, 2023
b62dcc6
fix(aens): more accurate name check in `isNameValid`
davidyuk Jun 12, 2023
f1322b1
feat(aens): add `ensureName` helper to check names
davidyuk Jun 12, 2023
481a654
refactor(aens): deprecate `NAME_BID_MAX_LENGTH`, use `isAuctionName`
davidyuk Jun 13, 2023
f837e90
feat(aens): support unicode names claim
davidyuk Jun 13, 2023
096fb7c
chore: update to non-staging compiler url
davidyuk Jun 15, 2023
e5e88cf
Merge pull request #1841 from aeternity/feature/update-compiler-url
davidyuk Jun 17, 2023
7509795
Merge pull request #1840 from aeternity/feature/unicode-names
davidyuk Jun 17, 2023
1e1db31
chore: specify fallback types in `exports` of package.json
davidyuk Jun 27, 2023
0c35fdc
chore(middleware): update swagger file to the latest version
davidyuk Jun 27, 2023
9033cd7
fix(contract): use fallback account if `onAccount` not provided
davidyuk Jun 28, 2023
d3d6c88
fix(tx-builder): `buildTx` produces the same type as `unpackTx` accepts
davidyuk Jun 29, 2023
d2a0941
Merge pull request #1849 from aeternity/feature/package-types
davidyuk Jul 4, 2023
4e70e21
Merge pull request #1853 from aeternity/feature/fix-tx-builder-type
davidyuk Jul 4, 2023
2e5e20e
Merge pull request #1851 from aeternity/feature/fix-fallback-account
davidyuk Jul 4, 2023
0c93860
Merge pull request #1850 from aeternity/feature/remove-mdw-workarounds
davidyuk Jul 4, 2023
b14fe12
chore(middleware): update swagger file to 1.52.0
davidyuk Jul 4, 2023
4ebd390
Merge pull request #1856 from aeternity/feature/remove-mdw-workarounds
davidyuk Jul 7, 2023
e5acdd4
feat(account): support signing typed data
davidyuk Jun 18, 2023
78ce3b2
feat(aepp,wallet): support signing typed data
davidyuk Jun 18, 2023
5952a7b
chore: add magic number to sign payload of typed data
davidyuk Jul 4, 2023
f696255
docs: briefly document typed data
davidyuk Jun 18, 2023
c8d2d87
Merge pull request #1843 from aeternity/feature/typed-data-signing
davidyuk Jul 7, 2023
a7f1d71
refactor(compiler): remove extra error transformation
davidyuk Jun 23, 2023
a12b5df
test(compiler): compare with exact aci
davidyuk Jun 23, 2023
329c7e6
chore(compiler): update cli to 7.2.1
davidyuk Jun 23, 2023
981bcf2
feat(compiler): add `generateAci`, `generateAciBySourceCode`
davidyuk Jun 23, 2023
22cc31b
chore(middleware): update to 1.53.0
davidyuk Jul 7, 2023
b35274b
Merge pull request #1847 from aeternity/feature/generate-aci
davidyuk Jul 7, 2023
d42bca6
chore(release): 13.1.0
davidyuk Jun 26, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .env

This file was deleted.

1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ module.exports = {
],
ignorePatterns: [
'dist', 'es', 'src/apis', 'docs/api', 'test/environment/ledger/browser', 'types-legacy',
'docs/examples', 'site',
],
rules: {
'rulesdir/tsdoc-syntax': 'error',
Expand Down
19 changes: 13 additions & 6 deletions .github/workflows/docs-develop.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
# TODO: combine with docs-release using if
name: Publish develop docs
on:
push:
branches: ['develop']

jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v2
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/cache@v2
python-version: 3.11
- uses: actions/cache@v3
with:
path: ~/.cache/pip3
key: ${{ runner.os }}-pip-${{ hashFiles('docs/requirements.txt') }}
- uses: actions/cache@v3
with:
path: |
~/.npm
~/.autorest
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
- run: pip3 install -r docs/requirements.txt
- run: git config --global user.email "github-action@users.noreply.github.com"
- run: git config --global user.name "GitHub Action"
- run: mike deploy --push develop
- run: mike deploy --push develop
20 changes: 13 additions & 7 deletions .github/workflows/docs-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,29 @@ name: Publish release docs
on:
release:
types: [released]

jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v2
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/cache@v2
python-version: 3.11
- uses: actions/cache@v3
with:
path: ~/.cache/pip3
key: ${{ runner.os }}-pip-${{ hashFiles('docs/requirements.txt') }}
- uses: actions/cache@v3
with:
path: |
~/.npm
~/.autorest
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
- run: pip3 install -r docs/requirements.txt
- run: echo "RELEASE_VERSION=${GITHUB_REF:10}" >> $GITHUB_ENV
- run: git config --global user.email "github-action@users.noreply.github.com"
- run: git config --global user.name "GitHub Action"
- run: echo "RELEASE_VERSION=${GITHUB_REF:10}" >> $GITHUB_ENV
- run: mike deploy --push --update-aliases $RELEASE_VERSION latest
- run: mike deploy --push --update-aliases $RELEASE_VERSION latest
6 changes: 3 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
name: Test & build
on: [push, pull_request]
on: [pull_request]
jobs:
main:
runs-on: ubuntu-22.04
steps:
- run: |
wget -q https://packages.erlang-solutions.com/erlang/debian/pool/esl-erlang_25.0.4-1~ubuntu~jammy_amd64.deb
sudo apt install --allow-downgrades ./esl-erlang_25.0.4-1~ubuntu~jammy_amd64.deb
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 100
- uses: actions/setup-node@v2
- uses: actions/setup-node@v3
with:
node-version: 18.x
- uses: actions/cache@v3
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ site
/src/apis/
/src/tx/builder/schema.generated.ts
/tooling/autorest/compiler-swagger.yaml
/tooling/autorest/middleware-openapi.yaml
/test/environment/ledger/browser
/types-legacy
/bin
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# [æternity](https://aeternity.com)'s JavaScript SDK

[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/aeternity/aepp-sdk-js.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/aeternity/aepp-sdk-js/context:javascript)
[![main action](https://github.com/aeternity/aepp-sdk-js/actions/workflows/main.yml/badge.svg)](https://github.com/aeternity/aepp-sdk-js/actions/workflows/main.yml)
[![codecov](https://codecov.io/gh/aeternity/aepp-sdk-js/branch/develop/graph/badge.svg?token=wON6gOciRP)](https://codecov.io/gh/aeternity/aepp-sdk-js)
[![docs](https://github.com/aeternity/aepp-sdk-js/actions/workflows/docs-develop.yml/badge.svg)](https://github.com/aeternity/aepp-sdk-js/actions/workflows/docs-develop.yml)
[![npm](https://img.shields.io/npm/v/@aeternity/aepp-sdk.svg)](https://www.npmjs.com/package/@aeternity/aepp-sdk)
[![npm](https://img.shields.io/npm/l/@aeternity/aepp-sdk.svg)](https://www.npmjs.com/package/@aeternity/aepp-sdk)

Expand Down Expand Up @@ -50,7 +52,7 @@ We keep our [Changelog](docs/CHANGELOG.md) up to date.
## License

ISC License (ISC)
Copyright © 2018 æternity developers
Copyright © 2023 æternity developers

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
Expand Down
2 changes: 2 additions & 0 deletions commitlint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ module.exports = {
'channel',
'compiler',
'contract',
'middleware',
'docs', // TODO: remove after releasing 13.1.0
'deps',
'deps-dev',
'node',
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
version: '3'
services:
node:
image: aeternity/aeternity:${NODE_TAG}
image: aeternity/aeternity:v6.8.1
hostname: node
ports: ["3013:3013", "3113:3113", "3014:3014", "3114:3114"]
volumes:
- ./docker/aeternity_node_mean16.yaml:/home/aeternity/node/aeternity.yaml
- ./docker/accounts_test.json:/home/aeternity/node/data/aecore/.genesis/accounts_test.json

compiler:
image: aeternity/aesophia_http:${COMPILER_TAG}
image: aeternity/aesophia_http:v7.4.0
hostname: compiler
ports: ["3080:3080"]
29 changes: 29 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,35 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

## [13.1.0](https://github.com/aeternity/aepp-sdk-js/compare/v13.0.1...v13.1.0) (2023-07-07)


### Features

* **account:** support signing typed data ([e5acdd4](https://github.com/aeternity/aepp-sdk-js/commit/e5acdd44e056cd60638088d74753f912809e63d2))
* **aens:** add `ensureName` helper to check names ([f1322b1](https://github.com/aeternity/aepp-sdk-js/commit/f1322b13ab99860719ca47dda8e277ece6f7823c))
* **aens:** support unicode names claim ([f837e90](https://github.com/aeternity/aepp-sdk-js/commit/f837e9081b0ac7eefa942f31e3056b00bd3768eb))
* **aepp,wallet:** support inner transaction signing ([725782b](https://github.com/aeternity/aepp-sdk-js/commit/725782b8d84ac426d3a192d40de8e1e155e370bc))
* **aepp,wallet:** support signing typed data ([78ce3b2](https://github.com/aeternity/aepp-sdk-js/commit/78ce3b259377a719dbf7ada7bf3b744e630f0dac))
* **compiler:** add `generateAci`, `generateAciBySourceCode` ([981bcf2](https://github.com/aeternity/aepp-sdk-js/commit/981bcf252432a3b96aca92ccd682214c124009e2))
* **middleware:** generate autorest wrapper ([bd08a08](https://github.com/aeternity/aepp-sdk-js/commit/bd08a087509bb47acf49cd015d5d7016b544094e))
* **middleware:** implement MiddlewareSubscriber ([b51b0a3](https://github.com/aeternity/aepp-sdk-js/commit/b51b0a3ffb7258f3ed1f25395b95811f39ba0cc7))


### Bug Fixes

* `onAccount` option in AeSdkMethods ([290758b](https://github.com/aeternity/aepp-sdk-js/commit/290758b1884dc36209194bc6bd760c6063f9edd3))
* **aens:** more accurate name check in `isNameValid` ([b62dcc6](https://github.com/aeternity/aepp-sdk-js/commit/b62dcc655f086cdf28611837e1ed3de2bae09d37))
* **aepp:** call `onDetected` always with `newWallet` ([80d97fa](https://github.com/aeternity/aepp-sdk-js/commit/80d97fa4b3d2c3fd5fb710c2bdaae10ab521f129))
* **contract:** use fallback account if `onAccount` not provided ([9033cd7](https://github.com/aeternity/aepp-sdk-js/commit/9033cd799be5974ebf28a49df181eeb63b1fce84))
* converting proxied options to JSON ([efebbd1](https://github.com/aeternity/aepp-sdk-js/commit/efebbd139ea85c35e28bdcfe907670743f9fc1f4))
* provide types in exports field of package.json ([dbd19e7](https://github.com/aeternity/aepp-sdk-js/commit/dbd19e70bca2d6dbc5b2392db478bb98936b63f2))
* reject prefixes other then provided in isAddressValid ([9462add](https://github.com/aeternity/aepp-sdk-js/commit/9462adde8fab9848fca0a6d9a382dbd34f5e2b8f))
* **tx-builder:** `buildTx` produces the same type as `unpackTx` accepts ([d3d6c88](https://github.com/aeternity/aepp-sdk-js/commit/d3d6c88607abbfb74acf016fba886540938b216d))
* **tx-builder:** decode tag in entry error message ([db0d96f](https://github.com/aeternity/aepp-sdk-js/commit/db0d96f156f3e8cfe52c6a7d7411c359f6dae35c))
* **wallet:** emit internal error if something broke while broadcast ([332d1b5](https://github.com/aeternity/aepp-sdk-js/commit/332d1b567f69bf6b7d3567af43fb805556ac015b))
* **wallet:** throw reason of internal error to handle it in wallet ([276699b](https://github.com/aeternity/aepp-sdk-js/commit/276699ba22539f75591754d2e2c3c503d528fdf4))

### [13.0.1](https://github.com/aeternity/aepp-sdk-js/compare/v13.0.0...v13.0.1) (2023-04-24)


Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ In case you're not using any JS bundling/compilation technique, the SDK can also
```html
<script src="https://unpkg.com/@aeternity/aepp-sdk@VERSION/dist/aepp-sdk.browser-script.js"></script>
```
...where `VERSION` is the version number of the SDK you want to use (eg. `8.1.0`).
...where `VERSION` is the version number of the SDK you want to use (eg. `13.1.0`).

### Browser `<script>` tag
The bundle will assign the SDK to a global variable called `Aeternity` that makes all functionalities of the SDK accessible.
Expand Down
33 changes: 33 additions & 0 deletions docs/build-assets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash
set -e

[ ! -d "node_modules" ] && npm i
npm run docs:examples
npm run docs:api

# TODO: revisit --ignore-scripts after solving https://github.com/npm/cli/issues/4202
perl -i -pe 's/"prepare"/"rem-prepare"/g' package.json
mkdir -p docs/examples/browser

echo Build example aepp
cd ./examples/browser/aepp
npm i
VUE_APP_WALLET_URL=../wallet-iframe/ PUBLIC_PATH=./ npm run build -- --report
mv -f dist/ ../../../docs/examples/browser/aepp

echo Build example wallet-iframe
cd ../wallet-iframe
npm i
VUE_APP_AEPP_URL=../aepp/ PUBLIC_PATH=./ npm run build -- --report
mv -f dist/ ../../../docs/examples/browser/wallet-iframe

echo Build example wallet-web-extension
cd ../wallet-web-extension
npm i
NODE_OPTIONS=--openssl-legacy-provider npm run build -- --report
mkdir ../../../docs/examples/browser/wallet-web-extension/
mv artifacts/wallet-web-extension-v0.1.0-production.zip ../../../docs/examples/browser/wallet-web-extension/packed.zip
mv dist/report.html ../../../docs/examples/browser/wallet-web-extension/report.html

cd ../../..
perl -i -pe 's/"rem-prepare"/"prepare"/g' package.json
2 changes: 1 addition & 1 deletion docs/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ This package is expected to work in these environments:
[jest]: https://github.com/facebook/jest/issues/4422#issuecomment-770274099
[typescript]: README.md#typescript-projects
[vue-cli4]: README.md#vue-cli4
[vue-3]: README.md#vue-3
[vue-3]: README.md#vue3
[vite]: https://github.com/vitejs/vite/issues/9062#issuecomment-1202167352
4 changes: 2 additions & 2 deletions docs/conda.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
dependencies:
- python=3.8.*
- nodejs=10.*
- python=3.11.*
- nodejs=18.*
- pip
- pip:
- -r file:requirements.txt
85 changes: 85 additions & 0 deletions docs/guides/address-length.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# The range of possible address length

While base64-encoded strings have a constant length depending on the length of data to encode. In
base58 it depends on the exact data to encode, e.g. it is shorter if encoded data have more
leading zeroes.

Building an aepp you may need to know the range of possible address lengths to validate an
user-provided addresses (though better to use [isAddressValid]) or for designs of address-related
components. Doing manual tests you may conclude that account address length is between 52 and 53
chars, but it is not correct.

```js
import { MemoryAccount } from '@aeternity/aepp-sdk';

const result = new Array(10000).fill()
.map(() => MemoryAccount.generate().address.length)
.reduce((p, n) => ({ ...p, [n]: (p[n] ?? 0) + 1 }), {});

console.log(result);
```

Running the above code you would get something like `{ '51': 55, '52': 5021, '53': 4924 }`
depending on generated accounts. So, while the most of addresses have length between 52 and 53
chars, there is a ~0.55% chance to get an address of 51 chars.

Theoretically there can be even shorter addresses if they lucky to be prefixed with a long
sequence of `0`.

```js
import {
MemoryAccount, Encoding, encode, decode,
} from '@aeternity/aepp-sdk';

const publicKey = decode(MemoryAccount.generate().address);

for (let i = -1; i < publicKey.length; i += 1) {
if (i >= 0) publicKey[i] = 0;
const address = encode(publicKey, Encoding.AccountAddress);
console.log(address.length, address);
}
```

Running the above code you would get output like

```
52 ak_XsSLpN161dHo77k82CZHDnUCDpVG1JSujZjbGYhNKTgMy5exZ
52 ak_13P6GKgb4VcxJHrb5Vnhb66RNBGgdnFLVJS8RaLcrAeseZmuc
52 ak_115z6Ns8nevqahWHQfYU3QNJbK7PsX2rWxoPQRcpvWzB4U77s
51 ak_111dqrd5iRqVHQe2T2JdZe79bqNBVCkWPqSc1JAXMW6F2vvT
50 ak_1111PM8Acd6qZCjioCqPt6PcTuWVxxS22gt2ytCdH82FY4C
51 ak_111113q5w8zgNNjAgLbxrMmA8qBNCv8aVHBM7eLm7JbfcgVe
50 ak_111111UGVF8HYKFC7hLzwffE8JR5vQKQ9z4BiYJYCVcEGna
49 ak_1111111wnTfJ9TWagQmzk42ADoUqVg1VvNMG7t8Fo8SQGf
50 ak_11111111389cwfh57Mw1d4uYXps2orpWxc9Zoov7PdW6G7S
49 ak_111111111G6iURaQ8ycLUNERoocnfJPQ8J7bopyndikHFM
49 ak_11111111116b9WMyCB85kS4YkDfP9D3LhqUu5eG7AEfrLg
48 ak_11111111111urvTGsQm76A4yTbApC8DJ1rLggAFKXiZXp
48 ak_1111111111119eSHeN26TTHqgKpcEVTmbCHEbQgAHJkjd
48 ak_11111111111115QmcWAusFcLUq2MfYLXdxnFEhPkRrQu5
47 ak_11111111111111c7Y1hucPEYuPH6ZY5sFdKo6dhb86gk
47 ak_1111111111111116qaT3Ac44qzDFevr9Czj1S9p9Y46r
47 ak_11111111111111114KqRXnNJJwVDnphudyDt4XDmjLn7
46 ak_11111111111111111XGs41KwLTa74AMCwx3gYYAHv81
46 ak_1111111111111111114sffTSqJvTbsAjsQykvVsDcV8
45 ak_1111111111111111111wVeBwZE5g63oPLdnrQC7TuP
45 ak_11111111111111111111Y4FSQ8pV3J8f96h3SS68Df
45 ak_1111111111111111111114ZmkEyJVpPoE6bFrxSt3n
44 ak_1111111111111111111111hEHXkLzkWadzEyFn6pw
44 ak_11111111111111111111111A6y5vKi2SUtEiqyw1H
44 ak_1111111111111111111111112PszJecmUrBA1wHbx
43 ak_1111111111111111111111111yqJmD1ujq7rtGX6
43 ak_111111111111111111111111113hoVWLS2aptDtG
42 ak_111111111111111111111111111PhgEh1GA292t
42 ak_1111111111111111111111111111Z6ci7mUpU7i
42 ak_111111111111111111111111111119gETXQQAsT
42 ak_11111111111111111111111111111136u6WXDf6
41 ak_1111111111111111111111111111111PqPZYur
41 ak_11111111111111111111111111111111273Yts
```

Therefore the minimum address length is 41 chars. All these addresses valid, for example
`ak_11111111111111111111111111111111273Yts` [used] to collect AENS name fees.

[isAddressValid]: https://docs.aeternity.com/aepp-sdk-js/v13.1.0/api/functions/isAddressValid.html
[used]: https://mainnet.aeternity.io/v3/accounts/ak_11111111111111111111111111111111273Yts
Loading