패키지, 저장소 및 앱 카테고리 검색

패키지 상세v3.0.3

web3dart

이더리움 클라이언트에 연결하기 위한 Celo 호환 Dart 라이브러리입니다. 거래를 보내고 스마트 계약과 상호 작용하세요! Celo에서는 `feeCurrencies`를 사용하여 거래 수수료를 지불합니다.

AndroidiOSWebmacOSWindowsLinux
30일 다운로드
4.3만
좋아요
527
Pub 점수
160

패키지 설치

flutter pub add web3dart

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

web3dart는 이더리움 호환 블록체인 네트워크(예: Celo 포함)와의 통합을 가능하게 하는 Dart 라이브러리입니다. 개발자들이 이더리움 클라이언트에 연결하고, Flutter 애플리케이션에서 직접 거래를 전송하며 스마트 계약과 상호작용할 수 있도록 해줍니다. 이 라이브러리는 Celo의 `feeCurrencies` 기능을 통해 다양한 통화로 수수료를 지불할 수 있도록 지원하여 사용자에게 더 큰 유연성을 제공합니다. 크로스플랫폼 사용을 위해 설계되어 Android, iOS, 웹, 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 개

소스 저장소

이 패키지를 사용하는 프로젝트