How to publish an Aragon App to aragonPM
Last updated
Was this helpful?
Last updated
Was this helpful?
Before starting you need to check if you have already installed all these prerequisites:
the right version of node.js (recommended v12 LTS
version)
Metamask web3 provider
the aragonCLI (Aragon Command Line Interface)
the Aragon Buidler plugin
an
If you haven't already installed them or if you need more info about this goes to the "Environment Setup" paragraph .
We'll start from the Aragon .
Make sure you choose a unique app name which has not yet been registered in the aragonpm.eth
or open.aragonpm.eth
registries since that would lead to an error later on.
This will create a new directory named <app name>
with everything you need.
We will also need a running IPFS server. Open a new Terminal tab and run:
For this tutorial, we will assume that the IPFS server is running locally with its:
API port set to 5001
gateway port set to 8080
.
This App has 3 environments defined:
default
localhost
rinkeby
rinkeby
mainnet
mainnet
It is a prerequisite to have a ENS Registry address defined.
An ENS registry: 0x98df287b6c145399aaa709692c8d308357bc085d
An app name (repository and registry of aragonPM): <app name>.aragonpm.eth
An Ethereum network: rinkeby
Note
The default
environment which points to localhost
does not have an ENS Registry address specified because the Buidler plugin will default the value to 0xB9462EF3441346dBc6E49236Edbb0dF207db09B7
(the ENS Registry pre-deployed on the local development chain).
To publish the app on aragonPM we will use the following builder task for this tutorial:
You will likely run into the following error:
Account 0xb4124cEB3451635DAcedd11767f004d8a28c6eE7 does not have permissions to create a new repo in registry aragonpm.eth
To solve this open arapp.json
and replace <app name>.aragonpm.eth
with <app name>.
open
.aragonpm.eth
for the network you are publishing to (in this case Rinkeby).
This command will:
Apply version bump (major).
Compile and deploy the app's contract (by default the output lives in build
).
Generate application artifact.
Publish the app to the rinkeby environment.
Upload the app's frontend to the IPFS server.
Sample output:
In case of 'outdated' or 'cannot resolve dependencies' errors, update and install dependencies.
The publish task has the following syntax:
The following task options
are available:
contract
: Address of the app's deployed smart contract.
manager-address
: Permissions manager of the app's aragonPM repo. Must be provided in the initial release.
ipfs-api-url
(default: http://localhost:5001
): IPFS API URL to connect to an IPFS server.
only-content
(flag): Prevents contract compilation, deployment and artifact generation.
verify
(flag): Enables Etherscan verification.
dry-run
(flag): Output transaction data without broadcasting.
Command:
Sample output:
If you have an error similar to:
You need to add a truffle.js
file to the root folder where you are running the command.
Add the following content and saveshell:
We will fetch the published versions of the official voting
app on the rinkeby (rinkeby
network) environment.
Command:
Sample output:
Your application's frontend will have another build script associated with it, to transpile, bundle, and pack all of its assets (e.g. scripts, images, fonts, etc) together.
If you need to add, modify, or remove assets or the way the frontend is built, it's important to remember to always use relative paths to serve those assets. Usually, this can be accomplished by adding a ./
in front of the path.
This is important because in production, the Aragon client usually fetches all of an app's assets via an IPFS gateway, and non-relative paths break gateway resolutions. You can test this for yourself by attempting to access your app when it's published by going to an IPFS gateway and making sure its assets are being loaded correctly.
To interact with aragonPM we will use the already installed in the boilerplate repository.
If you need an IPFS pinning services, you can chose service like and . They are also available for a reasonable price.
Environments are defined in , for example rinkeby
points to:
aragonpm.eth
is a curated ens registry. So unless your app has been curated by Aragon, you can publish your app on open.aragonpm.eth.
Read more about it .
Build the app's .
The contract location is defined in under path
.
Where global options
are Buidler's (now Hardhat) and bump
is the version bump (either major
, minor
or patch
) or the semantic version. E.g. minor
would increase version 1.2.0
to 1.3.0
.
To fetch the versions published on aragonPM, we can use the command from aragonCLI.
If you've used the Aragon React boilerplate, this has already been set up for you with and .