簡體   English   中英

將 hash 存儲在區塊鏈上(存儲在 ipfs 上的圖像哈希)

[英]Storing hash on blockchain (hash of image stored on ipfs)

我正在創建一個 dapp,使用 react 將圖像存儲在 ipfs 上,並在區塊鏈上存儲相應的 hash。 在區塊鏈上存儲 hash 的目的是時間戳、所有權證明等,我希望在稍后階段也檢索 hash。 我需要知道我們如何在區塊鏈上存儲和檢索 hash。

如果您選擇以太坊區塊鏈,最簡單的方法是創建智能合約,下面給出最簡單的示例。

通過調用Put方法,您可以保存與標識符關聯的數據。 Get方法允許您按標識符檢索數據而無需任何費用。

pragma solidity >=0.5.8 <0.6.0;

contract Storage
{
    address    Owner ;

    mapping (string => string)  Collection ;

//
   constructor() public
   {
              Owner     = tx.origin ;
   }
// 
   function Put(string memory  id_, string memory data_) public
   {
       if(msg.sender!=Owner)  return ;

      Collection[id_]=data_ ;
   }
//
    function Get(string memory  id_) public view returns (string memory retVal)
    {
       return(Collection[id_]) ;
    }

}

如果您只需要存儲和檢索圖像的 IPFS hash,您可以簡單地使用 Solidity 的 事件 它可能有點復雜,但部署和使用合約要便宜得多

這是一個基本的方法:

event Store(string indexed id, string ipfsHash);  //declare event

function setEvent(string memory _id, string memory _ipfsHash)public{
    emit Store(_id, _ipfsHash);
}

當您在智能合約中emit event時,傳遞給它的參數將存儲在交易日志中,這是區塊鏈的一種特殊數據結構。

請注意,在智能合約中無法訪問日志及其事件數據。 但是,您可以在應用程序中使用諸如web3.js 之類的庫來檢索它們。 id參數之前使用indexed關鍵字可以讓您有效地搜索包含所需值的特定日志。 如果沒有它,您將不得不檢索特定事件產生的所有日志並手動搜索它們。

有幾種方法可以檢索過去的日志,但我將使用getPastEvents粘貼一個示例:

var contract = new web3.eth.Contract(ABI_of_contract, address_of_contract);

contract.getPastEvents('Store', {
      filter : { id : '...id corresponding to the ipfsHash'},
      fromBlock : 0,
      toBlock: 'latest'},
      function(error, result){

          console.log(result) 

     });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM