Skip to main content

ATTPs sdk for APRO

Project description

ATTPs SDK

This library is a simple asynchronous python wrapper around ATTPs SDK.

Installation

$ pip3 install attps-sdk

Usage

Initialize AgentSDK

from attps.verify.agent import AgentSDK

AGENT_PROXY_ADDRESS = "0x07771A3026E60776deC8C1C61106FB9623521394" # ATTPs verify module agent contract deployment address (EVM)
NETWORK_RPC = "https://testnet-rpc.bitlayer.org" # ATTPs verify module agent contract deployment chain RPC address

agent = AgentSDK(endpoint_uri=NETWORK_RPC, proxy_address=AGENT_PROXY_ADDRESS)

To create a new verify agent, call the createAndRegisterAgent method:

import time
from attps.verify.entities import (
    AgentSettings,
    AgentHeader,
    MessageType,
    Priority
)
from utils.utils import (
    generate_uuid_v4
)

AGENT_SETTINGS = AgentSettings(
    signers=[
        "0x4b1056f504f32c678227b5Ae812936249c40AfBF",
        "0xB973476e0cF88a3693014b99f230CEB5A01ac686",
        "0x6cF0803D049a4e8DC01da726A5a212BCB9FAC1a1",
        "0x9D46daa26342e9E9e586A6AdCEDaD667f985567B",
        "0x33AF673aBcE193E20Ee94D6fBEb30fEf0cA7015b",
        "0x868D2dE4a0378450BC62A7596463b30Dc4e3897E",
        "0xD4E157c36E7299bB40800e4aE7909DDcA8097f67",
        "0xA3866A07ABEf3fD0643BD7e1c32600520F465ca8",
        "0x62f642Ae0Ed7F12Bc40F2a9Bf82ccD0a3F3b7531"
    ], # Signer list corresponding to the Agent's signed data
    threshold=2, # Verification threshold, minimum number of correct signatures from signers
    converter_address="0xaB303EF87774D9D259d1098E9aA4dD6c07F69240", # Converter contract address for intermediate data processing between signed data and final signed data
    agent_header=AgentHeader(
        version="1.0", # agent version
        message_id="d4d0813f-ceb7-4ce1-8988-12899b26c4b6", # Agent‘s Message ID, Used for target agent uniqueness verification
        source_agent_id="da70f6b3-e580-470f-b88b-caa5369e7778", # Source Agent ID, globally unique in the system
        source_agent_name="APRO Pull Mode Agent", # Source agent name
        target_agent_id="", # Target Agent ID
        timestamp=int(time.time()), # Agent registration time
        message_type=MessageType.Event, # Agent data transmission type, currently only supports Event
        priority=Priority.Low,
        ttl=60 * 60
    )
)

dynamic_setting = AGENT_SETTINGS
dynamic_setting.agent_header.source_agent_id = generate_uuid_v4()
dynamic_setting.agent_header.target_agent_id = generate_uuid_v4()
dynamic_setting.agent_header.message_id = generate_uuid_v4()
user_owner = agent.add_account("0x_user_private_key")
result = agent.create_and_register_agent(
    transmitter="", 
    nonce=None,
    settings=AGENT_SETTINGS)
print("created agent:", result)

To verify the data integrity, call the verify method:

from attps.verify.entities import (
    AgentMessagePayload,
    Proofs,
    AgentMetadata,
)

AGENT_CONTRACT = "0xA1903361Ee8Ec35acC7c8951b4008dbE8D12C155" # Verification contract corresponding to the agent
AGENT_SETTING_DIGEST = "0x010038164dba6abffb84eb5cb538850d9bc5d8f815149a371069b3255fd177a4" # Agent's configuration information identifier, returned in the blockchain event during registration or modification
AGENT_PAYLOAD = AgentMessagePayload(
    data="0x0006e706cf7ab41fa599311eb3de68be869198ce62aef1cd079475ca50e5b3f60000000000000000000000000000000000000000000000000000000002b1bf0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a0000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200003665949c883f9e0f6f002eac32e00bd59dfe6c34e92a91c37d6a8322d6489000000000000000000000000000000000000000000000000000000006762677d000000000000000000000000000000000000000000000000000000006762677d000000000000000000000000000000000000000000000000000003128629ec0800000000000000000000000000000000000000000000000004db732547630000000000000000000000000000000000000000000000000000000000006763b8fd0000000000000000000000000000000000000000000015f0f60671beb95cc0000000000000000000000000000000000000000000000015f083baa654a7b900000000000000000000000000000000000000000000000015f103ec7cb057ea80000000000000000000000000000000000000000000000000000000000000000003b64f7e72208147bb898e8b215d0997967bef0219263726c76995d8a19107d6ba5306a176474f9ccdb1bc5841f97e0592013e404e15b0de0839b81d0efb26179f222e0191269a8560ebd9096707d225bc606d61466b85d8568d7620a3b59a73e800000000000000000000000000000000000000000000000000000000000000037cae0f05c1bf8353eb5db27635f02b40a534d4192099de445764891198231c597a303cd15f302dafbb1263eb6e8e19cbacea985c66c6fed3231fd84a84ebe0276f69f481fe7808c339a04ceb905bb49980846c8ceb89a27b1c09713cb356f773",
    data_hash="0x53d9f133f1265bd4391fcdf89b63424cbcfd316c8448f76cc515647267ac0a8e", # Hash of the corresponding data
    proofs=Proofs(
        zk_proof="0x",
        merkle_proof="0x",
        signature_proof="0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000003b64f7e72208147bb898e8b215d0997967bef0219263726c76995d8a19107d6ba5306a176474f9ccdb1bc5841f97e0592013e404e15b0de0839b81d0efb26179f222e0191269a8560ebd9096707d225bc606d61466b85d8568d7620a3b59a73e800000000000000000000000000000000000000000000000000000000000000037cae0f05c1bf8353eb5db27635f02b40a534d4192099de445764891198231c597a303cd15f302dafbb1263eb6e8e19cbacea985c66c6fed3231fd84a84ebe0276f69f481fe7808c339a04ceb905bb49980846c8ceb89a27b1c09713cb356f7730000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001",
    ),
    meta_data=AgentMetadata(
        content_type="0x",
        encoding="0x",
        compression="0x"
    )
)
user_owner = agent.add_account("0x_user_private_key")
result = agent.verify(
    transmitter=user_owner,
    nonce=None,
    agent_contract=AGENT_CONTRACT,
    settings_digest=AGENT_SETTING_DIGEST,
    payload=AGENT_PAYLOAD
)
print("verify:", result)

For more examples, see the test cases.

License

This project is licensed under the Apache License 2.0. The full license text can be found in the LICENSE file.

Copyright (c) 2025 Apro.

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

attps-sdk-1.1.0.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

attps_sdk-1.1.0-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

Details for the file attps-sdk-1.1.0.tar.gz.

File metadata

  • Download URL: attps-sdk-1.1.0.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for attps-sdk-1.1.0.tar.gz
Algorithm Hash digest
SHA256 3a5314deea5a3b9cb4e56bde3bd53a5b0c43875e5008bc3ef0665f6335e0e8a2
MD5 48c606dea42fd6b594aca21f01dc1a2e
BLAKE2b-256 bbbaaee9ba8363efce6af0be75aab1684288e4944d42ed5894f5f2d7c6b1a1da

See more details on using hashes here.

File details

Details for the file attps_sdk-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: attps_sdk-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 30.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for attps_sdk-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b8fb349fe8d5bebff127bdefe4655f8bf377b6271d302d2c8e188756fdb48a9f
MD5 e6e88f8a4f109a9a3f42a1a44043c4c3
BLAKE2b-256 5f8f1851b73b85b997a30819b1cb49b9aacb032e33b9720b3f7b17addbf69dd0

See more details on using hashes here.

Supported by

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