Skip to main content
Quarantined

This project has been quarantined by PyPI admins. It cannot be installed or modified until a security review is complete.

neutrl-contracts

Python SDK for interacting with Neutrl Protocol smart contracts. Provides typed, async-ready clients for NUSD minting/redeeming, sNUSD staking, and Router swaps.

Installation

pip install neutrl-contracts

Quick Start

Mint NUSD

from neutrl_contracts import NUSDClient, MintParams

client = NUSDClient(
    rpc_url="https://eth.llamarpc.com",
    nusd_address="0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE",
    private_key="0x...",
)

# Preview mint
nusd_amount = client.preview_mint(
    collateral_address="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",  # USDC
    amount=1_000_000_000,  # 1000 USDC (6 decimals)
)
print(f"Expected NUSD: {nusd_amount / 10**18:.2f}")

# Execute mint
result = client.mint(MintParams(
    collateral_address="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    collateral_amount=1_000_000_000,
    min_nusd_amount=int(nusd_amount * 0.995),
))
print(f"Minted {result.nusd_minted / 10**18:.2f} NUSD — TX: {result.tx_hash}")

Stake for sNUSD

from neutrl_contracts import StakingClient, StakeParams

staking = StakingClient(
    rpc_url="https://eth.llamarpc.com",
    snusd_address="0x08EFCC2F3e61185D0EA7F8830B3FEc9Bfa2EE313",
    nusd_address="0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE",
    private_key="0x...",
)

# Check exchange rate
rate = staking.exchange_rate()
print(f"sNUSD/NUSD rate: {rate / 10**18:.6f}")

# Stake 1000 NUSD
staking.stake(StakeParams(nusd_amount=1000 * 10**18))

Router Swap

from neutrl_contracts import RouterClient, SwapParams

router = RouterClient(
    rpc_url="https://eth.llamarpc.com",
    router_address="0xa052883ebEe7354FC2Aa0f9c727E657FdeCa744a",
    private_key="0x...",
)

# Preview swap
amount_out, impact = router.get_amount_out(
    token_in="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",   # USDC
    token_out="0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE",    # NUSD
    amount_in=5_000_000_000,  # 5000 USDC
)
print(f"Output: {amount_out / 10**18:.2f} NUSD, impact: {impact} bps")

# Execute swap
result = router.swap(SwapParams(
    token_in="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    token_out="0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE",
    amount_in=5_000_000_000,
    min_amount_out=int(amount_out * 0.995),
))
print(f"Swapped via route: {result.route}")

Async Usage

import asyncio
from neutrl_contracts import AsyncNUSDClient, MintParams

async def main():
    client = AsyncNUSDClient(
        rpc_url="wss://eth.llamarpc.com",
        nusd_address="0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE",
        private_key="0x...",
    )

    supply = await client.total_supply()
    print(f"NUSD supply: {supply / 10**18:,.2f}")

    result = await client.mint(MintParams(
        collateral_address="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        collateral_amount=500_000_000,
    ))
    print(f"Async mint TX: {result.tx_hash}")

asyncio.run(main())

Event Listening

from neutrl_contracts import EventListener

listener = EventListener(
    rpc_url="https://eth.llamarpc.com",
    contract_address="0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE",
    contract_type="nusd",
    from_block=20_000_000,
)

listener.on("Minted", lambda e: print(f"Mint: {e.args['nusdAmount'] / 10**18:.2f} NUSD"))
listener.on("Redeemed", lambda e: print(f"Redeem: {e.args['nusdAmount'] / 10**18:.2f} NUSD"))

listener.poll_loop()

Contract Registry

from web3 import Web3
from neutrl_contracts import ContractRegistry

registry = ContractRegistry()

# Known deployments are auto-loaded
nusd = registry.get("nusd")
print(f"NUSD: {nusd.address}")

# Get a web3 contract instance
w3 = Web3(Web3.HTTPProvider("https://eth.llamarpc.com"))
contract = registry.get_contract(w3, "nusd")
supply = contract.functions.totalSupply().call()

API Reference

Clients

Client Description
NUSDClient / AsyncNUSDClient NUSD mint, redeem, balance, supply
RouterClient / AsyncRouterClient Token swaps with route optimization
StakingClient / AsyncStakingClient sNUSD stake, unstake, cooldown
EventListener / AsyncEventListener Event polling and callbacks
ContractRegistry Multi-chain deployment management

Contract Addresses (Ethereum Mainnet)

Contract Address
NUSD 0xE556ABa6fe6036275Ec1f87eda296BE72C811BCE
sNUSD 0x08EFCC2F3e61185D0EA7F8830B3FEc9Bfa2EE313
Router 0xa052883ebEe7354FC2Aa0f9c727E657FdeCa744a

Requirements

  • Python 3.9+
  • web3.py >= 6.0

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neutrl_contracts-2.0.2.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

neutrl_contracts-2.0.2-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file neutrl_contracts-2.0.2.tar.gz.

File metadata

  • Download URL: neutrl_contracts-2.0.2.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.12

File hashes

Hashes for neutrl_contracts-2.0.2.tar.gz
Algorithm Hash digest
SHA256 93964e55a3619195280660b3172b33eb7f4d16c9293ed9ed349b57e01e1ba8f7
MD5 c69b8b99133a44275a44d9045c467e0d
BLAKE2b-256 ad8fac7fc9fcb8a95ae3533827c3b793077154e4ac2ed5d6038a59007b2ac787

See more details on using hashes here.

File details

Details for the file neutrl_contracts-2.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for neutrl_contracts-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9a820e84b2decc65d48b6426d61071563ebac6eee029f562448793e91af69149
MD5 80d759f01ef8934b65eb0dda74d60f19
BLAKE2b-256 9d9cf209da39fdb2e345fcd633101b2f86b79d78863edf7a53234577cacf8d62

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page