NEWS

Ethereum token ERC20 con java e web3j

Ethereum token ERC20 con java e web3j

Vi proponiamo una breve guida su come usare java con i token ERC20 di Ethereum

In questa breve guida parleremo di token ERC20 e di linguaggio di programmazione Java (Maven) con utilizzo della libreria web3j.

Questo breve tutorial parte da un contratto già caricato sulla blockchain di Ethereum. Qui trovate una breve guida per eseguire questa operazione.

 

Generiamo la classe java del nostro Smart Contract

 

Prima di tutto dovremo generare i file bin e abi partendo dal codice dello Smart Contract. Per questa operazione serve il compilatore solc che dovrete installare sul vostro PC. Seguite questa guida.

 

Poi dovremo posizionarci nella directory dove si trova il nostro Smart Contract. Nel nostra caso si chiama TokenERC20.sol e lo abbiamo copiato nella cartella resources del nostro progetto Maven. Se utilizzate lo stesso path tutti i comandi successivi saranno utilizzabili senza modifiche.

 

cd /depot/project/src/main/resources/

Quindi lanciamo il comando 

 

solc TokenERC20.sol --bin --abi --optimize -o .

Se l'operazione è andata a buon fine saranno creati nella stessa cartella i files

 

TokenERC20.abi

TokenERC20.bin

tokenRecipient.abi

tokenRecipient.bin

 

A questo punto dovremo creare un nuovo progetto utilizzando Maven, nel nostro progetto dovremo inserire la dipendenza web3j con il codice che segue. 

 

<dependency>

    <groupId>org.web3j</groupId>

    <artifactId>core</artifactId>

    <version>4.2.0</version>

</dependency>

 

    <dependency>

    <groupId>org.web3j</groupId>

    <artifactId>crypto</artifactId>

    <version>4.2.0</version>

</dependency>

Maggiori dettagli sul funzionamento di questa libreria sono disponibili sul sito ufficiale: https://docs.web3j.io/

 

Per convertire i file bin e abi in una classe Java dovremo lanciare a questo punto il comando il command line tools di web3j. 

 

Su vostro Mac per installarlo dovrete eseguire queste istruzioni:

 

brew tap web3j/web3j

brew install web3j

Maggiori informazioni sul Command Line Tools sono disponibili qui: https://web3j.readthedocs.io/en/latest/command_line.html
 

https://web3j.readthedocs.io/en/latest/command_line.html

 

web3j solidity generate -b TokenERC20.bin -a TokenERC20.abi -o ../java -p com.example.ethereum.contracts

Questa la sintassi completa 

 

web3j solidity generate [-hV] [-jt] [-st] -a=<abiFile> [-b=<binFile>] -o=<destinationFileDir> -p=<packageName>

Se tutto è andato a buon fine la nostra classe java sarà disponibile nel package com.example.ethereum.contracts, con il nome TokenERC20.

 

Un piccolo programma di esempio

 

A questo punto dovremmo poter interagire con il nostro Smart Contract utilizzando java come linguaggio di programmazione. 

 

Andremo ad inserire la private key e l'indirizzo utente utilizzatore del token, vi consiglio di utilizzare Metamask per questo utente.

 

private final static String PRIVATE_KEY = "XXX...";  

private final static String RECIPIENT = "0xXXXX...";

Inseriamo l'indirizzo del contratto creato un un wallet diverso, in questo caso abbiamo usato l'Ethereum Wallet

 

private final static String CONTRACT_RECIPIENT = "0x0XXXX...;

Ora possiamo instanziare Web3j collegando alla rete di test ropsten, utilizzando il framework infura: https://infura.io

 

Web3j web3j = Web3j.build(new HttpService("https://ropsten.infura.io/v3/TOKEN"));

Una volta stabilita la connessione possiamo provare a chiedere il saldo delle utente su Metamask utilizzando questa istruzione

 

BigInteger wei = web3j.ethGetBalance(RECIPIENT, DefaultBlockParameterName.LATEST).sendAsync().get().getBalance();

Possiamo caricare un'istanza del nostro Smart Contract

 

ContractGasProvider contractGasProvider = new DefaultGasProvider();

        TokenERC20 tokenUser = TokenERC20.load(CONTRACT_RECIPIENT, web3j, getCredentialsFromPrivateKey(), contractGasProvider);

Questa la funzione getCredentialsFromPrivateKey()

 

private static Credentials getCredentialsFromPrivateKey() {

      return Credentials.create(PRIVATE_KEY);

  }

Possiamo richiedere il balance del nostro token definito nello Smart Contract per l'utente Metamask

 

BigInteger wei = tokenUser.balanceOf(RECIPIENT).sendAsync().get();

Ed infine utilizzando il proprietario del token (Admin), possiamo trasferire all'utente su Metamask altri token e chiedere nuovamente il saldo (balance)

 

TokenERC20 tokenAdmin = TokenERC20.load(CONTRACT_RECIPIENT, web3j, getCredentialsFromPrivateKeyAdmin(), contractGasProvider);

TransactionReceipt receipt = tokenAdmin.transfer(RECIPIENT, new BigInteger("50000").multiply(new BigInteger("1000000000000000000"))).sendAsync().get();

BigInteger wei = tokenAdmin.balanceOf(RECIPIENT).sendAsync().get();        

Utilizziamo il multiply per rendere meglio leggibile il numero di token trasferiti che devono essere sempre moltiplicati per 1000000000000000000, perchè il trasferimento avviene sempre in Wei, e ne occorrono 1000000000000000000 per ottenere un Ether.

 

Questa la funzione getCredentialsFromPrivateKeyAdmin() che recupera le credenziali di Ethereum Wallet direttamente dal mio file system locale.

 

private static Credentials getCredentialsFromPrivateKeyAdmin() throws IOException, CipherException {

      return  WalletUtils.loadCredentials("PASSWORD", "/Users/cryptox/Library/Ethereum/testnet/keystore/UTC--2019-04-09T08-35-25.402608000Z--XXXXXXXXXX");

  }


Ross Evans

Appassionato di criptovalute, blockchain e sistemi di pagamento. 

Donate

12yDuRua58dCr3DySZfKXiDEgjcA7jJe49
0x883643620C5C4056819d98a969d1ad44ea14AF9f
0xcc5D19Cb2CDEC665D395209112a8b8a895f2C429

GUADAGNA CRIPTOVALUTE CON CRYPTOX.IT

Se alla fine dell'articolo trovi "Guadagna cripto condividento questo contenuto" potrai guadagnare criptovalute condividendo il contenuto sui tuoi social o tra i tuoi amici, leggi il regolamento.

COMMENTS


PARTNER

CRYPTO RATES

24h 24h Vol Price
BTC +2,54 53.923,69M 48.292,19 EUR
ETH -4,81 33.145,95M 2.999,45 EUR
RPD +15.989.979,42 0,40M 18,45 EUR
BNB -0,31 2.875,22M 519,76 EUR
DOGE +16,25 22.327,62M 0,59 EUR
XRP -2,97 5.823,83M 1,30 EUR
USDT -0,69 131.097,43M 0,82 EUR
ADA -5,84 3.878,79M 1,32 EUR
DOT -3,73 1.890,10M 32,66 EUR
BCH -1,30 6.361,81M 1.146,97 EUR
aggiornato 2 minuti fa da coinmarketcap.com

POPULAR VIDEOS

POPULAR BOOKS

The Bitcoin Standard
The Bitcoin Standard
by Saifedean Ammous Dec 06, 2020
Compra su Amazon
The Mystery Of Banking
The Mystery Of Banking
by Murray N. Rothbard Dec 06, 2019
Compra su Amazon
Mastering Bitcoin
Mastering Bitcoin
by Andreas M. Antonopoulos Nov 12, 2020
Compra su Amazon
Flash Boys
Flash Boys
by Michael Lewis Nov 19, 2019
Compra su Amazon

POPULAR TWEETS

@AndrewNation13 @AndrewNation13 - 21 hours ago Latest Ripple XRP News @Kevin_Cage_ #XRP #cryptocurrency #bestcrypto https://t.co/VAGjl5MGGo

  • 17
  • 2

Agostino Mario Mela @agostinomela - 7 hours ago Si chiamano criptovalute perché per la stragrande maggioranza delle persone sono e saranno sempre un grande mistero.

  • 14
  • 0

FREE MCAFEE - Freedom Club @ostvest - 23 hours ago La mia microazienda, come sapranno i miei affezionatissimi lettori, accantona il 10% delle fatture in ingresso in criptovalute. Ecco il portafoglio ad oggi. NOT FINANCIAL ADVICE - YES LIFE ADVICE https://t.co/iiZU71sNaX

  • 8
  • 0

IOTA - The next generation of Crypto @IotaBullrun2020 - 21 hours ago #IOTA + #INTEL + #DELL = WORKS $iota $miota #miota #altcoins #altcoin #altseason #btc #bitcoin #usdt #binance #bnb https://t.co/p1tutJZfQa

  • 7
  • 2

ハデス @ripple_chan - 23 hours ago AI inside https://t.co/PY166U65br

  • 7
  • 1

CRYPTO NETWORK

Reward Block Difficulty
BTC 6 682449 20.608.845M
ETH 2 12389569 7.470.847.865M
BCH 6 686885 446.535M
UNO 0 1331510 368.211M
XMR 2 2355926 289.099M
DASH 1 1467121 199M
LTC 12 2048442 12M
ZEC 2 1241587 97M
ZEN 3 928985 33M
ETC 3 12697629 403.997.000M
aggiornato 16 ore fa da coinwarz.com

PODCAST


LINKS