# grams-contracts

[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/grams-foundation/grams-contracts/blob/main/LICENSE)
[![npm version](https://img.shields.io/npm/v/grams-contracts)](https://www.npmjs.com/package/grams-contracts)

The grams-contracts package provides a collection of smart contracts that can be used to enhance the functionality and features of decentralized applications (dApps) built on the Grams network. These contracts cover a wide range of use cases, including token standards, governance mechanisms, and decentralized finance (DeFi) protocols.

## Features

- **Token Standards**: Implement widely adopted token standards such as ERC-20 and ERC-721 to create and manage fungible and non-fungible tokens.
- **Governance**: Utilize governance contracts to enable community-driven decision-making processes and voting mechanisms within dApps.
- **DeFi Protocols**: Access a variety of decentralized finance protocols, including lending, staking, yield farming, and more.
- **Escrow Services**: Implement secure and reliable escrow services for trustless transactions and settlements.
- **Oracle Integration**: Connect to external data sources and feed real-world information into smart contracts using oracles.
- **Multi-Signature Wallets**: Deploy multi-signature wallets to enhance the security and control of funds held by multiple parties.
- **Upgradability**: Utilize upgradable contract patterns to facilitate future upgrades and enhancements.

## Installation

You can install the grams-contracts package using your preferred package manager.

### npm

```shell
npm install grams-contracts
```

### Yarn

```shell
yarn add grams-contracts
```

## Usage

To use grams-contracts in your project, follow these steps:

1. Import the grams-contracts package:

   ```javascript
   const GramsContracts = require('grams-contracts');
   ```

2. Access the desired contract from the available collection:

   ```javascript
   const ERC20Token = GramsContracts.ERC20Token;
   const GovernanceContract = GramsContracts.GovernanceContract;
   // ...
   ```

3. Deploy and interact with the contract in your application:

   ```javascript
   // Deploy an ERC20 token contract
   const token = new ERC20Token('MyToken', 'MTK', 18);
   token.deploy();

   // Interact with the deployed contract
   const balance = token.getBalance('0x1234567890abcdef');
   const transferResult = token.transfer('0x9876543210', 100);
   // ...
   ```

For more detailed information and examples, refer to the [grams-contracts Documentation](https://grams-foundation.github.io/grams-contracts-docs).

## Documentation

Comprehensive documentation for grams-contracts is available at [https://grams-foundation.github.io/grams-contracts-docs](https://grams-foundation.github.io/grams-contracts-docs). The documentation provides detailed explanations of each contract's functionality, along with code examples and usage guidelines.

## Contributing

Contributions to grams-contracts are welcome! If you have any suggestions, bug reports, or feature requests, please open an issue or submit a pull request on the [GitHub repository](https://github.com/grams-foundation/grams-contracts).

Before contributing, please review the existing codebase, adhere to the project's code style and guidelines, and ensure your changes pass the existing tests.

## License

The grams-contracts package is open source and distributed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). Your contributions to the project are appreciated and will be licensed accordingly.