Dapp-a-day 18: ERC20 token vault

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@nexusdev·
0.000 HBD
Dapp-a-day 18: ERC20 token vault
![dapp-a-day-18 2x](https://cloud.githubusercontent.com/assets/6280810/18133824/631af2a0-6f9c-11e6-9b0b-323c26e7434e.png)

---

**Today's dapp is a simple but very useful utility called a "vault".
The purpose of a vault is also very simple: to store ERC20 tokens.**

A vault is useful for example any time you need to segregate token
holdings into several distinct buckets, or when you want to set up a
shared account, maybe owned by a `DSEasyMultisig` [(see Dapp-a-day 5)](https://steemit.com/ethereum/@nikolai/dapp-a-day-5-easy-multisig).

Vaults are protected using `DSAuth` [(see Dapp-a-day 4)](https://steemit.com/ethereum/@nikolai/dapp-a-day-4-access-control-via-auth), so they can
either just be owned or can have more sophisticated access control.

Whoever owns or controls a `DSVault` can tell it to perform token
operations, such as transferring X amount of token Y to account Z,
or even (as long as the vault has the necessary ERC20 approval)
transferring X amont of token Y from account W to account Z.

A single vault is able to hold any number of different ERC20 tokens.

Anyone is free to make deposits to a vault by simply transferring
tokens directly into it using the regular ERC20 `transfer` function.
The owner of a vault can also ask the vault to perform the transfer.

Vaults are very staightforward to understand and think about, and can
be a useful building block in many different kinds of applications.

**Take a look at the source code: https://github.com/nexusdev/ds-vault**

If you’ve been paying attention, you’ll notice that there is something
strange about the source repository: there’s no `contracts/` directory!

Why?  Well, Dapple allows you to keep your source code wherever you
want (by configuring the `sol_sources` property in your `dappfile`),
and so far the convention has always been to put it in `contracts/`.

Nexus has decided to move away from this convention as part of a more
general policy to try to whenever possible avoid the term "contract".
Because "smart contracts" are neither smart nor contracts, and because
the term "contract" in particular already means something different,
we are taking this opportunity to move to the tried-and-true `src/`.

If you think of a directory as a "vault" for source code, then you see
why it made sense to bring this up in the context of today's dapp. :-)
👍 , , , , , , , , , , , , , , , , , , , , , ,