Skip to main content

TRC-8004 Agent SDK for TRON - Agent identity, reputation, and validation

Project description

TRC-8004 Agent SDK

去中心化 Agent 协作的 Python SDK,实现 ERC-8004 (Trustless Agent Protocol) 规范。

特性

  • 🔗 多链支持:抽象的 Adapter 架构,当前支持 TRON,可扩展 EVM 链
  • 🔄 自动重试:可配置的指数退避重试策略
  • 🛡️ 类型安全:完整的类型注解和 Pydantic 校验
  • 📝 详细日志:结构化日志便于调试
  • 异步支持:同时提供同步和异步 API

安装

# 使用 uv
uv add trc-8004-sdk

# 使用 pip
pip install trc-8004-sdk

CLI 工具

安装后可使用 trc8004 命令行工具:

# 创建新 Agent 项目
trc8004 init MyAgent
trc8004 init MyAgent --port 8200 --tags "swap,defi"

# 测试 Agent 连通性
trc8004 test --url http://localhost:8100

# 注册 Agent 到链上
trc8004 register --token-uri https://example.com/agent.json --name MyAgent

创建 Agent 项目示例

$ trc8004 init MySwapAgent --port 8200 --tags "swap,defi" Agent 项目创建成功!

📁 myswapagent/
   ├── app.py           # Agent 主程序
   ├── pyproject.toml   # 项目配置
   ├── .env.example     # 环境变量模板
   ├── README.md        # 文档
   └── tests/           # 测试

🚀 下一步:
   cd myswapagent
   uv sync
   python app.py

快速开始

from sdk import AgentSDK

# 初始化 SDK
sdk = AgentSDK(
    private_key="your_hex_private_key",
    rpc_url="https://nile.trongrid.io",
    network="tron:nile",
    identity_registry="TIdentityRegistryAddress",
    validation_registry="TValidationRegistryAddress",
    reputation_registry="TReputationRegistryAddress",
)

# 注册 Agent
tx_id = sdk.register_agent(
    token_uri="https://example.com/agent.json",
    metadata=[{"key": "name", "value": "MyAgent"}],
)
print(f"Agent registered: {tx_id}")

# 构建订单承诺
commitment = sdk.build_commitment({
    "asset": "TRX/USDT",
    "amount": 100.0,
    "slippage": 0.01,
})

核心功能

1. 身份注册 (IdentityRegistry)

# 方式 1: 使用 token_uri 注册
tx_id = sdk.register_agent(
    token_uri="https://example.com/agent.json",
    metadata=[
        {"key": "name", "value": "MyAgent"},
        {"key": "version", "value": "1.0.0"},
    ],
)

# 方式 2: 从 agent-card.json 自动提取 metadata
import json
with open(".well-known/agent-card.json") as f:
    card = json.load(f)

metadata = AgentSDK.extract_metadata_from_card(card)
# metadata 包含: name, description, version, url, skills, tags, endpoints
tx_id = sdk.register_agent(metadata=metadata)

# 更新元数据
tx_id = sdk.update_metadata(
    agent_id=1,
    key="description",
    value="Updated description",
)

2. 验证请求 (ValidationRegistry)

# 发起验证请求
tx_id = sdk.validation_request(
    validator_addr="TValidatorAddress",
    agent_id=1,
    request_uri="ipfs://QmXxx...",
    request_hash="0x" + "aa" * 32,
)

# 提交验证响应(验证者调用)
tx_id = sdk.validation_response(
    request_hash="0x" + "aa" * 32,
    response=95,  # 0-100 评分
    response_uri="ipfs://QmYyy...",
)

3. 信誉反馈 (ReputationRegistry)

# 提交信誉反馈
tx_id = sdk.submit_reputation(
    agent_id=1,
    score=95,
    tag1="0x" + "11" * 32,  # 可选标签
    feedback_auth="0x...",   # Agent 提供的授权签名
)

4. 签名构建

# 构建 A2A 请求签名
signature = sdk.build_a2a_signature(
    action_commitment="0x...",
    timestamp=int(time.time()),
    caller_address="TCallerAddress",
)

# 构建反馈授权
feedback_auth = sdk.build_feedback_auth(
    agent_id=1,
    client_addr="TClientAddress",
    index_limit=10,
    expiry=int(time.time()) + 3600,
    chain_id=None,  # 自动解析
    identity_registry="TIdentityRegistry",
)

5. 请求构建辅助

# 市价单报价请求
quote_req = sdk.build_market_order_quote_request(
    asset="TRX/USDT",
    amount=100.0,
    slippage=0.01,
)

# X402 执行请求
execute_req = sdk.build_x402_execute_request(
    action_commitment="0x...",
    order_params={"asset": "TRX/USDT", "amount": 100.0},
    payment_tx_hash="0x...",
    timestamp=int(time.time()),
    caller_address="TCallerAddress",
)

重试配置

SDK 提供可配置的重试策略:

from sdk import AgentSDK, RetryConfig, AGGRESSIVE_RETRY_CONFIG

# 使用预定义配置
sdk = AgentSDK(
    private_key="...",
    retry_config=AGGRESSIVE_RETRY_CONFIG,  # 5 次重试
)

# 自定义配置
custom_config = RetryConfig(
    max_attempts=3,
    base_delay=1.0,
    max_delay=30.0,
    exponential_base=2.0,
    jitter=True,
)
sdk = AgentSDK(private_key="...", retry_config=custom_config)

预定义配置:

  • DEFAULT_RETRY_CONFIG: 3 次重试,1s 基础延迟
  • AGGRESSIVE_RETRY_CONFIG: 5 次重试,0.5s 基础延迟
  • CONSERVATIVE_RETRY_CONFIG: 2 次重试,2s 基础延迟
  • NO_RETRY_CONFIG: 不重试

异常处理

SDK 提供细粒度的异常类型:

from sdk import (
    SDKError,
    ContractCallError,
    TransactionFailedError,
    RetryExhaustedError,
    InsufficientEnergyError,
)

try:
    tx_id = sdk.register_agent(token_uri="...")
except InsufficientEnergyError:
    print("账户能量不足,请充值")
except RetryExhaustedError as e:
    print(f"重试耗尽: {e.last_error}")
except ContractCallError as e:
    print(f"合约调用失败: {e.code} - {e.details}")
except SDKError as e:
    print(f"SDK 错误: {e}")

异常层级:

SDKError
├── ConfigurationError
│   ├── MissingContractAddressError
│   ├── InvalidPrivateKeyError
│   └── ChainIdResolutionError
├── NetworkError
│   ├── RPCError
│   ├── TimeoutError
│   └── RetryExhaustedError
├── ContractError
│   ├── ContractCallError
│   ├── ContractFunctionNotFoundError
│   ├── TransactionFailedError
│   └── InsufficientEnergyError
├── SignatureError
│   ├── InvalidSignatureError
│   └── SignerNotAvailableError
├── DataError
│   ├── InvalidAddressError
│   ├── InvalidHashError
│   ├── SerializationError
│   └── DataLoadError
└── ValidationError
    ├── RequestHashMismatchError
    ├── FeedbackAuthExpiredError
    └── FeedbackAuthInvalidError

HTTP 客户端

AgentClient

智能 HTTP 客户端,自动解析 Agent 元数据中的端点:

from sdk import AgentClient

client = AgentClient(
    metadata=agent_metadata,  # 从 Central Service 获取
    base_url="https://agent.example.com",
)

# 自动解析端点并发送请求
response = client.post("quote", {"asset": "TRX/USDT", "amount": 100})

AgentProtocolClient

Agent Protocol 标准客户端:

from sdk import AgentProtocolClient

client = AgentProtocolClient(base_url="https://agent.example.com")

# 创建任务并执行
result = client.run({
    "skill": "market_order",
    "params": {"asset": "TRX/USDT", "amount": 100},
})

链工具

from sdk import load_request_data, fetch_event_logs

# 加载请求数据(支持 file://, ipfs://, http://)
data = load_request_data("ipfs://QmXxx...")

# 获取链上事件
events = fetch_event_logs(
    client=tron_client,
    contract_address="TValidationRegistry",
    event_name="ValidationRequest",
    from_block=1000000,
    to_block=1001000,
)

扩展多链支持

SDK 使用 Adapter 模式,可轻松扩展其他链:

from sdk import ContractAdapter, Signer

class EVMContractAdapter(ContractAdapter):
    def __init__(self, rpc_url: str, ...):
        from web3 import Web3
        self.w3 = Web3(Web3.HTTPProvider(rpc_url))
    
    def send(self, contract: str, method: str, params: list, signer: Signer) -> str:
        # EVM 交易逻辑
        ...

class EVMSigner(Signer):
    def __init__(self, private_key: str):
        from eth_account import Account
        self.account = Account.from_key(private_key)
    
    def sign_message(self, payload: bytes) -> str:
        # EIP-191 签名
        ...

环境变量

变量 说明 默认值
TRON_RPC_URL TRON RPC 节点 https://nile.trongrid.io
TRON_NETWORK 网络标识 tron:nile
IDENTITY_REGISTRY IdentityRegistry 地址 -
VALIDATION_REGISTRY ValidationRegistry 地址 -
REPUTATION_REGISTRY ReputationRegistry 地址 -
TRON_FEE_LIMIT 交易费用上限 (sun) 10000000
IPFS_GATEWAY_URL IPFS 网关 https://ipfs.io/ipfs

开发

# 安装依赖
uv sync

# 运行测试
uv run pytest

# 类型检查
uv run mypy src/sdk

License

MIT

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

trc_8004_sdk-0.1.0b1-py3-none-any.whl (46.6 kB view details)

Uploaded Python 3

File details

Details for the file trc_8004_sdk-0.1.0b1-py3-none-any.whl.

File metadata

  • Download URL: trc_8004_sdk-0.1.0b1-py3-none-any.whl
  • Upload date:
  • Size: 46.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for trc_8004_sdk-0.1.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 c160865a3bf8e02ac11749069a2e084dfeacfaa491de5a5b929e313805eb8166
MD5 7a2776e412affc5a2e400972f27e688f
BLAKE2b-256 5e48a97df36e33bc04dfdb08ec7073e7bd610d1b45f74dfc9321e678e6a77232

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