npm package: @nevermined-io/contract-tools
Description: The Nevermined Zeppelin OS contract management framework
Author: Nevermined
Latest version: 0.2.6

[![banner](https://raw.githubusercontent.com/nevermined-io/assets/main/images/logo/banner_logo.png)](https://nevermined.io)

# Nevermined Contract Tools

> 💧 The Nevermined Zeppelin OS contract management framework
> [nevermined.io](https://nevermined.io)

![Build](https://github.com/nevermined-io/contract-tools/workflows/Build/badge.svg)
![NPM Release](https://github.com/nevermined-io/contract-tools/workflows/NPM%20Release/badge.svg)

## Table of Contents

  - [Get Started](#get-started)
  - [Usage](#usage)
  - [Testing](#testing)
  - [Contributing](#contributing)
  - [License](#license)

---

## Get Started

```bash
npm i @nevermined-io/contract-tools
```

## Usage

To deploy the contract `MyContract` do the following:

```javascript
const {
    deployContracts
} = require('@nevermined-io/contract-tools')

await deployContracts({
    // web3, coming from truffle
    web3,
    // artifacts, coming from truffle
    artifacts,
    evaluateContracts: ({
        contracts = []
    } = {}) => {
        // decide which contracts to deploy here
    },
    initializeContracts: async ({
        contracts,
        roles,
        network,
        verbose = true
    } = {}) => {
        // call the initializer of each contract here
    },
    setupContracts: async ({
        addressBook,
        artifacts,
        roles,
        verbose
    } = {}) => {
        // call the contracts here to set them up
    },
    contracts: [
        'MyContract'
    ],
    // forces the creation of wallets all the time
    forceWalletCreation: true,
    // clean zos session files
    clean: true,
    // clean zos files and wallets on the current network as well
    deeperClean: true,
    // are we going to deploy to a testnet or a mainnet?
    testnet: false,
    // be verbose or not
    verbose: true
})
```
An example of the whole flow can be found [here](./test/test.js)

An example of `evaluateContracts` can be found [here](./test/evaluateContracts.js)

An example of `initializeContracts` can be found [here](./test/initializeContracts.js)

An example of `setupContracts` can be found [here](./test/setupContracts.js)

## Testing

Run tests with `npm run test`.

## Prior Art

This project builds on top of the work done in open source projects:
- [zeppelinos/zos](https://github.com/zeppelinos/zos)
- [OpenZeppelin/openzeppelin-eth](https://github.com/OpenZeppelin/openzeppelin-eth)

## Attribution

This project is based in the Ocean Protocol [Dori project](https://github.com/oceanprotocol/dori).
It keeps the same Apache v2 License and adds some improvements. See [NOTICE file](NOTICE).

## License

```
Copyright 2020 Keyko GmbH
This product includes software developed at
BigchainDB GmbH and Ocean Protocol (https://www.oceanprotocol.com/)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```