Il post Costruire un'applicazione Blockchain con Plutus è apparso per la prima volta su Coinpedia Fintech News
Introduzione
La blockchain sta contribuendo a vari settori attraverso le sue soluzioni decentralizzate e trasparenti. I progressi nel dominio dello sviluppo hanno avuto un cambiamento trasformativo su sviluppatori e comunità. I vantaggi della blockchain vanno oltre la decentralizzazione. Fa risparmiare il tempo impiegato per la transazione e non necessita di alcuna verifica di terze parti, riducendo i rischi di frode e di attacchi informatici. Come sviluppatore, capire come creare applicazioni blockchain è prezioso, soprattutto quando si utilizzano strumenti potenti come Plutus. Plutus è una piattaforma di smart contract sulla blockchain Cardano. Offre un framework robusto per gli sviluppatori per creare applicazioni decentralizzate (DApp) sicure ed efficienti.
Che cos'è Cardano?
Cardano Una piattaforma blockchain lanciata da Charles Hoskinson (co-fondatore di Ethereum) nel 2017. Cardano è una piattaforma di terza generazione, spesso considerata un'alternativa a Ethereum, una piattaforma di seconda generazione. Utilizza un meccanismo di proof of stake più efficiente di quelli tradizionali. Cardano ha la sua criptovaluta ADA, che prende il nome da Ada Lovelace. Ha due livelli separati, uno che gestisce le transazioni e gli account mentre l'altro è utilizzato per gestire gli smart contract e il calcolo. Cardano mira a creare una piattaforma blockchain più sicura, scalabile e adattabile rispetto ai suoi predecessori e viene utilizzata in varie applicazioni, tra cui la gestione della supply chain, la verifica dell'identità digitale e i servizi finanziari nei mercati emergenti
Plutone
Plutus è un linguaggio di programmazione utilizzato per scrivere smart contract basati su Cardano. Plutus è basato su Haskell, che è un linguaggio funzionale. Come sviluppatore, non hai bisogno di scrivere Plutus Core, piuttosto tutti gli script saranno generati da un plugin del compilatore Haskell. Plutus supporta la verifica formale che fornisce un modo per dimostrare la correttezza di un programma usando la matematica. Quindi migliora la sicurezza e riduce la probabilità di eventuali bug nello smart contract.
Plutus è integrato nativamente nella blockchain di Cardano, consentendo agli sviluppatori di interagire direttamente con il registro e l'infrastruttura di Cardano. Ciò ti aiuta a creare e distribuire gli smart contract che interagiscono direttamente con l'ecosistema Cardano. Plutus ha strumenti che ti aiutano a simulare gli smart contract senza il nodo Cardano completo e a sperimentare prima di distribuirli sulla mainnet. Plutus è adatto agli sviluppatori che desiderano creare applicazioni decentralizzate affidabili e ad alte prestazioni.
Pubblico
Questo articolo è rivolto agli sviluppatori che sono alle prime armi con lo sviluppo blockchain e hanno poca conoscenza della programmazione di base. Ti guideremo attraverso i passaggi essenziali per impostare il tuo ambiente, comprendere i concetti di blockchain e creare una semplice applicazione blockchain usando Plutus.
Impostazione dell'ambiente di sviluppo
Avere una configurazione perfetta prima di dare il via al percorso di sviluppo è fondamentale. Quindi, impostare un ambiente che supporti Plutus è il trampolino di lancio di questo capitolo.
1. Installazione di Plutus
Scarica Plutus dal repository ufficiale:
clone di git https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell
Verificare l'installazione utilizzando: plutus -v
2. Scelta di un IDE
Durante lo sviluppo di applicazioni con Plutus, avere l'IDE giusto è fondamentale. Plutus è basato su Haskell, quindi è consigliabile avere un IDE che supporti Haskell. Due opzioni popolari per lo sviluppo di Plutus sono Visual Studio Code (VS Code) e Plutus Playground. Ecco una guida estesa su come impostare e utilizzare questi IDE per lo sviluppo di Plutus.
Visual Studio Code: VS Code è un editor di codice molto flessibile e versatile che supporta quasi tutti i linguaggi e ha estensioni molto utili. Quindi è l'editor preferito dagli sviluppatori su cui lavorare. VSCode è open source e fornisce un'ampia gamma di strumenti e funzionalità per completare il codice.
Passaggi per configurare VSCode:
Scarica VSCode dal sito ufficiale (in base al tuo sistema operativo)
Installare il software
Plutus è basato su Haskell, quindi è necessario installare la piattaforma Haskell, che include il Glasgow Haskell Compiler (GHC) e cabal (uno strumento di compilazione per Haskell).
Scarica Haskell
Installa le estensioni Haskell in VS Code (Haskero, Haskell Syntax Higlighting, ecc.)
Configurare le estensioni e impostare estensioni aggiuntive
Ora che hai già installato Plutus sei pronto per iniziare!!
Plutus Playground: Plutus Playground è un editor online basato sul web, in particolare per gli smart contract Plutus. Quindi non c'è bisogno di alcuna installazione ed è perfetto per i principianti che vogliono acquisire un po' di sicurezza durante la codifica.
Puoi visitare il sito web di Plutus Playground e iniziare subito!
Entrambi gli ambienti possono essere utilizzati efficacemente per lo sviluppo di Plutus e potresti scoprire che combinandoli, utilizzando VS Code per progetti più grandi e Plutus Playground per test e prototipazione rapidi, si ottiene il meglio da entrambi i mondi.
3. Installazione delle librerie richieste
Utilizzare cabal per installare le librerie essenziali per lo sviluppo di Plutus.
Comprendere i concetti di Blockchain con Plutus
Blockchain è un database distribuito e avanzato che memorizza i record delle transazioni sotto forma di blocchi. Ogni blocco deve essere collegato all'altro utilizzando principi crittografici. Per salvaguardare i blocchi vengono utilizzati meccanismi robusti, grazie ai quali non è possibile modificare alcun record delle valute prima del tempo e senza influenzare i blocchi successivi.
La blockchain ha tre componenti di base:
Blocchi: i blocchi contengono informazioni sulle transazioni insieme ai metadati. Tutti i blocchi sono collegati tra loro tramite hashing che forma una catena di blocchi, da cui blockchain
Transazioni: una transazione è un trasferimento di dati da un'entità a un'altra all'interno della blockchain. In Plutus, le transazioni sono scritte in Haskell e coinvolgono input e output UTXO (Unspent Transaction Outputs).
Catene: in Plutus, la catena mantiene l'ordine delle transazioni e garantisce che siano immutabili una volta confermate.
Nel seguente frammento di codice possiamo vedere la struttura del Blocco in Plutus:
Ogni componente del blocco viene menzionato insieme al suo tipo di dati
L'indice è un numero intero che indica la posizione di un blocco
Il timestamp è l'ora in cui è stato creato il blocco
Le transazioni sono la stringa o un elenco di tutte le transazioni incluse in un particolare blocco
L'hash è un modello univoco e la chiave primaria per identificare un blocco
L'hash precedente si riferisce alla continuità ed è l'hash dell'ultimo blocco
In questo frammento di codice possiamo vedere la struttura delle transazioni in Plutus:
Decentralizzazione, immutabilità e meccanismi di consenso:
Il fondamento della blockchain si basa su tre principi fondamentali: decentralizzazione, immutabilità e meccanismo di consenso
Decentralizzazione: la decentralizzazione è una proprietà per cui nessuna singola entità detiene il controllo sul database di Blockchain, rendendo quasi impossibile il fallimento del sistema e la parzialità. Ogni dispositivo partecipante (nodo) mantiene una copia della blockchain, garantendo trasparenza e inibendo il fallimento o la manipolazione centralizzata.
Immutabilità: una volta che i dati sono scritti in una blockchain, non possono essere modificati senza alterare tutti i blocchi successivi. Ciò avviene con l'aiuto dell'hashing crittografico. Quindi tutte le modifiche apportate una volta non possono essere annullate, rendendole immutabili.
Meccanismo di consenso: un set di protocolli che regolano tutte le necessità della blockchain. Tutti i nodi della rete devono concordare sui metodi. I meccanismi di consenso vengono utilizzati per semplificare i nodi e garantire che tutti i nodi della rete siano sulla stessa pagina.
Costruire una Blockchain semplice con Plutus
Il blocco è l'unità primitiva di qualsiasi blockchain. In questo frammento di codice, abbiamo definito un tipo di dati di blocco insieme ai suoi componenti.
Inoltre, dopo aver definito la classe di blocco, dobbiamo garantire l'integrità della blockchain, dove ogni blocco deve avere un hash univoco. Quindi, con la funzione di calcolo dell'hash, utilizziamo il popolare metodo di hashing SHA256 per lo stesso in Plutus.
Una volta completata la Definizione di un blocco, vai avanti e inizializza la tua blockchain con l'aiuto di un blocco genesi che è il primo blocco per qualsiasi blockchain. Wow!! Hai appena creato una blockchain ma non è tutto, devi aggiungere nuovi blocchi e recuperare anche l'ultimo blocco.
Continuate a fare riferimento al codice qui sotto nel caso abbiate bisogno di aiuto!
Implementazione di meccanismi di consenso in Plutus
Cardano utilizza il meccanismo PoS mentre in primo luogo aveva adottato la Proof of Work. Plutus è progettato per essere compatibile con il protocollo Ouroboros PoS di Cardano, offrendo scalabilità, efficienza energetica e sicurezza per le applicazioni decentralizzate (DApp).
Ecco una panoramica degli algoritmi di consenso che possono funzionare con Plutus
Ouroboros: Ouroboros è un meccanismo Proof of stake con cui Plutus è altamente compatibile e dipende dalla posta in gioco dell'ADA che i validatori sono disposti a prendere per convalidare un nuovo blocco. I contratti Plutus interagiscono perfettamente con il protocollo Ouroboros, assicurando che l'esecuzione degli smart contract rimanga sicura ed efficiente dal punto di vista energetico.
Proof of Work: PoW è il meccanismo più antico ed è stato ampiamente utilizzato in tutte le vecchie criptovalute. Può ancora essere implementato sulla carta nel caso di Plutus. Ciò sarebbe più utile se si pensasse a scenari isolati come scopi educativi e sperimentali.
Prove di lavoro delegate e tolleranza agli errori bizantini: questi meccanismi non sono particolarmente compatibili con Cardano, ma possono comunque essere implementati teoricamente su Plutus.
In questa sezione esploreremo come utilizzare la Proof of Work in Plutus.
In Proof of Work, i minatori devono competere in tempo per risolvere un puzzle crittografico per diventare validatori della nuova moneta. In questo codice, la funzione proof of work cerca un nonce che, se combinato con l'hash del blocco precedente, produce un hash con un certo numero di zeri iniziali. Questa è un'implementazione di base di PoW, in cui il livello di difficoltà determina quanto è difficile trovare un nonce valido.
Una volta completata l'implementazione della Proof of Work, è necessario aggiornare la blockchain per convalidare la prova ottenuta.
Ecco un frammento di codice di esempio:
Questa funzione garantisce che un nuovo blocco venga aggiunto alla blockchain solo se la sua prova è valida, mantenendo l'integrità della catena.
Creazione di una semplice API Blockchain con Plutus
In questo capitolo imparerai come creare una semplice API per interagire con un'applicazione blockchain creata usando Plutus. Questa API ti consentirà di aggiungere blocchi e visualizzare la blockchain tramite richieste HTTP.
Passaggi per creare un'API:
Imposta l'ambiente per l'API: installa Haskel (che è già stato fatto), quindi installa Servant usando Cabal
Scarica tutte le librerie richieste:
Servo: Per creare l'API
Aeson per codificare e decodificare il JSON: cabal install aeson plutus-core
Plutus per integrare tutto il codice e la logica
Per iniziare a costruire l'API dobbiamo prima aggiungere un nuovo blocco e ritirare lo stato corrente della blockchain. Entrambi questi passaggi sono stati eseguiti nei capitoli precedenti.
Ora puoi procedere e definire gli endpoint:
{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— Definisci il tipo di blocco (fai riferimento al Capitolo 3)data Block = Block { index :: Int , timestamp :: String , dataField :: String , previousHash :: String , hash :: String } deriving (Show, Eq)— Blockchain è semplicemente un elenco di blocchitype Blockchain = [Block]— Definisci il tipo di APItype BlockchainAPI = “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain: segnaposto per la blockchain, inizialmente a partire solo dal blocco genesi genesisBlock = Blocco 0 “2024-09-12 00:00:00” “Blocco genesi” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]–– Gestori per gli endpoint API addBlockHandler :: Blockchain -> Blocco -> Gestore BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock] liftIO $ putStrLn “Blocco aggiunto!” return newBlockchain: Gestore per il recupero della chainviewChainHandler :: Blockchain -> Gestore BlockchainviewChainHandler blockchain = return blockchain–Punto di ingresso principale per eseguire l'APIapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)
Spiegazione del codice sopra:
Il blocco è definito in modo simile ai capitoli precedenti
La libreria Servant viene utilizzata per definire la struttura dell'API. Esistono due metodi per definire gli endpoint dell'API, GET e POST, che significano rispettivamente recuperare e aggiungere la blockchain.
Abbiamo anche definito i gestori (addBlockHandler) per gestire i nuovi blocchi che vengono aggiunti e viewChainHandler) per visualizzare l'altro blocco
Alla fine c'è una funzione principale che è il cuore del codice, collega tutto insieme ed esegue il server API.
Dopo la definizione dell'API, hai due metodi per aggiungere gli endpoint e recuperare le informazioni sugli endpoint Blockchain.
Evviva!! Hai implementato con successo questa sottosezione e ora puoi rovistare nell'API usando cabal e sei pronto per la parte successiva.
Esecuzione e test dell'applicazione
Dopo aver creato l'API blockchain, è il momento di testarla. Utilizzeremo Postman o curl per interagire con l'API e verificare che funzioni correttamente.
Passaggi per eseguire e testare l'applicazione:
Compila il programma ed eseguilo: cabal build cabal run
Avviare il server: l'API dovrebbe essere disponibile su http://localhost:8080
Testare e aggiungere gli endpoint del blocco
{ “index”: 1, “timestamp”: “2024-09-12 12:30:00”, “dataField”: “Questo è il mio nuovo blocco”, “previousHash”: “some_hash”, “hash”: “new_block_hash”}
Visualizza la Blockchain
arricciare http://localhost:8080/chain
Seguendo questi passaggi, ora hai una semplice applicazione blockchain in esecuzione con un'API creata utilizzando Plutus. L'API consente alle applicazioni esterne o agli utenti di interagire con la tua blockchain aggiungendo nuovi blocchi e visualizzando lo stato corrente della blockchain.
Esempio dal vivo di creazione di un'applicazione Blockchain con Plutus
Il frammento di codice sopra riportato è un'esecuzione passo passo di:
Passaggio 1: creare il tipo di dati Blocco con gli attributi necessari utilizzando la sintassi Plutus.
Passaggio 2: implementare il metodo calculate_hash.
Passaggio 3: definire il tipo di dati Blockchain e inizializzarlo con un blocco genesi.
Fase 4: implementare metodi per aggiungere nuovi blocchi e recuperare il blocco più recente utilizzando Plutus.
Passaggio 5: aggiungere la funzionalità Proof of Work al tipo di dati Block e aggiornare il tipo di dati Blockchain.
Fase 6: configurare l'ambiente API per gestire le richieste tramite Plutus.
Passaggio 7: testare l'applicazione estraendo un nuovo blocco e verificando la blockchain utilizzando Postman o Curl
Congratulazioni! Hai raggiunto la fine del modulo e hai imparato tutte le basi di Plutus.
Mentre ti avventuri nello sviluppo blockchain con Plutus, non stai solo scrivendo codice, stai creando la spina dorsale di sistemi decentralizzati che potrebbero ridefinire i settori. Continua a imparare e buona programmazione!!
Guarda anche: Come progettare, sviluppare e distribuire la tua criptovaluta: una guida passo passo