Token Request: allow anyone to make a request to mint tokens in exchange for payment

The Token Request app provides an onboarding flow where prospective members can request organization tokens in exchange for payment.

Rather than deposit tokens through finance and hope tokens are minted in exchange, the Token Request app faciliates an atomic exchange subject to the approval process of the the organization.

The Token Request app exposes 4 permisions:

The “set token manager” and “set vault” permissions allow changing the token manager used to mint tokens and changing the vault (or agent) used to receive payment. In most cases these will be set by the template when the organization is initially deployed and not changed, but they can be changed using the aragonCLI if the need arisses.

The “add/remove a token from accepted tokens” role will also typically be set by the template during onboarding, but can be changed using the aragonCLI. It determines which payment tokens are presented as options when a user creates a request.

The Finalize token request role will mint tokens, and so it should be restricted similarly to the Mint Tokens role on the token manager.

The Token Request UI is used to view, manage, and create new token requests:

When creating a new request the user will input the number of requested shares, along with payment and an optional reference string to help justify the request.

After the request has been created it will be listed in the Requests tab, and for the user who created the requests also in the My requests tab.

Creating a request does not submit it, a sepate action is required so that it is possible to allow anyone to create a request and put tokens in escrow, but require an existing member to vouch for the request and submit it, typically by creating a vote to finalize the request. This protects the organization from a deluge of spammy requests.

The detail page of a request allows the creator to withdraw their tokens, which will make the request invalid and prevent tokens from being minted for the request even if the request ends up being approved.