Quería crear un sitio web y subirlo a IPFS para que los usuarios subieran datos (como su foto, nombre, etc.).
Pero, ¿cómo puedo capturar exactamente todos los detalles cargados por el usuario, obtener el IPFS Hash producido y luego colocar el hash en mi contrato de solidez para almacenar el hash en la cadena de bloques de ethereum?
Cualquier enlace o comentario será muy apreciado. Lo siento si la pregunta es un poco tonta.
En cuanto a la información del usuario, puede ser muy conveniente almacenarla en formato JSON. Tengo un ejemplo de cómo interactuar con el objeto JSON en ipfs, cómo obtener hash, almacenarlo y luego recuperarlo del contrato inteligente:
MiContrato.sol
pragma solidity ^0.4.18;
contract MyContract {
string public ipfsHash;
function setHash(string _ipfsHash) external {
ipfsHash = _ipfsHash;
}
}
prueba.js
const ipfs = require("nano-ipfs-store").at("https://ipfs.infura.io:5001");
const MyContract = artifacts.require("MyContract")
async function test() {
const data = JSON.stringify({
name: "JSON Statehem",
link0: "stackexchange.com",
link1: "github.com",
link2: "myfacebook.com"
})
const ipfsHash = await ipfs.add(data)
const instance = await MyContract.deployed()
await instance.setHash.sendTransaction(ipfsHash)
let returnedHash = await instance.ipfsHash.call()
console.log(ipfsHash)
console.log(returnedHash)
console.log(JSON.parse(await ipfs.cat(returnedHash)))
}
test()
Puede almacenar el tipo de hash ipfs en Solidity bytes
, pero prefiero almacenarlo string
porque no tendré que hacer ninguna conversión mientras recupero el valor de bytes
.
¿Qué pasa con las imágenes? Deberá crear un búfer de la imagen y luego simplemente subirla a ipfs usando .add
. Devolverá hash que puede almacenar como en el ejemplo anterior.
$("#input").val()
.ipfsHash
desde el contrato (llamada gratuita, porque no estamos cambiando el estado) y cuando obtenga hash recupere datos de ipfs con ipfs.cat()
. Después de eso, simplemente acceda a los datos como un json normal y envíelos donde quiera en su sitio web.const ipfs = require("nano-ipfs-store").at("https://ipfs.infura.io:5001");
¿cómo vincula exactamente el archivo a ipfs?ipfs.add(data)
.
soham lawar