怎么将文件的hash值存入到区块链中?
要将文件的哈希值存入区块链中,你需要首先创建一个智能合约来存储哈希值。以下是一个简单的Solidity智能合约示例,用于存储文件哈希值:
复制代码pragma solidity ^0.8.0;
contract FileHashStorage { struct File { string hash; uint256 timestamp; }
mapping(string => File) private files;
function storeFileHash(string memory fileName, string memory fileHash) public {
require(bytes(fileHash).length == 40, 'Invalid hash length');
files[fileName] = File(fileHash, block.timestamp);
}
function getFileHash(string memory fileName) public view returns (string memory) {
return files[fileName].hash;
}
function getFileTimestamp(string memory fileName) public view returns (uint256) {
return files[fileName].timestamp;
}
}
接下来,你需要编译并部署这个智能合约到以太坊网络(例如Ropsten测试网或主网)。你可以使用Truffle、Hardhat等工具来完成这个过程。
部署完成后,你可以在前端应用中使用Web3.js库与智能合约进行交互。以下是一个使用Web3.js将文件哈希值存入区块链的示例:
javascript复制代码const Web3 = require('web3');const fs = require('fs');const path = require('path');const solc = require('solc');
// 连接到以太坊节点const web3 = new Web3('https://ropsten.infura.io/v3/YOUR_INFURA_API_KEY');
// 加载已编译的智能合约const compiledContract = JSON.parse(fs.readFileSync('build/contracts/FileHashStorage.json', 'utf8'));const contractABI = compiledContract.abi;const contractAddress = 'YOUR_CONTRACT_ADDRESS';
// 创建智能合约实例const fileHashStorage = new web3.eth.Contract(contractABI, contractAddress);
// 计算文件哈希值const filePath = path.join(__dirname, 'example.txt');const fileHash = web3.utils.sha3(fs.readFileSync(filePath)).toString();
// 将文件哈希值存入区块链const fileName = 'example.txt';fileHashStorage.methods.storeFileHash(fileName, fileHash).send({ from: 'YOUR_ETHEREUM_ADDRESS' }) .on('receipt', (receipt) => { console.log('File hash stored successfully:', receipt); }) .on('error', (error) => { console.error('Error storing file hash:', error); });
注意:确保你已经安装了Web3.js库,并且已经配置了正确的以太坊节点URL和账户地址。同时,替换YOUR_INFURA_API_KEY和YOUR_CONTRACT_ADDRESS为你自己的Infura API密钥和智能合约地址。
赞0
踩0