> For the complete documentation index, see [llms.txt](https://sefwallet.gitbook.io/sef-wallet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sefwallet.gitbook.io/sef-wallet/developers/setting-up-code.md).

# Developer-Guide

## Overview

This guide shows you how to setup the developer environment to contribute to project.

We recommend reading the [SmartVault Design Document](https://github.com/hashmesan/harmony-totp/wiki/SmartVault) for background information and design choices taken.

## Install the CLI

The CLI provides all the wallet operations without having to install or setup the source code. Run `npm install -g @hashmesan/smartvault`. For usage, see our [examples](https://github.com/hashmesan/harmony-totp/wiki/CLI-Examples).

## Setup Development Environment

The main branch has the stable changes. The develop branch is used for development. Features are merged into develop, tested, and merged back to main.

### Checkout the source

```
git clone git@github.com:hashmesan/harmony-totp.git
git checkout develop
```

### Install global dependencies

```
yarn global add truffle@5.1.67
yarn global add ganache-cli@6.12.2
```

### Install dependencies

Always install dependencies at the base directory because there are common libraries (in library) which are shared across relayer, cli, and webclient.

```
yarn install
```

Compile smart contracts

```
truffle compile
```

### Setup Web client

```
cd webclient && yarn install
yarn dev # runs webpack-dev-server
```

### Setup Relayer

```
cd relayer && yarn install
```

Configure the keys for relayer.

Create a file in `relayer/.env`

```
PRIVATE_KEY=
IPFS_ID=
IPFS_SECRET=
```

Get an IPFS account from infura and they will provide an IPFS ID and Secret to fill out in the config. Create a harmony wallet & provide a private key with some ONE coins to pay for transaction fees as a relayer. On testnet, you can get this for free on <https://faucet.pops.one/>

You can run without IPFS account. When you create an account, don't pass domains information and it will skip register ENS. See [code](https://github.com/hashmesan/harmony-totp/blob/10c70fe1261807b050ab6051060629c8e0f87551/contracts/otp_wallet.sol#L87)

### Development Workflow

Depending on the feature you are building, you do not have to run all of the components. We already run the mainnet0 (shard0) and testnet3 (shard0 and shard3). If your work is limited to testnet & mainnet, you don't have to run relayer. If you are doing heavy development on the smart contract it may be more efficient to do your testing on `development` network.

Untar a prebuilt ganache db which contains the ENS smart contracts already deployed to `0xD29154f92F4825202768961ca44d1ffE26C11F76`

```
tar xvf ganache-db.tar
```

and run it `sh ganache.sh` on a separate terminal.

Webclient [config.js](https://github.com/hashmesan/harmony-totp/blob/develop/webclient/src/config.js) refers to `development` Truffle always refers to `development`. Make sure you run truffle with `--network development`.

**Send ONE in development**

```
truffle console
> web3.eth.getAccounts().then(accounts=>firstAccount=accounts[0]);
> web3.eth.sendTransaction({from: firstAccount, to: "", value: web3.utils.toWei("2.0")});
```

### Building Dapps

There's a world of possibilities in implementing dapps, and defi into the wallet. Aave, Balancer, Curve, Uniswap, Yearn, Compound can be found in other wallets like [argents](https://github.com/argentlabs/argent-contracts/tree/develop/contracts/infrastructure/dapp), loopring, and gnosis.

See [Integration Dapps](https://github.com/hashmesan/harmony-totp/wiki/Integrating-DAPP)
