diff --git a/docs-internal/github-guide.md b/docs-internal/github-guide.md new file mode 100644 index 00000000..c1c045de --- /dev/null +++ b/docs-internal/github-guide.md @@ -0,0 +1,234 @@ +# GitHub guide for contributors + +## An introduction to Git and GitHub + +Git is a system that enables thousands of people to work together on projects without central coordination. + +Because of how useful this is, Git has a whole ecosystem built around it. You can think of Git as a tree trunk, and the services built around it as branches. One of these services is **GitHub**. + +GitHub is a site optimized for hosting and sharing Git repositories (repositories are just a fancy name for projects). And while you don't strictly need GitHub to use Git, you'll find that it makes your life considerably easier. + +At Aragon we choose to put a copy of our Git repository on GitHub for three reasons: + +1. It's a full backup of our code (including the full history of changes). + +1. It has an excellent User Interface that makes future collaboration easy. + +1. It offers convenient ways to browse and search through our codebase. + +## Editing a document on GitHub + +Now that you have a high-level overview of both Git and GitHub, we're ready to cover how to edit a document. + +If you don't have a GitHub account already, the first thing you should do is [sign up for one](https://github.com/join). Follow the instructions to create your account. It shouldn't take more than a couple of minutes. + +The next step is to open the [Getting Started page](https://hack.aragon.org/docs/getting-started) of the hack Aragon docs. + +![](/docs/assets/github-guide/gh-0-hq.png) + +You should find that there is a light blue **EDIT** button in the top-right corner the page. This button is available on every page of the docs. Click on it. You'll be taken to a GitHub copy of the page. + +![](/docs/assets/github-guide/gh-1-hq.png) + +You should see a small pencil icon on the right-hand side. When you hover over it, it will turn blue, and you should see a small tooltip appear above it with the words: + +> Edit the file in your fork of this project + +

+ drawing +

+ +[A fork](https://help.github.com/en/articles/fork-a-repo) is just GitHub's term for a copy of a project. In other words, clicking on the pencil icon tells GitHub to: + +1. Create a copy (fork) of the project under your account. + +1. Open up your copy of the Getting Started page for editing + +Why do we need to fork? Why not just make changes directly in the original project? + +Forking a project allows us to freely experiment with changes without affecting the original project. Put another way, a fork allows us to test out changes without messing up the work done in the original. + +Later on, when we're happy with our changes, we can use our fork to propose changes to the original project. + +Click on the pencil icon. You should be directed to a page with a built-in document editor. + +![](/docs/assets/github-guide/gh-3-hq.png) + +At the top you should see a message highlighted in a blue box. Don't worry about understanding what it means at this stage. + +Right below the blue box you should see a line that reads: + +> hack / docs / getting-started.md + +

+ drawing +

+ +This line gives us the location as well as the name of the document we are currently editing. In this case **getting-started.md** is the name of the document, and it's located in the **hack/docs** folder of our GitHub repository. + +The **.md** file extension stands for **Markdown**. In GitHub's words: + +> Markdown is a lightweight and easy-to-use syntax for styling all forms of writing on the GitHub platform. + +If you're new to it, we recommend reading through this quick [Markdown guide](https://guides.github.com/features/mastering-markdown/) before moving on. + +Really 😊, it'll take you 3 minutes, and will give you a much better understanding of the structure of the document we are about to edit. + +## Your first edit + +Suppose you've just learnt about [Aragon Court](https://github.com/aragon/aragon-court) and want to add a paragraph about it in the _What is Aragon and what does it do_ section. Something along the lines of: + +> But that's not all. Through the [Aragon Network](https://aragon.org/network), Aragon also serves as the **world's first digital jurisdiction**: a decentralized, community governed jurisdiction with it's own decentralized court system. The network complements the project by providing infrastructure and services to users of the Aragon platform. + +The process couldn't be simpler. Just start writing directly in the document editor provided! + +![](/docs/assets/github-guide/gh-5-hq.png) + +When you're happy with the changes you've made, click on the **Preview changes** button at the top of the document editor. + +![](/docs/assets/github-guide/gh-6-hq.png) + +If you're happy with how it looks, you're ready to officially propose the file change. + +Note that if you're unhappy with the result, you can click on the **Edit file** button to continue making changes. + +## Proposing the file change + +Scroll down to the bottom of the page You should see a box with the heading **Propose file change**. + +![](/docs/assets/github-guide/gh-7-hq.png) + +This is where the description of your proposed file change goes -- this is known in Git as a **commit message**. + +You can think of a commit message as a short email explaining your proposal: the first text box is the subject line, and the second is the text body. + +The [convention](https://github.blog/2011-09-06-shiny-new-commit-styles/) is to write it in the present tense. For example, if you fixed a bug, you would write _Fix bug_ and not _Fixed bug_. + +In our case, in the first box we'll write: + +> Update getting-started.md + +And in the second we'll write a brief description: + +> Add paragraph introducing Aragon Network in 'What is Aragon and what does it do' subsection. + +![](/docs/assets/github-guide/gh-8-hq.png) + +When you've written your message, click on the green **Propose file change** button. + +## Comparing changes + +If you've followed the above steps correctly, you should see a page with the header **Comparing changes**. + +![](/docs/assets/github-guide/gh-9-hq.png) + +Under the header, you should see a line that says: + +> Choose two **branches** to see what's changed or to start a new **pull request**. If you need to, you can also compare across **forks**. + +Before we move on, it's time to explain what these terms mean. + +We've already explained the term [fork](https://help.github.com/en/articles/fork-a-repo) : remember it's just GitHub's term for a copy of a project. + +We mentioned that when you click on the pencil icon to edit the document, GitHub creates a complete copy (fork) of the project under your account: we need a copy because we don't have the permissions required to directly edit the original project. + +What we didn't cover is that clicking on this icon also creates what Git calls a **new branch**. + +The ability to create branches is one of the most powerful features of Git: Branches are essentially self-contained copies of the project code. + +A GitHub project always starts with one branch (the master branch). However, the usual Git workflow is to create a new branch every time you begin working on a new feature or bug fix. + +Why is it good practice to create a new branch for every new feature? Why not just make changes directly to the master branch? + +The problems with making changes directly to the master branch is that there may be others working on implementing new features at the same time as you. + +If you're implementing your feature at the same time as someone else is implementing theirs, you might overwrite each others changes by mistake. This can get messy. So we try to avoid this. + +The idea is that once we've implemented our changes in our branch, we can request to **merge** it into the original branch: which is basically a request to update the original branch with our changes. This is usually done using a **pull request**. + +## Your first pull request + +![](/docs/assets/github-guide/gh-10-hq.png) + +[Pull requests](https://help.github.com/en/articles/about-pull-requests) let you tell others about changes you've pushed to a branch in a repository. Once a pull request is created, you can discuss and review the potential changes with collaborators (in this case the Aragon One team) before your changes are merged into the original (base) branch. + +By now you should understand the gist of this page. So let's go ahead and click on **Create pull request**. + +![](/docs/assets/github-guide/gh-11-hq.png) + +You should see both a subject and a body field. In our case they have been automatically filled with our previous commit message. + +At this stage you should add any issues you think exist with the pull request to the body, as well as any questions you may have for the Aragon team. + +If you haven't already, this is a good time to familiarize yourself with Aragon's [contribution guidelines](https://github.com/aragon/hack/blob/master/CONTRIBUTING.md). + +Once you're confident you've satisfied the guidelines, click on **Create pull request** again. + +![](/docs/assets/github-guide/gh-12-hq.png) + +Congratulations! 🎉 You've just opened your first pull request. + +Don't worry if it isn't perfect (no pull request is). You'll be assigned one or more reviewers. They'll help you improve it and fix any problems. + + +## Adjusting your pull request + +After making a pull request, you may want to make an adjustment or an addition. + +Making an adjustment is as simple as editing the relevant file(s) in your branch and committing the change. + +Don't worry, you won't have to make a new pull request every time you change something. GitHub ensures your pull request automatically tracks the changes in your branch and updates accordingly. + +Let's go through an example. + +Under the _Update getting-started.md_ header you should see a line that reads: + +> _username_ wants to merge 1 commit into aragon:master from _username:branchname_ + +Note that, in the text above, _username_ and _branchname_ are just placeholders for your user and branch names. + +In my case, my username is _sysl91_ and the name of the branch I'm working in is _patch-1_, so I would click on _sysl91:patch-1_. + +To access your branch, click on your _username:branchname_ (it should be highlighted in blue). + +drawing + +This will open up the branch you've created in your fork of the **hack** project. + +![](/docs/assets/github-guide/gh-14-hq.png) + +Click on the **docs** folder (remember, the getting-started.md page we want to edit is located in the docs folder). + +![](/docs/assets/github-guide/gh-15-hq.png) + +Now click on **getting-started.md**. + +You should find yourself back at the GitHub copy of the Getting Started page. + +![](/docs/assets/github-guide/gh-16-hq.png) + +From here on in the workflow is pretty much the same as before. + +Click on the pencil icon to start editing. + +

+ drawing +

+ +Say we want to make a change to the paragraph we added. For example, say we want to add a link to make it easy for readers to find out more about the decentralized court system. + +> But that's not all. Through the [Aragon Network](https://aragon.org/network), Aragon also serves as the **world's first digital jurisdiction**: a decentralized, community governed jurisdiction with it's own [decentralized court system](https://github.com/aragon/aragon-court). The network complements the project by providing infrastructure and services to users of the Aragon platform. + +As before, we can make this change directly in the editor. + +![](/docs/assets/github-guide/gh-17-hq.png) + +We can then preview it. + +![](/docs/assets/github-guide/gh-18-hq.png) + +And if we're happy with the result, scroll to the bottom and commit it. + +![](/docs/assets/github-guide/gh-19-hq.png) + +And voila! That's all there is to it 😊. diff --git a/docs/api-intro.md b/docs/api-intro.md index 8977fb61..42b72859 100644 --- a/docs/api-intro.md +++ b/docs/api-intro.md @@ -24,12 +24,9 @@ Some of the things you can do with the JavaScript implementation are: - Get access to application state with built in client-side caching - Create human-readable transaction descriptions for your smart contracts through [Radspec](human-readable-txs.md) -#### Quick Start - -- [Quick Start for apps](api-quick-start.md) - #### Docs +- [Quick Start for apps](js-ref-quick-start.md) - [App API](js-ref-app.md) - [React API](js-ref-react.md) - [Aragon client implementations (wrapper)](js-ref-wrapper.md) diff --git a/docs/api-quick-start.md b/docs/api-quick-start.md deleted file mode 100644 index e1e74b8a..00000000 --- a/docs/api-quick-start.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: aragonjs-quick-start -title: Quick Start -sidebar_label: Quick Start ---- - -##### Quick Start for apps - -```sh -npm i @aragon/api -``` - -```js -const Aragon = require('@aragon/api') - -// Set up app -const app = new Aragon() - -// Set the app identifier since multiple instances of this can be installed -// (e.g. for our token manager, we use the ticker of the token it manages) -app.identify('Employee counter') - -// Listen to events and build app state -const state$ = app.store((state, event) => { - // Initial state - if (state === null) state = 0 - - // Build state - if (event.event === 'Decrement') { - // Calculate the next state - state-- - // Send notification - app.notify('Counter decremented', `The counter was decremented to ${state}`) - } - if (event.event === 'Increment') { - state++ - app.notify('Counter incremented', `The counter was incremented to ${state}`) - } - - return state -}) - -// Log out the state -state$.subscribe(console.log) - -// Send an intent to the wrapper -app - .increment() - .subscribe( - txHash => console.log(`Success! Incremented in tx ${txHash}`), - err => console.log(`Could not increment: ${err}`) - ) -``` diff --git a/docs/apm.md b/docs/apm-architecture.md similarity index 69% rename from docs/apm.md rename to docs/apm-architecture.md index 14fb1617..fc3be3bd 100644 --- a/docs/apm.md +++ b/docs/apm-architecture.md @@ -1,28 +1,9 @@ --- -id: apm -title: aragonPM +id: apm-architecture +title: aragonPM Architecture: Registries, Repos and versions sidebar_label: Architecture -hide_title: true --- -![](/docs/assets/brand/aragonpm.png) - -**Upgradeability** is one of the key features of [aragonOS](/docs/aragonos-intro.html). - -Because upgradeability implies there will be multiple versions of a package of software, we decided to build aragonPM as the main way to **distribute different versions of the packages** that comprise the Aragon client. As we built it, however, we realized that its use cases could extend far beyond just ours as a publicly accessible piece of infrastructure living on Ethereum. - -A package or **repository** (repo) in an aragonPM registry keeps track of evolving versions of its contents (the webapp component typically) and smart contract code (if applicable). - -## aragonPM as an Aragon DAO - -aragonPM is built on top of [aragonOS](/docs/aragonos-intro.html). It is a Decentralized Autonomous Organization (DAO) running on the same Aragon that‘s used to build Aragon organizations (to take advantage of upgradeability and access control)! - -This allows for many aragonPM registries to exist with different governance models for package creation and publishing new versions. There is an official Aragon curated instance, `aragonpm.eth`, which has high quality standards and strict restrictions on what can get published, that we use for publishing our core components. - -Different aragonPM registries in which everyone can publish their packages are expected to be created by the community, and we have set up `open.aragonpm.eth` on both the main and Rinkeby networks as an open instance available for any one to publish to. - -## Architecture: registries, repos and versions - ![](/docs/assets/apm-arch.png) > The architecture of an aragonPM DAO diff --git a/docs/apm-intro.md b/docs/apm-intro.md new file mode 100644 index 00000000..c795aa80 --- /dev/null +++ b/docs/apm-intro.md @@ -0,0 +1,33 @@ +--- +id: apm-intro +title: aragonPM Introduction +sidebar_label: Introduction +hide_title: true +--- + +![](/docs/assets/brand/aragonpm.png) + +##### + +**Upgradeability** is one of the key features of [aragonOS](/docs/aragonos-intro.html). + +Because upgradeability implies there will be multiple versions of a package of software, we decided to build aragonPM as the main way to **distribute different versions of the packages** that comprise the Aragon client. As we built it, however, we realized that its use cases could extend far beyond just ours as a publicly accessible piece of infrastructure living on Ethereum. + +A package or **repository** (repo) in an aragonPM registry keeps track of evolving versions of its contents (the webapp component typically) and smart contract code (if applicable). + +## aragonPM as an Aragon DAO + +aragonPM is built on top of [aragonOS](/docs/aragonos-intro.html). It is a Decentralized Autonomous Organization (DAO) running on the same Aragon that‘s used to build Aragon organizations (to take advantage of upgradeability and access control)! + +This allows for many aragonPM registries to exist with different governance models for package creation and publishing new versions. There is an official Aragon curated instance, `aragonpm.eth`, which has high quality standards and strict restrictions on what can get published, that we use for publishing our core components. + +Different aragonPM registries in which everyone can publish their packages are expected to be created by the community, and we have set up `open.aragonpm.eth` on both the main and Rinkeby networks as an open instance available for any one to publish to. + +##### + +### Guides + +1. [Learn how to build your first app](/docs/tutorial), so you can publish it onto an aragonPM registry +2. [Publish your application onto an aragonPM registry with the CLI](/docs/guides-publish) +3. [Guide others to install your app from an aragonPM registry](/docs/guides-custom-deploy), and finally, +4. [Submit your app to the Aragon Client's App Center](/docs/app-center-submission) diff --git a/docs/apm-ref.md b/docs/apm-ref.md index f525a5db..21932031 100644 --- a/docs/apm-ref.md +++ b/docs/apm-ref.md @@ -14,19 +14,19 @@ aragonPM is built from three aragonOS-powered applications: ## APMRegistry -### ENSSubdomainRegistrar +### APMRegistry governance -Upon initialization, ownership of the ENS name that the APMRegistry operates is transferred to the ENSSubdomainRegistrar app that is installed in the DAO. In our deployments, we ensure this is completed on deployment through a APMRegistryFactory contract that assigns the APMRegistry the ENSSubdomainRegistrar's `POINT_ROOTNODE_ROLE` and then calls `initialize()` on the APMRegistry. +Each instance of an APMRegistry can have a different governance model. Governance of a registry is enforced directly using the DAO's ACL. -The APMRegistry also needs to have permissions for the ENSSubdomainRegistrar's `CREATE_NAME_ROLE` in order to create new names, which is done every time a repo is created. +By default a new repo will set the creator (or `dev` param) as the owner of the repo and it is the only address that can create new versions in the repo. However, as the permission manager, this account can grant the permission to create versions to other entities. These entities can be anything from another dev to a multisig or a full blown DAO. ---- +### ENSSubdomainRegistrar -### APMRegistry governance +Aragon app with the logic and permissions to add and delete subdomains to the ENS domain owned by the APMRegistry DAO. -Each instance of an APMRegistry can have a different governance model. Governance of a registry is enforced directly using the DAO's ACL. +Upon initialization, ownership of the ENS name that the APMRegistry operates is transferred to the ENSSubdomainRegistrar app that is installed in the DAO. In our deployments, we ensure this is completed on deployment through a APMRegistryFactory contract that assigns the APMRegistry the ENSSubdomainRegistrar's `POINT_ROOTNODE_ROLE` and then calls `initialize()` on the APMRegistry. -By default a new repo will set the creator (or `dev` param) as the owner of the repo and it is the only address that can create new versions in the repo. However, as the permission manager, this account can grant the permission to create versions to other entities. These entities can be anything from another dev to a multisig or a full blown DAO. +The APMRegistry also needs to have permissions for the ENSSubdomainRegistrar's `CREATE_NAME_ROLE` in order to create new names, which is done every time a repo is created. --- @@ -80,7 +80,7 @@ After the ACL check, the Repo logic checks whether the version upgrade is allowe The initial version of an app must be a valid bump from version `0.0.0`. -By having this check performed at the smart contract level we can load the correct version of the frontend just by looking at an instance of an app. This is done by checking that the version of a smart contract is linked to a given app by getting its `appId` and `appCode` (see section below *By latest contract address*). +By having this check performed at the smart contract level we can load the correct version of the frontend just by looking at an instance of an app. This is done by checking that the version of a smart contract is linked to a given app by getting its `appId` and `appCode` (see section below _By latest contract address_). --- diff --git a/docs/app-center-intro.md b/docs/app-center-intro.md new file mode 100644 index 00000000..dbc58af5 --- /dev/null +++ b/docs/app-center-intro.md @@ -0,0 +1,15 @@ +--- +id: app-center-intro +title: App Center +sidebar_label: Introduction +--- + +![](/docs/assets/app-center.png) + +##### + +The Aragon client includes an App Center where users can manage their currently installed apps and discover new ones. + +As of Aragon 0.7 Bella, the App Center only allows users to view and manage upgrades for already installed applications. However, enabling app installations from inside the client is an ongoing research effort and is planned in the roadmap. In the mean time, you can use the CLI to install new applications or instances into your organization ([see guide](/docs/guides-custom-deploy)). + +The App Center also currently exposes a heavily curated selection of available or upcoming applications in its "Discover" tab. To submit an application into the "Discover" tab, please follow the steps in [Submitting Your App to the App Center](/docs/app-center-submission). diff --git a/docs/app-center-preparing-assets.md b/docs/app-center-preparing-assets.md index 51b66ace..6a74c4d5 100644 --- a/docs/app-center-preparing-assets.md +++ b/docs/app-center-preparing-assets.md @@ -1,13 +1,10 @@ --- id: app-center-preparing-assets -title: App Center +title: Preparing Assets for App Publishing sidebar_label: Preparing assets --- - -##### Preparing assets for publishing your Aragon app - -Before you publish your Aragon app in the App Center, you will need to prepare a few types of assets to display it correctly, and differentiate from other apps. +Before you publish your Aragon app, you will need to prepare a few types of assets in order for the Aragon client to display it correctly and differentiate from other apps. 
The main assets are:
 - App menu icon (SVG) @@ -20,8 +17,6 @@ Before you publish your Aragon app in the App Center, you will need to prepare a
In the next sections we will describe the requirements for each asset one by one. Templates are also provided to help you prepare everything. -
- ## Icons @@ -89,8 +84,6 @@ The screenshots will be shown in your app's expanded App Center page, to show us ![*](/docs/assets/check.svg) Export to **PNG** for App Center submissions -
- ### App description The description of your app is very important for users to quickly understand what it does. The App Center can render two descriptions: a short preview and a longer, detailed description. diff --git a/docs/app-center-submission.md b/docs/app-center-submission.md new file mode 100644 index 00000000..d990a8ee --- /dev/null +++ b/docs/app-center-submission.md @@ -0,0 +1,19 @@ +--- +id: app-center-submission +title: Submitting Your App to the App Center +sidebar_label: Submitting Your App to the App Center +--- + +For the time being, we ask that you submit an [issue to the `aragon/aragon` repo](https://github.com/aragon/aragon/issues/new/choose) with the following: + +- Name of your application +- Link to its development repo +- Link to an organization with the application installed +- Current development status +- Short summary explaining what the application does + +Please double check that your app includes the relevant assets and that they are in the correct formats ([see guide](/docs/app-center-preparing-assets)). + +##### + +We will update this page accordingly as we build more community-governed infrastructure for curating apps in the future. diff --git a/docs/assets/app-center.png b/docs/assets/app-center.png new file mode 100644 index 00000000..57e8150b Binary files /dev/null and b/docs/assets/app-center.png differ diff --git a/docs/assets/centralized-vs-decentralized-stack-2.png b/docs/assets/centralized-vs-decentralized-stack-2.png new file mode 100644 index 00000000..81c290b7 Binary files /dev/null and b/docs/assets/centralized-vs-decentralized-stack-2.png differ diff --git a/docs/assets/centralized-vs-decentralized-stack.png b/docs/assets/centralized-vs-decentralized-stack.png new file mode 100644 index 00000000..e24608a7 Binary files /dev/null and b/docs/assets/centralized-vs-decentralized-stack.png differ diff --git a/docs/assets/frame/frame-accounts.gif b/docs/assets/frame/frame-accounts.gif new file mode 100644 index 00000000..e3ee2941 Binary files /dev/null and b/docs/assets/frame/frame-accounts.gif differ diff --git a/docs/assets/frame/frame-app-menu.gif b/docs/assets/frame/frame-app-menu.gif new file mode 100644 index 00000000..8308b219 Binary files /dev/null and b/docs/assets/frame/frame-app-menu.gif differ diff --git a/docs/assets/frame/frame-first-tx.gif b/docs/assets/frame/frame-first-tx.gif new file mode 100644 index 00000000..d4ea58a0 Binary files /dev/null and b/docs/assets/frame/frame-first-tx.gif differ diff --git a/docs/assets/frame/frame-intro.gif b/docs/assets/frame/frame-intro.gif new file mode 100644 index 00000000..e4b0b3ee Binary files /dev/null and b/docs/assets/frame/frame-intro.gif differ diff --git a/docs/assets/frame/frame-ledger.gif b/docs/assets/frame/frame-ledger.gif new file mode 100644 index 00000000..28f90294 Binary files /dev/null and b/docs/assets/frame/frame-ledger.gif differ diff --git a/docs/assets/frame/frame-permissions.gif b/docs/assets/frame/frame-permissions.gif new file mode 100644 index 00000000..cbea007a Binary files /dev/null and b/docs/assets/frame/frame-permissions.gif differ diff --git a/docs/assets/frame/frame-trezor.gif b/docs/assets/frame/frame-trezor.gif new file mode 100644 index 00000000..8c8361ee Binary files /dev/null and b/docs/assets/frame/frame-trezor.gif differ diff --git a/docs/assets/frame/frame-view-tx.gif b/docs/assets/frame/frame-view-tx.gif new file mode 100644 index 00000000..d5785845 Binary files /dev/null and b/docs/assets/frame/frame-view-tx.gif differ diff --git a/docs/assets/getting-started-dao-0.png b/docs/assets/getting-started-dao-0.png new file mode 100644 index 00000000..44a3f88b Binary files /dev/null and b/docs/assets/getting-started-dao-0.png differ diff --git a/docs/assets/getting-started-dao-1.png b/docs/assets/getting-started-dao-1.png new file mode 100644 index 00000000..e71bd19b Binary files /dev/null and b/docs/assets/getting-started-dao-1.png differ diff --git a/docs/assets/getting-started-dao-2.png b/docs/assets/getting-started-dao-2.png new file mode 100644 index 00000000..a9b09c33 Binary files /dev/null and b/docs/assets/getting-started-dao-2.png differ diff --git a/docs/assets/github-guide/gh-0-hq.png b/docs/assets/github-guide/gh-0-hq.png new file mode 100644 index 00000000..8abc8908 Binary files /dev/null and b/docs/assets/github-guide/gh-0-hq.png differ diff --git a/docs/assets/github-guide/gh-1-hq.png b/docs/assets/github-guide/gh-1-hq.png new file mode 100644 index 00000000..14503df5 Binary files /dev/null and b/docs/assets/github-guide/gh-1-hq.png differ diff --git a/docs/assets/github-guide/gh-10-hq.png b/docs/assets/github-guide/gh-10-hq.png new file mode 100644 index 00000000..5c1ddc5c Binary files /dev/null and b/docs/assets/github-guide/gh-10-hq.png differ diff --git a/docs/assets/github-guide/gh-11-hq.png b/docs/assets/github-guide/gh-11-hq.png new file mode 100644 index 00000000..9a77f5a3 Binary files /dev/null and b/docs/assets/github-guide/gh-11-hq.png differ diff --git a/docs/assets/github-guide/gh-12-hq.png b/docs/assets/github-guide/gh-12-hq.png new file mode 100644 index 00000000..13b72248 Binary files /dev/null and b/docs/assets/github-guide/gh-12-hq.png differ diff --git a/docs/assets/github-guide/gh-13-hq.png b/docs/assets/github-guide/gh-13-hq.png new file mode 100644 index 00000000..f1f6a4df Binary files /dev/null and b/docs/assets/github-guide/gh-13-hq.png differ diff --git a/docs/assets/github-guide/gh-14-hq.png b/docs/assets/github-guide/gh-14-hq.png new file mode 100644 index 00000000..867c52a8 Binary files /dev/null and b/docs/assets/github-guide/gh-14-hq.png differ diff --git a/docs/assets/github-guide/gh-15-hq.png b/docs/assets/github-guide/gh-15-hq.png new file mode 100644 index 00000000..5a275f98 Binary files /dev/null and b/docs/assets/github-guide/gh-15-hq.png differ diff --git a/docs/assets/github-guide/gh-16-hq.png b/docs/assets/github-guide/gh-16-hq.png new file mode 100644 index 00000000..e8007322 Binary files /dev/null and b/docs/assets/github-guide/gh-16-hq.png differ diff --git a/docs/assets/github-guide/gh-17-hq.png b/docs/assets/github-guide/gh-17-hq.png new file mode 100644 index 00000000..f8950ae7 Binary files /dev/null and b/docs/assets/github-guide/gh-17-hq.png differ diff --git a/docs/assets/github-guide/gh-18-hq.png b/docs/assets/github-guide/gh-18-hq.png new file mode 100644 index 00000000..c0c1e681 Binary files /dev/null and b/docs/assets/github-guide/gh-18-hq.png differ diff --git a/docs/assets/github-guide/gh-19-hq.png b/docs/assets/github-guide/gh-19-hq.png new file mode 100644 index 00000000..d215c4ff Binary files /dev/null and b/docs/assets/github-guide/gh-19-hq.png differ diff --git a/docs/assets/github-guide/gh-2-hq.png b/docs/assets/github-guide/gh-2-hq.png new file mode 100644 index 00000000..8b5f81ab Binary files /dev/null and b/docs/assets/github-guide/gh-2-hq.png differ diff --git a/docs/assets/github-guide/gh-3-hq.png b/docs/assets/github-guide/gh-3-hq.png new file mode 100644 index 00000000..92f11ba7 Binary files /dev/null and b/docs/assets/github-guide/gh-3-hq.png differ diff --git a/docs/assets/github-guide/gh-4-hq.png b/docs/assets/github-guide/gh-4-hq.png new file mode 100644 index 00000000..0ee97289 Binary files /dev/null and b/docs/assets/github-guide/gh-4-hq.png differ diff --git a/docs/assets/github-guide/gh-5-hq.png b/docs/assets/github-guide/gh-5-hq.png new file mode 100644 index 00000000..1ef464b5 Binary files /dev/null and b/docs/assets/github-guide/gh-5-hq.png differ diff --git a/docs/assets/github-guide/gh-6-hq.png b/docs/assets/github-guide/gh-6-hq.png new file mode 100644 index 00000000..7ae11ea4 Binary files /dev/null and b/docs/assets/github-guide/gh-6-hq.png differ diff --git a/docs/assets/github-guide/gh-7-hq.png b/docs/assets/github-guide/gh-7-hq.png new file mode 100644 index 00000000..42381744 Binary files /dev/null and b/docs/assets/github-guide/gh-7-hq.png differ diff --git a/docs/assets/github-guide/gh-8-hq.png b/docs/assets/github-guide/gh-8-hq.png new file mode 100644 index 00000000..cc7f83ab Binary files /dev/null and b/docs/assets/github-guide/gh-8-hq.png differ diff --git a/docs/assets/github-guide/gh-9-hq.png b/docs/assets/github-guide/gh-9-hq.png new file mode 100644 index 00000000..f103f8a0 Binary files /dev/null and b/docs/assets/github-guide/gh-9-hq.png differ diff --git a/docs/assets/metamask-1.png b/docs/assets/metamask-1.png new file mode 100644 index 00000000..c343dd8e Binary files /dev/null and b/docs/assets/metamask-1.png differ diff --git a/docs/assets/metamask-4.png b/docs/assets/metamask-4.png new file mode 100644 index 00000000..85744153 Binary files /dev/null and b/docs/assets/metamask-4.png differ diff --git a/docs/assets/metamask-5.png b/docs/assets/metamask-5.png new file mode 100644 index 00000000..73a2f25e Binary files /dev/null and b/docs/assets/metamask-5.png differ diff --git a/docs/assets/metamask-6.png b/docs/assets/metamask-6.png new file mode 100644 index 00000000..51c66fbd Binary files /dev/null and b/docs/assets/metamask-6.png differ diff --git a/docs/assets/metamask-7.png b/docs/assets/metamask-7.png new file mode 100644 index 00000000..4d883033 Binary files /dev/null and b/docs/assets/metamask-7.png differ diff --git a/docs/assets/metamask-guide/m-0.png b/docs/assets/metamask-guide/m-0.png new file mode 100644 index 00000000..4299b30e Binary files /dev/null and b/docs/assets/metamask-guide/m-0.png differ diff --git a/docs/assets/metamask-guide/m-1.png b/docs/assets/metamask-guide/m-1.png new file mode 100644 index 00000000..818eda9a Binary files /dev/null and b/docs/assets/metamask-guide/m-1.png differ diff --git a/docs/assets/metamask-guide/m-10.png b/docs/assets/metamask-guide/m-10.png new file mode 100644 index 00000000..185d54af Binary files /dev/null and b/docs/assets/metamask-guide/m-10.png differ diff --git a/docs/assets/metamask-guide/m-11.png b/docs/assets/metamask-guide/m-11.png new file mode 100644 index 00000000..3be77d03 Binary files /dev/null and b/docs/assets/metamask-guide/m-11.png differ diff --git a/docs/assets/metamask-guide/m-12.png b/docs/assets/metamask-guide/m-12.png new file mode 100644 index 00000000..1e475c04 Binary files /dev/null and b/docs/assets/metamask-guide/m-12.png differ diff --git a/docs/assets/metamask-guide/m-13.png b/docs/assets/metamask-guide/m-13.png new file mode 100644 index 00000000..48468051 Binary files /dev/null and b/docs/assets/metamask-guide/m-13.png differ diff --git a/docs/assets/metamask-guide/m-14.png b/docs/assets/metamask-guide/m-14.png new file mode 100644 index 00000000..4b01d49f Binary files /dev/null and b/docs/assets/metamask-guide/m-14.png differ diff --git a/docs/assets/metamask-guide/m-15.png b/docs/assets/metamask-guide/m-15.png new file mode 100644 index 00000000..1ce99922 Binary files /dev/null and b/docs/assets/metamask-guide/m-15.png differ diff --git a/docs/assets/metamask-guide/m-2.png b/docs/assets/metamask-guide/m-2.png new file mode 100644 index 00000000..06adab87 Binary files /dev/null and b/docs/assets/metamask-guide/m-2.png differ diff --git a/docs/assets/metamask-guide/m-3.png b/docs/assets/metamask-guide/m-3.png new file mode 100644 index 00000000..94e46130 Binary files /dev/null and b/docs/assets/metamask-guide/m-3.png differ diff --git a/docs/assets/metamask-guide/m-4.png b/docs/assets/metamask-guide/m-4.png new file mode 100644 index 00000000..b303c843 Binary files /dev/null and b/docs/assets/metamask-guide/m-4.png differ diff --git a/docs/assets/metamask-guide/m-5.png b/docs/assets/metamask-guide/m-5.png new file mode 100644 index 00000000..bc59ae21 Binary files /dev/null and b/docs/assets/metamask-guide/m-5.png differ diff --git a/docs/assets/metamask-guide/m-6.png b/docs/assets/metamask-guide/m-6.png new file mode 100644 index 00000000..174727bd Binary files /dev/null and b/docs/assets/metamask-guide/m-6.png differ diff --git a/docs/assets/metamask-guide/m-7.png b/docs/assets/metamask-guide/m-7.png new file mode 100644 index 00000000..45de06d7 Binary files /dev/null and b/docs/assets/metamask-guide/m-7.png differ diff --git a/docs/assets/metamask-guide/m-8.png b/docs/assets/metamask-guide/m-8.png new file mode 100644 index 00000000..49e184cb Binary files /dev/null and b/docs/assets/metamask-guide/m-8.png differ diff --git a/docs/assets/metamask-guide/m-9.png b/docs/assets/metamask-guide/m-9.png new file mode 100644 index 00000000..2f3da585 Binary files /dev/null and b/docs/assets/metamask-guide/m-9.png differ diff --git a/docs/getting-started.md b/docs/getting-started.md index 9d03a0c9..a7cc9db0 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -6,68 +6,238 @@ sidebar_label: Getting started ##### What is Aragon and what does it do - Aragon is a project to **empower freedom** by creating tools for **decentralized governance**. -These tools help people freely organize **without borders or intermediaries**. Instead of bureaucracy, subjectivity, and trust, smart contracts have opened the door to **experiment with governance at the speed of software**. +These tools help people freely organize **across borders** and **without intermediaries**. Instead of bureaucracy, subjectivity, and trust, smart contracts have opened the door to **experiment with governance at the speed of software**. The Aragon stack helps you develop software for **human organization**. From the smart contracts to the user interface, Aragon takes care of the most important pieces of infrastructure to deliver censorship-resistant, decentralized and upgradeable apps. +If you're new to this ecosystem, don't worry if some (or all) of that sounded a little abstract. You can think of Aragon as providing the lego pieces to allow people (like you) to build the next generation of human organizations. + +Organizations that can be spun up instantly, that can't be shut down by governments, that are resistant to internet censorship, and that allow small groups of people to collaborate effectively. + ![](/docs/assets/core.png) > Example of a decentralized, censorship-resistant, good-looking voting app on Aragon +# Introduction + +Many of us have gone through the pain of setting up a corporate entity. Or felt like we've lacked the tools to collaborate with people all around the globe when we're building stuff we want to see in the world. + +Right now, the current system simply doesn't work. If you want to set up an organisation you have to go to lawyers, pay thousands of dollars, and all you get in return is a set of unintelligible pieces of paper that cost you more than months of development. + +On top of this, these pieces of paper don't enforce anything by themselves: they're more like an idea, or a concept. + +If you try to explain this to a kid, you quickly realise how mad the current system seems to them. When you think about it, it's really impressive that the world functions the way it does with this sort of legacy framework and operating system underneath. + +At Aragon, we believe that decentralized autonomous organizations (DAOs) are the solution to this problem. + +What exactly is a DAO? There are many ways to describe a DAO, and knowledgable people may disagree on the precise definition. For our purposes, you can think of DAOs as flexible, global, and uncensorable online organizations. + +How does Aragon fit in? Aragon provides you with tools (apps) that make it easy for you to create DAOs -- you can think of Aragon apps as lego bricks that can be flexibly combined to make DAOs (the final lego structures). + +Another way to think of Aragon is as a new operating system (OS) for setting up organizations. One that is far more efficient than the existing OS (lawyers, administrative headaches, etc) we are used to dealing with. + +### More on DAOs + +For those of you who are new to DAOs, in this section we'll briefly cover the sorts of things DAOs can enable, when you might want to use a DAO, as well as the trends around the world accelerating their adoption. + +#### DAOs can enable: + +- Shared bank accounts with custom rules and permissions +- Payroll that automatically runs by itself +- Built-in voting on important topics + +#### DAO use cases: + +- Part-time projects with friends or strangers +- Future of work: people working part time on multiple things for short periods of time +- Temporary pop-up companies +- Companies in authoritarian jurisdictions +- Global, distributed teams + +#### Trends around the world accelerating DAO adoption: + +- The rise of populist authoritarians +- The future of work (remote and distributed) +- The growing de-platforming problem +- The rise of decentralized finance +- The [increasing](https://medium.com/complex-systems-channel/teams-a-manifesto-7490eab144fa) [complexity](https://necsi.edu/complexity-rising-from-human-beings-to-human-civilization-a-complexity-profile) of human civilization + +### Web3 -What you need to get started building with Aragon: +Unless you've been living under a rock for the last few years, you've probably come across the term web3 😋. But what does it mean exactly? And why do we care about it in the context of Aragon? -- [Environment setup](#environment-setup) -- [Quick start](#quick-start) -- [Next steps](#next-steps) +Web3 is the vision of a fully decentralized web. One of the craziest things to wrap your head around is that in web3, apps don't need a central server to fetch data from! +How is this possible? In a nutshell, thanks to something called peer-to-peer data architectures. The key point is that in a P2P architecture, instead of requesting data from a central server, you request it from multiple computers (peers) around you. + +While this is nothing new in itself -- P2P architectures have existed since the 1990’s (where they rose to fame with file sharing programs like BitTorrent and Napster) -- what's new is the addition of cryptography and economic incentives to these architectures. + +The fusion of these seemingly disparate disciplines was the big innovation behind Bitcoin, and has since led to the emergence of a new field of research devoted to their intersection (what we now call cryptoeconomics). + +While we won't get into the details here,the key takeaway is that cryptoeconomics is the big unlock that has allowed us to start moving from centralized data structures (web2) to more decentralized or fully distributed data architectures (web3). + +![](/docs/assets/centralized-vs-decentralized-stack-2.png) + +> Note that there’s a spectrum from fully centralized (left) to fully decentralized (right). + +And while blockchains -- like Bitcoin and Ethereum -- are key to this web3 vision, it's important to note that there are other essential parts of the web3 stack that are not covered by them. + +For example, since blockchains are relatively expensive to store data on, it turns out that they don't make great file systems. That's why there's also a need for decentralized file systems like the [InterPlanetary File System](https://ipfs.io/) (which Aragon also makes use of). + +### Further resources + +- [DAOs and the Web3 vision](https://www.youtube.com/watch?v=YG3a5ihbkAQ) +- [The future of organizations](https://blog.aragon.one/the-future-of-organizations/) +- [The Aragon Manifesto](https://blog.aragon.org/the-aragon-manifesto-4a21212eac03/) +- [The Aragon Whitepaper](https://github.com/aragon/whitepaper) +- [Aragon Black: #1 White paper & Manifesto](https://blog.aragon.black/white-paper-manifesto/) +- [Can Aragon make decentralized autonomous governance work](https://breakermag.com/can-aragon-make-decentralized-autonomous-governance-work/) +- [Why The Internet Needs IPFS Before It’s Too Late](https://techcrunch.com/2015/10/04/why-the-internet-needs-ipfs-before-its-too-late/) +- [A hands-on introduction to IPFS](https://medium.com/coinmonks/a-hands-on-introduction-to-ipfs-ee65b594937) +- [Blockchain infrastructure landscape: a first principles framing](https://medium.com/@trentmc0/blockchain-infrastructure-landscape-a-first-principles-framing-92cc5549bafe) +- [The case for decentralization](https://a16zcrypto.com/2019/04/why-work-in-crypto-startup-grind-2019/) +- [What comes after open source?](https://a16zcrypto.com/2019/01/what-comes-after-open-source/) +- [Fat protocols](http://www.usv.com/blog/fat-protocols) + +# Up and running + +Now that we've got you all excited, let's go through what you need to get started building with Aragon 😊 ## Environment setup -### Node version +### Node.js + +First off, we need to be sure we have a recent version of Node.js installed, for compatibility across OS we recommend LTS (`v10.5.3`) version. + +To see which version of Node you have installed, from the command line run: + +```sh +node -v +``` + +To download node, [follow this link](https://nodejs.org/en/download/). + +### Web3 provider + +Next, we'll need what we call a web3 provider to actually sign and send transactions to the Ethereum blockchain. + +If you're new to the decentralized web you might be wondering why we have to use a separate provider to interact with the blockchain. Why don't decentralized apps (like Aragon's) just do it themselves? -Make sure you have at least Node.js `v8.0.0`. +In short, while it's possible for dapps to interact directly with the blockchain, using a web3 provider allows users to interact with dapps without trusting every one of them with their private keys (the keys to theirs funds). -### Signing and web3 provider +Without a web3 provider, users have to have total trust in every dapp they use. With a web3 provider, they just need to trust that provider. -We recommend using [Frame](https://frame.sh) to send transactions to the blockchain. Otherwise you can use [Metamask browser extension](https://metamask.io/). +> In general, if you have a hardware wallet, we recommend you use [Frame](https://frame.sh) as your web3 provider -- we'll go over how to do this in the [tutorial](/docs/tutorial.html) that follows. To interact with the app in this section however, we'll be using [Metamask](https://metamask.io/). -### Install the aragonCLI +#### Metamask -From the command line run: +MetaMask is a browser plugin that allows users to make Ethereum transactions through regular websites. It does this by injecting a javascript library called web3.js into the namespace of each page your browser loads. + +web3.js is written by the Ethereum core team, and has functions that regular webpages can use to make read and write requests to the blockchain. Eventually we'll have browsers with this sort of functionality built-in. But for now we need plugins like Metamask to help us bridge the gap between web2 and web3. + +For instructions on how to use Metamask as your web3 provider, please follow our [Metamask guide](/docs/guides-use-metamask.html). + +### The aragonCLI + +The final missing piece is what's known as the aragonCLI (or Aragon Command Line Interface). This is what we'll use to create, interact with, and develop Aragon apps and DAOs -- remember an Aragon DAO is just a combination of Aragon Apps. + +To install aragonCLI from the command line run: ```sh npm i -g @aragon/cli ``` -Once we have this package installed we can start building DAOs. +Hopefully, it downloaded successfully. If that's the case, congrats! You're now officially ready to start building your first Aragon DAO! -### Note on Git +If you're having trouble with this step, you should take a look at the installing aragonCLI section of the [troubleshooting guide.](/docs/guides-faq#installing-aragonCLI) If that doesn't fix things, please don't hesitate to reach out to us at the [#dev-help channel on the Aragon Chat](https://aragon.chat/channel/dev-help). -You might need to have [Git](https://git-scm.com) installed. +## Quick start -### Windows considerations +In order to get up and running quickly, we’ll build our first DAO using some basic scaffolding. Just like real scaffolding in a construction site, when we talk about scaffolding in this context, we mean a simple prebuilt structure for your project, on top of which you can build the real one. -You might need to run the shell with administrator rights when installing the aragonCLI, because our `go-ipfs` dependency will need to create a symlink to work correctly. +To create your first (scaffolded) DAO, from the command line run: -If you have problems during the instalation of aragonCLI or any other dependencies. You probably need to install [windows-build-tools](https://www.npmjs.com/package/windows-build-tools) or similar package. +```sh +npx create-aragon-app first-dao.aragonpm.eth +``` +Don't worry about fully understanding this line right now. Really. We'll cover that in the [tutorial](/docs/tutorial.html) coming up. Right now, you just need to know that the scaffolding relies on some generated code, magically created by the `create-aragon-app` command. -## Quick start +If you look at your terminal, you should see a five step process: + +
-To create your first DAO run: +![*](/docs/assets/check.svg) `Preparing initialization` + +![*](/docs/assets/check.svg) `Cloning app template` + +![*](/docs/assets/check.svg) `Preparing template` + +![*](/docs/assets/check.svg) `Installing package dependencies` + +![*](/docs/assets/check.svg) `Created new application first_dao.aragonpm.eth in first_dao.` + +
+ +Once all 5 have ticks next to them, you should run the following: ```sh -npx create-aragon-app foo.aragonpm.eth -cd foo +cd first-dao npx aragon run ``` -Congrats you have just created a DAO! It’s running on your local network and as soon as it's ready it will open in your browser at [localhost:3000](http://localhost:3000)! +The first line, `cd first-dao`, just moves us into the directory where the scaffolded app was created. + +And the second, `npx aragon run`, sets up everything for us in the background so we can quickly live test our DAO. + +If you're unsure what the difference is between `npx` and `npm`, we recommend you read through this [medium post](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b) and this [stackoverflow post.](https://stackoverflow.com/questions/50605219/difference-between-npx-and-npm) + +If you've made it this far congrats 🤗. You've just created your first DAO! It’s running on your local network and as soon as it's ready it will open in your browser at [localhost:3000](http://localhost:3000)! + +### Interacting with your first DAO + +If it's not already open, open your browser at the localhost address shown in your terminal. It should look something like this: + +```sh +This is the configuration for your development deployment: + Ethereum Node: ws://localhost:8545 + ENS registry: 0x5f6f7e8cc7346a11ca2def8f827b7a0b612c56a1 + APM registry: aragonpm.eth + DAO address: 0xE56671CA800F4516B5B705c729BD3c6Aee4DDbEC + +Opening http://localhost:3000/#/0xE56671CA800F4516B5B705c729BD3c6Aee4DDbEC to view your DAO +``` + +Once your browser is open at the right address, you should see a screen that looks like the one below. + +![](/docs/assets/getting-started-dao-1.png) + +As you can see on the left, this DAO is made up of two Aragon apps -- Home and Counter. Right now, we're in the Home app. This app just displays a welcome message with no possible user interactions. + +Click on Counter to open up the (slightly) more interesting Counter app. + +![](/docs/assets/getting-started-dao-2.png) + +Right now the count is at 0. Let's increment it. + +Note that incrementing the counter triggers a blockchain transaction that saves the new value to the chain. But before the transaction can be sent, we need to sign it (to prove it was us that really sent it). + +#### Signing your first transaction with Metamask + +To sign your first transaction with Metamask, head to the **Signing your first transaction with Metamask** section of our [Metamask guide](/docs/guides-use-metamask.html#signing-your-first-transaction-with-metamask). ## Next steps -Now that you’ve built a DAO let's take a look at the docs or you can jump into the [tutorial](/docs/tutorial.html). +We hope you enjoyed that 😊! Please don't hesitate to leave us any [feedback](https://aragon.chat/channel/feedback). + +Now that you’ve built your first DAO, feel free to take a look at the docs. If you're interested in understanding things at a deeper level, we recommend you jump straight into our [awesome tutorial](/docs/tutorial.html). + +## Contributing + +You should find that there is a light blue EDIT button in the top-right corner the page. This button is available on every page of the Aragon docs. If you feel like you can improve our documentation in any way, please don't hesitate to click on it! + +If you don't have any programming experience or if this is your first time contributing to an open-source project, don't worry. We've created a [GitHub guide](https://github.com/aragon/hack/tree/master/docs-internal/github-guide.md) just for you 😊. + +P.S. Before you submit any changes, make sure to read our [contribution guidelines.](https://github.com/aragon/hack/blob/master/CONTRIBUTING.md) diff --git a/docs/glossary.md b/docs/glossary.md index 1376e00b..cee31acc 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -9,7 +9,7 @@ sidebar_label: Glossary - [**aragonCLI**](/docs/cli-intro.html): Tool for creating, testing and publishing Aragon applications. - [**aragonOS**](/docs/aragonos-intro.html): Framework that enables flexible and upgradeable governance mechanisms by creating and assigning permissions to multiple entities. -- [**aragonPM**](/docs/apm.html): Decentralized package manager based on aragonOS that handles upgreadability of smart contracts and arbitrary data blobs, such as webapps. +- [**aragonPM**](/docs/apm-intro.html): Decentralized package manager based on aragonOS that handles upgreadability of smart contracts and arbitrary data blobs, such as webapps. - **aragonPM Repository**: Smart contract deployed inside aragonPM that keeps track of the versions for a package. - **aragonAPI**: Standard set of APIs and specifications used to interact with aragonOS-powered contracts by handling transaction pathing, upgradeability, and contract state. Reference implementations in specific languages: - [JavaScript](/docs/api-intro.html) diff --git a/docs/guides-custom-deploy.md b/docs/guides-custom-deploy.md index 6912c3cf..de338c62 100644 --- a/docs/guides-custom-deploy.md +++ b/docs/guides-custom-deploy.md @@ -1,7 +1,7 @@ --- id: guides-custom-deploy title: Custom Deploy -sidebar_label: Custom deploy with aragonCLI +sidebar_label: Custom Deploy --- ##### Aragon Organization deployment using aragonCLI @@ -17,7 +17,6 @@ npm install -g @aragon/cli ``` - ## General considerations In order to deploy to rinkeby or mainnet using the CLI you will either need to use a hardware wallet with [Frame](https://frame.sh) or configure aragonCLI to [sign transactions using a private key](/docs/guides-faq.html#set-a-private-key). @@ -51,7 +50,7 @@ This will create a new organization based on the default [`bare-template`](https ## Adding a Token and Token Manager instance -Aragon uses tokens to represent groups, token balances can be capped to a certain amount per account made non-transferrable. The following are 3 common scenarios: +Aragon uses tokens to represent groups, token balances can be capped to a certain amount per account and made non-transferrable. The following are 3 common scenarios: - `Membership`: A non-transferrable token limited to 1 per account - `Reputation`: A non-transferrable token without balance restriction @@ -124,7 +123,7 @@ The voting app requires the following initialization parameters: - `min accept quorum`: Percentage of yeas in total possible votes for a vote to succeed (expressed as a percentage of `10^18`; eg. `10^16 = 1%`, `10^18 = 100%`) - `vote time`: Seconds that a vote will be open for token holders to vote (unless enough yeas or nays have been cast to make an early decision) -So if we want a voting app instances with a support requirement of 60% and min accept quorum of 25% and a voting period of 7 days we would use the following command. +So if we want a voting app instance with a support requirement of 60% and min accept quorum of 25% and a voting period of 7 days we would use the following command. ```sh dao install voting --app-init-args [token-address] 600000000000000000 250000000000000000 604800 diff --git a/docs/guides-faq.md b/docs/guides-faq.md index a018c91f..4754d208 100644 --- a/docs/guides-faq.md +++ b/docs/guides-faq.md @@ -6,6 +6,45 @@ sidebar_label: Troubleshooting ##### +## Installing aragonCLI + +### Linux considerations + +If you're seeing several errors (e.g. `node-gyp rebuild`) it's probably cause you need to run node long term support (LTS) version, currently `10.15.3`. + +### Mac considerations + +If you're seeing one or more errors that look like: + +```sh +EACCES: permission denied +``` + +It's probably because you originally installed Node with root permissions [explain what this means] . Because of this, writing to your npm directory (```npm -i -g```) requires root permissions too. + +While it's not a good idea to have Node installed this way, one way to quickly give yourself root permissions is to run the slightly modified command: [maybe not a good idea to show this option] + +```sh +sudo npm i -g --unsafe-perm @aragon/cli +``` + +An arguably better way to fix the problem is to follow the steps outlined in this [stackoverflow answer.](https://stackoverflow.com/a/24404451) [should make this more intuitive...] + +[i think this whole section needs to be exlained more simply...] + +### Windows considerations + +You might need to run the shell with administrator rights when installing the aragonCLI, because our `go-ipfs` dependency will need to create a symlink to work correctly. [this needs to be explained better] + +If you have problems during the instalation of aragonCLI or any other dependencies. You probably need to install [windows-build-tools](https://www.npmjs.com/package/windows-build-tools) or similar package. + +Again, if you're having trouble fixing things, please reach out to us at the [#dev-help channel on the Aragon Chat](https://aragon.chat/channel/dev-help) + +### Note on Git + +You might need to have [Git](https://git-scm.com) installed. If you're unsure what Git is, or whether you have it installed, we recommend you follow [this tutorial.](https://www.learnenough.com/git-tutorial/getting_started) +*[a little startling for the reader... why might? i think we need to elaborate here...]* + ## Resetting the devchain After upgrading aragonCLI, or if unexpected errors are being experienced, [resetting the devchain](/docs/cli-main-commands.html#aragon-devchain) (by doing `aragon devchain --reset` or `aragon run --reset`) is sometimes useful as it will restart the chain from the snapshot. diff --git a/docs/guides-publish.md b/docs/guides-publish.md index 06bb511c..2467bd9a 100644 --- a/docs/guides-publish.md +++ b/docs/guides-publish.md @@ -1,12 +1,12 @@ --- id: guides-publish -title: Publish -sidebar_label: Publish +title: Publish to aragonPM +sidebar_label: Publish to aragonPM --- ##### -This guide will show you how to publish your app to an [aragonPM](/docs/package-management) instance on different environments. +This guide will show you how to publish an app to [aragonPM](/docs/package-management) on different environments. > **Note**
> Publishing your app requires an on-chain action so you must connect an Ethereum account with enough funds on the selected environment to send a publish transaction. @@ -18,50 +18,66 @@ This guide will show you how to publish your app to an [aragonPM](/docs/package- We'll start from the [React boilerplate](https://github.com/aragon/aragon-react-boilerplate). ```sh -npx create-aragon-app app react +npx create-aragon-app app ``` This will create a new directory named `app`, with everything you need. +To interact with aragonPM we will use the [`aragon apm`](/docs/cli-apm-commands) commands. + ## Introduction to environments -This app has 3 environments defined in `arapp.json`: +This app has 3 environments defined: -| Environment | Network | -|--- |--- | -| default | localhost | -| staging | rinkeby | -| production | mainnet | +| Environment | Network | +| ----------- | --------- | +| default | localhost | +| rinkeby | rinkeby | +| mainnet | mainnet | Is a prerequisite to have a ENS Registry address defined. -Environments are defined in `arapp.json`, for example `staging` points to: -- an ENS registry: `0x314159265dd8dbb310642f98f50c066173c1259b` -- an APM registry: `open.aragonpm.eth` -- an APM repository: `app` -- an Ethereum network: `rinkeby` -- an Ethereum websockets provider: `wss://rinkeby.eth.aragon.network/ws` - to **read** from the blockchain +Environments are defined in [`arapp.json`](/docs/cli-global-confg#the-arappjson-file), for example `rinkeby` points to: + +- An ENS registry: `0x98df287b6c145399aaa709692c8d308357bc085d` +- An app name (repository and registry of aragonPM): `app.open.aragonpm.eth` +- An Ethereum websockets provider: `wss://rinkeby.eth.aragon.network/ws` - to **read** from the blockchain +- An Ethereum network: `rinkeby` + +The `rinkeby` network is further defined in `truffle.js`, and has: + +- An Ethereum provider address: `https://rinkeby.infura.io` (to **write** to the blockchain) +- An Ethereum account: `0xb41...6eE7` (which is the first account generated from the `DEFAULT_MNEMONIC` variable, to learn how to use a different account follow the [troubleshooting guide](/docs/guides-faq.html#set-a-private-key)) + +> **Note**
+> The `default` environment which points to `localhost` does not have an ENS Registry address specified because aragonCLI will default the value to `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7` (the ENS Registry pre-deployed on the local development chain). -The `rinkeby` network is further defined in `truffle.js`, an has an Ethereum provider (to **write** to the blockchain), which define: -- an address: `https://rinkeby.infura.io` -- an Ethereum account: `0xb41...6eE7` (which is the first account generated from the `DEFAULT_MNEMONIC` variable, to use a different account see the [troubleshooting guide](/docs/guides-faq.html#set-a-private-key) +## Publish a major version: content + contract -## Major version: content + contract +To publish on aragonPM we will use [`aragon apm publish`](/docs/cli-apm-commands#aragon-apm-publish) command. Command: ```sh -npm run publish:major --environment staging +npx aragon apm publish major --environment rinkeby ``` This will: -1. [_build_ the app's frontend (by default the output lives in `dist`)](#building-frontends) -2. _compile_ the app's contract (by default the output lives in `build`) -3. publish the app to the **staging** environment. + +![*](/docs/assets/check.svg) Apply version bump (major). + +![*](/docs/assets/check.svg) _Compile_ and _deploy_ the app's contract (by default the output lives in `build`) + +![*](/docs/assets/check.svg) _Build_ the app's [frontend (by default the output lives in `dist`)](#building-frontends) + +![*](/docs/assets/check.svg) Generate application artifact. + +![*](/docs/assets/check.svg) Publish the app to the **rinkeby** environment. Sample output: + ```sh - > aragon apm publish major "--environment" "staging" + > npx aragon apm publish major --environment rinkeby ✔ Successfully published app.open.aragonpm.eth v1.0.0: ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 @@ -71,22 +87,33 @@ Sample output: > **Note**
> You can also deploy a major version with only frontend changes by passing `--only-content`. +> +> You can also just generate artifacts file without publishing by passing `--only-artifacts`. +> > The contract location is defined in `arapp.json` under `path`. -## Minor/patch version: content only +## Publish a minor or patch version: content only Command: + ```sh -npm run publish:patch -- --environment staging +npx aragon apm publish patch --environment rinkeby ``` This will: -1. [_build_ the app's frontend (by default the output lives in `dist`)](#building-frontends) -2. publish the app to the **staging** environment. + +![*](/docs/assets/check.svg) Apply version bump (patch). + +![*](/docs/assets/check.svg) _Build_ the app's [frontend (by default the output lives in `dist`)](#building-frontends) + +![*](/docs/assets/check.svg) Generate application artifact. + +![*](/docs/assets/check.svg) Publish the app to the **rinkeby** environment. Sample output: + ```sh - ✔ Successfully published app.open.aragonpm.eth v1.1.1: + ✔ Successfully published app.open.aragonpm.eth v1.0.1: ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ℹ Content (ipfs): QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q ℹ Transaction hash: 0x57864d8efd8d439008621b494b19a3e8f876a8a46b38475f9626802f0a1403c2 @@ -94,45 +121,70 @@ Sample output: ## Check published versions +To fetch the versions published on aragonPM we will use [`aragon apm versions`](https://hack.aragon.org/docs/cli-apm-commands#aragon-apm-versions) command. + Command: + ```sh -npm run versions -- --environment staging +npx aragon apm versions --environment rinkeby ``` Sample output: + ```sh - ℹ app.open.aragonpm.eth has 4 published versions + ℹ app.open.aragonpm.eth has 2 published versions ✔ 1.0.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ✔ 1.1.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmSwjUZFpv2c2e9fLoxtgFrAsAmBN4DyQGJp4RcqQcW3z3 - ✔ 1.1.1: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ✔ 2.0.0: 0x74CBbbC932d7C344FCd789Eba24BfD40e52980c9 ipfs:Qmadb3hzwLDKtb93fF367Vg1epkdsLZF4dhpapNYynjgZF + ✔ 1.0.1: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q +``` + +### Fetch other packages versions + +We will fetch the published versions of the official `voting` app on the rinkeby (`rinkeby` network) environment. + +Command: + +```sh +npx aragon apm voting.aragonpm.eth --environment rinkeby +``` + +Sample output: + +```sh +ℹ voting.aragonpm.eth has 13 published versions + ✔ 1.0.0: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmQHhcbZRoTKkbjWdwXwqqWZzTNHUFzECPrfqie8f8oq45 + ✔ 1.1.0: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmT27VvGNiNeWj4tsZ5omDCc6KxaHU3N9uebFCsoxSAEpL + ✔ 1.1.1: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmYmQVKj44FNjaY2qT4iWMWGSpKmnoseUw7idJkh9mtjei + ✔ 1.1.2: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmWsfxKYLTUyVokhEWEQG9w3Y8VgGbaNGnrL7yx72yPVan + ✔ 1.1.3: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmU6kD8qo4HDnqBmka16DTA61FBUkttarVJumZxrizvduP + ✔ 1.1.4: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmUJoRBNYebTLQu62fmPUjrGQxrA2reWNfiBxKxcf9ydRc + ✔ 1.1.5: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmW3URtbrnZeVQkMP2bLTBe2uF4Eyz9uu2818kVvgJ76c7 + ✔ 1.1.6: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmcE6bw5WVwGL6Ewc5qYym6KPCeQfE2xbqeRXESmUuEssC + ✔ 1.1.7: 0x8C06aEBF29F20A2e09b32F5d44cEa49Db3EC2eE0 ipfs:QmTCYzgvrjtV4ETkhM3ZNgrVYNi2roXhNxCRmwsePNqL1B + ✔ 2.0.0: 0xb4fa71b3352D48AA93D34d085f87bb4aF0cE6Ab5 ipfs:QmVpxvSBWY4dLqPzW33UhLXeL17kej1VQJSopaKWjBnu4u + ✔ 2.0.1: 0xb4fa71b3352D48AA93D34d085f87bb4aF0cE6Ab5 ipfs:QmeJq7vK5wUg7AsjTsr6oe8bNDGJzAYuZyk4yY2XBhSdVC + ✔ 2.0.2: 0xb4fa71b3352D48AA93D34d085f87bb4aF0cE6Ab5 ipfs:QmZJbfNXwV5RrRNmKJUsabMzJsupMM7pqtGdcetnb2CHQz + ✔ 2.0.3: 0xb4fa71b3352D48AA93D34d085f87bb4aF0cE6Ab5 ipfs:QmcgUz9PXaZwvA3m7fXPgjsEVKteuivLNSCDvxKGv8ztMa ``` ## More about environments The default environments used by aragonCLI are defined in [`environments.default.json`](https://github.com/aragon/aragon-cli/blob/master/packages/aragon-cli/config/environments.default.json). This file has 4 environments: -| Environment | Network | -|--- |--- | -| aragon:local | localhost | -| aragon:rinkeby | rinkeby | -| aragon:staging | rinkeby | -| aragon:mainnet | mainnet | +| Environment | Network | +| -------------- | --------- | +| aragon:local | localhost | +| aragon:rinkeby | rinkeby | +| aragon:staging | rinkeby | +| aragon:mainnet | mainnet | In case you have an `arapp.json` file in your app directory, aragonCLI will use your local configuration over the default. -> **Note**
-> The `aragon:local` environment which points to `localhost` does not have an ENS Registry address specified because aragonCLI will default the value to `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7` (the ENS Registry pre-deployed on the local development chain). - ## Building frontends 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've used one of the boilerplates, it's likely this has already been set up for you with -[`parcel-bundler`](https://parceljs.org) and [aragonUI](/docs/aragonui-intro). +If you've used one of the boilerplates, it's likely this has already been set up for you with [`parcel-bundler`](https://parceljs.org) and [aragonUI](/docs/aragonui-intro). 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 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 (see [tips and tricks of propagating IPFS content](/docs/guides-faq#propagating-your-content-hash-through-ipfs)) and making sure its assets are being loaded correctly. +This is important because 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 (see [tips and tricks of propagating IPFS content](/docs/guides-faq#propagating-your-content-hash-through-ipfs)) and making sure its assets are being loaded correctly. diff --git a/docs/guides-use-frame.md b/docs/guides-use-frame.md index 5730cc72..e09970bd 100644 --- a/docs/guides-use-frame.md +++ b/docs/guides-use-frame.md @@ -1,13 +1,115 @@ --- id: guides-use-frame title: How to use Frame -sidebar_label: How to use Frame +sidebar_label: Frame --- -[//]: # "TODO: create guide" - -This guide help you get started with Frame to interact with your DAO. If you don't have a DAO yet create one following [your first aragon app tutorial](tutorial.md). +This guide will help you to get started with Frame and interact with a DAO using a hardware wallet. ## Setup -Start by downloading Frame from the official website: https://frame.sh. +> You need a Ledger or Trezor wallet to use Frame. Hot wallet support will be added soon! + +Start by downloading Frame from the official website: https://frame.sh. After installation Frame stays quietly in your menu bar until it's needed. + +

+ +

+ +To take full advantage of Frame, we recommend you have `aragonCLI` installed as well. If you already have it, skip to the next section, otherwise run: + +```sh +npm install -g @aragon/cli +``` + +If you're having trouble with this step, you should take a look at the installing aragonCLI section of the [troubleshooting guide.](/docs/guides-faq#installing-aragonCLI) If that doesn't fix things, please don't hesitate to reach out to us at the [#dev-help channel on the Aragon Chat](https://aragon.chat/channel/dev-help). + +## Configure your device + +#### Ledger + +On Ledger devices insert your pin on the device to unlock it and then open Frame. + +

+ +

+ +#### Trezor + +On Trezor devices insert your pin directly on Frame. + +

+ +

+ +You should now be able to select the network and account you would like to use. + +#### Network + +To choose the appropriate network, select the button on the upper right corner (the three arrows). This will take you to Frame's menu, where you can configure its general settings. We will focus on the "Connection" option. Right now the default is Rinkeby but you can also choose Mainnet, Ropsten or Kovan. + +For this tutorial we will select Rinkeby. + +

+ +

+ +#### Accounts + +The last step is to choose your account. Click on the configuration button (the button to the right of the Ledger or Trezor icon) and then click on the accounts button that pops up below the icon. This will display a new menu with the available accounts on your device for the network. Select one with some test ether (if you don't have any, you can request some via the [Rinkeby faucet](https://faucet.rinkeby.io)). + +

+ +

+ +In the configuration menu you can also manage the dapp permisions you have granted for that particular account. We'll explain more about this in the next section. + +You are now finished setting up Frame for your device, and are ready to sign your first transaction! + +## Signing your first transaction + +In this section we are going to interact with an already [deployed DAO on Rinkeby](https://rinkeby.aragon.org/#/0x16b3C84d4DB149590981F2d3A36e14Db96069730/) that allows anyone to mint any amount of `FRAME` tokens to any address. We will use an `aragonCLI` command to execute a function on [the Token Manager app installed on the DAO](https://rinkeby.aragon.org/#/0x16b3C84d4DB149590981F2d3A36e14Db96069730/0x1A8D8BB7eB5aC6E6F51dF5E65d301c7e5dD00D58). You may find it helpful to [learn more about `dao exec` command](https://hack.aragon.org/docs/cli-dao-commands#dao-exec) before continuing. + +The first step is to run this command in your terminal: + +```sh +dao exec \ + 0x16b3C84d4DB149590981F2d3A36e14Db96069730 0x1A8D8BB7eB5aC6E6F51dF5E65d301c7e5dD00D58 \ + mint
\ + --environment aragon:rinkeby \ + --use-frame +``` + +Replace `
` with an address of your choice (as the token minting recipient) and `` with the amount of tokens you would like to mint for the address (remembering to apply the token's decimals, e.g. 10^18). The options `--environments` and `--use-frame` tell `aragonCLI` that we want to interact with Rinkeby to use Frame as the transaction signing provider. + +#### Permissions + +After running the command, you should see this error message in your terminal: + +```sh +✖ Returned error: Permission denied, approve AragonCLI in Frame to continue +``` + +Don't worry, we just need to grant `aragonCLI` permission to access your account on Frame. You may have seen Frame ask for this earlier on setup. Approve the request to continue. + +

+ +

+ +#### Signing + +Now run the command again. This time, Frame will ask you to sign the transaction that aragonCLI generated. Sign and then confirm it from your hardware device. In a couple of seconds, the transaction should be mined. + +

+ +

+ +Congratulations 🎉! You've just signed your first transaction with Frame. Navigate to the [live Aragon DAO's Token Manager](https://rinkeby.aragon.org/#/0x16b3C84d4DB149590981F2d3A36e14Db96069730/0x1a8d8bb7eb5ac6e6f51df5e65d301c7e5dd00d58) to see the minted `FRAME` tokens for your chosen address. + +#### Viewing transactions + +Finally, if you click on the "View details" button, Frame will open the transaction's details on Etherscan. + +

+ +

diff --git a/docs/guides-use-metamask.md b/docs/guides-use-metamask.md new file mode 100644 index 00000000..6cad3acb --- /dev/null +++ b/docs/guides-use-metamask.md @@ -0,0 +1,204 @@ +--- +id: guides-use-metamask +title: How to use Metamask +sidebar_label: Metamask +--- + +# What is MetaMask? + +Metamask is a browser plugin that lets you make Ethereum transactions through regular websites. + +It does this by injecting a Javascript library called web3.js into the namespace of each page your browser loads. + +web3.js is written by the Ethereum core team, and has functions that regular webpages can use to make read and write requests to the blockchain. + +Eventually we'll have browsers with this sort of functionality built-in. But for now we need plugins like Metamask to help us bridge the gap between web2 and web3. We call these portals between web2 and web3, web3 providers. + +For more on why we need web3 providers like Metamask to interact with the blockchain see the **web3 provider** section of our [getting started page](/docs/getting-started.html#web3-provider). + +Finally, if you're new to web3 we recommend you read through the **web3** section of our [getting started page](/docs/getting-started.html#web3). + +# Getting started + +If this is your first time using Metamask, here's how to get started: + +Visit the [Metamask homepage](https://metamask.io/) and download the relevant browser extension (this guide will be based around the Chrome extension, but the process is similar for all browsers). + +Once it's downloaded, you should be automatically directed to a welcome page. + +

+ +

+ +Follow the instructions carefully. They should be pretty self-explanatory. + +Once your MetaMask setup is complete, you should be redirected to your newly created Ethereum wallet. + +

+ +

+ +If you've made it this far, congratulations 🎉. + +You now have all you need to sign transactions and interact directly with the Ethereum blockchain. + +# A couple of useful points + +While at this stage there's no need for you to understand everything about Metamask, here are a couple of useful points. + +### Selected networks + +In the top right you should see a dropdown menu with **Main Ethereum Network** selected. + +With this option selected, you're able to interact directly with the main Ethereum blockchain. If you click on it however, you should see that you have the ability to select other networks. + +

+ +

+ +Why would we need to select other networks? Simply put, before launching a project (or dapp) on the main Ethereum network, it's good practice to deploy a version to an Ethereum test network. + +The main reason is that Testnet ETH can be obtained without having to pay real money. This gives developers and the community a chance to iron out any problems before real money is involved. + +There are three testnets: **Ropsten**, **Kovan**, and **Rinkleby**. + +Don't worry about the precise differences between them at this stage. All you need to know is that they simulate Ethereum and can be used without having to pay real money. + +Finally, you can also interact with private Ethereum networks by selecting **Localhost 8545**. Private in this case doesn't mean more secure. It just means that the nodes are not connected to the main or test network nodes. + +Why would we want to use a private network? In short, using the mainnet or testnets requires you to download the past transaction history of the blockchain. This takes a considerable amount of time, and requires a lot of local disk space. + +A private network requires negligible local disk storage and can be operated without having to purchase ETH with real money. Perfect for rapid experimentation and testing. + +### Account address + +If you click on the **Details** button below your account name  - in my case Account 1 -  a popup will appear with your account address. It should look something like: + +
**0x931D387731bBbC988B312206c74F77D004D6B84b**
+ +This is your public address (or public key). You can share this with other people to receive ETH. + +# Signing your first transaction with MetaMask + +In this section we'll go through how to sign your first transaction using Metamask. + +From now on, I'll assume you've reached the **Interacting with your first DAO** section of our [getting started](https://hack.aragon.org/docs/getting-started.html) page. If you haven't, and you want to follow along, you should do this first. + +The first step is to open up the Metamask browser extension. If you're using Chrome you should be able to do this by clicking on the fox icon located to the right of your address bar. If you can't see it, [click here](https://chrome.google.com/webstore/search/metamask). + +This will open up an interface to your Ethereum wallet. + +

+ +

+ +Click on the circle in the top right. You should see a black drop down menu appear. + +

+ +

+ +Click on the **Log out** button in the top right of this menu. You'll be taken to a Welcome Back page. + +

+ +

+ +Now click on **Import using account seed phrase**. Metamask should now open up in a new tab, with the heading: **Restore your account with Seed Phrase**. + +Now, what you need to do is to look at the output of your terminal after you ran `npx aragon run`. You should see the following at the end: + +``` +ℹ The accounts were generated from the following mnemonic phrase: +explain tackle mirror kit van hammer degree position ginger unfair soup bogus +``` + +These 12 words phrase will allow us to use MetaMask to access an account that has permission to update the Counter in our Counter app. + +> Note that your mnemonic phrase won't be the same as mine. So make sure you copy yours from your terminal, and not from this blog. + +Once you've copied it, paste it into the wallet seed text box, and create a new password. + +

+ +

+ +When you're done, click on the **Restore** button at the bottom of the page. Congratulations 🎉. You've now connected MetaMask to an Ethereum account that has permission to increment and decrement the Counter app in your first DAO. + +We're now finally ready to play with the Counter app 😊. + +Navigate back to your DAO and click on the **Increment** button in the Counter app. + +

+ +

+ +You should see a panel slide in from the right with an error message. The message (in a blue box) basically says you can't perform any actions unless you enable MetaMask. + +

+ +

+ +You should see that the final line inside the blue box reads: **Please unlock and enable Metamask**. Click on **enable** and open up MetaMask again. + +You should see a connection request from Aragon. Click on the **Connect** button to accept it. + +

+ +

+ +Now go back to the Counter app. Oh dear… we have another error message 😔. This time, the message says we need to connect MetaMask to the private network. + +

+ +

+ +Why are we getting this error? + +Remember, Metamask defaults to selecting the main Ethereum network when you make a transaction. But our DAO is actually running on a private local network, not the mainnet. + +Why are we using a private network? + +Remember that using the mainnet requires purchasing ETH with real money. And that using the mainnet or testnets requires us to download the entire past transaction history of the blockchain: this takes a considerable amount of time, and requires a lot of local disk space. In contrast, a private network requires almost no local disk space and can be operated without having to purchase ETH with real money. So it's perfect for rapid experimentation and testing. + +Remember, we can connect to a local (private) network by opening up Metamask and selecting **Localhost 8545**. So let's go ahead and do that. + +Close the panel and open MetaMask again. Now, click on the selected network  - **Main Ethereum Network** -  and select **Localhost 8545** from the dropdown menu that appears. + +

+ +

+ +You should now see that your account has some ETH. Quite a lot in fact. Unfortunately this is not real ETH, but it will allow you to perform transactions within your local private network (in other words, increment and decrement the counter). + +Now, go back to the **Counter app**, and click on the **Increment** button again. + +This time, instead of an error message, you should see an explanation of the action you are about to perform. + +

+ +

+ +Double check that the action that's about to be triggered is the one you wish to perform. Then click on **Create transaction**. + +The app will now signal to you that it's waiting for your signature. + +

+ +

+ +Open MetaMask again to sign your transaction. You'll be asked to confirm a transaction from Account 1 (your account) to the address of your newly created DAO. The total amount you're sending is about 0.001 ETH: basically just the **Gas fee**. + +

+ +

+ +In case you're unfamiliar with the concept of **Gas**, the **Gas fee** is what's used to incentivize miners to add your transaction to the blockchain. You can think of it as a small tip. Remember that this transaction is taking place on a local (private) network, so this isn't real money. If you're happy with the details of the transaction, click on **Confirm**. + +Now, if you go back to you're first DAO you should see that the counter has finally been incremented! + +

+ +

+ +If you've made it all the way here, well done! You've just signed your first blockchain transaction with Metamask. 🎉🎉😊 diff --git a/docs/os-building.md b/docs/os-building.md index ec2cd498..a75eb241 100644 --- a/docs/os-building.md +++ b/docs/os-building.md @@ -90,7 +90,7 @@ contract MyFancyApp is App { ## Roles and the Access Control List -aragonOS comes with a powerful [Access Control List (ACL)](/docs/acl-intro.html) that apps can leverage for protecting functionality behind permissions. Rather than coding any custom access control logic into your app, such as the infamous `onlyOwner`, you can just protect functions by adding the `auth()` or `authP()` modifiers. +aragonOS comes with a powerful [Access Control List (ACL)](/docs/acl-intro) that apps can leverage for protecting functionality behind permissions. Rather than coding any custom access control logic into your app, such as the infamous `onlyOwner`, you can just protect functions by adding the `auth()` or `authP()` modifiers. If the `auth()` modifier is present in a function it will check with the connected Kernel's ACL whether the entity performing the call is allowed to perform the action in the app prior to its execution. @@ -216,12 +216,13 @@ If a function has a token parameter, but you would like to handle ETH as well as #### Representing time -As it is unlikely we'll ever need to worry about `uint256`-precision for UNIX timestamps (in seconds) or blocks (in ~15s intervals), we generally cast these values down to `uint64`s so we can pack them to save gas. aragonOS provides `TimeHelpers` and `Uint256Helpers` as utility contracts for obtaining these values safely. +As it is unlikely we'll ever need to worry about `uint256`-precision for UNIX timestamps (in seconds) or blocks (in ~15s intervals), we generally cast these values down to `uint64`s so we can pack them to save gas. aragonOS provides [`TimeHelpers`](/docs/common_TimeHelpers) and [`Uint256Helpers`](/docs/common_Uint256Helpers) as utility contracts for obtaining these values safely. ### Safety conveniences -`SafeERC20` is available as of `@aragon/os@4.1.0` as a generic library to smooth out ERC20 token -interactions. In particular, it adds the ability to transparently handle [tokens that don't return properly](https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/ERC20_token_issue_list.md#b1-transfer-no-return) as well as adding `staticcall` variants for common read-only interfaces in tokens. +As of `@aragon/os@4.1.0`, [`SafeERC20`](/docs/common_SafeERC20) is available as a generic library to smooth out ERC20 token interactions. In particular, it adds the ability to transparently handle [tokens that don't return properly](https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/ERC20_token_issue_list.md#b1-transfer-no-return) as well as adding `staticcall` variants for common read-only interfaces in tokens. + +As of `@aragon/os@4.2.0`, a `ReentrancyGuard` has been built into `AragonApp` to prevent exposed app functionality from facing re-entrancy problems. See [the aragonOS reference documentation](/docs/aragonos-ref#re-entrancy-protection) for more information on making use of it. ### UNIX philosophy diff --git a/docs/os-ref.md b/docs/os-ref.md index e5aa6635..9bec3271 100644 --- a/docs/os-ref.md +++ b/docs/os-ref.md @@ -39,7 +39,7 @@ function getApp(bytes32 namespace, bytes32 appId) public view returns (address); ``` - **namespace:** specifies what type of app record is being set. -- **appId:** used to identify what app is being set. It is the [ENS `namehash`](http://docs.ens.domains/en/latest/introduction.html#namehash) of the aragonPM repo (e.g. `namehash('voting.aragonpm.eth')`). +- **appId:** used to identify what app is being set. It is the [ENS `namehash`](https://docs.ens.domains/#namehash) of the aragonPM repo (e.g. `namehash('voting.aragonpm.eth')`). - **app:** Address of a contract that can have a different meaning depending on the [namespace](#namespaces). > **Warning** @@ -69,7 +69,7 @@ function newAppInstance(bytes32 appId, address appBase); function newPinnedAppInstance(bytes32 appId, address appBase); ``` -- **appId:** used to identify what app to link the proxy to. It is the [ENS `namehash`](http://docs.ens.domains/en/latest/introduction.html#namehash) of the aragonPM repo (e.g. `namehash('voting.aragonpm.eth')`). +- **appId:** used to identify what app to link the proxy to. It is the [ENS `namehash`](https://docs.ens.domains/#namehash) of the aragonPM repo (e.g. `namehash('voting.aragonpm.eth')`). - **app:** Address of the base contract for the app instance. If this app has already been installed previously, this address **must** be the same as the one currently set (use `getApp(kernel.APP_BASES_NAMESPACE(), appId)` to check). Overloaded versions of the two functions with more options are available: @@ -510,6 +510,26 @@ function getEVMScriptRegistry() public view returns (IEVMScriptRegistry); For more information on the use cases for EVMScripts, see the following [Forwarders and EVMScripts](#forwarders-and-evmscripts) section. +#### Re-entrancy protection + +AragonApp comes with a built-in re-entrancy guard, easily usable through the `nonReentrant` modifier: + +```solidity +function nonReentrantFunction() external nonReentrant { +} +``` + +It's use is recommended as a last resort, for cases where there are no better options for protecting against re-entrancy. + +Most commonly, you may want to apply this modifier to functions that fulfill these requirements: + +- Externally available and is state changing +- Invokable by non-trusted contracts or accounts +- Not already protected by a role +- There exist more than one of these functions + +A contrived example of this is if your app allows creating a recurring token payment to another account (protected via a role), but only the recipient account can modify certain parameters (e.g. when to withdraw payments, what token to withdraw). If the withdraw and token selection functions are separately available, they may benefit from being `nonReentrant`. + ### API documentation See [AragonApp](/docs/apps_AragonApp.html). diff --git a/docs/package-management.md b/docs/package-management.md index 54c28635..3c425399 100644 --- a/docs/package-management.md +++ b/docs/package-management.md @@ -14,4 +14,4 @@ aragonPM allows for multiple package registries to exist with different governan Different aragonPM registries in which everyone can publish their packages are expected to be created by the community. **You can create your own registry** and have full control over it. -#### Read more: [aragonPM architecture](/docs/apm.html) +#### Read more: [aragonPM](/docs/apm-intro.html) diff --git a/docs/tutorial.md b/docs/tutorial.md index 1f14c487..44c781f4 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -4,7 +4,7 @@ title: Your first Aragon app sidebar_label: Your first Aragon app --- -##### +##### In this guide, we will walk you through creating your first Aragon app using [aragonOS](os-intro.md), the JavaScript implementation of [aragonAPI](api-intro.md), [aragonUI](ui-intro.md) and [aragonCLI](/docs/cli-intro.html). @@ -140,7 +140,7 @@ Then the client takes care of connecting to Ethereum via Web3, and also handles All of this is achieved by using aragonAPI. aragonAPI is split in two parts: one for clients and one for apps. The client portion of aragonAPI reads _requests_ from the app over RPC, sandboxes apps and performs Web3 actions, whereas the app portion provides a simple API to communicate with the client (to read state, send transactions and more). -Because we're building an app, all we need is `@aragon/client` and our template already has that installed. +Because we're building an app, all we need is `@aragon/api` and our template already has that installed. ### Background workers and building state @@ -155,7 +155,7 @@ Let's start by writing a background worker that listens for our `Increment` and ```js // app/script.js import '@babel/polyfill' -import Aragon from '@aragon/client' +import Aragon from '@aragon/api' const app = new Aragon() @@ -175,15 +175,11 @@ app.store(async (state, event) => { } }) -function getValue() { +async function getValue() { // Get current value from the contract by calling the public getter - return new Promise(resolve => { - app - .call('value') - .first() - .map(value => parseInt(value, 10)) - .subscribe(resolve) - }) + // app.call() returns a single-emission observable that we can immediately turn into a promise + const value = await app.call('value').toPromise() + return parseInt(value, 10) } ``` @@ -220,7 +216,7 @@ Now let's write the view portion of our app. In our case, this is a simple HTML ```js // app/app.js -import Aragon, { providers } from '@aragon/client' +import Aragon, { providers } from '@aragon/api' const initializeApp = () => { const app = new Aragon(new providers.WindowMessage(window.parent)) @@ -416,7 +412,7 @@ You can check the [aragonCLI documentation](cli-main-commands.md) for an in-dept A good place to go from here would be to check out [our existing apps](https://github.com/aragon/aragon-apps). They are fairly self-contained and use some patterns you might find helpful. -There is much more to [aragonOS](os-intro.md) and [aragonAPI](ui-intro.md), and we even have our own [UI toolkit](https://github.com/aragon/aragon-ui). We encourage you to explore all 3 and provide us feedback. +There is much more to [aragonOS](os-intro.md) and [aragonAPI](api-intro.md), and we even have our own [UI toolkit](ui-intro.md). We encourage you to explore all 3 and provide us feedback. ### Community diff --git a/readme.md b/readme.md index 2fbfd6d4..b39c7993 100644 --- a/readme.md +++ b/readme.md @@ -1,25 +1,34 @@ # Instructions for running these docs +## Prerequisites -### Running a local instance -``` +- [`solc@v0.4.24`](https://github.com/ethereum/solidity/releases) + +Note: `solidity-docgen` [does not work on Windows](https://github.com/OpenZeppelin/solidity-docgen/issues/22). + +## Running a local instance + +```sh git clone https://github.com/aragon/hack.git cd hack/website npm install npm start ``` -This should open your local instance of these docs in your browser at http://localhost:3000/. +This should open your local instance of these docs in your browser at . -### Publishing +## Publishing -``` +```sh cd website npm install npm run build npm run publish-gh-pages ``` +Note: the `aragonOS` files **must** be generated on publish, [see issue](https://github.com/aragon/hack/issues/116). + +## Contributing -### Contributing -Thanks for your interest in contributing to these docs! Get started [here](https://github.com/aragon/hack/blob/master/CONTRIBUTING.md). \ No newline at end of file +Thanks for your interest in contributing to these docs! +Get started [here](https://github.com/aragon/hack/blob/master/CONTRIBUTING.md). diff --git a/website/i18n/en.json b/website/i18n/en.json index 5b7cbf8e..8e2692f4 100644 --- a/website/i18n/en.json +++ b/website/i18n/en.json @@ -4,82 +4,352 @@ "next": "Next", "previous": "Previous", "tagline": "What you need to get started building with Aragon", - "acl-intro": "Permissions", - "Permissions": "Permissions", - "apm-ref": "aragonPM reference documentation", - "Reference documentation": "Reference documentation", - "apm": "aragonPM", - "Architecture": "Architecture", - "app-center-preparing-assets": "App Center", - "Preparing assets": "Preparing assets", - "cli-apm-commands": "aragonPM commands", - "aragonPM commands": "aragonPM commands", - "cli-dao-commands": "DAO commands", - "DAO commands": "DAO commands", - "cli-global-confg": "Global configuration", - "Global configuration": "Global configuration", - "cli-intro": "Using the aragonCLI", - "Introduction": "Introduction", - "cli-main-commands": "Main commands", - "Main commands": "Main commands", - "client": "The Aragon client", - "The Aragon client": "The Aragon client", - "forwarding-intro": "Forwarding", - "Forwarding": "Forwarding", - "getting-started": "Getting started", - "Getting started": "Getting started", - "glossary": "Glossary", - "Glossary": "Glossary", - "guides-custom-deploy": "Custom Aragon Organization Deployment using aragonCLI", - "Custom deploy with aragonCLI": "Custom deploy with aragonCLI", - "guides-faq": "Troubleshooting and FAQ", - "Troubleshooting": "Troubleshooting", - "guides-publish": "Publish", - "Publish": "Publish", - "guides-use-frame": "How to use Frame", - "How to use Frame": "How to use Frame", - "human-readable-txs": "Human readable transactions", - "Human readable transactions": "Human readable transactions", - "aragonjs-guide-bg-scripts": "aragonAPI - Background Scripts", - "Background Scripts": "Background Scripts", - "aragonjs-intro": "aragonAPI - Introduction", - "aragonjs-ref-app": "aragonAPI - App", - "App": "App", - "aragonjs-ref-providers": "aragonAPI - Providers", - "Providers": "Providers", - "aragonjs-ref-wrapper": "aragonAPI - Wrapper", - "Wrapper": "Wrapper", - "kits-intro": "Kits", - "Kits": "Kits", - "aragonos-3-ref": "aragonOS 3 reference documentation", - "Reference (aragonOS 3)": "Reference (aragonOS 3)", - "aragonos-4-migration": "aragonOS 4 migration guide", - "Migrating to aragonOS 4 from aragonOS 3": "Migrating to aragonOS 4 from aragonOS 3", - "aragonos-building": "Developing with aragonOS", - "aragonos-intro": "aragonOS intro", - "aragonos-motivation": "Motivations", - "Motivations": "Motivations", - "aragonos-ref": "aragonOS reference documentation", - "package-management": "Package management", - "Package management": "Package management", - "stack": "The Aragon stack", - "The stack": "The stack", - "tutorial": "Your first Aragon app", - "Your first Aragon app": "Your first Aragon app", - "aragonui-intro": "aragonUI intro", - "upgradeability-intro": "Upgradeability", - "Upgradeability": "Upgradeability", - "Get started": "Get started", - "Tutorial": "Tutorial", - "aragonOS": "aragonOS", - "aragonAPI": "aragonAPI", - "aragonUI": "aragonUI", - "Help": "Help", - "The basics": "The basics", - "Guides": "Guides", - "aragonCLI": "aragonCLI", - "aragonPM": "aragonPM", - "App Center": "App Center" + "docs": { + "acl-intro": { + "title": "Permissions", + "sidebar_label": "Permissions" + }, + "acl_ACL": { + "title": "ACL" + }, + "acl_ACLSyntaxSugar_ACLHelpers": { + "title": "ACLHelpers" + }, + "acl_ACLSyntaxSugar": { + "title": "ACLSyntaxSugar" + }, + "acl_IACL": { + "title": "IACL" + }, + "acl_IACLOracle": { + "title": "IACLOracle" + }, + "apm_APMNamehash": { + "title": "APMNamehash" + }, + "apm_APMRegistry_APMInternalAppNames": { + "title": "APMInternalAppNames" + }, + "apm_APMRegistry": { + "title": "APMRegistry" + }, + "apm_Repo": { + "title": "Repo" + }, + "apps_AppProxyBase": { + "title": "AppProxyBase" + }, + "apps_AppProxyPinned": { + "title": "AppProxyPinned" + }, + "apps_AppProxyUpgradeable": { + "title": "AppProxyUpgradeable" + }, + "apps_AppStorage": { + "title": "AppStorage" + }, + "apps_AragonApp": { + "title": "AragonApp" + }, + "apps_UnsafeAragonApp": { + "title": "UnsafeAragonApp" + }, + "common_Autopetrified": { + "title": "Autopetrified" + }, + "common_ConversionHelpers": { + "title": "ConversionHelpers" + }, + "common_DelegateProxy": { + "title": "DelegateProxy" + }, + "common_DepositableDelegateProxy": { + "title": "DepositableDelegateProxy" + }, + "common_DepositableStorage": { + "title": "DepositableStorage" + }, + "common_EtherTokenConstant": { + "title": "EtherTokenConstant" + }, + "common_IForwarder": { + "title": "IForwarder" + }, + "common_Initializable": { + "title": "Initializable" + }, + "common_IsContract": { + "title": "IsContract" + }, + "common_IVaultRecoverable": { + "title": "IVaultRecoverable" + }, + "common_Petrifiable": { + "title": "Petrifiable" + }, + "common_ReentrancyGuard": { + "title": "ReentrancyGuard" + }, + "common_SafeERC20": { + "title": "SafeERC20" + }, + "common_TimeHelpers": { + "title": "TimeHelpers" + }, + "common_Uint256Helpers": { + "title": "Uint256Helpers" + }, + "common_UnstructuredStorage": { + "title": "UnstructuredStorage" + }, + "common_VaultRecoverable": { + "title": "VaultRecoverable" + }, + "ens_ENSConstants": { + "title": "ENSConstants" + }, + "ens_ENSSubdomainRegistrar": { + "title": "ENSSubdomainRegistrar" + }, + "evmscript_EVMScriptRegistry": { + "title": "EVMScriptRegistry" + }, + "evmscript_EVMScriptRunner": { + "title": "EVMScriptRunner" + }, + "evmscript_executors_BaseEVMScriptExecutor": { + "title": "BaseEVMScriptExecutor" + }, + "evmscript_executors_CallsScript": { + "title": "CallsScript" + }, + "evmscript_IEVMScriptExecutor": { + "title": "IEVMScriptExecutor" + }, + "evmscript_IEVMScriptRegistry_EVMScriptRegistryConstants": { + "title": "EVMScriptRegistryConstants" + }, + "evmscript_IEVMScriptRegistry": { + "title": "IEVMScriptRegistry" + }, + "evmscript_ScriptHelpers": { + "title": "ScriptHelpers" + }, + "factory_APMRegistryFactory": { + "title": "APMRegistryFactory" + }, + "factory_AppProxyFactory": { + "title": "AppProxyFactory" + }, + "factory_DAOFactory": { + "title": "DAOFactory" + }, + "factory_ENSFactory": { + "title": "ENSFactory" + }, + "factory_EVMScriptRegistryFactory": { + "title": "EVMScriptRegistryFactory" + }, + "kernel_IKernel_IKernelEvents": { + "title": "IKernelEvents" + }, + "kernel_IKernel": { + "title": "IKernel" + }, + "kernel_Kernel": { + "title": "Kernel" + }, + "kernel_KernelConstants_KernelAppIds": { + "title": "KernelAppIds" + }, + "kernel_KernelConstants_KernelNamespaceConstants": { + "title": "KernelNamespaceConstants" + }, + "kernel_KernelProxy": { + "title": "KernelProxy" + }, + "kernel_KernelStorage": { + "title": "KernelStorage" + }, + "api-intro": { + "title": "aragonAPI Introduction", + "sidebar_label": "Introduction" + }, + "apm-ref": { + "title": "aragonPM reference documentation", + "sidebar_label": "Reference documentation" + }, + "apm": { + "title": "aragonPM", + "sidebar_label": "Architecture" + }, + "app-center-preparing-assets": { + "title": "App Center", + "sidebar_label": "Preparing assets" + }, + "cli-apm-commands": { + "title": "aragonPM commands", + "sidebar_label": "APM commands" + }, + "cli-dao-commands": { + "title": "DAO commands", + "sidebar_label": "DAO commands" + }, + "cli-global-confg": { + "title": "Global configuration", + "sidebar_label": "Global configuration" + }, + "cli-intro": { + "title": "Using the aragonCLI", + "sidebar_label": "Introduction" + }, + "cli-ipfs-commands": { + "title": "IPFS commands", + "sidebar_label": "IPFS commands" + }, + "cli-main-commands": { + "title": "Main commands", + "sidebar_label": "Main commands" + }, + "client": { + "title": "The Aragon client", + "sidebar_label": "The Aragon client" + }, + "forwarding-intro": { + "title": "Forwarding", + "sidebar_label": "Forwarding" + }, + "getting-started": { + "title": "Getting started", + "sidebar_label": "Getting started" + }, + "glossary": { + "title": "Glossary", + "sidebar_label": "Glossary" + }, + "guides-custom-deploy": { + "title": "Custom Deploy", + "sidebar_label": "Custom deploy with aragonCLI" + }, + "guides-faq": { + "title": "Troubleshooting and FAQ", + "sidebar_label": "Troubleshooting" + }, + "guides-publish": { + "title": "Publish", + "sidebar_label": "Publish" + }, + "guides-use-frame": { + "title": "How to use Frame", + "sidebar_label": "How to use Frame" + }, + "human-readable-txs": { + "title": "Human readable transactions", + "sidebar_label": "Human readable transactions" + }, + "aragonjs-guide-bg-scripts": { + "title": "Background Scripts", + "sidebar_label": "Background Scripts" + }, + "aragonjs-ref-app": { + "title": "aragonAPI for Javascript", + "sidebar_label": "App API" + }, + "aragonjs-ref-architecture": { + "title": "aragonAPI for architecture", + "sidebar_label": "Architecture of apps" + }, + "aragonjs-ref-providers": { + "title": "aragonAPI for providers", + "sidebar_label": "Providers" + }, + "aragonjs-quick-start": { + "title": "Quick Start", + "sidebar_label": "Quick Start" + }, + "aragonjs-ref-react": { + "title": "aragonAPI for React", + "sidebar_label": "React API" + }, + "aragonjs-ref-wrapper": { + "title": "aragonAPI for wrapper", + "sidebar_label": "Wrapper" + }, + "aragonos-3-ref": { + "title": "aragonOS 3 reference documentation", + "sidebar_label": "Reference (aragonOS 3)" + }, + "aragonos-4-migration": { + "title": "aragonOS 4 migration guide", + "sidebar_label": "Migrating to aragonOS 4 from aragonOS 3" + }, + "aragonos-building": { + "title": "Developing with aragonOS" + }, + "aragonos-intro": { + "title": "aragonOS intro", + "sidebar_label": "Introduction" + }, + "aragonos-motivation": { + "title": "Motivations", + "sidebar_label": "Motivations" + }, + "aragonos-ref": { + "title": "aragonOS reference documentation", + "sidebar_label": "Reference documentation" + }, + "package-management": { + "title": "Package management", + "sidebar_label": "Package management" + }, + "stack": { + "title": "The Aragon stack", + "sidebar_label": "The stack" + }, + "templates-intro": { + "title": "Templates", + "sidebar_label": "Templates" + }, + "tutorial": { + "title": "Your first Aragon app", + "sidebar_label": "Your first Aragon app" + }, + "aragonui-intro": { + "title": "aragonUI intro", + "sidebar_label": "Introduction" + }, + "upgradeability-intro": { + "title": "Upgradeability", + "sidebar_label": "Upgradeability" + } + }, + "links": { + "Get started": "Get started", + "Tutorial": "Tutorial", + "aragonOS": "aragonOS", + "aragonAPI": "aragonAPI", + "aragonUI": "aragonUI", + "Help": "Help" + }, + "categories": { + "The basics": "The basics", + "Guides": "Guides", + "aragonCLI": "aragonCLI", + "aragonPM": "aragonPM", + "aragonOS": "aragonOS", + "aragonAPI": "aragonAPI", + "aragonUI": "aragonUI", + "App Center": "App Center", + "ACL": "ACL", + "APM": "APM", + "APPS": "APPS", + "COMMON": "COMMON", + "ENS": "ENS", + "EVMSCRIPT": "EVMSCRIPT", + "EVMSCRIPT / EXECUTORS": "EVMSCRIPT / EXECUTORS", + "FACTORY": "FACTORY", + "KERNEL": "KERNEL" + } }, "pages-strings": { "Help Translate|recruit community translators for your project": "Help Translate", diff --git a/website/package-lock.json b/website/package-lock.json index 7645b806..5744aba4 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -3,9 +3,9 @@ "lockfileVersion": 1, "dependencies": { "@aragon/docusaurus": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@aragon/docusaurus/-/docusaurus-1.7.3.tgz", - "integrity": "sha512-8p7HJqEkDCmOHiqWashXS4awCODhFx+Gq2IAftSxsnlNwUki192BJ94WDaFRCL5wvQvbMU/4k1TabHM15leeUg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@aragon/docusaurus/-/docusaurus-1.7.4.tgz", + "integrity": "sha512-GZZPnNKfY0+Dn+U0+WEhNZ215sS/66xBSp7wAs0EeZyR4yywDgfiSp4KnMVWdwkDgwER7W3spWmYBtUSoOadHw==", "dev": true, "requires": { "@babel/core": "^7.0.0", @@ -116,9 +116,9 @@ } }, "@aragon/os": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@aragon/os/-/os-4.1.0.tgz", - "integrity": "sha512-PPb8n9aUiBFHZDEFj4Kry7hrgBPYHPD+gwnZlMUvo3ocad4TCljiJYPC5SlOmmySrUkqTIHNksUzWTbuzy9n4g==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@aragon/os/-/os-4.2.0.tgz", + "integrity": "sha512-p0CGev++Ku0oxv+6vvViaPxHYwCVSJxleqJNzf06b9L8VaiWAs0zTwVspebD3mMQqtGJgO7A63Y0LhvsHFw5IA==", "requires": { "homedir": "^0.6.0", "mkdirp": "^0.5.1", @@ -1149,14 +1149,14 @@ }, "dependencies": { "browserslist": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.3.tgz", - "integrity": "sha512-Tx/Jtrmh6vFg24AelzLwCaCq1IUJiMDM1x/LPzqbmbktF8Zo7F9ONUpOWsFK6TtdON95mSMaQUWqi0ilc8xM6g==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.5.tgz", + "integrity": "sha512-0QFO1r/2c792Ohkit5XI8Cm8pDtZxgNl2H6HU4mHrpYz7314pEYcsAVVatM0l/YmxPnEzh9VygXouj4gkFUTKA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000955", - "electron-to-chromium": "^1.3.122", - "node-releases": "^1.1.12" + "caniuse-lite": "^1.0.30000960", + "electron-to-chromium": "^1.3.124", + "node-releases": "^1.1.14" } }, "semver": { @@ -1195,9 +1195,9 @@ }, "dependencies": { "core-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0.tgz", - "integrity": "sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", + "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", "dev": true }, "source-map": { @@ -1207,9 +1207,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -1367,9 +1367,9 @@ } }, "@types/node": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", - "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==", + "version": "11.13.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.6.tgz", + "integrity": "sha512-Xoo/EBzEe8HxTSwaZNLZjaW6M6tA/+GmD3/DZ6uo8qSaolE/9Oarko0oV1fVfrLqOz0tx0nXJB4rdD5c+vixLw==", "dev": true }, "@types/q": { @@ -1408,9 +1408,9 @@ "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" }, "airbnb-prop-types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.12.0.tgz", - "integrity": "sha512-EJLaLf0Rjg+AouOgIBlO1rerwgwu3Y0dwxp7BWzUemY9J1UPO9XOlMmOXzpaHW9O0RzpofiThVl0sIToHtLPAQ==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz", + "integrity": "sha512-2FN6DlHr6JCSxPPi25EnqGaXC4OC3/B3k1lCd6MMYrZ51/Gf/1qDfaR+JElzWa+Tl7cY2aYOlsYJGFeQyVHIeQ==", "requires": { "array.prototype.find": "^2.0.4", "function.prototype.name": "^1.1.0", @@ -1419,9 +1419,9 @@ "object-is": "^1.0.1", "object.assign": "^4.1.0", "object.entries": "^1.1.0", - "prop-types": "^15.6.2", + "prop-types": "^15.7.2", "prop-types-exact": "^1.2.0", - "react-is": "^16.8.1" + "react-is": "^16.8.6" } }, "ajv": { @@ -1653,13 +1653,13 @@ "dev": true }, "autoprefixer": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.0.tgz", - "integrity": "sha512-hMKcyHsZn5+qL6AUeP3c8OyuteZ4VaUlg+fWbyl8z7PqsKHF/Bf8/px3K6AT8aMzDkBo8Bc11245MM+itDBOxQ==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", + "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", "dev": true, "requires": { - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000947", + "browserslist": "^4.5.4", + "caniuse-lite": "^1.0.30000957", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.14", @@ -1667,14 +1667,14 @@ }, "dependencies": { "browserslist": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.3.tgz", - "integrity": "sha512-Tx/Jtrmh6vFg24AelzLwCaCq1IUJiMDM1x/LPzqbmbktF8Zo7F9ONUpOWsFK6TtdON95mSMaQUWqi0ilc8xM6g==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.5.tgz", + "integrity": "sha512-0QFO1r/2c792Ohkit5XI8Cm8pDtZxgNl2H6HU4mHrpYz7314pEYcsAVVatM0l/YmxPnEzh9VygXouj4gkFUTKA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000955", - "electron-to-chromium": "^1.3.122", - "node-releases": "^1.1.12" + "caniuse-lite": "^1.0.30000960", + "electron-to-chromium": "^1.3.124", + "node-releases": "^1.1.14" } } } @@ -2404,9 +2404,9 @@ } }, "bin-version": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", - "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", "dev": true, "requires": { "execa": "^1.0.0", @@ -3005,15 +3005,15 @@ } }, "caniuse-db": { - "version": "1.0.30000955", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000955.tgz", - "integrity": "sha512-VNb239mObbXMw9fWhd31idGYBG1gNBQc/qjUWa+ldoeWnjAkoeTZOowTMnVwcCiaMjbC7DNYw8YFkfdFlWLJrA==", + "version": "1.0.30000962", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000962.tgz", + "integrity": "sha512-zkAkM+FSotCJZxdBDHoMhUWGUJzJjyWTTt4h33w3VFM1pirqxRHGgGIjireWkdYZQVRSYScNANixGtGycIFhmg==", "dev": true }, "caniuse-lite": { - "version": "1.0.30000955", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000955.tgz", - "integrity": "sha512-6AwmIKgqCYfDWWadRkAuZSHMQP4Mmy96xAXEdRBlN/luQhlRYOKgwOlZ9plpCOsVbBuqbTmGqDK3JUM/nlr8CA==" + "version": "1.0.30000962", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000962.tgz", + "integrity": "sha512-WXYsW38HK+6eaj5IZR16Rn91TGhU3OhbwjKZvJ4HN/XBIABLKfbij9Mnd3pM0VEwZSlltWjoWg3I8FQ0DGgNOA==" }, "caseless": { "version": "0.12.0", @@ -3344,9 +3344,9 @@ "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "commondir": { @@ -3356,9 +3356,9 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { @@ -3449,46 +3449,46 @@ "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-js-compat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.0.tgz", - "integrity": "sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", + "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", "dev": true, "requires": { - "browserslist": "^4.5.1", - "core-js": "3.0.0", - "core-js-pure": "3.0.0", - "semver": "^5.6.0" + "browserslist": "^4.5.4", + "core-js": "3.0.1", + "core-js-pure": "3.0.1", + "semver": "^6.0.0" }, "dependencies": { "browserslist": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.3.tgz", - "integrity": "sha512-Tx/Jtrmh6vFg24AelzLwCaCq1IUJiMDM1x/LPzqbmbktF8Zo7F9ONUpOWsFK6TtdON95mSMaQUWqi0ilc8xM6g==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.5.tgz", + "integrity": "sha512-0QFO1r/2c792Ohkit5XI8Cm8pDtZxgNl2H6HU4mHrpYz7314pEYcsAVVatM0l/YmxPnEzh9VygXouj4gkFUTKA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000955", - "electron-to-chromium": "^1.3.122", - "node-releases": "^1.1.12" + "caniuse-lite": "^1.0.30000960", + "electron-to-chromium": "^1.3.124", + "node-releases": "^1.1.14" } }, "core-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0.tgz", - "integrity": "sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", + "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", "dev": true } } }, "core-js-pure": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.0.tgz", - "integrity": "sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", + "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==", "dev": true }, "core-util-is": { @@ -3935,9 +3935,9 @@ }, "dependencies": { "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" } } }, @@ -4219,9 +4219,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.122", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.122.tgz", - "integrity": "sha512-3RKoIyCN4DhP2dsmleuFvpJAIDOseWH88wFYBzb22CSwoFDSWRc4UAMfrtc9h8nBdJjTNIN3rogChgOy6eFInw==" + "version": "1.3.125", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz", + "integrity": "sha512-XxowpqQxJ4nDwUXHtVtmEhRqBpm2OnjBomZmZtHD0d2Eo0244+Ojezhk3sD/MBSSe2nxCdGQFRXHIsf/LUTL9A==" }, "elliptic": { "version": "6.4.1", @@ -4311,9 +4311,9 @@ }, "dependencies": { "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" } } }, @@ -5104,9 +5104,9 @@ } }, "file-type": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.10.0.tgz", - "integrity": "sha512-3CTQE/db3dnK2jsfd4XiXMKw9nD0QVEMRLdBzqYDRr5BvYMUccDpP8hMc1uPb1VZ9Iw/cAJjYPNwJ5UzxGqsRg==", + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", "dev": true }, "file-uri-to-path": { @@ -5212,19 +5212,19 @@ } }, "find-versions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", - "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", + "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", "dev": true, "requires": { - "array-uniq": "^2.0.0", + "array-uniq": "^2.1.0", "semver-regex": "^2.0.0" }, "dependencies": { "array-uniq": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", - "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", + "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", "dev": true } } @@ -5599,9 +5599,9 @@ } }, "js-yaml": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", - "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6074,9 +6074,9 @@ } }, "js-yaml": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", - "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6093,9 +6093,9 @@ } }, "svgo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", - "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -6105,7 +6105,7 @@ "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", "sax": "~1.2.4", @@ -6291,9 +6291,9 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", "dev": true }, "is-absolute-url": { @@ -7418,16 +7418,16 @@ "dev": true }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.40.0" } }, "mimic-fn": { @@ -7639,9 +7639,9 @@ "dev": true }, "node-releases": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.13.tgz", - "integrity": "sha512-fKZGviSXR6YvVPyc011NHuJDSD8gFQvLPmc2d2V3BS4gr52ycyQ1Xzs7a8B+Ax3Ni/W+5h1h4SqmzeoA8WZRmA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.15.tgz", + "integrity": "sha512-cKV097BQaZr8LTSRUa2+oc/aX5L8UkZtPQrMSTgiJEeaW7ymTDCoRaGCoaTqk0lqnalcoSHu4wjSl0Cmj2+bMw==", "dev": true, "requires": { "semver": "^5.3.0" @@ -7800,9 +7800,9 @@ }, "dependencies": { "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" } } }, @@ -8037,9 +8037,9 @@ "dev": true }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -9252,13 +9252,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -10543,9 +10543,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "split-string": { "version": "3.1.0", @@ -11121,9 +11121,9 @@ } }, "truncate-html": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/truncate-html/-/truncate-html-1.0.1.tgz", - "integrity": "sha512-4Yw02HZAhGTGZsW2aNB7GtoF/SG4yPVlS4V42tehY1ZorZhIIZpdUuocdGB7W30J8WHzgOYmyhBzMTx/362Cew==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-html/-/truncate-html-1.0.2.tgz", + "integrity": "sha512-QtzllbVLKLvRyB7deBizCrZP6jdwWVU9Ix/Gag+WySQrySiu+1MUe3s0R/Z0IgfGHwQqkh0RVUgp9MRiP9YVJw==", "dev": true, "requires": { "@types/cheerio": "^0.22.8", @@ -11356,9 +11356,9 @@ "dev": true }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", + "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", "dev": true, "requires": { "querystringify": "^2.0.0", diff --git a/website/package.json b/website/package.json index 9428fde3..32bbe4d8 100644 --- a/website/package.json +++ b/website/package.json @@ -9,8 +9,8 @@ "sync:cli": "node ./scripts/sync-cli-docs", "generate": "npm run generate:os && npm run sync:js && npm run sync:cli", "start": "npm run generate && npm run sync-assets && docusaurus-start", - "build": "npm run generate && docusaurus-build", - "publish-gh-pages": "npm run generate && USE_SSH=true docusaurus-publish", + "build": "npm run generate && npm run sync-assets && docusaurus-build", + "publish-gh-pages": "USE_SSH=true docusaurus-publish", "write-translations": "docusaurus-write-translations", "version": "docusaurus-version", "rename-version": "docusaurus-rename-version" diff --git a/website/pages/en/index.js b/website/pages/en/index.js index 0d7634b1..8d890787 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -328,7 +328,7 @@ const UseCaseCard = styled.div` const SecondaryNavbar = props => (
- +
aragonPM
diff --git a/website/scripts/sync-aragonjs-docs.js b/website/scripts/sync-aragonjs-docs.js index 55b1a8c8..26ea43ad 100644 --- a/website/scripts/sync-aragonjs-docs.js +++ b/website/scripts/sync-aragonjs-docs.js @@ -1,67 +1,74 @@ const { syncPages } = require('./sync-util') const GIT_REF = 'master' -const REPO = 'aragon.js' -const BASE_CONTENT_URL = `https://raw.githubusercontent.com/aragon/${REPO}/${GIT_REF}/docs` +const REPO = 'aragon/aragon.js' const pages = [ { - fileLocation: '/docs/js-ref-app.md', - id: 'aragonjs-ref-app', + destination: '/docs/js-ref-quick-start.md', + id: 'api-js-quick-start', + title: 'Quick Start', + sidebarLabel: 'Quick Start', + hideTitle: true, + contentLocation: 'docs/QUICK_START.md', + }, + { + destination: '/docs/js-ref-app.md', + id: 'api-js-ref-app', title: 'aragonAPI for Javascript', sidebarLabel: 'App API', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/APP.md`, + contentLocation: 'docs/APP.md', }, { - fileLocation: '/docs/js-ref-providers.md', - id: 'aragonjs-ref-providers', + destination: '/docs/js-ref-providers.md', + id: 'api-js-ref-providers', title: 'aragonAPI for providers', sidebarLabel: 'Providers', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/PROVIDERS.md`, + contentLocation: 'docs/PROVIDERS.md', }, { - fileLocation: '/docs/js-ref-wrapper.md', - id: 'aragonjs-ref-wrapper', + destination: '/docs/js-ref-wrapper.md', + id: 'api-js-ref-wrapper', title: 'aragonAPI for wrapper', sidebarLabel: 'Wrapper', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/WRAPPER.md`, + contentLocation: 'docs/WRAPPER.md', }, { - fileLocation: '/docs/js-ref-architecture.md', - id: 'aragonjs-ref-architecture', + destination: '/docs/js-ref-architecture.md', + id: 'api-js-ref-architecture', title: 'aragonAPI for architecture', sidebarLabel: 'Architecture of apps', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/ARCHITECTURE.md`, + contentLocation: 'docs/ARCHITECTURE.md', }, { - fileLocation: '/docs/js-guide-bg-scripts.md', - id: 'aragonjs-guide-bg-scripts', + destination: '/docs/js-guide-bg-scripts.md', + id: 'api-js-guide-bg-scripts', title: 'Background Scripts', sidebarLabel: 'Background Scripts', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/BACKGROUND_SCRIPTS.md`, + contentLocation: 'docs/BACKGROUND_SCRIPTS.md', }, { - fileLocation: '/docs/js-ref-react.md', - id: 'aragonjs-ref-react', + destination: '/docs/js-ref-react.md', + id: 'api-js-ref-react', title: 'aragonAPI for React', sidebarLabel: 'React API', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/../packages/aragon-api-react/README.md`, + contentLocation: 'packages/aragon-api-react/README.md', }, ] const locationReferenceMap = { - '/docs/APP.md': '/docs/aragonjs-ref-app.html', - '/docs/WRAPPER.md': '/docs/aragonjs-ref-wrapper.html', - '/docs/PROVIDERS.md': '/docs/aragonjs-ref-providers.html', - '/docs/ARCHITECTURE.md': '/docs/aragonjs-ref-architecture.html', - '/docs/BACKGROUND_SCRIPTS.md': '/docs/aragonjs-guide-bg-scripts.html', - '/packages/aragon-api-react/README.md': '/docs/aragonjs-ref-react.html', + '/docs/APP.md': '/docs/api-js-ref-app.html', + '/docs/WRAPPER.md': '/docs/api-js-ref-wrapper.html', + '/docs/PROVIDERS.md': '/docs/api-js-ref-providers.html', + '/docs/ARCHITECTURE.md': '/docs/api-js-ref-architecture.html', + '/docs/BACKGROUND_SCRIPTS.md': '/docs/api-js-guide-bg-scripts.html', + '/packages/aragon-api-react/README.md': '/docs/api-js-ref-react.html', } -syncPages(pages, locationReferenceMap) +syncPages(pages, locationReferenceMap, GIT_REF, REPO) diff --git a/website/scripts/sync-cli-docs.js b/website/scripts/sync-cli-docs.js index 5fe16111..bfc27821 100644 --- a/website/scripts/sync-cli-docs.js +++ b/website/scripts/sync-cli-docs.js @@ -1,48 +1,54 @@ const { syncPages } = require('./sync-util') const GIT_REF = 'master' -const REPO = 'aragon-cli' -const BASE_CONTENT_URL = `https://raw.githubusercontent.com/aragon/${REPO}/${GIT_REF}/docs` +const REPO = 'aragon/aragon-cli' const pages = [ { - fileLocation: '/docs/cli-intro.md', + destination: '/docs/cli-intro.md', id: 'cli-intro', title: 'Using the aragonCLI', sidebarLabel: 'Introduction', hideTitle: true, - contentURL: `${BASE_CONTENT_URL}/Intro.md` + contentLocation: 'docs/Intro.md' }, { - fileLocation: '/docs/cli-main-commands.md', + destination: '/docs/cli-main-commands.md', id: 'cli-main-commands', title: 'Main commands', sidebarLabel: 'Main commands', - contentURL: `${BASE_CONTENT_URL}/Main-commands.md` + contentLocation: 'docs/Main-commands.md' }, { - fileLocation: '/docs/cli-apm-commands.md', + destination: '/docs/cli-apm-commands.md', id: 'cli-apm-commands', title: 'aragonPM commands', - sidebarLabel: 'aragonPM commands', - contentURL: `${BASE_CONTENT_URL}/Apm-commands.md` + sidebarLabel: 'APM commands', + contentLocation: 'docs/Apm-commands.md' }, { - fileLocation: '/docs/cli-dao-commands.md', + destination: '/docs/cli-dao-commands.md', id: 'cli-dao-commands', title: 'DAO commands', sidebarLabel: 'DAO commands', - contentURL: `${BASE_CONTENT_URL}/Dao-commands.md` + contentLocation: 'docs/Dao-commands.md' }, { - fileLocation: '/docs/cli-global-confg.md', + destination: '/docs/cli-ipfs-commands.md', + id: 'cli-ipfs-commands', + title: 'IPFS commands', + sidebarLabel: 'IPFS commands', + contentLocation: 'docs/Ipfs-commands.md', + }, + { + destination: '/docs/cli-global-confg.md', id: 'cli-global-confg', title: 'Global configuration', sidebarLabel: 'Global configuration', - contentURL: `${BASE_CONTENT_URL}/Global-confg.md` + contentLocation: 'docs/Global-confg.md' } ] const locationReferenceMap = {} -syncPages(pages, locationReferenceMap) +syncPages(pages, locationReferenceMap, GIT_REF, REPO) diff --git a/website/scripts/sync-util.js b/website/scripts/sync-util.js index 75902298..ea16a49c 100644 --- a/website/scripts/sync-util.js +++ b/website/scripts/sync-util.js @@ -1,14 +1,25 @@ const fetch = require('node-fetch') const fs = require('fs') -async function syncPages(pages, locationReferenceMap) { - Promise.all(pages.map(page => syncPage(page, locationReferenceMap))) +async function syncPages(pages, locationReferenceMap, gitRef, repo) { + Promise.all( + pages.map(page => syncPage(page, locationReferenceMap, gitRef, repo)) + ) } -async function syncPage( - { id, title, hideTitle, sidebarLabel, contentURL, fileLocation }, - locationReferenceMap -) { +async function syncPage(page, locationReferenceMap, gitRef, repo) { + const { + id, + title, + hideTitle, + sidebarLabel, + contentLocation, + destination, + } = page + + const contentURL = `https://raw.githubusercontent.com/${repo}/${gitRef}/${contentLocation}` + const editURL = `https://github.com/${repo}/blob/${gitRef}/${contentLocation}` + const response = await fetch(contentURL) let remoteText = await response.text() // Fix the links @@ -23,6 +34,7 @@ async function syncPage( const header = `--- id: ${id} title: ${title} +custom_edit_url: ${editURL} sidebar_label: ${sidebarLabel} hide_title: ${hideTitle || false} --- @@ -30,7 +42,7 @@ hide_title: ${hideTitle || false} ` const result = header.concat('\n').concat(remoteText) // this script will be run from the website directory => we need to go up one level - fs.writeFileSync(`../${fileLocation}`, result) + fs.writeFileSync(`../${destination}`, result) } function replaceAll(string, mapObject) { diff --git a/website/sidebars.json b/website/sidebars.json index 2d837736..ee07780b 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -16,6 +16,11 @@ "tutorial", "guides-publish", "guides-custom-deploy", + { + "type": "subcategory", + "label": "Signers", + "ids": ["guides-use-frame", "guides-use-metamask"] + }, "guides-faq" ], "aragonCLI": [ @@ -23,9 +28,10 @@ "cli-main-commands", "cli-dao-commands", "cli-apm-commands", + "cli-ipfs-commands", "cli-global-confg" ], - "aragonPM": ["apm", "apm-ref"], + "aragonPM": ["apm-intro", "apm-architecture", "apm-ref"], "aragonOS": [ "aragonos-intro", "aragonos-motivation", @@ -40,17 +46,92 @@ "type": "subcategory", "label": "JavaScript", "ids": [ - "aragonjs-quick-start", - "aragonjs-ref-app", - "aragonjs-ref-react", - "aragonjs-ref-wrapper", - "aragonjs-ref-providers", - "aragonjs-ref-architecture", - "aragonjs-guide-bg-scripts" + "api-js-quick-start", + "api-js-ref-app", + "api-js-ref-react", + "api-js-ref-wrapper", + "api-js-ref-providers", + "api-js-ref-architecture", + "api-js-guide-bg-scripts" ] } ], "aragonUI": ["aragonui-intro"], - "App Center": ["app-center-preparing-assets"] + "App Center": [ + "app-center-intro", + "app-center-preparing-assets", + "app-center-submission" + ] + }, + "docs-api": { + "ACL": [ + "acl_ACL", + "acl_ACLSyntaxSugar", + "acl_ACLSyntaxSugar_ACLHelpers", + "acl_IACL", + "acl_IACLOracle" + ], + "APM": [ + "apm_APMNamehash", + "apm_APMRegistry", + "apm_APMRegistry_APMInternalAppNames", + "apm_Repo" + ], + "APPS": [ + "apps_AppProxyBase", + "apps_AppProxyPinned", + "apps_AppProxyUpgradeable", + "apps_AppStorage", + "apps_AragonApp", + "apps_UnsafeAragonApp" + ], + "COMMON": [ + "common_Autopetrified", + "common_ConversionHelpers", + "common_DelegateProxy", + "common_DepositableDelegateProxy", + "common_DepositableStorage", + "common_EtherTokenConstant", + "common_IForwarder", + "common_IVaultRecoverable", + "common_Initializable", + "common_IsContract", + "common_Petrifiable", + "common_ReentrancyGuard", + "common_SafeERC20", + "common_TimeHelpers", + "common_Uint256Helpers", + "common_UnstructuredStorage", + "common_VaultRecoverable" + ], + "ENS": ["ens_ENSConstants", "ens_ENSSubdomainRegistrar"], + "EVMSCRIPT": [ + "evmscript_EVMScriptRegistry", + "evmscript_EVMScriptRunner", + "evmscript_IEVMScriptExecutor", + "evmscript_IEVMScriptRegistry", + "evmscript_IEVMScriptRegistry_EVMScriptRegistryConstants", + "evmscript_ScriptHelpers" + ], + "EVMSCRIPT / EXECUTORS": [ + "evmscript_executors_BaseEVMScriptExecutor", + "evmscript_executors_CallsScript" + ], + "FACTORY": [ + "factory_APMRegistryFactory", + "factory_AppProxyFactory", + "factory_DAOFactory", + "factory_ENSFactory", + "factory_EVMScriptRegistryFactory" + ], + "KERNEL": [ + "kernel_IKernel", + "kernel_IKernel_IKernelEvents", + "kernel_Kernel", + "kernel_KernelConstants_KernelAppIds", + "kernel_KernelConstants_KernelNamespaceConstants", + "kernel_KernelProxy", + "kernel_KernelStorage" + ] } } diff --git a/website/siteConfig.js b/website/siteConfig.js index 26e476db..22284e44 100644 --- a/website/siteConfig.js +++ b/website/siteConfig.js @@ -60,17 +60,10 @@ const siteConfig = { // url: 'https://facebook.github.io', // baseUrl: '/test-site/', - projectName: 'hack-docs', + projectName: 'hack', organizationName: 'aragon', - headerLinks: [ - { doc: 'getting-started', label: 'Get started' }, - { doc: 'tutorial', label: 'Tutorial' }, - { doc: 'aragonos-intro', label: 'aragonOS' }, - { doc: 'api-intro', label: 'aragonAPI' }, - { doc: 'aragonui-intro', label: 'aragonUI' }, - { page: 'help', label: 'Help' }, - ], + headerLinks: [], cleanUrl: true, @@ -145,8 +138,6 @@ const siteConfig = { const insertStylesAt = html.lastIndexOf('') return ` - -