# @daohaus/contract-utils
The `contract-utils` package consists of TypeScript wrappers for our primary contracts. While you will read state data from `moloch-v3-data`, `contract-utils` equips you with instances of the contract and access to a set of helpers for making function calls and writing data to the contracts.
It utilizes [TypeChain](https://github.com/dethcrypto/TypeChain) for type generation.
### [View on Github](https://github.com/HausDAO/monorepo/tree/develop/libs/contract-utils)
- [**Launch DAOs**](https://github.com/HausDAO/monorepo/blob/develop/libs/contract-utils/src/lib/moloch-v3-summoner-contract.ts)
- [**Create DAO Proposals**](https://github.com/HausDAO/monorepo/blob/develop/libs/contract-utils/src/lib/moloch-v3-contract.ts)
- [**Encoding Helpers**](https://github.com/HausDAO/monorepo/blob/develop/libs/contract-utils/src/lib/encoding-utils.ts)
- [**Gas Estimate Helpers**](https://github.com/HausDAO/monorepo/blob/develop/libs/contract-utils/src/lib/estimate-util.ts)
- [**Summoning Params Helpers**](https://github.com/HausDAO/monorepo/blob/develop/libs/contract-utils/src/lib/summon-tx-utils.ts)
- [**Types**](https://github.com/HausDAO/monorepo/blob/develop/libs/contract-utils/src/lib/types.ts)
### [View on NPM](https://www.npmjs.com/package/@daohaus/contract-utils)
## Usage
### Installation
```bash
yarn add @daohaus/profile-data
```
### Requirements
This packages uses ethers.js providers and rpc endpoints create the connection to the blockchain and contract. You should provide an ether.js provider.
### Examples
**How to init a contract and make a function call**
```ts!
import { MolochV3Contract } from '@daohaus/contract-utils';
const molochV3 = MolochV3Contract.create({
address: '0x0somedaoaddress',
provider: new ethers.providers.JsonRpcProvider('https:///someProviderUrl.com'),
});
molochV3.sponsorProposal('1');
```
**How to summon a DAO**
***TODO***: add a link to user guide on dao params
Dao summoning argument explainer [here]
(https://docs.daohaus.club/user/summoner/summon)
```ts
import { MolochV3AdvTokenSummonerContract } from '@daohaus/contract-utils';
const molochV3AdvSummoner = MolochV3AdvTokenSummonerContract.create({
networkIs: '0x5',
provider: new ethers.providers.JsonRpcProvider('https:///someProviderUrl.com'),
});
const daoSetUpData = {
sharesTokenName: 'Voting',
sharesTokenSymbol: 'vote',
lootTokenName: 'nonVoting',
lootTokenSymbol: 'nvote',
safeAddress: 'address if using exsiting safe for treasury, blank if creating a new one',
tokenConfig: {
pauseShares: true,
pauseLoot: true,
},
governanceConfig: {
voting: 86400,
grace: 86400,
newOffering: 0,
quorum: 0,
sponsor: 0,
minRetention: 66,
},
shamanConfig: {
shamans:['shamanAddress'],
permissions: [2],
},
sharesConfig: {
to: ['initialMemberAddress', 'initialMemberAddress'],
amount: [1000000000000000000, 2000000000000000000],
},
lootConfig: {
to: ['initialLootHolderAddress'],
amount: [1000000000000000000],
},
daoName: 'Cheese DAO',
}
await molochV3AdvSummoner.summonMolochV3(daoSetUpData)
```