Seleziona un annuncio e pubblicalo su IPFS, poi scrivi hash/CID on-chain.
Inizia dal primo blocco. Ogni sezione ti spiega cosa fare prima dei relativi campi o pulsanti.
1
Prima scegli l’annuncio da pubblicare
Se hai appena creato un annuncio, questa schermata lo seleziona automaticamente. Altrimenti chiudi questa finestra e premi IPFS/Chain sulla card dell’annuncio.
In attesa di un annuncio selezionato.
2
Ora prepara IPFS
Lascia http://127.0.0.1:5001 se usi IPFS/Kubo sul tuo PC. Quando Chrome chiede l’accesso ai servizi locali, premi Consenti.
Controlla che IPFS/Kubo sia avviato.
3
Adesso carica il contenuto pubblico su IPFS
Premi Carica su IPFS. Il sito carica le foto pubbliche, crea il JSON dell’annuncio, genera il CID e calcola l’hash SHA-256.
CID non ancora generato.
CID non ancora generato. Premi prima Carica su IPFS. Quando funziona comparirà una stringa lunga che inizia con bafy....
4
Collega il wallet e controlla la rete
Premi Collega wallet. Se usi Sepolia, il Chain ID deve restare 11155111. Se il wallet è su un’altra rete, usa Cambia rete.
Wallet non collegato.
5
Inserisci l’indirizzo del contratto
Devi deployare il contratto Solidity su Remix e incollare qui l’indirizzo reale. Non lasciare 0x....
Contratto non ancora valido.
Contratto Solidity da deployare
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract MarketplaceCidRegistry {
struct ListingRef {
address seller;
bytes32 contentHash;
string cid;
uint256 timestamp;
bool active;
}
ListingRef[] private listings;
event ListingPublished(
uint256 indexed listingId,
address indexed seller,
bytes32 indexed contentHash,
string cid,
uint256 timestamp
);
event ListingStatusChanged(uint256 indexed listingId, bool active);
function publishListing(bytes32 contentHash, string calldata cid) external returns (uint256 listingId) {
require(contentHash != bytes32(0), "HASH_ZERO");
require(bytes(cid).length > 0, "CID_EMPTY");
listingId = listings.length;
listings.push(ListingRef({
seller: msg.sender,
contentHash: contentHash,
cid: cid,
timestamp: block.timestamp,
active: true
}));
emit ListingPublished(listingId, msg.sender, contentHash, cid, block.timestamp);
}
function setActive(uint256 listingId, bool active) external {
require(listingId < listings.length, "BAD_ID");
require(listings[listingId].seller == msg.sender, "NOT_SELLER");
listings[listingId].active = active;
emit ListingStatusChanged(listingId, active);
}
function getListing(uint256 listingId) external view returns (ListingRef memory) {
require(listingId < listings.length, "BAD_ID");
return listings[listingId];
}
function totalListings() external view returns (uint256) {
return listings.length;
}
}
6
Infine scrivi hash e CID on-chain
Quando annuncio, CID, hash, wallet e contratto sono pronti, premi Scrivi hash/CID on-chain e conferma la transazione nel wallet.
In attesa dei passaggi precedenti.