Creazione smartcontract in una blockchain privata (parte 2 – implementazione)

Nel precedente articolo abbiamo capito come si crea una blockchain privata Ethereum.

In questo articolo creeremo un semplice smartcontract, con linguaggio solidity, che restituisce semplicemente un numero e consente di sommare o sottrarre il numero per 10.

Utilizzeremo, a tale scopo, un editor online remix che ci consente di fare debug del codice e di renderlo attivo nella blockchain.

Accedendo su remix possiamo creare un nuovo progetto che chiameremo myown.sol.

Remix consente anche la compilazione del codice e la creazione del contratto intelligente sulla nostra blockchain privata. Per fare questo è necessario selezionare la voce run-> environment->web3 provider e specificare l’endpoint http://localhost:8545.

L’accesso alla rete privata tramite remix sarà possibile soltanto se il nodo miner è stato lanciato con questo parametro –rpccorsdomain “*” .

Una volta connessi con remix è possibile visualizzare subito la connessione alla nostra networkId 1999 ed il nostro account con il valore eth assegnato.

A questo punto potete fare copia incolla dal codice qui sotto.

pragma solidity ^0.4.18;


contract MyOwn {
 
 uint256 number = 10; //initial number assigned

function add() public { //increases number by 10
 number= number+10;
 }
 
 function subtract() public { //decreases number by 10
 number=number-10;
 }

function getCounter() public constant returns (uint256) {
 return number;
 } 
 
}

E’ possibile attivare l’autocompile sotto la scheda compile e, se non ci sono problemi, è possibile attivare il contratto appena creato.

per creare il contratto è necessario sbloccare l’account sulla geth console (guarda l’articolo precedente) e premere su create (pulsante in rosso). Sul campo at address inseriamo il nostro account che abbiamo appena sbloccato.

web3.personal.unlockAccount(eth.coinbase)

Il risultato è come in figura

Come si può vedere, remix ci presenta le funzioni pubbliche costruite nel contratto: add, subtract, getCounter. A questo punto possiamo premere le singole funzioni e visualizzare il risultato.

Si noti che il numero iniziale è 10 come impostato staticamente nel codice, se premiamo add il numero aumenta di 10, se premiamo subctract il numero diminuisce di 10.

Creazione blockchain privata con Ethereum (parte 1 – setup)

Con l’articolo precedente abbiamo capito come funziona la blockchain e come potrebbe cambiare in futuro internet.

Con questo articolo spieghiamo come può essere sfruttata la blockchain nell’ottica di creare applicazioni decentralizzate. Ovvero che non necessitano di un server centrale per il funzionamento.

Un progetto molto interessante è Ethereum e permette appunto la creazione di applicazioni decentralizzate di qualsiasi tipo.

Per capire fino in fondo Ethereum iniziamo a studiarlo installandone un’istanza privata.

Per installare Ethereum seguiamo queste istruzioni che ci consentiranno di installare sul nostro ambiente linux geth.

Per prima cosa generiamo un account di minatore, ovvero, colui che elaborerà l’algoritmo per creare gli ethereum coins. La creazione dell’account produrrà una coppia di chiavi (pubblica e privata). Questa coppia di chiavi viene inserita all’interno della cartella data_dir/keystore. Qualsiasi cosa di persistente verrà scritta nella cartella data_dir.

Una volta creato l’account viene mostrato a video anche l’indirizzo del nodo address_number.

#creiamo la cartella principale e la cartella 'data' nella quale viene conservata il keystore
>mkdir myown
>mkdir myown/data
#creiamo il nuovo account nella cartella creata
>geth account new --datadir /home/studio/blockchain/myown/data/
Address: {cb0f0fc732ad30b021c52e317e59122e693bb585}

blocco genesis

Ora che abbiamo l’account possiamo creare il primo blocco ethereum. Chiamato genesis. Ogni blockchain di ethereum ha il suo primo blocco genesi. Per far sì che la nostra blockchain non vada in conflitto con altre blockchain dobbiamo modificare i valori networkId di default.

#genesis.json
  {
 "config": {
 "chainId": 1999, #networkId
 "homesteadBlock": 0,
 "eip155Block": 0,
 "eip158Block": 0
 },
 "difficulty": "200000000", #valore di difficoltà applicata per la scoperta di questo blocco
 "gasLimit": "2100000", #limite di gas (ethereum) per eseguire tutte le le transazioni nel blocco
 "alloc": { #preallocazione ethereum sul primo account
 "cb0f0fc732ad30b021c52e317e59122e693bb585": { "balance": "400000" }
 }
}

inizializzazione genesis e start mining

L’operazione di mining consente la generazione di ethereum in base a calcoli matematici. Di seguito un esempio…

>geth --datadir /home/studio/blockchain/myown/data init genesis.json
INFO [03-10|10:47:41] Maximum peer count ETH=25 LES=0 total=25
INFO [03-10|10:47:41] Allocated cache and file handles database=/home/studio/blockchain/myown/geth/chaindata cache=16 handles=16
INFO [03-10|10:47:41] Writing custom genesis block 
INFO [03-10|10:47:41] Persisted trie from memory database nodes=1 size=195.00B time=75.389µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [03-10|10:47:41] Successfully wrote genesis state database=chaindata hash=aa6b0d…0d8207
INFO [03-10|10:47:41] Allocated cache and file handles database=/home/studio/blockchain/myown/geth/lightchaindata cache=16 handles=16
INFO [03-10|10:47:41] Writing custom genesis block 
INFO [03-10|10:47:41] Persisted trie from memory database nodes=1 size=195.00B time=58.634µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [03-10|10:47:41] Successfully wrote genesis state database=lightchaindata hash=aa6b0d…0d8207

avvio blockchain con nodo da minatore. Il mining è possibile farlo anche dalla console.

geth --mine --rpc --rpcaddr 0.0.0.0 --rpccorsdomain "*" --networkid 1999 --datadir /home/studio/blockchain/myown/data/

Initialised chain configuration config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Engine: ethash}"
INFO [03-10|10:54:03] Disk storage enabled for ethash caches dir=/home/studio/blockchain/myown/data/geth/ethash count=3
INFO [03-10|10:54:03] Disk storage enabled for ethash DAGs dir=/home/studio/.ethash count=2
INFO [03-10|10:54:03] Initialising Ethereum protocol versions="[63 62]" network=1999

colleghiamo la geth console

per collegare la geth console con il nodo di mining appena creato basta applicare il seguente script su un altro terminale

>geth --datadir /home/studio/blockchain/myown/data/ attach ipc:/home/studio/blockchain/myown/data/geth.ipc

instance: Geth/v1.8.1-stable-1e67410e/linux-amd64/go1.9.4
coinbase: 0xcb0f0fc732ad30b021c52e317e59122e693bb585
at block: 0 (Thu, 01 Jan 1970 01:00:00 CET)
 datadir: /home/studio/blockchain/myown/data
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
Welcome to the Geth JavaScript console!

in questo caso la console si connette al nodo attraverso pipe ipc (interprocesse) che funziona sul computer locale.

Dalla consolle possiamo eseguire le prime istruzioni

> eth.accounts
["0xcb0f0fc732ad30b021c52e317e59122e693bb585"]
> eth.coinbase
["0xcb0f0fc732ad30b021c52e317e59122e693bb585"]
> eth.getBalance(eth.coinbase)
2.3229485729235784806170624e+25

 

Predizione di un evento attraverso Naive Bayes OnLine

InformaticaGestionale.it propone ai suoi lettori il nuovo servizio online che sfrutta il teorema di Bayes per fare predizioni di qualsiasi tipo grazie ad un set di dati storici eseguiti su specifici attributi. L’obiettivo è predire un determinato target o valore a partire da un nuovo set di attributi.

Questo può essere utile in moltissimi campi di applicazione: dal sociale alla medicina, dalla manutenzione alla produzione industriale.

Ecco una carrellata di esempi:

  1. lotti di produzione PC difettosi sulla base di attributi come temperatura (alta, media, bassa), velocità di produzione, tipo PC (standard, custom), qualità materiali (ottimo, scarso, buono). Riusciamo quindi ad identificare se un lotto sarà difettoso oppure no.
  2. l’acquisto di un prodotto da parte di un potenziale cliente in base ad attributi quali dimensioni azienda (piccola, media o grossa), tipologia azienda (servizi o manifatturiera), prezzo del prodotto.
  3. capire se una persona ha una determinata malattia sulla base di attributi quali sintomi, sesso, esami che determinano se l’individuo è malato oppure no.
  4. capire se un macchinario industriale ha bisogno di manutenzione (in modo da prevenire eventuali guasti) sulla base del tempo di funzionamento, velocità di produzione, complessità del prodotto (semplice, medio, complesso).

Il modello matematico utilizzato è basato su record storici che sono stati preventivamente inseriti (training_set). In base a questi record è possibile predire una determinata condizione preventivamente inserita nel testing_set.

Il calcolo della probabilità condizionata per ognuna delle casistiche determina la probabilità che si verifichi l’evento 1 oppure l’evento 2.

La predizione verrà orientata sull’evento con più alta probabilità.


 

ad esempio:

Data la seguente traingin table, vogliamo predire il valore della riga segnata in giallo (testing table)

 

TIPO AUTO TIPO GUIDA TIPO STRADA KM PERCORSI PREZZO AUTO TARGET
SUV SPORTIVA MISTO 4000 65000 NO MANUTENZIONE
UTILITARIA PASSEGGIO CITTA 80000 30000 MANUTENZIONE
SUV PASSEGGIO MISTO 15000 80000 NO MANUTENZIONE
UTILITARIA SPORTIVA CITTA 8000 20000 MANUTENZIONE
MONOVOLUME SPORTIVA MISTO 4000 65000 NO MANUTENZIONE
MONOVOLUME LAVORO CITTA 80000 40000 NO MANUTENZIONE
SUV LAVORO MISTO 250000 120000 MANUTENZIONE
UTILITARIA LAVORO AUTOSTRADA 70000 10000 MANUTENZIONE
UTILITARIA SPORTIVA MISTO 200000 12000 TO PREDICT

 

Secondo Naive Bayes il valore predetto è MANUTENZIONE : 3.6747338165603E-13

Se, invece di mettere 200.000 km percorsi mettiamo solo 20.000km allora la macchina risulta in NO MANUTENZIONE

qui l’esempio, potete provare a cambiare il testing set e visualizzare il valore predetto: ESEMPIO1

Clicca qui per la DEMO

Caso d’uso IOT: gestione parco macchine aziendale attraverso l’interfaccia OBD2 e TAG NFC

In questo articolo vorremmo porre l’attenzione sulla gestione del parco macchine aziendale.

Le tecnologie utilizzate sono:

    • interfaccia ODB2 acquistabile online a poco prezzo. Di seguito alcuni esempi
  • app per smartphone da scaricare per accedere tramite bluetooth all’interfaccia ODB2
  • flowItems

Molte delle app messe a disposizione integrano le funzionalità dello smartphone (GPS, navigatore, connettività) con le funzionalità dell’interfaccia ODB2.

Oltre a dare informazioni relative alla diagnosi dell’automobile, alla velocità, ai giri motori ecc.. le app sono in grado di tracciare il percorso dell’automobile, di definire lo stile di guida del conducente (accelerazioni, brusche frenate), il numero dei km effettuati…

tutto questo è possibile spendendo relativamente poco e può farlo chiunque sia dotato di un automobile.

La nostra soluzione integrata offre ulteriori funzionalità per la gestione del parco macchine.

Grazie alla connettività degli smartphone è possibile collegarsi istantaneamente al nostro servizio in cloud ed è possibile impostare il prossimo tagliando, il numero di km effettuati, chi e come viene utilizzata la macchina, il tempo medio di guida, il costo del carburante, i consumi, lo stato dell’automobile…inoltre il sistema avvisa attraverso “alert” (telegram o email) quando sta per scadere una revisione o quando l’auto ha bisogno di manutenzione. Attraverso l’interfaccia OBD2, se ci sono problemi, viene inviato un segnale in remoto che imposta lo stato della macchina “in manutenzione”.

Tutte le informazioni vengono messe a disposizione dal sistema con l’obiettivo di ottimizzare e controllare i costi attuali e futuri.

Oltre a questo, in qualsiasi momento, possiamo interagire con il sistema semplicemente avvicinando lo smartphone al tag NFC oppure scannerizzando il QRCode che viene associato al momento della creazione dell’anagrafica dell’automobile.

I tag NFC sono acquistabili su questi link

Molti smartphone sono dotati di lettore NFC, altrimenti si può scegliere un lettore

Diagramly, guida semplice e pratica per disegnare flussi

Vogliamo segnalare una buona guida pratica per disegnare flussi operativi.

Ringraziamo il blog www.jenreviews.com per averci segnalato la preziosa guida.

https://www.jenreviews.com/how-to-draw-better/