# 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.
This repository is deprecated. Active development now continues in the ResilientDB Monorepo.
The ResContract CLI can be found at ecosystem/smart-contract/rescontract.
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 ✨
- Prerequisites
- Installation 🛠️
- Usage
- Commands
- Configuration ⚙️
- Setting the ResDB_Home Variable
- Contributing
- 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
- npm: Comes with Node.js. Ensure it's up-to-date.
- Solidity Compiler (
solc): Required to compile smart contracts.
Installing solc¶
Linux (Ubuntu/Debian)¶
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install -y solc
macOS¶
brew update
brew upgrade
brew tap ethereum/ethereum
brew install solidity
Installation 🛠️¶
Install the ResContract CLI globally using npm:
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:
ResDB_Home: /path/to/resilientdb
Ensure the ResDB_Home path is correct.
Note: The CLI checks for
config.yamlin the current directory first, then in your home directory.
Usage¶
After installation, you can use the rescontract command in your terminal.
rescontract <command> [options]
Commands¶
create Command¶
Initializes a new account using ResilientDB's smart contract tools.
Usage:
rescontract create --config <path_to_config>
--config, -c: Path to the configuration file.
Example:
rescontract create --config ~/resilientdb/config/service.config
compile Command¶
Compiles a Solidity smart contract into a JSON file using solc.
Usage:
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:
rescontract compile --sol contracts/MyToken.sol --output build/MyToken.json
deploy Command¶
Deploys the smart contract to the blockchain.
Usage:
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:
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:
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:
rescontract add_address --config ~/resilientdb/config/service.config \
--external-address 0xExternalAddress
list-deployments Command¶
Lists all deployed contracts tracked in the registry.
Usage:
rescontract list-deployments
Example:
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:
rescontract clear-registry
Example:
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-deploymentsto view all contracts andclear-registryto 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 file for details.