IPFS 版本控制 - 如何從 IPFS 密鑰中獲取所有文件?
基於下面的程式碼,我可以添加一個文件**(
dataobj.txt --QmUUHKjR5ZdrrYmxpXyPrYP3eMyhv9FnRKo1Duv9stzmmw
)**並發布一個文件,然後分配給鍵“myIPFSKey”。Step 1: ipfs add -r ipfs/dataobj.txt Step 2: ipfs name publish QmUUHKjR5ZdrrYmxpXyPrYP3eMyhv9FnRKo1Duv9stzmmw Result: Published to QmVHUPh6TJKZpXjQ4gL2rZU5YYi7Eb3cUsh4xvSfMrZfhU: /ipfs/QmUUHKjR5ZdrrYmxpXyPrYP3eMyhv9FnRKo1Duv9stzmmw Step 3: ipfs name publish --key=myIPFSKey QmVHUPh6TJKZpXjQ4gL2rZU5YYi7Eb3cUsh4xvSfMrZfhU http://localhost:8080/ipns/QmVHUPh6TJKZpXjQ4gL2rZU5YYi7Eb3cUsh4xvSfMrZfhU
現在我想更新文件(dataobj.txt)上的一些文本並再次上傳到 IPFS。它返回了新的 IPFS 雜湊**(
QmfKtQh2apaM9eQM3ohwgfrr3zfSSXd1wsQhMJtvXTurUg
)**。所以我再次將新雜湊發佈到 IPFS 密鑰“myIPFSKey”。到目前為止一切順利。在這裡,我想獲取發佈到特定密鑰(myIPFSKey)的所有文件的列表,例如版本控制。有可能實現嗎?
Command: ipfs key list myIPFSKey Expected O/P: QmUUHKjR5ZdrrYmxpXyPrYP3eMyhv9FnRKo1Duv9stzmmw dataObj.txt QmfKtQh2apaM9eQM3ohwgfrr3zfSSXd1wsQhMJtvXTurUg dataObj.txt
在這裡,我試圖從 IPFS 密鑰(myIPFSKey)獲取文件的兩個版本
問候瑪尼
我認為您不能使用 IPNS 儲存多個 CID(雜湊),但是您可以使用IPLD(IPFS 連結數據)生成一個 JSON 包,該包將引用每個版本,並且只有包的 CID 將儲存在IPNS。
我們舉個例子:
一世。創建一個
myfile.txt
包含文件first version
並將其儲存在 IPFS 上$ echo "first version" > myfile.txt $ ipfs add myfile.txt added QmUCr8K6pNZib5TZ2KAPupdjCqEjpgrm94DJ4UtEQQsuqz myfile.txt
ii. 生成將此文件引用為版本 1 的 IPFS 包
基本上,IPLD 允許您在 IPFS 上儲存 JSON 對象,其中葉子可以包含數據或連結。
$ echo '{"version1": {"content": {"/": "QmUCr8K6pNZib5TZ2KAPupdjCqEjpgrm94DJ4UtEQQsuqz"}, "author": "greg"}}' | ipfs dag put zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU
然後我們可以像這樣探索 IPLD 捆綁包
o 獲取整個捆綁包
$ ipfs dag get zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU {"version1":{"author":"greg","content":{"/":"QmUCr8K6pNZib5TZ2KAPupdjCqEjpgrm94DJ4UtEQQsuqz"}}}
o 獲取對象內的特定數據
$ ipfs dag get zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU/version1/author "greg"
o 通過連結獲取特定內容
$ ipfs cat zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU/version1/content first version
iii. 將 IPLD 雜湊儲存在 IPNS 上
該 IPLD CID 與 IPFS 上的任何其他對像一樣具有內容可定址雜湊
zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU
,並且可以儲存在 IPNS 上o 生成密鑰
key
$ ipfs key gen --type=rsa --size=2048 key QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a
o 以該名稱發布 IPLD CID
$ ipfs name publish --key=key zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU Published to QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a: /ipfs/zdpuAqidKVQqA36feYLTLyWV9s4eajMtSmVFJxWpa65o5VFPU
o 然後您可以解析名稱並訪問版本
$ ipfs dag get $(ipfs name resolve QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a)/version1/author "greg" $ ipfs cat $(ipfs name resolve QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a)/version1/content first version
iv. 現在讓我們創建第二個版本並將其上傳到 IPFS
$ echo "second version" > myfile.txt $ ipfs add myfile.txt added QmNs9wW2s3fVR3aRJS62Ak8honGdB6PEDjF15FnTWnFeu8 myfile.txt
v. 我們可以用第二個版本重新創建一個新包
$ echo '{"version1":{"author":"greg","content":{"/":"QmUCr8K6pNZib5TZ2KAPupdjCqEjpgrm94DJ4UtEQQsuqz"}}, "version2":{"author":"mani2020","content":{"/":"QmNs9wW2s3fVR3aRJS62Ak8honGdB6PEDjF15FnTWnFeu8"}}}' | ipfs dag put zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj
並訪問數據和連結
$ ipfs dag get zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj/version1/author "greg" $ ipfs cat zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj/version1/content first version $ ipfs dag get zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj/version2/author "mani2020" $ ipfs cat zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj/version2/content second version
六。最後我們只需要重新發布第二個包的新雜湊
$ ipfs name publish --key=key zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj Published to QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a: /ipfs/zdpuAvKvo6QuvQnwtwYhQrsG82iwgGH4bxZpvKY4hrPuKWxaj $ ipfs dag get $(ipfs name resolve QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a)/version1/author "greg" $ ipfs cat $(ipfs name resolve QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a)/version1/content first version $ ipfs dag get $(ipfs name resolve QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a)/version2/author "mani2020" $ ipfs cat $(ipfs name resolve QmPU6xFfHykL7HBNbckzB9pCCeVFUx2HD4KxvkQmcYAV6a)/version2/content second version
等等等等 !
筆記:
- 固定:如果您固定 IPLD 捆綁包,所有連結的數據都將固定。