Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: CI

on:
push:
branches: [master]
pull_request:
branches: [master]

jobs:
analyze:
runs-on: ubuntu-latest
strategy:
matrix:
sdk: [3.4.0, stable]
steps:
- uses: actions/checkout@v6
- uses: dart-lang/setup-dart@v1
with:
sdk: ${{ matrix.sdk }}
- run: dart pub get
- run: dart analyze
- run: dart format --set-exit-if-changed .

test:
runs-on: ubuntu-latest
strategy:
matrix:
sdk: [3.4.0, stable]
steps:
- uses: actions/checkout@v6
- uses: dart-lang/setup-dart@v1
with:
sdk: ${{ matrix.sdk }}
- run: dart pub get
- run: dart test

dry-run:
runs-on: ubuntu-latest
needs: [analyze, test]
steps:
- uses: actions/checkout@v6
- uses: dart-lang/setup-dart@v1
with:
sdk: stable
- run: dart pub get
- run: dart pub publish --dry-run
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ build/
# Omit committing pubspec.lock for library packages; see
# https://dart.dev/guides/libraries/private-files#pubspeclock.
pubspec.lock

# Generated documentation (pub.dev generates this automatically)
doc/
35 changes: 17 additions & 18 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,39 @@
# 0.0.7
## 0.1.0

## Updates
- **Breaking**: Removed `freezed` and `json_serializable` code generation dependencies
- Migrated `TransactionRequest` to a hand-written `final class` with Dart 3.4+ features
- Updated SDK constraint to `>=3.4.0 <4.0.0`
- Typed `QueryString.parse` return to `Map<String, String>`
- Removed all `dynamic` types from public and internal APIs
- Expanded test suite from 2 to 34 tests covering error cases, model tests, and round-trips
- Updated `analysis_options.yaml` to remove code-gen excludes
- Updated `lints` to ^5.1.1 and `test` to latest

- Upgrade dependencies
## 0.0.7

# 0.0.6
- Upgrade dependencies

## Updates
## 0.0.6

- Update all outdated dependencies
- Add DartDoc comments to model `TransactionRequest`

# 0.0.5

## Updates
## 0.0.5

- dartdoc

# 0.0.4

## Updates
## 0.0.4

- Upgrade dependencies

# 0.0.3

## Bug Fixes
## 0.0.3

- Scientific notation conversion

# 0.0.2

## Updates
## 0.0.2

- Added `TransactionRequest` model

# 0.0.1
## 0.0.1

- Initial version.
87 changes: 58 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,49 @@
# eth_url_parser

eth_url_parser is translated from https://www.npmjs.com/package/eth-url-parser
A Dart library for parsing and building Ethereum URLs according to [ERC-681](https://eips.ethereum.org/EIPS/eip-681) and [ERC-831](https://eips.ethereum.org/EIPS/eip-831).

Module that supports parsing / parsing of all the different ethereum standard urls: [ERC-681](https://eips.ethereum.org/EIPS/eip-681) and [ERC-831](https://eips.ethereum.org/EIPS/eip-831)
Translated from the JavaScript [eth-url-parser](https://www.npmjs.com/package/eth-url-parser) package.

This module contains two functions:
## Features

## `EthUrlParser.parse(string)`
- Parse Ethereum URIs into strongly-typed `TransactionRequest` objects
- Build valid Ethereum URIs from `TransactionRequest` objects
- Supports ERC-681 parameters: `value`, `gas`, `gasLimit`, `gasPrice`
- Supports ERC-20 `transfer` function calls
- ENS name resolution support
- Chain ID support
- No code generation required -- pure Dart

Takes in a string of an Ethereum URL and returns an object matching that URL according to the previously mentioned standards
The returned object looks like this:
## Installation

```dart
TransactionRequest(
scheme: 'ethereum',
targetAddress: '0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD', // ENS names are also supported!
functionName: 'transfer',
chainId: 1,
parameters: {
'value': '2014000000000000000', // (in WEI)
'gas': '45000', // can be also gasLimit
'gasPrice': '50',
},
)
```

## `EthUrlParser.build(TransactionRequest transactionRequest)`
Add to your `pubspec.yaml`:

Takes in an object representing the different parts of the ethereum url and returns a string representing a valid ethereum url
```yaml
dependencies:
eth_url_parser: ^0.1.0
```

## Usage

### Parsing an Ethereum URL

```dart
import 'package:eth_url_parser/eth_url_parser.dart';

final TransactionRequest transactionRequest = EthUrlParser.parse(
'ethereum:0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD',
final request = EthUrlParser.parse(
'ethereum:0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD?value=2.014e18&gas=45000',
);
print(transactionRequest.targetAddress);
// '0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD'
print(request.targetAddress); // 0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD
print(request.parameters['value']); // 2014000000000000000
print(request.parameters['gas']); // 45000
```

### Building an Ethereum URL

```dart
import 'package:eth_url_parser/eth_url_parser.dart';

final String uri = EthUrlParser.build(
final uri = EthUrlParser.build(
TransactionRequest(
targetAddress: '0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD',
functionName: 'transfer',
Expand All @@ -50,7 +53,33 @@ final String uri = EthUrlParser.build(
},
),
);
print('$uri');
// 'ethereum:0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD/transfer?address=0x12345&uint256=1'
print(uri);
// ethereum:0x1234DEADBEEF5678ABCD1234DEADBEEF5678ABCD/transfer?address=0x12345&uint256=1
```

### The `TransactionRequest` model

```dart
TransactionRequest(
scheme: 'ethereum', // default
targetAddress: '0x...', // required
functionName: 'transfer', // optional
prefix: 'pay', // optional (ERC-831)
chainId: 1, // optional
parameters: { // optional
'value': '1000000000000000000',
'gas': '21000',
},
)
```

## API Reference

### `EthUrlParser.parse(String uri)`

Parses an Ethereum URI string and returns a `TransactionRequest`.
Throws an `Exception` for invalid URIs.

### `EthUrlParser.build(TransactionRequest request)`

Builds an Ethereum URI string from a `TransactionRequest` object.
7 changes: 0 additions & 7 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,6 @@ include: package:lints/recommended.yaml
# rules:
# - camel_case_types

analyzer:
exclude:
- "**/*.g.dart"
- "**/*.freezed.dart"
errors:
invalid_annotation_target: ignore

# For more information about the core and recommended set of lints, see
# https://dart.dev/go/core-lints

Expand Down
108 changes: 0 additions & 108 deletions doc/api/__404error.html

This file was deleted.

1 change: 0 additions & 1 deletion doc/api/categories.json

This file was deleted.

Loading
Loading