Solidity
你如何有效地將圖像儲存在乙太坊區塊鏈中?
我認為將“整個圖像”儲存在區塊鏈上是沒有意義的。我認為儲存對該圖像的引用會更好,但這意味著實際的圖像文件仍將位於“集中儲存”中,例如 s3。
在區塊鏈中儲存圖像的不同方式有哪些?目前有效儲存它們的“已知方法”是什麼?
我見過像 Filecoin、Storj、Tiesdb 等項目,但仍然不確定什麼是理想的解決方案。我想建立一個基於區塊鏈的相冊。
你是對的。將整個圖像保存在 eth 中是非常昂貴的。我建議你檢查像 IPFS 或 Swarm 這樣的鍊式數據儲存(乙太坊社區通常推薦它)。
有可用的替代 API。提到的是兩種流行的服務,大多數開發人員都在使用。兩者都是分佈式儲存。
我建議您檢查以下連結一次。
來回答你的問題。這是一個如何在乙太坊智能合約中儲存對儲存在 IPFS 中的圖像的引用的範例。
contract ImageInfo{ mapping(address=>Image[]) private images; struct Image{ string imageHash; string ipfsInfo; } function uploadImage(string hash, string ipfs) public{ images[msg.sender].push(Image(hash,ipfs)); // } }
上面的程式碼僅用於說明。根據您的要求修改資料結構。我沒有添加任何安全檢查。
這個想法是首先將圖像上傳到 ipfs/swarm/任何其他鏈下數據儲存,獲取圖像的值計算雜湊以進行契約。從鏈下下載數據(圖像)併計算雜湊值並檢查保存在合約中的雜湊值。
我覺得上述解決方案是處理圖像的最佳方式之一,因為所有數據都是使用無伺服器架構分佈的。