Kadena Chainweb Python Bindings

September 28, 2022 · View on GitHub

Boards

Chainweb.py is a high level Python bindings for the Kadena Chainweb REST API.

Installation

pip3 install chainwebpy

Quickstart

from chainwebpy.url import P2PBootstrapAPIEndpoint
from chainwebpy.chainweb_p2p.block_header_endpoints import BlockHeaderEndpoints

endpoint = P2PBootstrapAPIEndpoint(
    P2PBootstrapAPIEndpoint.TestnetNode.US1
)

cw = BlockHeaderEndpoints(endpoint)
block_headers = cw.get_block_headers(chain=0)

How to Use

In order to call functions defined in endpoints, one must create an API endpoint object.

  • P2PBootstrapAPIEndpoint is Chainweb P2P bootstrap node API endpoint. Used only for calling P2P API endpoints.

    from chainwebpy.url import P2PBootstrapAPIEndpoint
    endpoint = P2PBootstrapAPIEndpoint(
            P2PBootstrapAPIEndpoint.TestnetNode.US1
        )
    
  • ServiceAPIEndpoint is Chainweb mainnet or testnet service API endpoint. Can be also used for some endpoints of the P2P API.

    from chainwebpy.url import ServiceAPIEndpoint
    endpoint = ServiceAPIEndpoint("testnet")
    
  • GenericNodeAPIEndpoint is generic node API endpoint.

    from chainwebpy.url import GenericNodeAPIEndpoint
    endpoint = GenericNodeAPIEndpoint(
        scheme = "https",
        host = "us1.testnet.chainweb.com",
        port = 443,
        api_version = "0.0",
        chainweb_version = "0"
    )
    

After constructing endpoint, you can call bindings that is defined in chainwebpy.chainweb_p2p and chainwebpy.chainweb_service.

from chainwebpy.chainweb_p2p.cut_endpoints import CutEndpoints 
cw = CutEndpoints(endpoint)

Implementation

The bindings implemenets high level functions for the following REST API endpoints:

  • CHAINWEB P2P API

    • Cut Endpoints
    • Block Hashes Endpoints
    • Block Header Endpoints
    • Block Payload Endpoints
    • Mempool P2P Endpoints
    • Peer Endpoints
    • Config Endpoints
  • CHAINWEB SERVICE API

    • Service API
    • Miscellaneous Endpoints
    • Mining Endpoints
    • [-] Pact Endpoints (To-Do)
    • [-] Rosetta Endpoints

Structure

├── chainwebpy
    ├── __init__.py

    ├── chainweb_p2p
    │   ├── block_hashes_endpoints.py
    │   ├── block_header_endpoints.py
    │   ├── block_payload_endpoints.py
    │   ├── config_endpoints.py
    │   ├── cut_endpoints.py
    │   ├── mempool_endpoints.py
    │   └── peer_endpoints.py

    ├── chainweb_service
    │   ├── mining_endpoints.py
    │   ├── miscellaneous_endpoints.py
    │   └── pact_endpoints.py

    └── url.py

Endpoints

Chainweb P2P

BlockHashesEndpoints

from chainwebpy.chainweb_p2p.block_hashes_endpoints import BlockHashesEndpoints

These endpoints return block hashes from the chain database.

Generally, block hashes are returned in ascending order and include hashes from orphaned blocks.

For only querying blocks that are included in the winning branch of the chain the branch endpoint can be used, which returns blocks in descending order starting from the leafs of branches of the block chain.

BlockHeaderEndpoints

from chainwebpy.chainweb_p2p.block_header_endpoints import BlockHeaderEndpoints

These endpoints return block headers from the chain database.

Generally, block headers are returned in ascending order and include headers of orphaned blocks.

For only querying blocks that are included in the winning branch of the chain the branch endpoints can be used, which return blocks in descending order starting from the leafs of branches of the block chain.

BlockPayloadEndpoints

from chainwebpy.chainweb_p2p.block_payload_endpoints import BlockPayloadEndpoints

Raw literal Block Payloads in the form in which they are stored on the chain. By default only the payload data is returned which is sufficient for validating the blockchain Merkle Tree. It is also sufficient as input to Pact for executing the Pact transactions of the block and recomputing the outputs.

It is also possible to query the transaction outputs along with the payload data.

ConfigEndpoints

from chainwebpy.chainweb_p2p.config_endpoints import ConfigEndpoints

CutEndpoints

from chainwebpy.chainweb_p2p.cut_endpoints import CutEndpoints

A cut represents a distributed state of a chainweb. It references one block header for each chain, such that those blocks are pairwise concurrent.

Two blocks from two different chains are said to be concurrent if either one of them is an adjacent parent (is a direct dependency) of the other or if the blocks do not depend at all on each other.

MempoolEndpoints

from chainwebpy.chainweb_p2p.mempool_endpoints import MempoolEndpoints

Mempool P2P endpoints for communication between mempools. Endusers are not supposed to use these endpoints directly. Instead, the respective Pact endpoints should be used for submitting transactions into the network.

PeerEndpoints

from chainwebpy.chainweb_p2p.peer_endpoints import PeerEndpoints

Chainweb Service

Mining Endpoints

from chainwebpy.chainweb_service.mining_endpoints import MiningEndpoints

MiscellaneousEndpoints

from chainwebpy.chainweb_service.miscellaneous_endpoints import MiscellaneousEndpoints

Support and Help