Skip to content

Guida Tecnica agli Smart Contract

TuneCamp utilizza una suite di smart contract in Solidity sulla rete Base (Base Network) per gestire la proprietà della musica sotto forma di NFT e gestire pagamenti sicuri.

1. Panoramica dei Contratti

  • TuneCampFactory.sol: Un factory di proxy minimi compatibile con lo standard EIP-1167. Consente alla piattaforma di distribuire "cloni" dei contratti principali per ogni nuova istanza di artista con una frazione dei costi di gas rispetto a una normale pubblicazione.
  • TuneCampCheckout.sol: Il processore di pagamento principale. Gestisce:
    • Gli acquisti effettuati in ETH o in USDC.
    • La ripartizione automatica dei ricavi tra l'artista e la tesoreria della piattaforma (Platform Treasury).
    • L'integrazione con il contratto NFT per l'operazione di minting.
  • TuneCampNFT.sol: Un contratto basato sullo standard ERC-1155. Ogni traccia o album è rappresentato da un ID token univoco. Il possesso dell'NFT garantisce all'utente l'accesso ai download di alta qualità.

2. Sviluppo e Distribuzione (Deployment)

I contratti sono collocati all'interno della cartella contracts/.

Prerequisiti

  • Node.js
  • Hardhat o Foundry (consigliato per la rete Base)
  • Una chiave privata con ETH sulla rete Base per pagare il gas.

Flusso di Distribuzione

  1. Deploy dei Contratti di Implementazione: Viene eseguito il deploy del codice logico per TuneCampCheckout e TuneCampNFT.
  2. Deploy del Factory: Viene eseguito il deploy di TuneCampFactory puntando agli indirizzi delle implementazioni create.
  3. Configurazione dell'Istanza: Il server di TuneCamp utilizza il Factory per "generare" i propri contratti di checkout e NFT al primo avvio o su richiesta dell'amministratore.

3. Logica dei Ricavi On-Chain

Il contratto TuneCampCheckout rappresenta l'applicazione on-chain della politica di ripartizione universale delle commissioni della piattaforma. Mentre i pagamenti Stripe gestiscono la ripartizione tramite codice backend, i pagamenti Web3 sono immutabili e automatici:

solidity
uint256 platformShare = (msg.value * adminFeeBps) / 10000;
uint256 artistShare = msg.value - platformShare;
payable(adminTreasury).transfer(platformShare);
payable(artistWallet).transfer(artistShare);

4. Integrazione con il Backend

Il backend (src/server/routes/api/payments.ts) interagisce con questi contratti tramite la libreria Ethers.js:

  • Verifica: Analizza i log delle transazioni per verificare che sia stato effettuato il pagamento per uno specifico trackId.
  • Pubblicazione: Richiama il contratto NFT per coniare (mint) nuove edizioni quando un artista pubblica la propria musica on-chain.

5. Sicurezza

  • ReentrancyGuard: Applicato a tutte le funzioni che gestiscono pagamenti per prevenire attacchi di reentrancy.
  • AccessControl: Solo l'amministratore dell'istanza o il factory della piattaforma possono richiamare funzioni di gestione sensibili.
  • Audit: Questi contratti sono progettati puntando alla massima semplicità per ridurre al minimo la superficie di attacco.

Rilasciato sotto licenza MIT.