npm package: @masa-finance/masa-contracts-identity
Description: <!-- TOC --> * [Masa Identity Contracts](#masa-identity-contracts) * [Contract Deployments](#contract-deployments) * [Addresses of the deployed contracts](#addresses-of-the-deployed-contracts) * [Configuration](#configuration) * [Roles](#roles) * [Interfa
Author: Sebastian Gerske
Latest version: 1.15.0

# Masa Identity Contracts

<!-- TOC -->
* [Masa Identity Contracts](#masa-identity-contracts)
  * [Contract Deployments](#contract-deployments)
    * [Addresses of the deployed contracts](#addresses-of-the-deployed-contracts)
      * [Configuration](#configuration)
  * [Roles](#roles)
  * [Interface](#interface)
  * [Deployment](#deployment)
    * [Preparations](#preparations)
    * [Deploy](#deploy)
  * [Installation and usage](#installation-and-usage)
  * [Generation of a new release](#generation-of-a-new-release)
<!-- TOC -->

## Contract Deployments

### Addresses of the deployed contracts

You can see the deployment address of the smart contracts in the [addresses.json](addresses.json) file. For every deployed smart contract you will find a `<network>.<contract>` value.

#### Configuration

- `Admin`: [`0xA38dd237a3A8D50537B74a4B0D4E7E8A5359386F`](https://sepolia.etherscan.io/address/0xA38dd237a3A8D50537B74a4B0D4E7E8A5359386F)

The `admin` is allowed to set configuration variables in the smart contracts.

- `BASE_URI`: https://beta.metadata.masa.finance/v1.0

The base url for the Metadata url that is being generated from the contract

## Roles

- `deployer`: Deploys the contract, has no rights after everything has properly handed over to other roles
- `admin`: Delegated to the Masa Service account inside the Masa API. It has the rights to administrate the smart
  contracts
- `minter`: Minter role. It has the rights to mint tokens to customer's wallets.

## Interface

- [Abstract Soulbound Token Definition](docs/tokens/MasaSBT.md)
- [Abstract Non-Fungible Token Definition](docs/tokens/MasaNFT.md)
- [Soulbound Identity Definition](docs/SoulboundIdentity.md)
- [Soulbound Credit Score Definition](docs/SoulboundCreditScore.md)
- [Soulbound Green Definition](docs/SoulboundGreen.md)
- [Soul Name Definition](docs/SoulName.md)
- [Soul Linker Definition](docs/SoulLinker.md)
- [Soul Store Definition](docs/SoulStore.md)

## Deployment

### Preparations

* Set `DEPLOYER_PRIVATE_KEY` to the deployers private key in `.env.{network}.secret`
* Set `COINMARKETCAP_API_KEY` to the CoinMarketCap API key in `.env`, if needed
* Set `ANKR_API_KEY` to the Ankr API key in `.env`, if needed
* Set `ETHERSCAN_API_KEY` to the Etherscan API key in `.env`, if needed
* Set `BSCSCAN_API_KEY` to the Etherscan API key in `.env`, if needed
* Set `POLYGONSCAN_API_KEY` to the Etherscan API key in `.env`, if needed
* Set `CELOSCAN_API_KEY` to the Etherscan API key in `.env`, if needed
* Set `BASESCAN_API_KEY` to the Etherscan API key in `.env`, if needed

### Deploy

Run: `yarn deploy --network {network}` to deploy.

## Installation and usage

Installing via `npm` package:

```bash
npm i @masa-finance/masa-contracts-identity
```

Import in your project:

```typescript
import {
  SoulboundIdentity,
  SoulboundIdentity__factory
} from "@masa-finance/masa-contracts-identity";

const soulboundIdentity: SoulboundIdentity = SoulboundIdentity__factory.connect(
  <address>, // address of the deployed contract
  <provider> // web3 provider
);
console.log(await soulboundIdentity.symbol());
```

## Generation of a new release

From a clean `main` branch you can run the release task bumping the version accordingly based on semantic versioning:

```bash
yarn release
```

The task does the following:

* Bumps the project version in `package.json`
* Creates a Git tag
* Commits and pushes everything
* Creates a GitHub release with commit messages as description
* Git tag push will trigger a GitHub Action workflow to do a `npm` release

For the GitHub releases steps a GitHub personal access token, exported as `GITHUB_TOKEN` is required. You can add this
environment variable to the `.env` file. [Setup](https://github.com/release-it/release-it#github-releases)