搜尋套件、儲存庫與 APP 分類

套件詳情v3.0.3

web3dart

一個與 Celo 相容的 Dart 庫,用於連接以太坊客戶端。發送交易並與智慧合約互動!在 Celo 上使用 `feeCurrencies` 支付交易手續費。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
4.3萬
喜歡數
527
Pub 分數
160

安裝套件

flutter pub add web3dart

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

web3dart 是一個 Dart 庫,可實現與以太坊相容的區塊鏈網路(包括 Celo)的整合。它允許開發者連接到以太坊客戶端,從 Flutter 應用程式中直接發送交易並與智慧合約互動。該庫支援透過 Celo 的 `feeCurrencies` 功能使用多種貨幣支付費用,為使用者提供更高的彈性。專為跨平台使用設計,可在 Android、iOS、Web、macOS、Windows 和 Linux 上順暢運行。非常適合建構具備區塊鏈功能的去中心化應用(dApps)。

適用情境

  • 使用 Celo 結合建構 dApps
  • 從 Flutter 應用發送交易
  • 與以太坊智慧合約互動
  • 在移動/網頁應用中啟用錢包連接
  • 支援多貨幣交易手續費

主要特色

  • Celo 相容性
  • 跨平台支援
  • 智慧合約互動
  • 多幣種費用支付
  • 以太坊客戶端連接

適合對象

  • Flutter 開發人員建構區塊鏈應用
  • 需要 Celo 網路存取權限的專案
  • 需要交易簽名的 dApps
  • 具有加密功能的行動和網頁應用
  • 針對多平台的開發者

使用建議

  • 需要了解區塊鏈概念
  • 需要對私鑰進行安全處理
  • 依賴外部以太坊節點
  • 可能需要為測試網進行額外設定
  • 與成熟庫相比,文件較少

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

pub package likes points popularity license stars forks sdk version

A Celo compatible Dart library to connect to Ethereum clients. Send transactions and interact with smart contracts! Pay transaction fees using feeCurrencies on Celo.

Features

  • Celo compatible
  • 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:web3dart/web3dart.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 = credentials.address;
print(address.hex);

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:web3dart/web3dart.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

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());

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 web3dart 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:web3dart/web3dart.dart';

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

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

var credentials = EthPrivateKey.fromHex("0x...");
var address = credentials.address;

// You can now call rpc methods. This one will query the amount of Ether you own
EtherAmount balance = ethClient.getBalance(address);
print(balance.getValueInUnit(EtherUnit.ether));

Sending transactions

Of course, this library supports creating, signing and sending Ethereum transactions:

import 'package:web3dart/web3dart.dart';

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

var credentials = EthPrivateKey.fromHex("0x...");

await client.sendTransaction(
  credentials,
  Transaction(
    to: EthereumAddress.fromHex('0xC91...3706'),
    gasPrice: EtherAmount.inWei(BigInt.one),
    maxGas: 100000,
    value: EtherAmount.fromUnitAndValue(EtherUnit.ether, 1),
  ),
);

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, web3dart can generate Dart code to easily access smart contracts.

Install web3dart_builders package

pub add web3dart_builders --dev

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

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'

See Customizing static analysis for advanced options.

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.

Testing

dart test test

所屬分類

依賴

依賴清單 12 項

原始碼儲存庫

使用此套件的專案