| Crates.io | diap-rs-sdk |
| lib.rs | diap-rs-sdk |
| version | 0.2.12 |
| created_at | 2025-10-11 17:27:57.371706+00 |
| updated_at | 2026-01-20 06:32:34.136225+00 |
| description | DIAP Rust SDK - 基于零知识证明的去中心化智能体身份协议,使用ZKP验证DID-CID绑定,无需IPNS |
| homepage | https://alou.fun |
| repository | https://github.com/logos-42/DIAP_Rust_SDK |
| max_upload_size | |
| id | 1878380 |
| size | 18,344,114 |
基于零知识证明的去中心化智能体身份协议 Rust SDK,支持跨平台零依赖部署。
本项目提供两个分支,针对不同的部署场景:
适用于:云服务器、完整节点部署
适用于:边缘计算、资源受限环境
注意: 当前分支为 Helia分支(轻量级版本)
[dependencies]
diap-rs-sdk = "0.2.12"
tokio = { version = "1.0", features = ["full"] }
env_logger = "0.10"
use diap_rs_sdk::{UniversalNoirManager, AgentAuthManager};
use anyhow::Result;
#[tokio::main]
async fn main() -> Result<()> {
env_logger::init();
// 1. 创建智能体
let auth_manager = AgentAuthManager::new().await?;
let (agent_info, keypair, peer_id) = auth_manager.create_agent("MyAgent", None)?;
println!("智能体创建成功: {}", agent_info.name);
println!("DID: {}", keypair.did);
println!("PeerID: {}", peer_id);
// 2. 使用Noir ZKP
let mut noir_manager = UniversalNoirManager::new().await?;
let inputs = diap_rs_sdk::noir_universal::NoirProverInputs {
expected_did_hash: "test_hash".to_string(),
public_key_hash: "pk_hash".to_string(),
nonce_hash: "nonce_hash".to_string(),
expected_output: "expected_output".to_string(),
};
// 生成证明
let proof = noir_manager.generate_proof(&inputs).await?;
println!("证明生成成功: {} bytes", proof.proof.len());
// 验证证明
let result = noir_manager.verify_proof(&proof.proof, &proof.public_inputs).await?;
println!("验证结果: {}", if result.is_valid { "通过" } else { "失败" });
Ok(())
}
# 跨平台兼容性演示
cargo run --example cross_platform_demo
# 智能体认证演示
cargo run --example complete_auth_demo
# IPFS双向验证演示
cargo run --example ipfs_bidirectional_verification_demo
SDK 现在支持在发布 DID 文档时自动发布到 IPNS(InterPlanetary Name System),实现全球可访问的可变指针。
use diap_rs_sdk::{IdentityManager, AgentInfo, ServiceInfo, KeyPair, IpfsClient};
use anyhow::Result;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建 IPFS 客户端
let ipfs_client = IpfsClient::new_with_remote_node(
"http://127.0.0.1:5001".to_string(),
"http://127.0.0.1:8080".to_string(),
30
);
let manager = IdentityManager::new(ipfs_client);
let agent_info = AgentInfo {
name: "MyAgent".to_string(),
services: vec![ServiceInfo {
service_type: "API".to_string(),
endpoint: serde_json::json!("https://api.example.com"),
}],
description: None,
tags: None,
};
let keypair = KeyPair::generate()?;
let node_id = "12D3KooWExampleNodeIdForTesting";
// 注册身份并自动发布到 IPNS
let registration = manager
.register_identity_with_ipns(
&agent_info,
&keypair,
node_id,
Some("my_agent_did"), // IPNS key 名称
false, // 使用快速发布模式
Some("8760h"), // lifetime: 1年
Some("1h"), // TTL: 1小时
)
.await?;
println!("DID: {}", registration.did);
println!("CID: {}", registration.cid);
if let Some(ref ipns_name) = registration.ipns_name {
println!("IPNS: /ipns/{}", ipns_name);
println!("全球访问: https://ipfs.io/ipns/{}", ipns_name);
}
Ok(())
}
use_direct_publish=false): 使用 allow-offline=true,立即返回,异步传播到DHTuse_direct_publish=true): 使用 allow-offline=false,要求节点在线,立即尝试传播到DHT更多详情请参考 自动IPNS发布指南
适用于:云服务器、完整节点部署
~/.diap/ipfs,重启不丢失0.2.11
publish_ipns_direct() 方法,支持直接发布到DHT (allow-offline=false)create_and_publish_with_ipns() 方法,自动发布DID到IPNSregister_identity_with_ipns() 方法,注册时自动发布到IPNSDIDPublishResult 和 IdentityRegistration,添加IPNS字段0.2.10
0.2.11,补充示例MIT License