> For the complete documentation index, see [llms.txt](https://docs.dappkit.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dappkit.dev/start-building/how-to-guides/how-to-create-an-object.md).

# Create custom Object

**Dependencies**

```shell
$ npm i -s @taikai/dappkit
$ npm i -g @taikai/dappkit-launchpad
```

@taikai/dappkit will be used to provide the user with proxies for common contracts, along with a Web3Connection, and @taikai/dappkit-launchpad will be responsible for transpiling your custom contract into something understandable by @taikai/dappkit.

**Compiling your contracts**

Both truffle and hardhat will provide a `ContractName.json` file wich holds the ABI and bytecode for the contract

**Truffle**

```shell
$ npm i -g truffle
$ truffle compile
```

**Hardhat**

```shell
$ npx install --save-dev hardhat
$ npx hardhat compile
```

### Transpiling and using your custom contract

```bash
$ dk-transpile -f "path/to/ContractName.json"
```

Depending on your configuration (and contract) this will output a extension of the [`Model`](https://sdk.dappkit.dev/classes/Model.html) class, with the methods loaded in, and with the name of the file matching the name of the contract.

#### Deploying the custom contract <a href="#transpiled-deploy" id="transpiled-deploy"></a>

```typescript
import {CustomContract} from './path/to/CustomContract';
const customContract = new CustomContract({web3Host: 'http://localhost:1337', privateKey: '0xPrivateKey'});

customContract.web3Connection.start();
customContract.loadAbi();

const tx = await customContract.deployJsonAbi('arg1', 'arg2'/*, arg3, arg4, ...etc*/);
console.log('Deployed contract; Address: ', tx.contractAddress);
```

#### Using the custom contract <a href="#transpiled-use" id="transpiled-use"></a>

```typescript
const customContract = new CustomContract({web3Host: 'http://localhost:1337', privateKey: '0xPrivateKey'});

customContract.start();

// Get a value on the contract
const receipt = await customContract.CustomMethod('arg1'/*, 'otherArgument', ...etc */);

// Change a value on the contract
const receipt2 = await customContract.OtherCustomMethod('newValue'/*, 'otherArgument', ...etc */)
```

#### Costumizing a custom contract proxy

@taikai/dappkit-launchpad made a custom proxy from the coded that was provided, but this proxy can be futher customized - by hand.&#x20;

Just open the `./path/to/CustomContract` and add more functions, or add a customization to the `super.start` that loads information for a custom API:

```typescript
/* ... erased code for brevity */
async function start() {
  const data = await fetch('http://localhost:1337/api/health').then(() => true).catch(() => false)
  if (!data)
    throw Error('Something happened!!!11');
  return super.start()
}
/* erased code for brevity... */
```
