Instalación

Instala el paquete con el npm en tu terminal:

npm install @makerdao/dai

Una vez instalado, importa el módulo en tu proyecto como se muestra debajo.

import Maker from '@makerdao/dai';
// or
const Maker = require('@makerdao/dai');

La compatibilidad con el DAI Multicolateral en Dai.js se implementa como un plugin (complemento). Esto puede cambiar en el futuro. El plugin MCD también está disponible como paquete npm y su código fuente se puede encontrar en Github.

npm install @makerdao/dai-plugin-mcd

import { McdPlugin } from '@makerdao/dai-plugin-mcd';
// or
const { McdPlugin } = require('@makerdao/dai-plugin-mcd');

\(Nótese el .default (por defecto) al final de la línea cuando se usa require (requerir).\)

UMD

Esta librería también puede utilizarse como módulo UMD, el cual puedes contruír con npm run build:frontend.

<script src="./dai.js" />

<script>
// once the script loads, window.Maker is available
</script>

Ejemplos rápidos

Buscar información acerca de una vault

Este código utiliza getCdpIds para buscar una vault que fue creada en la interfaz de Oasis Borrow. Ya que este código solo está leyendo datos, no creando transacciones, no es necesario proveer una llave pública o conectar una wallet.

// tú provees estos datos
const infuraKey = 'your-infura-api-key';
const ownerAddress = '0xf00...';

const maker = await Maker.create('http', {
  plugins: [McdPlugin],
  url: `https://mainnet.infura.io/v3/${infuraKey}`
});

const manager = maker.service('mcd:cdpManager');
const proxyAddress = maker.service('proxy').getProxyAddress(ownerAddress);
const data = await manager.getCdpIds(proxyAddress); // devuelve una lista de objetos { id, ilk }
const vault = await manager.getCdp(data[0].id);

console.log([
  vault.collateralAmount, // monto de tokens de colaterales
  vault.collateralValue,  // valor en USD, usando los valores de la fuente de precios actual
  vault.debtValue,        // monto de deuda de DAI
  vault.collateralizationRatio, // _collateralValue_ (valor del colateral) / deuda
  vault.liquidationPrice  // la _vault_ se vuelve insegura a este precio
].map(x => x.toString());

Crear una vault

El código que aparece debajo abre una vault, bloquea ETH en ella y crea DAI de ella.

Ya que este código envía transacciones, requiere de una cuenta que pueda firmar transacciones. La forma más fácil de realizar esto es proveyendo la opción de configuración de privateKey (llave privada), como se muestra debajo, pero también puedes conectar una Metamask, u otros proveedores basados en el navegador, o conectarse a wallets de hardware.

import Maker from '@makerdao/dai';
import { McdPlugin, ETH, DAI } from '@makerdao/dai-plugin-mcd';

// you provide these values
const infuraKey = 'your-infura-api-key';
const myPrivateKey = 'your-private-key';

const maker = await Maker.create('http', {
  plugins: [McdPlugin],
  url: `https://mainnet.infura.io/v3/${infuraKey}`,
  privateKey: myPrivateKey
});

// verifica que la llave privada haya sido leída correctamente
console.log(maker.currentAddress());

// asegúrate de que la cuenta actual posee un contrato _proxy_;
// crea uno, de ser necesario. El contrato _proxy_ es utilizado para realizar
// múltiples transacciones en una única operación.
await maker.service('proxy').ensureProxy();

// utiliza el servicio de "vault manager" (administrador de _vault_) para trabajar con las _vaults_
const manager = maker.service('mcd:cdpManager');

// ETH-A es el nombre del tipo de colateral; en el futuro,
// pueden existir múltiples tipos de colaterales para un token con
// diferentes parámetros de riesgo
const vault = await manager.openLockAndDraw(
  'ETH-A',
  ETH(50),
  DAI(1000)
);

console.log(vault.id);
console.log(vault.debtValue); // '1000.00 DAI'