ABI Builder for NEAR Python Smart Contracts
Project description
NEAR ABI Python
A lightweight tool for generating Application Binary Interface (ABI) definitions for NEAR smart contracts written in Python.
🔑 Key Features
- ✨ Simple: Minimalist design with a focus on usability
- 🔍 Auto-detection: Automatically detects NEAR contract functions and their types
- 📊 Beautiful CLI: Rich text interface with color-coded output
- 📄 Validation: Built-in ABI validation against the official schema
- 📂 Multi-file support: Analyze entire directories of Python contract files
📦 Installation
# Install with pip
pip install near-abi-py
# Install with uv
uv pip install near-abi-py
# Or use directly without installing
python -m near_abi_py generate example.py
🚀 Quick Start
CLI Usage
# Generate ABI from a single contract file
near-abi-py generate example.py
# Generate ABI from a project directory
near-abi-py generate ./my_contract_project/
# Generate and save to a specific output file
near-abi-py generate example.py -o example.abi.json
# Validate an existing ABI file
near-abi-py validate contract.abi.json
Library Usage
from near_abi_py import generate_abi, generate_abi_from_files
# Generate ABI from a single contract file
abi = generate_abi("path/to/contract.py")
# Or generate ABI from multiple files
python_files = ["path/to/file1.py", "path/to/file2.py"]
abi = generate_abi_from_files(python_files, "path/to/project_dir")
# Validate the generated ABI
from near_abi_py.utils import validate_abi
is_valid, messages = validate_abi(abi)
if is_valid:
print("ABI is valid!")
else:
print("ABI has issues:", messages)
📘 How It Works
NEAR ABI Python analyzes Python smart contract files by:
- Identifying functions marked with NEAR decorators (
@view,@call,@init, etc.) - Extracting parameter types and return types using Python type hints
- Generating JSON Schema representations of each parameter and return type
- Creating a standardized ABI schema following NEAR's specifications
- Validating the output against the official ABI schema
🔧 CLI Reference
Usage: near-abi-py [OPTIONS] COMMAND [ARGS]...
NEAR Python ABI Builder
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
generate Generate ABI from a contract file or directory
validate Validate an existing ABI file against the schema
Generate Command
Usage: near-abi-py generate [OPTIONS] SOURCE_PATH
Generate ABI from a Python contract file or directory.
Options:
-o, --output FILE Output file path (default: stdout)
--recursive / --no-recursive Scan subdirectories recursively (default: True)
--validate / --no-validate Validate the generated ABI (default: True)
--help Show this message and exit.
Validate Command
Usage: near-abi-py validate [OPTIONS] ABI_FILE
Validate an existing ABI file against the schema.
Options:
--help Show this message and exit.
🧩 Example Contract
from near_sdk_py import view, call, init, Context, Storage, Log
class GreetingContract:
@init
def new(self, owner_id=None):
"""Initialize the contract with optional owner"""
owner = owner_id or Context.predecessor_account_id()
Storage.set("owner", owner)
Log.info(f"Contract initialized by {owner}")
return True
@call
def set_greeting(self, message):
"""Store a greeting message (requires gas)"""
Storage.set("greeting", message)
return f"Greeting updated to: {message}"
@view
def get_greeting(self):
"""Retrieve the greeting message (free, no gas needed)"""
return Storage.get_string("greeting") or "Hello, NEAR world!"
# Export the contract methods
contract = GreetingContract()
new = contract.new
set_greeting = contract.set_greeting
get_greeting = contract.get_greeting
🧠 Understanding NEAR ABI Format
The generated ABI follows NEAR's ABI specification and includes:
- Contract metadata (name, version, authors)
- Function definitions (name, parameters, return types)
- Function modifiers (view, call, init, etc.)
- Type information in JSON Schema format
📦 Dependencies
- Python 3.12+
- pydantic >= 2.10.6
- click >= 8.1.8
- jsonschema >= 4.23.0
- rich >= 13.9.4
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file near_abi_py-1.0.0.tar.gz.
File metadata
- Download URL: near_abi_py-1.0.0.tar.gz
- Upload date:
- Size: 49.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.7.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91833ef0198e7af453839d95bb56375631e9ddefd250f661f5928ee0469ee293
|
|
| MD5 |
fac16e604ce4d5b8c0e83ea4159da6ce
|
|
| BLAKE2b-256 |
623a03c137825dd6fad9f1bb383ae7dc585262368353d20df94eb8653bfaed65
|
File details
Details for the file near_abi_py-1.0.0-py3-none-any.whl.
File metadata
- Download URL: near_abi_py-1.0.0-py3-none-any.whl
- Upload date:
- Size: 16.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.7.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19fdd4b6e03405158c394c8473878b0c58cb1f0b3ab8fced0af88f1162b774cb
|
|
| MD5 |
ac280efc5dce0aba43e1c5ea9747e425
|
|
| BLAKE2b-256 |
d40df81574b2d5c53d1c8a1be68e659db11fc7f43a472809b66296bea976b4d4
|