blob: 8ff0675512bb26b21a946700019aad5279a64c47 [file] [log] [blame] [view]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
# ResContract CLI 🚀
The **ResContract CLI** is a command-line tool for creating, deploying, and managing smart contracts within the ResilientDB ecosystem. It provides a streamlined interface for developers and students to interact with smart contracts efficiently.
## Table of Contents
- [Features ✨](#features-)
- [Prerequisites](#prerequisites)
- [Installation 🛠️](#installation-️)
- [Usage](#usage)
- [Commands](#commands)
- [create Command](#create-command)
- [compile Command](#compile-command)
- [deploy Command](#deploy-command)
- [add_address Command](#add_address-command)
- [list-deployments Command](#list-deployments-command)
- [clear-registry Command](#clear-registry-command)
- [Configuration ⚙️](#configuration-️)
- [Setting the ResDB_Home Variable](#setting-the-resdb_home-variable)
- [Option 1: Set `ResDB_Home` Environment Variable](#option-1-set-resdb_home-environment-variable)
- [Option 2: Use a `config.yaml` File](#option-2-use-a-configyaml-file)
- [Contributing](#contributing)
- [License](#license)
## Features ✨
- **Create Smart Contracts**: Generate new smart contract templates.
- **Compile Contracts**: Compile Solidity contracts to JSON.
- **Deploy Smart Contracts**: Deploy contracts to the blockchain with automatic registry tracking.
- **Address Management**: Add external addresses to the system.
- **Deployment Registry**: Track and manage deployed contracts with built-in registry commands.
## Prerequisites
Before installing and using the ResContract CLI, ensure you have the following prerequisites installed on your system:
- **Node.js (version >= 14)**: [Download and install Node.js](https://nodejs.org/en/download/)
- **npm**: Comes with Node.js. Ensure it's up-to-date.
- **Solidity Compiler (`solc`)**: Required to compile smart contracts.
### Installing `solc`
#### Linux (Ubuntu/Debian)
```bash
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install -y solc
```
#### macOS
```bash
brew update
brew upgrade
brew tap ethereum/ethereum
brew install solidity
```
## Installation 🛠️
Install the ResContract CLI globally using npm:
```bash
npm install -g rescontract-cli
````
## Configuration ⚙️
### Setting the ResDB_Home Variable
Before using the ResContract CLI, you **must** set the `ResDB_Home` environment variable or provide the path to your ResilientDB installation in a `config.yaml` file. The CLI will **not** prompt you for this path and will exit with an error if it's not set.
#### Option 1: Set `ResDB_Home` Environment Variable
Set the `ResDB_Home` environment variable to point to the directory where ResilientDB is installed.
**Linux/macOS:**
```bash
export ResDB_Home=/path/to/resilientdb
```
Add the above line to your `.bashrc` or `.zshrc` file to make it persistent.
#### Option 2: Use a `config.yaml` File
Update the `config.yaml` file in the same directory where you run the `rescontract` command or in your home directory.
**Example `config.yaml`:**
```yaml
ResDB_Home: /path/to/resilientdb
```
Ensure the `ResDB_Home` path is correct.
> **Note:** The CLI checks for `config.yaml` in the current directory first, then in your home directory.
## Usage
After installation, you can use the `rescontract` command in your terminal.
```bash
rescontract <command> [options]
```
### Commands
#### create Command
Initializes a new account using ResilientDB's smart contract tools.
**Usage:**
```bash
rescontract create --config <path_to_config>
```
- `--config, -c`: Path to the configuration file.
**Example:**
```bash
rescontract create --config ~/resilientdb/config/service.config
```
#### compile Command
Compiles a Solidity smart contract into a JSON file using `solc`.
**Usage:**
```bash
rescontract compile --sol <inputFile.sol> --output <outputFile.json>
```
- `--sol, -s`: Path to the Solidity smart contract file.
- `--output, -o`: Name of the resulting JSON file.
**Example:**
```bash
rescontract compile --sol contracts/MyToken.sol --output build/MyToken.json
```
#### deploy Command
Deploys the smart contract to the blockchain.
**Usage:**
```bash
rescontract deploy --config <service.config> --contract <contract.json> \
--name <tokenName> --arguments "<parameters>" --owner <address>
```
- `--config, -c`: Client configuration path.
- `--contract, -p`: Path to the contract JSON file.
- `--name, -n`: Name of the contract.
- `--arguments, -a`: Parameters to create the contract object (enclosed in quotes).
- `--owner, -m`: Contract owner's address.
**Example:**
```bash
rescontract deploy --config ~/resilientdb/config/service.config \
--contract build/MyToken.json --name MyToken \
--arguments "1000000" --owner 0xYourAddress
```
#### add_address Command
Adds an external address to the system for contract interactions.
**Usage:**
```bash
rescontract add_address --config <path> --external-address <address>
```
- `--config, -c`: Path to the configuration file.
- `--external-address, -e`: External address to add to the system.
**Example:**
```bash
rescontract add_address --config ~/resilientdb/config/service.config \
--external-address 0xExternalAddress
```
#### list-deployments Command
Lists all deployed contracts tracked in the registry.
**Usage:**
```bash
rescontract list-deployments
```
**Example:**
```bash
rescontract list-deployments
```
This command displays all deployed contracts with their owner addresses, contract names, and contract addresses.
#### clear-registry Command
Clears the deployed contracts registry.
**Usage:**
```bash
rescontract clear-registry
```
**Example:**
```bash
rescontract clear-registry
```
**Warning:** This command permanently removes all deployment tracking information.
## Deployment Registry 📋
The ResContract CLI automatically tracks all deployed contracts in a registry file located at `~/.rescontract_deployed_contracts.json`. This registry provides several benefits:
- **Duplicate Prevention**: Prevents deploying the same contract with the same owner and name
- **Contract Tracking**: Maintains a record of all deployed contracts with their addresses
- **Easy Management**: Use `list-deployments` to view all contracts and `clear-registry` to reset
The registry stores the following information for each deployment:
- Owner address
- Contract name
- Contract address
- Deployment timestamp
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.