DIAP (Decentralized Intelligent Agent Protocol) - ๅบไบ้ถ็ฅ่ฏ่ฏๆ็ๅปไธญๅฟๅๆบ่ฝไฝ่บซไปฝๅ่ฎฎ Rust SDK
๐ v0.2.1 - ZKPไผๅ็: ไฝฟ็จ้ถ็ฅ่ฏ่ฏๆ้ช่ฏDID-CID็ปๅฎ๏ผ็งป้คIPNSไพ่ต๏ผๅคงๅน ็ฎๅๆถๆ
| ็นๆง | ไผ ็ปๆนๆก๏ผv0.1.x๏ผ | ZKPๆนๆก๏ผv0.2.0+๏ผ |
|---|---|---|
| ่บซไปฝๆ ผๅผ | did:ipfs:<ipns_name> |
did:key:<public_key> |
| ๅญๅจไพ่ต | IPFS + IPNSๅๅฑ | ไป IPFSๅๅฑ |
| ้ช่ฏๆนๅผ | IPNS่ฎฐๅฝ่งฃๆ | ZKPๅฏ็ ๅญฆ่ฏๆ |
| ไธไผ ๆฌกๆฐ | 2ๆฌก๏ผๅๅฑ้ช่ฏ๏ผ | 1ๆฌก๏ผๅๆฌกไธไผ ๏ผ |
| PeerIDไฟๆค | ๆๆๅญๅจ | ็ง้ฅๅ ๅฏๅญๅจ |
| ๅปไธญๅฟๅ็จๅบฆ | ไพ่ตIPNS็ฝ็ป | ๅฎๅ จๅปไธญๅฟๅ |
| ๅฟๅๆง | ้จๅๅฟๅ | ๅผบๅฟๅๆง |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็ณป็ปๅๅงๅ๏ผ้ๆๅ ่ฝฝ๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. ็ๆDIDๅฏ้ฅๅฏน (skโ, pkโ) โ
โ did:key:z6Mk... โ ไปpkโๆดพ็ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. ็ๆlibp2p PeerID โ
โ 12D3Koo... โ ไปlibp2pๅฏ้ฅๆดพ็ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. ๅ ๅฏPeerID โ
โ encrypted_peer_id โ E_skโ(PeerID) โ
โ ไฝฟ็จAES-256-GCMๅ ๅฏ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. ๆๅปบDIDๆๆกฃ โ
โ ๅ
ๅซ: pkโ, encrypted_peer_id โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. ไธไผ ๅฐIPFS๏ผไธๆฌกๆง๏ผ โ
โ CIDโ โ IPFS.add(DIDๆๆกฃ) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
ไฟกไปปๆ น็กฎ็ซ๏ผ โ
โ DID โโ CID ้่ฟZKP็ปๅฎ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅฟๅ่ฎค่ฏๆต็จ๏ผๅจๆๅ ่ฝฝ๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆท๏ผ็ๆไธดๆถPeerID_temp โ
โ ๏ผ้่็ๅฎ่บซไปฝ๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆท โ IPN๏ผ่ฏทๆฑ่ฎฟ้ฎ่ตๆบ โ
โ ๅ้: CIDโ, PeerID_temp โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IPN โ ็จๆท๏ผ่ฟๅๆๆ nonce โ
โ nonce = Hash(IPN_PeerID, temp_PeerID) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆท๏ผ็ๆZKP่ฏๆ โ
โ ฯ โ Prove(skโ, DIDๆๆกฃ, nonce, CIDโ) โ
โ ่ฏๆ้ป่พ๏ผ โ
โ โ H(DIDๆๆกฃ) == CIDโ โ
โ โ skโๆดพ็ๅบpkโ โ
โ โ pkโๅจDIDๆๆกฃไธญ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆท โ IPN๏ผๆไบค่ฏๆ โ
โ ๅ้: ฯ, CIDโ, nonce โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IPN๏ผ้ช่ฏZKP่ฏๆ โ
โ 1. ไปIPFS่ทๅCIDโๅฏนๅบ็DIDๆๆกฃ โ
โ 2. ้ช่ฏฯ็ๆๆๆง โ
โ 3. ้ช่ฏnonce้ฒ้ๆพ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
IPN๏ผๆๆ่ฎฟ้ฎ โ
โ ็จๆท่บซไปฝๅทฒ้ช่ฏ๏ผๅ
่ฎธ่ฎฟ้ฎ่ตๆบ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- ไธปDID๏ผๅ ฌๅผๅฏๆฅ๏ผ็จไบๅฎก่ฎกๅไฟกไปปๅปบ็ซ
- ไธดๆถPeerID๏ผๆฏๆฌกไผ่ฏไฝฟ็จไธๆฌกๆงPeerID๏ผ็ฝ็ปๅฑ่กไธบไธๅฏๅ ณ่
- ๅ ๅฏPeerID๏ผ็ๅฎPeerIDไฝฟ็จDID็ง้ฅๅ ๅฏ๏ผๅชๆๆๆ่ ่ฝ่งฃๅฏ
- ๆฏๆฌก่ฎค่ฏไฝฟ็จๆฐ็nonce
- nonce็ปๅฎๅๆนPeerID
- ZKP่ฏๆๅ ๅซnonce้ช่ฏ
- Ed25519๏ผDID่บซไปฝ็ญพๅ
- AES-256-GCM๏ผPeerIDๅ ๅฏ
- ๆฏๆๅฏ้ฅ่ฝฎๆขๅๆขๅค
- ่ฏๆๅคงๅฐ๏ผ็บฆ192ๅญ่
- ้ช่ฏ้ๅบฆ๏ผ3-5ms
- ็บฆๆๆฐ้๏ผ็บฆ4000๏ผไผๅๅ๏ผ
- ๆททๅๆถๆ๏ผEd25519็ญพๅๅจ็ต่ทฏๅค้ช่ฏ
- DIDๆๆกฃไธๅ ๅซ่ชๅทฑ็CID๏ผ้ฟๅ ๅพช็ฏไพ่ต๏ผ
- ้่ฟZKP็ต่ทฏ้ช่ฏ
H(DIDๆๆกฃ) == CID็ๅคๅๅธ้จๅ - ๆธ ๆฐๅ็ฆป่บซไปฝไฟกๆฏๅๆๆ้ป่พ
[dependencies]
diap-rs-sdk = "0.2.1"
tokio = { version = "1.0", features = ["full"] }
env_logger = "0.10"use diap_rs_sdk::*;
use libp2p::identity::Keypair as LibP2PKeypair;
use libp2p::PeerId;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
env_logger::init();
// 1. ๅๅงๅ
let ipfs_client = IpfsClient::new(
Some("http://localhost:5001".to_string()),
Some("http://localhost:8080".to_string()),
None, None, 30,
);
// ๅ ่ฝฝZKP keys๏ผ้ๅ
่ฟ่ก zkp_setup_keys ็ๆ๏ผ
let identity_manager = IdentityManager::new_with_keys(
ipfs_client,
"zkp_proving.key",
"zkp_verifying.key",
)?;
// 2. ็ๆๅฏ้ฅ
let keypair = KeyPair::generate()?;
let libp2p_keypair = LibP2PKeypair::generate_ed25519();
let peer_id = PeerId::from(libp2p_keypair.public());
println!("DID: {}", keypair.did);
println!("PeerID: {}", peer_id);
// 3. ๆณจๅ่บซไปฝ
let agent_info = AgentInfo {
name: "ๆ็ๆบ่ฝไฝ".to_string(),
services: vec![
ServiceInfo {
service_type: "API".to_string(),
endpoint: serde_json::json!("https://api.example.com"),
},
],
description: None,
tags: None,
};
let registration = identity_manager
.register_identity(&agent_info, &keypair, &peer_id)
.await?;
println!("โ
ๆณจๅๆๅ๏ผ");
println!(" CID: {}", registration.cid);
// 4. ็ๆZKP่ฏๆ
let nonce = b"challenge_from_resource_node";
let proof = identity_manager.generate_binding_proof(
&keypair,
®istration.did_document,
®istration.cid,
nonce,
)?;
println!("โ
ZKP่ฏๆ็ๆ");
// 5. ้ช่ฏ่บซไปฝ
let verification = identity_manager.verify_identity_with_zkp(
®istration.cid,
&proof.proof,
nonce,
).await?;
println!("โ
้ช่ฏ็ปๆ: {}", verification.zkp_verified);
Ok(())
}# 1. ้ฆๅ
็ๆZKPๅฏไฟก่ฎพ็ฝฎ๏ผproving keyๅverifying key๏ผ
cargo run --example zkp_setup_keys
# 2. ็กฎไฟIPFS่็น่ฟ่กๅจ localhost:5001
ipfs daemon
# 3. ่ฟ่กZKP่บซไปฝๆผ็คบ
cargo run --example zkp_identity_demo- Ed25519ๅฏ้ฅๅฏน็ๆ
- ๅฏ้ฅๅคไปฝๅๆขๅค
- DIDๆดพ็๏ผdid:keyๆ ผๅผ๏ผ
- ๆๅปบ็ฌฆๅW3C DIDๆ ๅ็ๆๆกฃ
- ๆทปๅ ๅ ๅฏPeerIDๆๅก็ซฏ็น
- ๅๆฌกไธไผ ๅฐIPFS
- AES-256-GCMๅ ๅฏ
- ไปEd25519็ง้ฅๆดพ็ๅ ๅฏๅฏ้ฅ
- ๅฎๅ จ่งฃๅฏ้ช่ฏ
- DID-CID็ปๅฎ่ฏๆ็ต่ทฏ
- Blake2sๅๅธ้ช่ฏ๏ผ็บฆ2500็บฆๆ๏ผ
- ๅฏ้ฅๆดพ็้ช่ฏ๏ผ็บฆ1000็บฆๆ๏ผ
- Groth16่ฏๆ็ๆ
- ่ฏๆ้ช่ฏ
- ๅฏไฟก่ฎพ็ฝฎ็ฎก็
- ็ปไธ็ๆณจๅใ้ช่ฏๆฅๅฃ
- ZKP่ฏๆ็ๆๅ้ช่ฏ
- PeerIDๅ ่งฃๅฏ
| ๆไฝ | ๆถ้ด | ๆฐๆฎๅคงๅฐ |
|---|---|---|
| ๅฏ้ฅ็ๆ | <1ms | 32ๅญ่ |
| PeerIDๅ ๅฏ | <1ms | ~50ๅญ่ |
| DIDๆๆกฃๆๅปบ | <1ms | ~2KB |
| IPFSไธไผ | 50-200ms | ๅๅณไบ็ฝ็ป |
| ZKP่ฏๆ็ๆ | 10-20ms | 192ๅญ่ |
| ZKP่ฏๆ้ช่ฏ | 3-5ms | - |
ๆปๅปถ่ฟ๏ผ็บฆ100ms๏ผไธป่ฆๆฏ็ฝ็ปIO๏ผ
-
ๅฏ็ ๅญฆ๏ผ
- Ed25519๏ผ็ญพๅ๏ผ
- AES-256-GCM๏ผๅฏน็งฐๅ ๅฏ๏ผ
- Blake2s๏ผๅๅธ๏ผ
-
ZKP๏ผ
- arkworks-rs๏ผZKPๆกๆถ๏ผ
- Groth16๏ผ่ฏๆ็ณป็ป๏ผ
- BN254ๆฒ็บฟ
-
ๅญๅจ๏ผ
- IPFS๏ผๅปไธญๅฟๅๅญๅจ๏ผ
- CID๏ผๅ ๅฎนๅฏปๅ๏ผ
-
็ฝ็ป๏ผ
- libp2p๏ผP2P้ไฟก๏ผ
- PeerID๏ผ่็น่บซไปฝ๏ผ
- ็งป้คIPNSไพ่ต
- ๅฎ็ฐPeerIDๅ ๅฏ
- ๅฎ็ฐZKP็ต่ทฏ
- ๅฎ็ฐ่ฏๆ็ๆ/้ช่ฏ
- ็ฎๅDIDๆๆกฃ็ปๆ
ๆฌข่ฟ่ดก็ฎ๏ผ่ฏทๆฅ็ GitHub Issues
MIT License - ๆฅ็ LICENSE ๆไปถ
็ๆฌ: 0.2.1
ๅๅธๆฅๆ: 2025-10-12
็ถๆ: Beta - ZKPๆ ธๅฟๅ่ฝๅฎๆด๏ผ้ๅๅผๅไฝฟ็จ