Nuovo annuncio

Queste foto possono essere caricate su IPFS e diventano pubbliche.
In questa versione statica restano nel browser e non vengono caricate su IPFS.
IPFS + Registro on-chain procedura guidata: scendi e completa un blocco alla volta
0/6
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.