Skip to content

Repository files navigation

Rootstock Python SDK

PyPIPythonLicense: MIT

Python SDK for interacting with the Rootstock (RSK) blockchain. Provides wallet management, RBTC transfers, ERC-20 token operations, smart contract interactions, and RNS domain resolution.

Installation

pip install rootstock-sdk

Quick Start

fromrootstockimportRootstockProvider, Wallet, TransactionBuilder, ChainId# Connect to Rootstock Testnetprovider=RootstockProvider.from_testnet()
print(f"Connected: {provider.is_connected}")
print(f"Block: {provider.get_block_number()}")
# Create a walletwallet=Wallet.create(chain_id=ChainId.TESTNET)
print(f"Address: {wallet.address}")
# Import existing walletwallet=Wallet.from_private_key("0xYOUR_KEY", chain_id=ChainId.TESTNET)
# Check balancebalance=provider.get_balance(wallet.address)
print(f"Balance: {balance} wei")
# Send RBTCtx=TransactionBuilder(provider, wallet)
receipt=tx.transfer(to="0xRECIPIENT", value_rbtc=0.001)
print(f"TX Hash: {receipt['transactionHash'].hex()}")

Features

Wallet Management

fromrootstockimportWallet, ChainId# Create new walletwallet=Wallet.create(chain_id=ChainId.MAINNET)
# Import from private keywallet=Wallet.from_private_key("0x...", chain_id=ChainId.MAINNET)
# Encrypt to keystorekeystore=wallet.encrypt("my-password")
# Decrypt from keystorewallet=Wallet.from_keystore(keystore, "my-password")
# Sign messagessignature=wallet.sign_message("Hello Rootstock!")

Provider (Network Connection)

fromrootstockimportRootstockProvider# Mainnetprovider=RootstockProvider.from_mainnet()
# Testnetprovider=RootstockProvider.from_testnet()
# Custom RPCprovider=RootstockProvider.from_url("https://my-node.com", chain_id=30)
# Query blockchainbalance=provider.get_balance("0x...")
block=provider.get_block("latest")
gas_price=provider.get_gas_price()

Transactions

fromrootstockimportRootstockProvider, Wallet, TransactionBuilderprovider=RootstockProvider.from_testnet()
wallet=Wallet.from_private_key("0x...", chain_id=31)
tx=TransactionBuilder(provider, wallet)
# Simple transferreceipt=tx.transfer(to="0x...", value_rbtc=0.001)
# Transfer with optionsreceipt=tx.transfer(
to="0x...",
value_wei=1000000000000000,
gas_limit=21000,
gas_price=60000000,
)
# Estimate costscost=tx.estimate_total_cost(to="0x...", value=10**18)
print(f"Total cost: {cost['total_cost_rbtc']} RBTC")

ERC-20 Tokens

fromrootstockimportRootstockProvider, ERC20Token, Walletprovider=RootstockProvider.from_mainnet()
# Load by addressrif=ERC20Token(provider, "0x2acc95758f8b5f583470ba265eb685a8f45fc9d5")
# Load by symbolrif=ERC20Token.from_symbol(provider, "RIF")
# Read token infoprint(rif.name()) # "RIF"print(rif.symbol()) # "RIF"print(rif.decimals()) # 18# Check balancebalance=rif.balance_of("0x...")
human=rif.balance_of_human("0x...") # "150.5"# Transfer tokenswallet=Wallet.from_private_key("0x...", chain_id=30)
receipt=rif.transfer(wallet, to="0x...", amount=100*10**18)
# Approve spenderreceipt=rif.approve(wallet, spender="0x...", amount=100*10**18)

Smart Contracts

fromrootstockimportRootstockProvider, Contract, Walletprovider=RootstockProvider.from_testnet()
# Load contract with ABIcontract=Contract(provider, "0xCONTRACT", abi=[...])
# Or from ABI filecontract=Contract.from_abi_file(provider, "0xCONTRACT", "abi.json")
# Read-only callresult=contract.call("greet")
# State-changing transactionwallet=Wallet.from_private_key("0x...", chain_id=31)
receipt=contract.transact(wallet, "setGreeting", "Hello!")
# Encode calldatadata=contract.encode_function_data("setGreeting", "Hello!")

RNS (RIF Name Service)

fromrootstockimportRootstockProvider, RNSprovider=RootstockProvider.from_mainnet()
rns=RNS(provider)
# Forward resolutionaddress=rns.resolve("alice.rsk")
# Reverse resolutionname=rns.reverse_resolve("0x...")
# Check availabilityavailable=rns.is_available("myname.rsk")
# Get domain ownerowner=rns.get_owner("alice.rsk")

Utilities

fromrootstockimportto_wei, from_wei, to_checksum_address, is_checksum_address# Unit conversionwei=to_wei(1.5, "rbtc") # 1500000000000000000rbtc=from_wei(10**18, "rbtc") # Decimal('1')gwei=to_wei(60, "gwei") # 60000000000# EIP-1191 address checksum (Rootstock-specific)addr=to_checksum_address("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed", chain_id=30)
valid=is_checksum_address(addr, chain_id=30) # True

Supported Networks

NetworkChain IDRPC URL
Mainnet30https://public-node.rsk.co
Testnet31https://public-node.testnet.rsk.co

Known Tokens

TokenNetworkAddress
WRBTCMainnet0x542FDA317318eBf1d3DeAF76E0B632741a7e677d
RIFMainnet0x2acc95758f8b5f583470ba265eb685a8f45fc9d5
tRIFTestnet0x19f64674D8a5b4e652319F5e239EFd3bc969a1FE

Development

# Clone the repository
git clone https://github.com/rootstock/rootstock-python-sdk.git
cd rootstock-python-sdk
# Create a virtual environment (Python 3.10+)
python3 -m venv .venv
# Activate the virtual environment# macOS/Linux:source .venv/bin/activate
# Windows (cmd):# .venv\Scripts\activate.bat# Windows (PowerShell):# .venv\Scripts\Activate.ps1# Install in editable mode with dev dependencies
pip install -e ".[dev]"# Run unit tests
pytest tests/unit/ -v
# Run integration tests (requires internet -- hits live Rootstock testnet/mainnet)
pytest tests/integration/ -v
# Run all tests with coverage
pytest tests/ -v --cov=rootstock --cov-report=term-missing
# Lint
ruff check src/ tests/
# Build package
python -m build

Requirements

  • Python >= 3.10
  • web3.py >= 7.0, < 8.0
  • eth-account >= 0.13, < 1.0

License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages