Go-Ethereum

IPFS 版本控制 - 如何從 IPFS 密鑰中獲取所有文件?

  • November 27, 2018

基於下面的程式碼,我可以添加一個文件**(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 捆綁包,所有連結的數據都將固定。

引用自:https://ethereum.stackexchange.com/questions/63109