Come scrivere il tuo primo Smart Contract?

Impara le basi dello sviluppo di contratti intelligenti e inizia a scrivere il tuo primo contratto intelligente. Saprai anche come testare lo smart contract.

Nel , hai imparato cosa sono gli Smart Contract, diversi linguaggi Smart Contract e come impostare un ambiente di sviluppo Smart Contract. In questo articolo imparerai come creare il tuo primo contratto intelligente. Io useròRemix IDE per sviluppare e testare uno smart contract.

Gli argomenti seguenti sono trattati in questo tutorial sullo sviluppo di contratti intelligenti:





Costruire il tuo contratto intelligente

Un semplice contratto intelligente per l'ordine di acquisto sarà sviluppato come parte di questa serie di blog. Con il progredire di questa serie e con l'introduzione di nuovi concetti di linguaggio di programmazione solidità, lo smart contract dell'ordine di acquisto si evolverà e migliorerà.



Struttura dello Smart Contract

Solidity smart contract, in sostanza, è una raccolta di seguito

  • dati - che mantiene lo stato attuale del contratto
  • funzione - che applicano la logica di transizione allo stato del contratto

I contratti intelligenti di solidità seguono una struttura standard. Qualsiasi contratto intelligente inizia con la seguente dichiarazione



Direttiva Pragma

La parola chiave 'pragma' può essere utilizzata per abilitare determinate funzioni o controlli del compilatore. La dichiarazione seguente definisce che il file sorgente (contratto intelligente) non verrà compilato con il compilatore precedente alla 0.4.0 e la versione del compilatore dopo la 0.6.0. Questa dichiarazione garantisce che non venga introdotto alcun comportamento indesiderato quando viene introdotta una nuova versione del compilatore.

solidità pragma> = 0.4.0<=0.6.0 

Dichiarazione di contratto

Il contratto viene dichiarato utilizzando la parola chiave 'contratto'. Questo dichiara un contratto vuoto identificato dal nome 'PurchaseOrder'.

contratto PurchaseOrder {}

Archiviazione dei dati rilevanti per il contratto

Ogni contratto o in termini generici ogni programma può richiedere di memorizzare alcuni dati. L'aggiunta di dati al programma fornisce un livello di flessibilità. L'allontanamento dai valori hardcoded nel programma ai valori forniti dall'utente è una caratteristica importante. Le variabili consentono di memorizzare i dati, etichettare i dati, recuperare i dati e manipolare i dati.

Sviluppo di contratti intelligenti: introduzione di variabili

In solidità, le variabili sono di due tipi

  1. Tipo di valore: Questi tipi di variabili vengono passati per valore, ovvero vengono sempre copiati quando vengono utilizzati come argomenti di funzioni o in assegnazioni. Ad esempio: numeri interi, indirizzo booleano, ecc.
  2. Tipi di riferimento: Questi tipi di variabili sono di tipo complesso e vengono passati per riferimento, queste variabili non si adattano a 256 bit e devono essere gestite con attenzione poiché copiarle è costoso.

Aggiunta di dati a Smart Contract

Aggiungiamo alcune variabili di dati al contratto. Ad ogni ordine di acquisto deve essere associata una certa quantità di prodotto. Aggiungiamo una variabile product_quantity che sarà di tipo dati intero o numero.

framework ibrido in webdriver al selenio

La variabile che stiamo introducendo ora è un intero senza segno ed è rappresentata da uint256, 256 qui indica la memoria a 256 bit.

  • U - non firmato (il che significa che questo tipo può rappresentare solo numeri interi positivi, non interi positivi e negativi)
  • INT - numero intero
  • 256 - 256 bit di dimensione
  • il valore minimo che può essere assegnato a uint256 è 0
  • il valore massimo che può essere assegnato a uint256 è 2 ^ 256-1 [un numero molto grande]

La quantità del prodotto è solo un valore positivo e l'ipotesi attuale è che ci accingiamo a soddisfare un valore molto elevato per la quantità del prodotto.

La variabile 'product_quantity' dichiarata fa parte dello stato del contratto e quindi viene mantenuta o memorizzata nello spazio del contratto. Attualmente, questa variabile avrà il valore predefinito 0.

contratto PurchaseOrder {uint256 product_quantity}

Definizione del costruttore

Il costruttore viene chiamato quando il contratto viene distribuito. Il costruttore inizializza il contratto con alcuni valori. Nello scenario corrente, la quantità del prodotto è impostata su 100, quando il contratto viene distribuito. È inoltre possibile creare un costruttore parametrizzato passando una variabile e inizializzando product_quantity utilizzando il valore passato.

Il punto chiave da notare qui è il modificatore di accesso 'public' associato al costruttore. La parola chiave pubblica specifica che chiunque può accedere a questa funzione, questa non è una funzione limitata.

costruttore () pubblico {product_quantity = 100}

Aggiunta di funzioni

Aggiungiamo ora una funzione per rendere interattivo il nostro programma. Le funzioni sono capacità controllate che possono essere aggiunte a un programma. Qualsiasi funzione è preceduta dalla funzione parola chiave. Nel complesso questo è l'aspetto della dichiarazione della funzione' funzione '.

Ottieni funzione

Uno dei requisiti più comuni, per qualsiasi programma, è leggere il valore memorizzato. Nel seguente contratto, avremo bisogno di leggere il valore 'product_quantity'. Per fornire questa capacità, viene aggiunta una funzione read o una funzione get. In questa funzione non stiamo apportando alcuna manipolazione al valore memorizzato, stiamo solo recuperando il valore memorizzato.

Analizziamo ora la nostra funzione get (get_quantity)

No. Parola chiave Valore
uno get_quantity (){nessun parametro viene passato}
2 pubblico{chiunque può accedere alla funzione}
3 Visualizza{significa che la funzione legge solo lo stato del contratto, non cambia lo stato del contratto, quindi visualizza}
4 restituisce una variabile di tipo uint256 {definito ciò che viene restituito dalla funzione}
funzione get_quantity () public view return (uint256) {return product_quantity}

Funzioni setter

La lettura dei dati è necessaria e l'abbiamo realizzata nell'ultima sezione, ma la maggior parte dello scenario richiede anche la capacità di scrivere / aggiornare i dati. Questa capacità specifica viene fornita aggiungendo una funzione setter. Questa funzione prende un valore dall'utente sotto forma di un parametro di input. Utilizzando il valore fornito alla funzione dall'utente, il valore della variabile “product_quantity” viene scritto / aggiornato.

Analizziamo ora la nostra funzione set (update_quantity)

implementare la lista collegata in c

Aggiunta di una funzione per aggiornare il valore della quantità del prodotto

No. Parola chiave Valore
uno update_quantity (valore uint256){valore del parametro di tipo uint256 passato}
2 pubblico{chiunque può accedere alla funzione}
3 Non richiesto poiché lo stato viene aggiornato dalle funzioni
4 restituisce una variabile di tipo uint256 (definita ciò che viene restituito dalla funzione)
funzione update_quantity (valore uint256) public {product_quantity = product_quantity + value}

Collegando tutto questo insieme, ecco come dovrebbe apparire il contratto generale.

solidità pragma> = 0.4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

Distribuzione dello Smart Contract

È ora di testare lo smart contract. Per testare questo contratto intelligente, useremo Remix online IDE .

Remix è un parco giochi online per contratto intelligente ethereum . Remix è completamente basato su browser. Remix ti fornisce un IDE (ambiente di sviluppo integrato) online in cui puoi scrivere i tuoi contratti intelligenti. Remix ti fornisce una capacità di compilazione di solidità online. Lo smart contract in Remix IDE può essere compilato utilizzando una specifica versione del compilatore senza problemi.

Remix fornisce anche la capacità di testare rapidamente lo smart contract.

Remix fornisce un set di strumenti completo per avviare lo sviluppo di smart contract e unit test dello smart contract, senza eseguire alcuna installazione sulla macchina locale. Questo è di enorme utilità per iniziare con la solidità poiché gli sviluppatori devono solo concentrarsi sulla scrittura di un contratto intelligente, piuttosto preoccuparsi dell'infrastruttura.

Con Remix IDE tutto ciò di cui hai bisogno è un browser e una connessione Internet per iniziare con lo sviluppo di contratti intelligenti. Sviluppo, test e convalida rapidi di un'idea per un contratto intelligente.

Remix ha recentemente aggiornato la propria interfaccia utente.

differenza tra sovraccarico e sovrascrittura

Remix-UI-Smart-Contracts-Edureka

Fare clic sull'icona del file come evidenziato nell'immagine sopra, si aprirà Esplora file.

  1. Cliccando sull'icona più, è possibile creare un nuovo file, denominare il file PurchaseOrder.sol
  2. Questo creerà un file vuoto denominato PurchaseOrder.sol, fare clic e aprire questo file.
  3. Cerchiamo di copiare e incollare l'intero contratto in PurchaseOrder.sol.
  4. Fare clic sulla seconda icona, nel menu a sinistra appena sotto l'icona del file, dovrebbe apparire l'opzione del compilatore di solidità.
  5. Sotto l'etichetta del compilatore, seleziona la versione del compilatore. La versione attualmente selezionata è la 0.5.8.
  6. Dopo la selezione della versione del compilatore, fare clic su 'Compile PurchaseOrder.sol'. Questo compilerà il contratto intelligente.

7. Una volta compilato correttamente lo smart contract, fare clic sul pulsante 'Dettagli della compilazione' e dovrebbero apparire i seguenti dettagli. Dopo la compilazione, vengono rese disponibili due informazioni chiave

    • ABI - Interfaccia binaria dell'applicazione. Questo è un file json che descrive in dettaglio tutti i metodi esposti nello smart contract insieme ai metadati dei metodi. Maggiori informazioni su questo argomento saranno discusse nei blog successivi.
    • Bytecode- Codice operativo EVM (Ethereum virtual machine), la logica del contratto intelligente viene convertita nel bytecode durante la compilazione.

8. Per testare lo smart contract, lo smart contract deve essere distribuito. Per implementare lo smart contract, fare clic sull'icona successiva nel menu a sinistra, sotto l'icona di compilazione. Apparirà la seguente schermata. Per testare lo smart contract, è necessario implementare lo smart contract. Per implementare lo smart contract, fare clic sull'icona successiva nel menu a sinistra, sotto l'icona di compilazione. Apparirà la seguente schermata.

Opzione di distribuzione

La schermata di distribuzione, fornisce un paio di scelte, esaminiamole una per una.

  • Ambiente: questa può essere pensata come un'opzione simile alla scelta di acquistare un laptop da Amazon, Flipkart, Newegg (tutti questi sono rivenditori online) in base alle tue esigenze. Allo stesso modo, in caso di Remix, abbiamo un'opzione in cui distribuire lo smart contract e testare lo smart contract. Il menu a discesa accanto all'etichetta dell'ambiente fornisce tre selezioni
    • VM JavaScript: un singolo nodo Ethereum locale viene avviato nella memoria del browser e fornisce 5 account di test prefinanziati che possono essere utilizzati per la transazione (distribuzione, funzioni di invocazione)
    • Fornitura Web3 iniettata: si basa su MetaMask. Metamask è come un broker o intermediario, che consente alle applicazioni web di interagire con lo smart contract. Metamask fornisce la capacità di gestire le identità e anche di firmare le transazioni da inviare alla rete Ethereum. Questo intermediario o 3rdle parti ti aiutano a determinare la rete blockchain in cui verrà distribuito lo smart contract.
    • Provider Web3: se si esegue un nodo Ethereum locale ed è disponibile un endpoint RPC, è possibile utilizzare questa opzione. Il contratto intelligente verrà distribuito al nodo Ethereum locale.
  • Account: queste informazioni vengono compilate in base all'ambiente selezionato. Per esempio. JavaScript VM fornisce 5 account di prova prefinanziati. In caso di provider Web3 e Injected Web3 non fornire account di prova prefinanziati.
  • Limite di gas: definisce la quantità massima di gas che l'iniziatore è disposto a spendere per qualsiasi transazione. Questo è il posto giusto per proteggersi dal loop infinito e dall'esaurimento di tutti i fondi del conto in caso di condizione di loop infinito.
  • Valore: il valore che potrebbe essere richiesto per l'invio durante la distribuzione dello smart contract. Questo è un valore opzionale.

Per implementare il contratto, seleziona l'opzione VM JavaScript, seleziona il primo account dal menu a discesa degli account, prendi nota del saldo dell'account (100 ether).

Assicurati che il nome dello smart contract visualizzato sia PurchaseOrder, fai clic su distribuisci. Azioni chiave che avverranno

  1. Il saldo del conto cambia da 100 ether a 99,999999 ether, l'importo detratto è il costo della transazione per la distribuzione del contratto intelligente.
  2. Sotto contratto distribuito apparirà una nuova tessera per contratto intelligente, che fornirà anche l'indirizzo del nuovo contratto intelligente qualcosa del genere (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. Nella finestra della console appariranno le seguenti informazioni
    1. Hash della transazione: identifica in modo univoco la distribuzione del contratto
    2. Costi di transazione
    3. Indirizzo del contratto

Interagire con il contratto distribuito

  1. In base al contratto distribuito, sono disponibili i seguenti due metodi di interazione update_quantity e get_quantity.
  2. Entrambi questi metodi di interazione sono i metodi pubblici definiti nel contratto 'Ordine di acquisto'.
  3. Il metodo 'update_quantity' della quantità di aggiornamento richiede un parametro di input, da cui la casella di input.
  4. Il metodo Get quantity 'get_quantity' recupera il valore di product_quantity.
  5. Controlliamo cosa succede quando viene richiamato get_quantity, viene mostrato il valore di ritorno 100, che è stato inizializzato nel costruttore. Ciò non causa una transazione
  6. Richiamiamo update_quantity e forniamo 30 come input. Questo fa sì che avvenga una transazione

In poche parole, qualsiasi operazione che causa un'operazione di scrittura nello stato del contratto (cioè modifica le variabili del contratto) risulterà in una transazione.

Qualsiasi operazione che legge solo lo stato del contratto non causa una transazione.

Conclusione sullo sviluppo di contratti intelligenti

Con questo, abbiamo appena creato il nostro primo contratto intelligente, graffiando solo la superficie della solidità. Abbiamo appena visto cosa serve per testare lo smart contract fin dalla distribuzione dello smart contract all'avvio delle transazioni.

Nel prossimo blog, che è una continuazione della serie di sviluppo di contratti intelligenti, ci soffermeremo più a fondo sui fondamenti della solidità, facendo un'immersione più profonda nell'implementazione di contratti intelligenti.

Con questo, concludo questo Contratto intelligente blog di sviluppo. Spero che ti sia piaciuto leggere questo blog e che sia stato istruttivo.

ioSe desideri imparare gli Smart Contracts, costruire una carriera nel dominio della Blockchain e acquisire esperienza nella programmazione di Ethereum, iscriverti a live-online qui, viene fornito con supporto 24 * 7 per guidarti durante il tuo periodo di apprendimento.

Hai domande per noi? Si prega di menzionarlo nella sezione commenti di 'Sviluppo di contratti intelligenti' e ti risponderemo subitost.