You can configure the behavior of Dai.js by passing different arguments to Maker.create. The first argument is the name of a preset, and the second is an options object.


  • 'browser'

    • Use this preset when using the library in a browser environment. It will attempt to connect using window.ethereum or window.web3.

  • 'http'

    • Connect to a JSON-RPC node. Requires url to be set in the options.

  • 'test'

    • Use a local node (e.g. Ganache) running at, and sign transactions using node-managed keys.

const makerBrowser = await Maker.create('browser');
const makerHttp = await Maker.create('http', {
url: ''
const makerTest = await Maker.create('test');


  • privateKey

    • Optional. The private key used to sign transactions. If this is omitted, the first account available from the Ethereum provider will be used. Only used with the 'http' preset.

    • If this is omitted and the provider does not have an unlocked account, the maker object will start in read-only mode.

  • url

    • The URL of the node to connect to. Only used with the 'http' preset.

  • web3.transactionSettings

    • Object containing transaction options to be applied to all transactions sent through the library.

    • Default value: { gasLimit: 4000000 }

  • web3.confirmedBlockCount

    • Number of blocks to wait after a transaction has been mined when calling confirm. See Transactions for further explanation.

    • Default value: 5

  • web3.inject

    • For advanced users. You can inject your own custom instance of a Web3 provider with this, instead of using the default HttpProvider.

  • log

    • Set this to false to reduce the verbosity of logging.

  • autoAuthenticate

    • Set this to false to create the Maker instance without connecting yet. If so, you must run await maker.authenticate() before using any other methods.

// It doesn't necessarily make sense to set all these
// options at the same time (e.g. `url` and `inject`),
// this is just meant to illustrate the shape of the
// options object.
const maker = await Maker.create('http', {
privateKey: YOUR_PRIVATE_KEY, // '0xabc...'
url: '',
web3: {
statusTimerDelay: 2000,
confirmedBlockCount: 8
transactionSettings: {
gasPrice: 12000000000
inject: someProviderInstance
log: false,
autoAuthenticate: false

Instance methods


  • Returns: service object

Return a service instance that was included in this instance of maker.

const accountsService = maker.service('accounts');


The MCD plugin defines several services for working with Multi-Collateral Dai. Review Getting started to see how to add the plugin.

Read-only mode

As mentioned above, the Maker instance can be used in read-only mode, if you just want to read data from the blockchain without signing any transactions. Simply omit the privateKey option.

You can start in read-only mode and still add an account with the ability to sign transactions later on.