dart_web3

Creator: coderz1093

Last updated:

0 purchases

dart_web3 Image
dart_web3 Images

Languages

Categories

Add to Cart

Description:

dart web3

dart_web3 #
A dart library that connects and interact with the Ethereum blockchain. It connects to an Ethereum node to send transactions, interact with smart contracts and much more!
Features #

Connect to an Ethereum node with the rpc-api, call common methods
Send signed Ethereum transactions
Generate private keys, setup new Ethereum addresses
Call functions on smart contracts and listen for contract events
Code generation based on smart contract ABI for easier interaction

TODO #

Encode all supported solidity types, although only (u)fixed, which are not commonly used, are not supported at the moment.

Usage #
Credentials and Wallets #
In order to send transactions on the Ethereum network, some credentials are required. The library supports raw private keys and v3 wallet files.
import 'dart:math'; //used for the random number generator

import 'package:dart_web3/dart_web3.dart';
// You can create Credentials from private keys
Credentials fromHex = EthPrivateKey.fromHex("c87509a[...]dc0d3");

// Or generate a new key randomly
var rng = Random.secure();
Credentials random = EthPrivateKey.createRandom(rng);

// In either way, the library can derive the public key and the address
// from a private key:
var address = await credentials.extractAddress();
print(address.hex);
copied to clipboard
Another way to obtain Credentials which the library uses to sign transactions is the usage of a wallet file. Wallets store a private key securely and require a password to unlock. The library has experimental support for version 3 wallets commonly generated by other Ethereum clients:
import 'dart:io';
import 'package:dart_web3/dart_web3.dart';

String content = File("wallet.json").readAsStringSync();
Wallet wallet = Wallet.fromJson(content, "testpassword");

Credentials unlocked = wallet.privateKey;
// You can now use these credentials to sign transactions or messages
copied to clipboard
You can also create Wallet files with this library. To do so, you first need the private key you want to encrypt and a desired password.
Then, create your wallet with
Wallet wallet = Wallet.createNew(credentials, "password", random);
print(wallet.toJson());
copied to clipboard
You can also write wallet.toJson() into a file which you can later open with MyEtherWallet (select Keystore / JSON File) or other Ethereum clients like geth.
Custom credentials
If you want to integrate dart_web3 with other wallet providers, you can implement Credentials and override the appropriate methods.
Connecting to an RPC server #
The library won't send signed transactions to miners itself. Instead,it relies on an RPC client to do that. You can use a public RPC API like infura, setup your own using geth or, if you just want to test things out, use a private testnet with truffle and ganache. All these options will give you an RPC endpoint to which the library can connect.
import 'package:http/http.dart'; //You can also import the browser version
import 'package:dart_web3/dart_web3.dart';

var apiUrl = "http://localhost:7545"; //Replace with your API

var httpClient = Client();
var ethClient = Web3Client(apiUrl, httpClient);

var credentials = ethClient.credentialsFromPrivateKey("0x...");

// You can now call rpc methods. This one will query the amount of Ether you own
EtherAmount balance = ethClient.getBalance(credentials.address);
print(balance.getValueInUnit(EtherUnit.ether));
copied to clipboard
Sending transactions #
Of course, this library supports creating, signing and sending Ethereum transactions:
import 'package:dart_web3/dart_web3.dart';

/// [...], you need to specify the url and your client, see example above
var ethClient = Web3Client(apiUrl, httpClient);

var credentials = ethClient.credentialsFromPrivateKey("0x...");

await client.sendTransaction(
credentials,
Transaction(
to: EthereumAddress.fromHex('0xC91...3706'),
gasPrice: EtherAmount.inWei(BigInt.one),
maxGas: 100000,
value: EtherAmount.fromUnitAndValue(EtherUnit.ether, 1),
),
);
copied to clipboard
Missing data, like the gas price, the sender and a transaction nonce will be obtained from the connected node when not explicitly specified. If you only need the signed transaction but don't intend to send it, you can use client.signTransaction.
Smart contracts #
The library can parse the abi of a smart contract and send data to it. It can also listen for events emitted by smart contracts. See this file for an example.
Dart Code Generator #
By using Dart's build system, dart_web3 can generate Dart code to easily access smart contracts.
To use this feature, put a contract abi json somewhere into lib/.
The filename has to end with .abi.json.
Then, add a dev_dependency on the build_runner package and run
pub run build_runner build
copied to clipboard
You'll now find a .g.dart file containing code to interact with the contract.
Optional: Ignore naming suggestions for generated files
If importing contract ABIs with function names that don't follow dart's naming conventions, the dart analyzer will (by default) be unhappy about it, and show warnings.
This can be mitigated by excluding all the generated files from being analyzed.
Note that this has the side effect of suppressing serious errors as well, should there exist any. (There shouldn't as these files are automatically generated).
Create a file named analysis_options.yaml in the root directory of your project:
analyzer:
exclude:
- '**/*.g.dart'
copied to clipboard
See Customizing static analysis for advanced options.
NOTE. #
This package was clone of web3dart version 2.3.3 originally created by @simolus3.
This is one of the popular packages for dapp development in flutter eco-system, but yesterday(04-02-2022) web3dart is discontinued by its owner and marked as read-only.
So I decided to release it as dart_web3 for the community.
From the original creator of web3dart:
I no longer want to support, contribute to, or be associated with cryptocurrencies and web3. So, the package is marked as discontinued and the repository is archived.
If anyone wants to continue maintaining this package, please get in touch.
copied to clipboard
Feature requests and bugs #
Please file feature requests and bugs at the issue tracker.
If you want to contribute to this library, please submit a Pull Request.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.