Esempio Linqpad per Bitcoin Cash via BitcoinLib

L’ottima libreria c# BitcoinLib permette di accedere e interrogare la rete Bitcoin Cash  e anche BTC, DASH e altre.

Per provarla  ho creato un esempio in LinqPad.

Per cominciare bisogna installare nella query LinqPad la libreria BitcoinLib da NuGet (basta premere F4 in LinqPad e poi il pulsante Add Nuget ) .

Ora potete aggiungere la prima riga di codice:

 // Create a coinservice 
ICoinService CoinService = new BitcoinService(useTestnet: true);
 

Se la lanciate così non può funzionare! Infatti la libreria in realtà per funzionare deve essere configurata premendo di nuovo F4 e mettendo in app.config questo xml:

 
<configuration>
<startup>
<supportedruntime sku=".NETFramework,Version=v4.6.1" version="v4.0">
</supportedruntime></startup>
<appsettings>
<!-- BitcoinLib settings start -->
<!-- Shared RPC settings start -->
<add key="RpcRequestTimeoutInSeconds" value="60" />
<!-- Shared RPC settings end -->
<!-- Bitcoin settings start -->
<add key="Bitcoin_DaemonUrl" value="http://localhost:8332" />
<add key="Bitcoin_DaemonUrl_Testnet" value="http://localhost:18332" />
<add key="Bitcoin_WalletPassword" value=""/>
<add key="Bitcoin_RpcUsername" value="USERNAME" />
<add key="Bitcoin_RpcPassword" value="Pwd_cambia_questo" />
<!-- Bitcoin settings end -->

<!-- Demo client settings start -->
<add key="ExtractMyPrivateKeys" value="false" />
<!-- Demo client settings end -->
<!-- BitcoinLib settings end -->
</appsettings>
</configuration>
 

Ancora non funziona! Infatti come si intuisce dal file di configurazione la libreria necessita di un nodo della rete Bitcoin a cui puntare per funzionare. Niente di più facile! 😀 Basta scaricare un client Bitcoin, io ad esempio ho scaricato Bitcoin ABC della blockchain Bitcoin Cash.

Se si fa partire sulla rete “main” richiede giorni per sincronizzarsi e occupa 120 giga sul disco ma per i test è sufficiente lanciarlo sulla rete “testnet” e salvare solo gli ultimi giorni di transazioni sul disco.

Per lanciarlo il comando è:

 bitcoin-qt.exe -prune=560 -testnet -server

e bisogna aggiungere in bitcoin.conf la stessa pwd configurata nell’app.config

 rpcuser=USERNAME
rpcpassword=Pwd_cambia_questo

In un paio di ore o meno dovrebbe sincronizzarsi.
Ora possiamo provare a aggiungere qualche cosa al codice di più interessante:

 
// ecco il balance del wallet! 
var myBalance = CoinService.GetBalance(minConf: 1);
myBalance.Dump("Balance"); 

se vi servono soldi sulla rete testnet basta andare su un faucet bitcoin cash e farseli mandare, yeah magic internet money.

oppure possiamo elencare la lista di transazioni:

CoinService.ListTransactions(null, int.MaxValue, 0)
.Select(t => new
{
Account = t.Account, // account receiving
Address = t.Address,
Category = t.Category, // receiving or sending
Amount = t.Amount,
Fee = t.Fee,
Confirmation = t.Confirmations,
TxId = new Hyperlinq("https://www.blocktrail.com/tBCC/tx/" + t.TxId,"check") ,
Time = t.Time + "-" + UnixTime.UnixTimeToDateTime(t.TimeReceived),
CoinService.GetTransaction(t.TxId).Details.First().Label // ?? can have more than one ?

}).Dump("Transactions");
 
 

Sono affascinato dalla “meccanica” della blockchain  e riuscire ad accederci tramite LinqPad e C# in maniera semplice e moderna la rende ancora più appetibile.

Esempio completo: Bitcoin Cash Linqpad example using BitcoinLib
Se non avete ancora Linqpad scaricatelo subito!
La pagina github da cui è tratto questo esempio: https://github.com/GeorgeKimionis/BitcoinLib/blob/master/demo/Program.cs

 Se volete stimolare il mio lavoro potete mandarmi qualche frazione di Bitcoin Cash a questo indirizzo:

1GovBxD4ZFThbWX9Bjw16AksxJq8D4PDQX

Oppure usare questo qrCode (BCH mi raccomando):