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.
Metadata
Release files for near-abi-py 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| near_abi_py-1.0.0.tar.gz | 49.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| near_abi_py-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 66.3 kB
Release files / near_abi_py-1.0.0.tar.gz
| Download URL | near_abi_py-1.0.0.tar.gz |
|---|---|
| Size | 49.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
91833ef0198e7af453839d95bb56375631e9ddefd250f661f5928ee0469ee293
|
|
BLAKE2b-256 checksum How to use checksums |
623a03c137825dd6fad9f1bb383ae7dc585262368353d20df94eb8653bfaed65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.7.11
|
Release files / near_abi_py-1.0.0-py3-none-any.whl
| Download URL | near_abi_py-1.0.0-py3-none-any.whl |
|---|---|
| Size | 16.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
19fdd4b6e03405158c394c8473878b0c58cb1f0b3ab8fced0af88f1162b774cb
|
|
BLAKE2b-256 checksum How to use checksums |
d40df81574b2d5c53d1c8a1be68e659db11fc7f43a472809b66296bea976b4d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.7.11
|