---
# System prepended metadata

title: Gold-backed ERC-1155

---

# Gold-backed ERC-1155

The idea is to create an ERC-1155 that is backed by gold, i.e. the owner can redeem it for DGX tokens.

## Motivation

If one can redeem an ERC-1155 token for a fixed amount of gold (DGX), the minimum price of this unique asset is garanteed for ever (so to speak).

## Workflow

1. Alice mint an ERC-1155
2. She deploys a DGX vending machine
3. In the ERC-1155 metadata, she adds: 
   * the address of the vending machine
   * the JS call to check if the DGXs are available OR redeemed (vending machine contract's `status` function)

## Roadmap

1. Create an ERC-20 vending machine
2. Create an ERC-1155 vending machine
3. Provide a process to add the vending machine contract address in the ERC-1155 metadata 

## The ERC-20 vending machine

We can imagine: 
* a **very** sexy (and fun) UI that looks like a physical vending machine.
* an optional cut for the dev that were able to implement it. ;)
* a full tutorial following the [MST tutorial](https://github.com/julienbrg/my-stupid-token), knowing that education is an important part of the overall adoption of Ethereum. 

### Contract

```javascript=16
pragma solidity ^0.5.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol";

contract VendingMachine is ownable() {

    /**
    * 'Activate' ERC20 DAILLE + 'Activate' ERC20 MST
    */

    uint public balance // amount of token for sale
    uint public rate // set at deployment
    uint public duration // set at deployment

    constructor() internal {

      /**
      * msg.sender becomes the owner
      * Set balance
      * Set rate
      * Set duration
      */
    }

    function buy(amount) public {

      /**
      * We want to:
      * If it's any other thing than DAI, revert
      * If duration is not valid, revert
      * Calculate the amount of MST to send (received amount of DAI * the rate)
      * Is it superior to balance? If yes, revert
      * Send the amount of MST to msg.sender
      * Create an event
      */
      require(DAILLE.transferFrom(msg.sender,target,amount * rate));
      require(MST.transfer(msg.sender,amount));
      emit Event();
    }

    function collect(col) public {

      require(msg.sender=owner);

      /**
      * Send col to msg.sender
      */
    }

    function end() public {

      require(msg.sender=owner);

      /**
      * If the duration is valid, revert
      * Send both DAILLE and MST to owner
      */
    }
}

``` 

## The ERC-1155 vending machine

### Requirements

An ERC-1155 version of the the ERC-20 vending machine. Instead of an ERC-20 token, the owner sells a fixed quantity of ERC-20 token for one specific ERC-1155 (i.e. "I sell this NFT for 1 DGX").

### Contract

```

```

## The Gold-backed ERC-1155

### Requirements

### Contract

```

```

## Resources

* The NFT Bible: https://opensea.io/blog/guides/non-fungible-tokens/amp/
* The ERC-1155 (by [Enjin](http://enjin.io/)): https://blog.enjincoin.io/erc-1155-the-final-token-standard-on-ethereum-a83fce9f5714

