![](/img/trans.png)
[英]How to check that an ipfs hash is an image/video/.. in React Js?
[英]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.