Converti un distributore automatico per accettare pagamenti in criptovaluta utilizzando feed di prezzo Chainlink

DoT
Chainlink Community
7 min readFeb 9, 2021

Fonte Originale: https://blog.chain.link/cryptocurrency-vending-machine/

Cosa ci vorrebbe per aggiornare un distributore automatico in modo che possa accettare criptovaluta?

Affinché i sistemi automatizzati del mondo reale permettano alle persone di effettuare transazioni nella loro valuta preferita, inclusa la criptovaluta, questi sistemi esterni necessitano della capacità di parlare con la blockchain e di scambiare logica transazionale che abbia senso per entrambi gli ambienti. Gli oracoli di Chainlink sono il ponte tra questi sistemi, progettati per collegare in modo sicuro input esterni a contratti intelligenti.

Come eccellente esempio di questa connettività del mondo reale, uno dei vincitori del premio Chainlink Virtual Hackathon , lo sviluppatore Ted Nivan, ha utilizzato un adattatore esterno Chainlink per collegare un simulatore di un distributore automatico di frutta a un oracolo Chainlink del feed di prezzo ETH/USD, in modo che possa accettare ETH come valuta per acquistare frutta monodose. In questo post, Ted spiega come l’ha costruito.

Di Ted Nivan

Fruity Market è una prova di concetto (Proof of Concept) aperta, progettata per sperimentare un nuovo modo di fare acquisti attraverso i distributori automatici, utilizzando criptovalute. Utilizzando Fruity Market, un utente sarà in grado di effettuare un acquisto di un distributore automatico utilizzando la tecnologia blockchain su un wallet presente su un telefono cellulare, senza l’ausilio di un cassiere. In particolare, questo tutorial mostrerà agli sviluppatori i passaggi necessari per convertire un distributore automatico per utilizzare ETH come denaro facendo riferimento al feed di prezzo Chainlink ETH/USD per valutare i prodotti a prezzi di mercato equi.

Cosa imparerai:

  1. Come integrare l’oracolo Chainlink del Feed di Prezzo ETH/USD
  2. Come connettere un dispositivo hardware al web

Prerequisiti per gli sviluppatori

Questa dApp richiede componenti sia software che hardware.

Software:

  1. Infura : utilizzato per connettersi alla rete Ethereum. Come sviluppatore avrai bisogno di una chiave Infura.
  2. Web3JS : utilizzato dal front-end per interagire con la rete Ethereum.
  3. WebUSB : utilizzato per parlare con il dispositivo hardware tramite il web.
  4. IDE Arduino : utilizzato per eseguire il flashing del firmware del dispositivo.

Hardware:

  1. È necessario un server o un laptop per fungere da host.
  2. Arduino Nano 33 IoT : utilizzato come dispositivo hardware per simulare il distributore automatico. Le schede Arduino sono una scelta popolare di schede di sviluppo hardware in quanto sono facili da usare e da programmare.

Panoramica tecnica

Questo tutorial guiderà gli sviluppatori attraverso i passaggi dal repository GitHub , con cui puoi familiarizzare prima di iniziare. Il video presentato per Chainlink Virtual Hackathon è anche un buon posto per comprendere come i componenti lavorano insieme.

Diagramma logico del Proof of Concept del Fruity Market

Sul lato sinistro, abbiamo l’applicazione in esecuzione su Ethereum che utilizza il feed di prezzo ETH/USD di Chainlink. Useremo questo feed di prezzo per convertire il prezzo in dollari del frutto in Ether (ETH). Una volta che il pagamento è andato a buon fine, la dApp invia un segnale dall’host (computer) al dispositivo (scheda Arduino) per ottenere la consegna della frutta. Supponendo di non avere un distributore automatico fisico, simuleremo questo comportamento accendendo un LED per confermare la consegna della frutta.

Impostazione del progetto

Qui vedremo come eseguire l’app in locale.

  1. Clona il repository Fruity Market.
git clone https://github.com/TedNIVAN/fruity-market.git

2. Inizializza il progetto.

cd fruity-market
npm i

3. Imposta la tua chiave API Infura insrc/.env_sample

4. Rinomina src/.env_sampleinsrc/.env

5. Compila il progetto.

npm run dev

L’app dovrebbe essere in esecuzione su: http://localhost:1234

Flash del firmware di Arduino

Una volta che l’app è in esecuzione, il passaggio successivo è installare l’IDE di Arduino e quindi eseguire il flashing del firmware di Arduino . Questo deve essere fatto per abilitare la comunicazione tra il dispositivo e l’applicazione e anche per interpretare i dati trasmessi.

Il firmware Arduino richiesto per questo passaggio può essere trovato qui.

Il codice esegue le seguenti attività:

  1. Autorizza solo il dispositivo a comunicare con la pagina dell’applicazione: tednivan.github.io/fruity-market/app tramite HTTPS. Si noti che la comunicazione funzionerà anche se eseguita localmente (http://localhost:1234/ ).
  2. Stabilisce la comunicazione seriale.
  3. Attende che il carattere Hattivi il LED.
    Il codice viene eseguito su Arduino NANO 33 IoT ma è supportato dalla maggior parte delle schede Arduino. Vedi l'elenco completo delle schede supportate qui .
#include <WebUSB.h>/**
* Creating an instance of WebUSBSerial will add an additional USB interface to
* the device that is marked as vendor-specific (rather than USB CDC-ACM) and
* is therefore accessible to the browser.
*
* The URL here provides a hint to the browser about what page the user should
* navigate to to interact with the device.
*/
WebUSB WebUSBSerial(1 /* https:// */, "tednivan.github.io/fruity-market/app");
#define Serial WebUSBSerialconst int ledPin = 13;void setup() {
while (!Serial) {
;
}
Serial.begin(9600);
Serial.write("Sketch begins.\r\n> ");
Serial.flush();
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial && Serial.available()) {
int byte = Serial.read();
Serial.write(byte);
if (byte == 'H') {
Serial.write("\r\nTurning LED on.");
digitalWrite(ledPin, HIGH);
delay(2000);
Serial.write("\r\nTurning LED off.");
digitalWrite(ledPin, LOW);
delay(2000);
}

Serial.write("\r\n> ");
Serial.flush();
}
}

Questi sono i passaggi necessari per eseguire il flashing del firmware:

  1. Collega Arduino al tuo PC o qualunque cosa tu stia utilizzando per l’host con un cavo USB.
  2. Apri il software Arduino (IDE).
  3. Seleziona il porto e la scheda corrispondenti.
  4. Apri lo sketch fruity-market.ino tratto dal repository GitHub del progetto.
  5. Carica lo sketch.
    Se non hai familiarità con Arduino, consulta questa guida .

Immergersi nel contratto intelligente

La parte successiva del progetto è il contratto intelligente . Il contratto intelligente è responsabile dell’ottenimento del feed prezzo Ethereum ( funzione getLatestPrice ) e dell’attivazione di un evento ogni volta che viene ricevuto un pagamento ( evento ricevuto ). L’elaborazione del pagamento viene quindi eseguita sul lato client .

pragma solidity ^0.6.7;import "https://github.com/smartcontractkit/chainlink/blob/master/evm-contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";contract FruityMarket {    AggregatorV3Interface internal priceFeed;    /**
* Network: Kovan
* Aggregator: ETH/USD
* Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
*/
constructor() public {
priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
}

/**
* Sends event on receive
*/
event Received(address, uint);

receive() external payable {
emit Received(msg.sender, msg.value);
}
/**
* Returns the latest price
*/
function getLatestPrice() public view returns (int) {
(
uint80 roundID,
int price,
uint startedAt,
uint timeStamp,
uint80 answeredInRound
) = priceFeed.latestRoundData();
// If the round is not complete yet, timestamp is 0
require(timeStamp > 0, "Round not complete");
return price;
}
}

Questo contratto intelligente deve essere distribuito su una rete Ethereum, quindi l’indirizzo del contratto generato deve essere memorizzato nel parametro addr nel nostro file web3entry.js utilizzato dall’app web front-end. Questo file JavaScript crea la connessione tra il front-end e il contratto on-chain che stiamo distribuendo. Puoi distribuire facilmente lo smart contract tramite Remix .

Ora possiamo testare il PoC finalizzato del Fruity Market .

Prova il PoC del mercato fruttato finalizzato

Se hai distribuito l’app localmente, apri l’ applicazione distribuita localmente . Altrimenti puoi usare la nostra versione già distribuita .

Schermata d’avvio dell’App del Fruity Market

Per iniziare, fare clic sul pulsante “Avvia app”.

Il distributore automatico di frutta simulato

Fare clic sul pulsante “Connect Device” per connettersi alla scheda Arduino.

Il Finder individuerà l’hardware disponibile pertinente.

Selezionare la scheda “Arduino NANO 33 IoT” quindi premere il pulsante “Connect”.

La schermata di lancio di Fruity Market indicherà se l’hardware è stato collegato.

Il pulsante verde in alto a destra cambierà in “Disconnect Device” se la connessione viene stabilita correttamente. Se è così, ora puoi scegliere un frutto da acquistare.

Una schermata di pagamento che utilizza la rete di test Ethereum Kovan.

Paga con qualsiasi portafoglio Ethereum utilizzando la rete Kovan, scansionando il QR-CODE e inserendo l’importo ETH richiesto (questo varierà a seconda del prezzo corrente di ETH/USD ).

Schermata di conferma del pagamento riuscito.

Questa pagina apparirà in caso di pagamento andato a buon fine. Anche il LED sulla scheda Arduino si accenderà per un breve periodo di tempo per simulare la consegna della frutta.

Una schermata di transazione fallita.

Nel caso in cui il cliente invii un importo inferiore al prezzo del frutto, il pagamento verrà rifiutato.

Quali sono le prospettive per il Fruity Market

Il prossimo passo per Fruity Market è migliorare la logica del contratto intelligente per gestire il pagamento nel caso in cui l’utente paghi più dell’importo richiesto. Ulteriori passaggi successivi includono l’integrazione di hardware che replica un’esperienza utente di distributori automatici più realistica utilizzando un Raspberry Pi 4 con touchscreen.

Man mano che l’hardware e la logica del contratto intelligente diventano più strettamente allineati con le attuali funzionalità dei distributori automatici aziendali, l’aggiunta di ulteriori opzioni di pagamento come le stablecoin ERC-20 come DAI o USDC supportate da Chainlink Price Feeds migliorerà l’esperienza ed evidenzierà la natura interoperabile delle criptovalute come sistemi di pagamento.

Inizia a costruire con i feed dei prezzi di Chainlink

Se sei uno sviluppatore che lavora alla connessione di Arduino o altro hardware su blockchain, unisciti alla vivace comunità di Chainlink per supporto e collaborazione. Raggiungi qui o visita la documentazione per gli sviluppatori e puoi anche iscriverti alla newsletter di Chainlink per rimanere aggiornato su tutto ciò che è nello stack Chainlink.

Se hai imparato qualcosa di nuovo qui, vuoi mostrare ciò che hai costruito o sviluppato un front-end per alcuni dei repository demo, assicurati di condividerlo su Twitter , Discord o Reddit e hashtag i tuoi repository con #chainlink .

Sito web | Twitter | Discordia | Reddit | YouTube | Telegram | Eventi | GitHub | Feed prezzo | DeFi

--

--

DoT
Chainlink Community

Chainlink community Advocate, Chainlink Italian Community Telegram Admin: t.me/Chainlink_italian