Skip to main content

python SDK for Conflux network

Project description

python-conflux-sdk

Python SDK for interacting with Conflux network.

Note: this SDK still is in developing, and the API may change in the future.

Quick start

$ pip3 install conflux
from conflux_web3.dev import get_testnet_web3
from conflux_web3.middleware import WalletMiddleware

w3 = get_testnet_web3()
# fill your secret key
# and you can claim testnet token from https://faucet.confluxnetwork.org/
acct = w3.account.from_key("0xxxxxxxxxxxxxx") 
w3.middleware_onion.add(WalletMiddleware(acct, network_id=1))
w3.cfx.default_account = acct.address

w3.cfx.send_transaction({
    'to': w3.cfx.account.create().address,
    'value': 22,
}).executed()

Overview

Python-conflux-sdk is a wrapping layer over web3.py, and we are trying to make most of its APIs consistent with web3.py.

Code Examples

Python-conflux-sdk is still in developing, and currently supports these features:

initialization with providers

# same as web3.py
from conflux_web3 import Web3
w3 = Web3(Web3.HTTPProvider("http://127.0.0.1:12537"))

# or
# conflux_web3's additional functions
# using local default HTTP provider or Conflux's public RPC FOR DEVELOPMENT
from conflux_web3.dev import (
    get_local_web3, # "http://127.0.0.1:12537"
    get_testnet_web3, # "https://test.confluxrpc.com"
    get_mainnet_web3, # "https://main.confluxrpc.com"
)
w3 = get_testnet_web3()

Send a transaction

Code example

# modified from https://web3py.readthedocs.io/en/latest/middleware.html?highlight=construct_sign_and#web3.middleware.construct_sign_and_send_raw_middleware
import os
from conflux_web3.dev import get_testnet_web3
from conflux_web3.middleware import construct_sign_and_send_raw_middleware

w3 = get_testnet_web3()
acct = w3.cfx.account.from_key(os.environ.get('PRIVATE_KEY'))
# construct_sign_and_send_raw_middleware(acct) is same as WalletMiddleware(acct)
w3.middleware_onion.add(construct_sign_and_send_raw_middleware(acct))
w3.cfx.default_account = acct.address

transaction = {
    'to': w3.cfx.account.create().address, # a random address encoded in base32 format
    'value': 22,
}

# or you can simply use """w3.cfx.send_transaction(transaction).executed()"""
w3.cfx.wait_for_transaction_receipt(w3.cfx.send_transaction(transaction))

Contract Interaction

import os, json
from conflux_web3.dev import get_testnet_web3
from conflux_web3.middleware import construct_sign_and_send_raw_middleware

w3 = get_testnet_web3()
acct = w3.cfx.account.from_key(os.environ.get('PRIVATE_KEY'))
w3.middleware_onion.add(construct_sign_and_send_raw_middleware(acct))
w3.cfx.default_account = acct.address

erc20_metadata = json.load(open("path/to/metadata/ERC20.json"))

# deploy contract
erc20 = w3.cfx.contract(bytecode=erc20_metadata["bytecode"], abi=erc20_metadata["abi"])
hash = erc20.constructor(name_="ERC20", symbol_="C", totalSupply=10**18).transact()
contract_address = w3.cfx.wait_for_transaction_receipt(hash)["contractCreated"]
assert contract_address is not None
contract = w3.cfx.contract(contract_address, abi=erc20_metadata["abi"])

# transfer
random_account = w3.account.create()
hash = contract.functions.transfer(random_account.address, 100).transact()
transfer_receipt = w3.cfx.wait_for_transaction_receipt(hash)
balance = contract.functions.balanceOf(random_account.address).call()

RPC support

Visit JSON-RPC methods to check the full RPC list. Currently, most frequently used RPCs are supported.

w3.cfx.get_balance("cfx:aarc9abycue0hhzgyrr53m6cxedgccrmmyybjgh4xg", "latest_state")
# the returned value from RPC will be formatted
# 158972490234375000

Base32 Address Operation

You can use from cfx_address import Base32Address or simply use w3.address or w3.cfx.address to use the Base32Address class. This class provides several methods for you to convert or validate base32 addresses. See cfx_address documentation for the full documentation.

from cfx_address import Base32Address

address = Base32Address("0x1ecde7223747601823f7535d7968ba98b4881e09", network_id=1)
address
# 'cfxtest:aatp533cg7d0agbd87kz48nj1mpnkca8be1rz695j4'
[
    address.address_type,
    address.network_id,
    address.hex_address,
    address.verbose_address,
    address.abbr,
    address.mapped_evm_space_address,
    address.eth_checksum_address,
]
# ['user', 1, '0x1ecde7223747601823f7535d7968ba98b4881e09', 'CFXTEST:TYPE.USER:AATP533CG7D0AGBD87KZ48NJ1MPNKCA8BE1RZ695J4', 'cfxtest:aat...95j4', '0x349f086998cF4a0C5a00b853a0E93239D81A97f6', '0x1ECdE7223747601823f7535d7968Ba98b4881E09']

APIs to support in the near future

  • contract caller and contract events are not fully supported
  • support for all RPCs

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

conflux-0.2.0b1.tar.gz (23.4 kB view hashes)

Uploaded Source

Built Distribution

conflux-0.2.0b1-py3-none-any.whl (35.2 kB view hashes)

Uploaded Python 3

Supported by

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