Skip to content

logos-42/DIAP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1 Commit
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

DIAP Rust SDK - ZKP็‰ˆๆœฌ

Crates.io Documentation License: MIT

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๏ผšๆŽˆๆƒ่ฎฟ้—ฎ                          โ”‚
    โ”‚    ็”จๆˆท่บซไปฝๅทฒ้ชŒ่ฏ๏ผŒๅ…่ฎธ่ฎฟ้—ฎ่ต„ๆบ            โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ” ๅฎ‰ๅ…จ่ฎพ่ฎก

1. ้š็งๆจกๅž‹๏ผšๅผฑๅŒฟๅๆ€ง

  • ไธปDID๏ผšๅ…ฌๅผ€ๅฏๆŸฅ๏ผŒ็”จไบŽๅฎก่ฎกๅ’Œไฟกไปปๅปบ็ซ‹
  • ไธดๆ—ถPeerID๏ผšๆฏๆฌกไผš่ฏไฝฟ็”จไธ€ๆฌกๆ€งPeerID๏ผŒ็ฝ‘็ปœๅฑ‚่กŒไธบไธๅฏๅ…ณ่”
  • ๅŠ ๅฏ†PeerID๏ผš็œŸๅฎžPeerIDไฝฟ็”จDID็ง้’ฅๅŠ ๅฏ†๏ผŒๅชๆœ‰ๆŒๆœ‰่€…่ƒฝ่งฃๅฏ†

2. ้˜ฒ้‡ๆ”พๆ”ปๅ‡ป๏ผšๆŒ‘ๆˆ˜-ๅ“ๅบ”

  • ๆฏๆฌก่ฎค่ฏไฝฟ็”จๆ–ฐ็š„nonce
  • nonce็ป‘ๅฎšๅŒๆ–นPeerID
  • ZKP่ฏๆ˜ŽๅŒ…ๅซnonce้ชŒ่ฏ

3. ๅฏ†้’ฅ็ฎก็†

  • Ed25519๏ผšDID่บซไปฝ็ญพๅ
  • AES-256-GCM๏ผšPeerIDๅŠ ๅฏ†
  • ๆ”ฏๆŒๅฏ†้’ฅ่ฝฎๆขๅ’Œๆขๅค

4. ZKP็ณป็ปŸ๏ผšGroth16

  • ่ฏๆ˜Žๅคงๅฐ๏ผš็บฆ192ๅญ—่Š‚
  • ้ชŒ่ฏ้€Ÿๅบฆ๏ผš3-5ms
  • ็บฆๆŸๆ•ฐ้‡๏ผš็บฆ4000๏ผˆไผ˜ๅŒ–ๅŽ๏ผ‰
  • ๆททๅˆๆžถๆž„๏ผšEd25519็ญพๅๅœจ็”ต่ทฏๅค–้ชŒ่ฏ

5. CID็ป‘ๅฎš๏ผš้€ป่พ‘็ป‘ๅฎš

  • 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,
        &registration.did_document,
        &registration.cid,
        nonce,
    )?;
    
    println!("โœ… ZKP่ฏๆ˜Ž็”Ÿๆˆ");
    
    // 5. ้ชŒ่ฏ่บซไปฝ
    let verification = identity_manager.verify_identity_with_zkp(
        &registration.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

๐Ÿ“ฆ ๆ ธๅฟƒๆจกๅ—

1. ๅฏ†้’ฅ็ฎก็† (key_manager)

  • Ed25519ๅฏ†้’ฅๅฏน็”Ÿๆˆ
  • ๅฏ†้’ฅๅค‡ไปฝๅ’Œๆขๅค
  • DIDๆดพ็”Ÿ๏ผˆdid:keyๆ ผๅผ๏ผ‰

2. DIDๆž„ๅปบๅ™จ (did_builder)

  • ๆž„ๅปบ็ฌฆๅˆW3C DIDๆ ‡ๅ‡†็š„ๆ–‡ๆกฃ
  • ๆทปๅŠ ๅŠ ๅฏ†PeerIDๆœๅŠก็ซฏ็‚น
  • ๅ•ๆฌกไธŠไผ ๅˆฐIPFS

3. ๅŠ ๅฏ†PeerID (encrypted_peer_id)

  • AES-256-GCMๅŠ ๅฏ†
  • ไปŽEd25519็ง้’ฅๆดพ็”ŸๅŠ ๅฏ†ๅฏ†้’ฅ
  • ๅฎ‰ๅ…จ่งฃๅฏ†้ชŒ่ฏ

4. ZKP็”ต่ทฏ (zkp_circuit)

  • DID-CID็ป‘ๅฎš่ฏๆ˜Ž็”ต่ทฏ
  • Blake2sๅ“ˆๅธŒ้ชŒ่ฏ๏ผˆ็บฆ2500็บฆๆŸ๏ผ‰
  • ๅฏ†้’ฅๆดพ็”Ÿ้ชŒ่ฏ๏ผˆ็บฆ1000็บฆๆŸ๏ผ‰

5. ZKP่ฏๆ˜Žๅ™จ (zkp_prover)

  • Groth16่ฏๆ˜Ž็”Ÿๆˆ
  • ่ฏๆ˜Ž้ชŒ่ฏ
  • ๅฏไฟก่ฎพ็ฝฎ็ฎก็†

6. ่บซไปฝ็ฎก็†ๅ™จ (identity_manager)

  • ็ปŸไธ€็š„ๆณจๅ†Œใ€้ชŒ่ฏๆŽฅๅฃ
  • 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๏ผˆ่Š‚็‚น่บซไปฝ๏ผ‰

๐Ÿ›ฃ๏ธ ่ทฏ็บฟๅ›พ

โœ… v0.2.1 - ZKPไผ˜ๅŒ–๏ผˆๅฝ“ๅ‰็‰ˆๆœฌ๏ผ‰

  • ็งป้™คIPNSไพ่ต–
  • ๅฎž็ŽฐPeerIDๅŠ ๅฏ†
  • ๅฎž็ŽฐZKP็”ต่ทฏ
  • ๅฎž็Žฐ่ฏๆ˜Ž็”Ÿๆˆ/้ชŒ่ฏ
  • ็ฎ€ๅŒ–DIDๆ–‡ๆกฃ็ป“ๆž„

๐Ÿค ่ดก็Œฎ

ๆฌข่ฟŽ่ดก็Œฎ๏ผ่ฏทๆŸฅ็œ‹ GitHub Issues

๐Ÿ“„ ่ฎธๅฏ่ฏ

MIT License - ๆŸฅ็œ‹ LICENSE ๆ–‡ไปถ

๐Ÿ”— ็›ธๅ…ณ้“พๆŽฅ


็‰ˆๆœฌ: 0.2.1
ๅ‘ๅธƒๆ—ฅๆœŸ: 2025-10-12
็Šถๆ€: Beta - ZKPๆ ธๅฟƒๅŠŸ่ƒฝๅฎŒๆ•ด๏ผŒ้€‚ๅˆๅผ€ๅ‘ไฝฟ็”จ

About

Decentralized Intelligent Agent Protocol

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published