MCP Hub
Back to servers

oasyce

On-chain economy for AI agents: escrow, marketplace, data rights, reputation, disputes.

Registry
Stars
2
Updated
Mar 26, 2026
Validated
Mar 28, 2026

Quick Install

uvx oasyce-sdk

oasyce-sdk

Oasyce L1 链 Python SDK —— AI Agent 原生经济系统:产权确权、智能合约、自动仲裁。

English

安装

pip install oasyce-sdk            # 基础 SDK
pip install oasyce-sdk[mcp]       # + MCP Server(Claude/Cursor/Windsurf)
pip install oasyce-sdk[langchain] # + LangChain Tools
pip install oasyce-sdk[all]       # 全部

MCP Server

让你的 AI 助手(Claude Desktop / Cursor / Windsurf)直接操作 Oasyce 链。

配置 claude_desktop_config.json

{
  "mcpServers": {
    "oasyce": {
      "command": "oasyce-mcp",
      "env": {
        "OASYCE_NODE": "http://47.93.32.88:1317",
        "OASYCE_FAUCET": "http://47.93.32.88:8080"
      }
    }
  }
}

提供 10 个工具:健康检查、领水龙头、查余额、查 agent 档案、浏览市场、列出能力、查信誉、查数据资产、查开放任务、提 issue。

LangChain Tools

from oasyce_sdk.langchain_tools import oasyce_tools
from langchain.agents import create_react_agent

agent = create_react_agent(llm, oasyce_tools)
agent.invoke({"input": "浏览 Oasyce 市场上有什么 AI 服务"})

快速开始(SDK)

from oasyce_sdk import OasyceClient

client = OasyceClient("http://47.93.32.88:1317")
caps = client.list_capabilities(tag="llm")
bal = client.get_balance("oasyce1abc...")
print(f"发现 {len(caps)} 个能力, 余额: {bal.amount_oas} OAS")

API 参考

构造函数

OasyceClient(base_url="http://localhost:1317", timeout=10)

连接 Oasyce 链节点的 REST API (gRPC-gateway)。


能力市场 (Capability Marketplace)

list_capabilities(tag=None, provider=None) -> list[Capability]

列出所有已注册的 AI 能力。支持按标签或提供者地址过滤。

all_caps = client.list_capabilities()
llm_caps = client.list_capabilities(tag="llm")
my_caps = client.list_capabilities(provider="oasyce1abc...")

get_capability(capability_id) -> Capability

按 ID 查询单个能力。

cap = client.get_capability("cap-001")
print(cap.name, cap.price_per_call, "uoas/次")

get_earnings(provider) -> Earnings

查询提供者在所有能力上的累计收入。

earnings = client.get_earnings("oasyce1abc...")
print(f"累计收入 {client.uoas_to_oas(earnings.total_earned_uoas)} OAS, 共 {earnings.total_calls} 次调用")

get_invocation(invocation_id) -> Invocation

查询单个调用记录(含状态、挑战窗口、使用报告)。

inv = client.get_invocation("INV_0000000000000001")
print(inv.status, inv.output_hash, inv.usage_report)

get_capability_params() -> dict

查询能力模块参数。


数据资产 (Data Assets)

list_assets(tag=None, owner=None) -> list[DataAsset]

列出数据资产,支持按标签或所有者过滤。

assets = client.list_assets(tag="ml")

get_asset(asset_id) -> DataAsset

查询单个数据资产。

asset = client.get_asset("asset-001")
print(asset.name, asset.status, f"已发行 {asset.total_shares} 份")

get_shares(asset_id) -> list[ShareHolder]

列出数据资产的所有持有人。

holders = client.get_shares("asset-001")
for h in holders:
    print(f"{h.address}: {h.shares} 份")

get_bonding_curve(asset_id) -> BondingCurve

查询联合曲线状态(供应量、储备金、现价)。

bc = client.get_bonding_curve("asset-001")
print(f"现价: {bc.spot_price_uoas} uoas, 储备: {bc.reserve_uoas} uoas")

get_access_level(asset_id, address) -> AccessLevel

查询地址在数据资产上的访问等级(L0-L3)。

al = client.get_access_level("asset-001", "oasyce1buyer...")
print(f"等级: {al.level}, 持股: {al.equity_bps} bps")

get_dispute(dispute_id) -> Dispute / list_disputes(asset_id=None) -> list[Dispute]

查询争议。

get_migration_path(source_id, target_id) -> MigrationPath

查询两个资产版本之间的迁移路径。

get_asset_children(asset_id) -> list[DataAsset]

查询资产的子版本(fork)。

get_datarights_params() -> dict

查询数据权益模块参数。


结算 (Settlement)

get_escrow(escrow_id) -> Escrow

按 ID 查询托管。

esc = client.get_escrow("esc-001")
print(esc.status)  # LOCKED, RELEASED, REFUNDED, EXPIRED

list_escrows(creator) -> list[Escrow]

列出某地址创建的所有托管。

escrows = client.list_escrows("oasyce1abc...")
locked = [e for e in escrows if e.status == "LOCKED"]

get_settlement_params() -> dict

查询结算模块参数。


信誉 (Reputation)

get_reputation(address) -> Reputation

查询地址的信誉分。

rep = client.get_reputation("oasyce1abc...")
print(f"评分: {rep.score}, 来自 {rep.total_feedback} 次反馈")

get_leaderboard() -> list[Reputation]

获取信誉排行榜。

lb = client.get_leaderboard()
for entry in lb[:5]:
    print(f"{entry.address}: {entry.score}")

get_reputation_params() -> dict

查询信誉模块参数。


工作证明 (Proof of Useful Work)

get_task(task_id) -> Task

按 ID 查询计算任务。

task = client.get_task("42")
print(task.status, task.bounty_uoas)

list_tasks(status=None) -> list[Task]

按状态过滤任务(1=已提交, 2=已分配, ..., 5=已结算)。

pending = client.list_tasks(status=1)

list_executors() -> list[Executor]

列出所有已注册的执行者。

for ex in client.list_executors():
    print(f"{ex.address}: 已完成 {ex.tasks_completed} 个任务, 活跃={ex.active}")

get_executor(address) -> Executor

查询单个执行者。

list_tasks_by_creator(creator) -> list[Task] / list_tasks_by_executor(executor) -> list[Task]

按创建者或执行者过滤任务。

get_work_params() -> dict / get_epoch_stats(epoch) -> EpochStats

查询工作模块参数和纪元统计。


注册 (Onboarding)

get_registration(address) -> Registration

查询用户的注册信息。

reg = client.get_registration("oasyce1new...")
print(f"空投: {reg.airdrop_amount} uoas, 已还: {reg.repaid_amount} uoas")

get_debt(address) -> Debt

查询未偿还的注册债务。

debt = client.get_debt("oasyce1new...")
print(f"剩余: {debt.remaining} uoas ({debt.status})")

get_onboarding_params() -> dict

查询注册模块参数(PoW 难度、空投金额等)。


银行 / 账户 / 区块 (Cosmos SDK)

get_balance(address) -> Balance

查询 uoas 余额。

bal = client.get_balance("oasyce1abc...")
print(f"{bal.amount_oas} OAS ({bal.amount_uoas} uoas)")

get_account(address) -> Account

查询账户号和序列号(签名交易时需要)。

acct = client.get_account("oasyce1abc...")
print(f"账户 #{acct.account_number}, 序列 {acct.sequence}")

get_latest_block() -> Block

查询最新区块。

block = client.get_latest_block()
print(f"高度 {block.height}, 链 {block.chain_id}")

PoW 求解器

solve_pow(address, difficulty=16) -> PowResult

纯 Python PoW 求解器,与链上 Go 验证器完全一致。

result = OasyceClient.solve_pow("oasyce1abc...", difficulty=16)
print(f"Nonce: {result.nonce}, 尝试: {result.attempts} 次")

# 然后注册
tx = client.build_self_register("oasyce1abc...", result.nonce)

交易构建器 (27 个)

所有 build_* 方法生成未签名的 Cosmos SDK 交易 JSON。签名后传给 broadcast_tx() 广播。

能力市场

方法说明
build_register_capability(sender, name, endpoint, price_uoas, ...)注册 AI 能力
build_invoke_capability(sender, capability_id, input_data)调用能力(自动托管)
build_complete_invocation(sender, invocation_id, output_hash, usage_report)提交输出(开始挑战窗口)
build_fail_invocation(sender, invocation_id)标记调用失败
build_claim_invocation(sender, invocation_id)挑战窗口后领取付款
build_dispute_invocation(sender, invocation_id, reason)挑战窗口内争议

数据权益

方法说明
build_register_asset(sender, name, content_hash, ...)注册数据资产
build_buy_shares(sender, asset_id, amount_uoas)买入股份(Bancor 曲线)
build_sell_shares(sender, asset_id, shares)卖出股份(反向曲线)
build_file_dispute(sender, asset_id, reason, evidence, remedy)提起争议
build_initiate_shutdown(sender, asset_id)发起关停(7天冷却期)
build_claim_settlement(sender, asset_id)关停后按比例领取储备金
build_create_migration(sender, source_id, target_id, rate_bps, max_shares)创建迁移路径
build_migrate(sender, source_id, target_id, shares)执行跨版本迁移

结算

方法说明
build_create_escrow(sender, amount_uoas, capability_id, asset_id)创建托管
build_release_escrow(sender, escrow_id)释放托管(90/5/2/3 分账)
build_refund_escrow(sender, escrow_id)退款托管

信誉

方法说明
build_submit_feedback(sender, invocation_id, rating, comment)提交评价(0-500)
build_report_misbehavior(sender, target, evidence_type, evidence)举报不良行为

工作证明 (PoUW)

方法说明
build_register_executor(sender, task_types, max_cu)注册执行者
build_update_executor(sender, task_types, max_cu, active)更新执行者
build_submit_task(sender, task_type, input_hash, input_uri, max_cu, bounty_uoas)提交计算任务
build_commit_result(sender, task_id, commit_hash)提交结果承诺
build_reveal_result(sender, task_id, output_hash, output_uri, cu_used, salt)揭示结果
build_dispute_result(sender, task_id, reason, bond_uoas)争议结果

注册

方法说明
build_self_register(sender, nonce)PoW 自注册
build_repay_debt(sender, amount_uoas)偿还空投债务

broadcast_tx(signed_tx) -> TxResult

广播已签名交易。

result = client.broadcast_tx(signed_tx)
if result.success:
    print(f"TX 哈希: {result.tx_hash}")
else:
    print(f"失败 (code {result.code}): {result.raw_log}")

工具方法

health() -> bool

检查节点是否可达。

if client.health():
    print("节点运行中")

oas_to_uoas(oas) -> int / uoas_to_oas(uoas) -> float

OAS 和 micro-OAS 之间转换。1 OAS = 1,000,000 uoas。

OasyceClient.oas_to_uoas(1.5)     # 1500000
OasyceClient.uoas_to_oas(2500000)  # 2.5

AHRP 适配器(v0.3.0)

SigningBridge 将 SDK 的 TX 构建器与 oasyced CLI 签名结合,实现一步到位的交易广播:

from oasyce_sdk import OasyceClient, SigningBridge

client = OasyceClient("http://localhost:1317")
bridge = SigningBridge(
    client=client,
    oasyced_path="./oasyced",
    key_name="my-agent",
    chain_id="oasyce-testnet-1",
    node="tcp://localhost:26657",
)

# 构建 + 签名 + 广播
result = bridge.create_escrow(amount_uoas=50000, asset_id="DATA_001")
print(result.tx_hash, result.success)

AhrpChainAdapterSigningBridge 适配为 Plugin Engine AHRP Executor 期望的接口,无需修改任何 AHRP 代码

from oasyce_sdk import AhrpChainAdapter

adapter = AhrpChainAdapter(bridge)
# 直接传入 AHRP Executor:
# executor = AHRPExecutor(chain_client=adapter)

完整示例见 examples/ahrp_two_agent_demo.py


错误处理

所有错误继承自 OasyceError,可以宽泛或精确地捕获:

from oasyce_sdk import OasyceClient
from oasyce_sdk.errors import NotFoundError, TimeoutError, OasyceError

client = OasyceClient()

try:
    cap = client.get_capability("cap-xyz")
except NotFoundError:
    print("能力不存在")
except TimeoutError:
    print("节点响应慢")
except OasyceError as e:
    print(f"出错了: {e}")

异常层级:

OasyceError
  +-- NotFoundError      # 链上未找到资源 (404 / gRPC NOT_FOUND)
  +-- ChainError         # 应用层链错误
  +-- HTTPError          # 非预期 HTTP 状态码
  +-- ConnectionError    # 无法连接节点
  +-- TimeoutError       # 请求超时
  +-- ValidationError    # 请求发出前的输入校验错误

为什么不直接用 requests

你当然可以直接请求 http://localhost:1317/oasyce/capability/v1/capabilities。这个 SDK 额外提供:

  • 类型化响应 —— 编辑器自动补全,不用猜 JSON key
  • 异常层级 —— 区分 NotFoundError / TimeoutError / ChainError
  • 单位转换 —— 内置 oas_to_uoas() / uoas_to_oas()
  • Protobuf 枚举映射 —— ESCROW_STATUS_LOCKED 自动变成 "LOCKED"
  • 交易构建器 —— 正确的消息结构,不需要读 proto 文件
  • 线程安全 —— 无全局状态,内部使用 requests.Session
  • 单一依赖 —— 只需 requests>=2.28,无需编译 protobuf

生态链接

  • oasyce-chain — L1 链(Go / Cosmos SDK),公测文档见 docs/PUBLIC_BETA_CN.md
  • Plugin Engine — Python CLI + Dashboard + DataVault(pip install oasyce
  • Discord

协议

Apache-2.0

Reviews

No reviews yet

Sign in to write a review