# Get started

Right now the main functions are in the DerivativeFactory. This factory needs to be initialized with the web3URL like this:

```javascript
  const derivativeFactory = DerivativeFactory.get(web3URL....);
```

After this initialization we can get functions from specific derivatives by calling functions like

```javascript
  const index = derivativeFactory.getOlympusIndex(indexAddress);
  const fund = derivativeFactory.getOlympusFund(fundAddress);
```

These functions combine the functionalities of the modules that are needed. The modules are only services, and will not send any TX's.
If any functionalities need to be added, or a custom derivative needs to be made, the following function can be called:

```javascript
  const index = derivativeFactory.getOrExtendCustomDerivative(
    new ERC20Derivative(),
    new BuyTokens(),
    new Rebalance(),
  );
```

For our own partials, you can look in the src/derivatives/partials folder. If any extra partials are needed, they can be added to this module if useable in more places, or added through the getOrExtendCustomDerivative with a custom local implementation.

The Services in src/services are also useful functionality, which currently consist of AbiService (to get the latest abi), LockerService, MarketplaceService, RpcService, WhitelistService, WithdrawService. There should be added a lot of services here with the portal and IMtoken additions as well.
