Skip to content

Commit

Permalink
v2.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
slvler committed Dec 30, 2024
1 parent ff165e0 commit 8c0f295
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 61 deletions.
Empty file added CONTRIBUTING.md
Empty file.
File renamed without changes.
48 changes: 10 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,132 +1,104 @@
# Etherscan Service

[![tests](https://github.com/slvler/etherscan-service/actions/workflows/tests.yml/badge.svg)](https://github.com/slvler/etherscan-service/actions/workflows/tests.yml)
[![Latest Stable Version](https://poser.pugx.org/slvler/ether/v)](https://packagist.org/packages/slvler/ether)
[![Latest Unstable Version](https://poser.pugx.org/slvler/ether/v/unstable)](https://packagist.org/packages/slvler/ether)
[![License](https://img.shields.io/github/license/slvler/etherscan-service)](https://packagist.org/packages/slvler/ether)
[![Latest Stable Version](https://img.shields.io/packagist/v/slvler/ether.svg)](https://packagist.org/packages/slvler/ether)
[![Total Downloads](https://poser.pugx.org/slvler/ether/downloads)](https://packagist.org/packages/slvler/ether)

[![License](https://poser.pugx.org/slvler/ether/license)](https://packagist.org/packages/slvler/ether)

An api service for etherscan.io

## Installation
## Requirements
- PHP 8.2
- Laravel 9.x | 10.x | 11.x

## Installation
To install this package tou can use composer:

```bash
composer require slvler/ether
```

## Usage

- First, you should extract the config/etherscan.php file to the config folder.

```php
php artisan vendor:publish --tag=ether
```

- First of all we'll add the API key and API Url of the service we're using to our .env file of our project. If you don't have an account yet on api.etherscan.io, you should create one. Once you have an account you can copy your API key from the dashboard page and put it into you .env file.

```php
ETHERSCAN_BASE_URL=https://api.etherscan.io/
ETHERSCAN_API_KEY=YOUR-API-KEY
```

- This is how you can connect to the etherscan api service.
- Returns the Ether balance of a given address.

```php
$ether = new EtherScanService();
$ether->balance('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae');
```

- Returns the balance of the accounts from a list of addresses.

```php
$data = [
'0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a',
'0x63a9975ba31b0b9626b34300f7f627147df1f526',
'0x198ef1ec325a96cc354c7266a038be8b5c558f67'
];

$ether = new EtherScanService();
$ether->balance_multiple($data);
```
-
- Returns the list of transactions performed by an address, with optional pagination.

```php
$ether = new EtherScanService();
$ether->transactions_normal('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae');
```

- Returns the list of internal transactions performed by an address, with optional pagination.

```php
$ether = new EtherScanService();
$ether->transactions_internal('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae');
```

- Returns the list of internal transactions performed within a transaction.

```php
$ether = new EtherScanService();
$ether->transactions_internal_hash('0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170');
```

- Returns the list of internal transactions performed within a block range, with optional pagination.

```php
$ether = new EtherScanService();
$ether->transactions_internal_block_range();
```

- Returns the list of ERC-20 tokens transferred by an address, with optional filtering by token contract.

```php
$ether = new EtherScanService();
$ether->token_transfer_events_erc20();
```

- Returns the list of ERC-721 ( NFT ) tokens transferred by an address, with optional filtering by token contract.

```php
$ether = new EtherScanService();
$ether->token_transfer_events_erc721();
```

- Returns the list of ERC-1155 ( Multi Token Standard ) tokens transferred by an address, with optional filtering by token contract.

```php
$ether = new EtherScanService();
$ether->token_transfer_events_erc1155();
```

- Returns the list of blocks mined by an address.

```php
$ether = new EtherScanService();
$ether->address_blocks_mined();
```

- Returns the balance of an address at a certain block height. - PRO

```php
$ether = new EtherScanService();
$ether->balance_single_adress();
```

### Testing

```bash
composer test
```

## Credits

- [slvler](https://github.com/slvler)


## License
The MIT License (MIT). Please see [License File](https://github.com/slvler/etherscan-service/blob/main/LICENSE.md) for more information.

The MIT License (MIT). Please see [License File](https://github.com/slvler/etherscan-service/blob/main/README.md) for more information.
## Contributing
You're very welcome to contribute.
Please see [CONTRIBUTING](https://github.com/slvler/etherscan-service/blob/main/CONTRIBUTING.md) for details.
46 changes: 31 additions & 15 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,56 @@
{
"name": "slvler/ether",
"description": "Laravel etherscan.io api service",
"license": "MIT",
"description": "An api service for etherscan.io",
"type": "package",
"keywords": [
"etherscan",
"multichain",
"laravel",
"php"
],
"authors": [
{
"name": "slvler",
"email": "slvler@proton.me"
}
],
"homepage": "https://github.com/slvler/etherscan-service",
"require": {
"php": "^8.2",
"guzzlehttp/guzzle": "^7.2",
"illuminate/support": "^9.0|^10.0|^11.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.6",
"orchestra/testbench": "^7.0",
"phpunit/phpunit": "^9.5.8",
"laravel/pint": "^1.18"
},
"autoload": {
"psr-4": {
"slvler\\ether\\": "src/"
"Slvler\\Ether\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"slvler\\ether\\Tests\\": "tests/"
"Slvler\\Ether\\Tests\\": "tests/"
}
},
"require": {},
"require-dev": {
"orchestra/testbench": "^6.18.0",
"phpunit/phpunit": "^9.5",
"guzzlehttp/guzzle": "^7.0.1"
},
"scripts": {
"test": "vendor/bin/phpunit tests"
},
"extra": {
"laravel": {
"providers": [
"slvler\\ether\\EtherServiceProvider"
"Slvler\\Ether\\EtherServiceProvider"
]
}
},
"minimum-stability": "dev",
"scripts": {
"test": "vendor/bin/phpunit tests --colors=always",
"test-coverage": "vendor/bin/phpunit --coverage-html coverage",
"pint": "vendor/bin/pint",
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
},
"minimum-stability": "stable",
"prefer-stable": true
}
5 changes: 2 additions & 3 deletions config/etherscan.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
|
*/
'ether' => [
'etherscan_url' => env('ETHERSCAN_BASE_URL'),
'etherscan_key' => env('ETHERSCAN_API_KEY'),
'base_url' => env('ETHERSCAN_BASE_URL'),
'api_key' => env('ETHERSCAN_API_KEY'),
],

];
5 changes: 5 additions & 0 deletions src/Exception/ErrorException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Slvler\Ether\Exception;

class ErrorException {}
15 changes: 15 additions & 0 deletions src/Exception/MissingApiKey.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Slvler\Ether\Exception;

use InvalidArgumentException;

class MissingApiKey extends InvalidArgumentException
{
public static function create(): self
{
return new self(
'The Etherscan API Key is missing. Please publish the [etherscan.php] configuration file and set the [api_key].'
);
}
}
5 changes: 5 additions & 0 deletions src/Exception/MissingArgumentException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Slvler\Ether\Exception;

class MissingArgumentException {}
2 changes: 1 addition & 1 deletion src/Resources/Balance.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace slvler\ether\Resources;
namespace Slvler\Ether\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

Expand Down
15 changes: 11 additions & 4 deletions src/Services/EtherScanService.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
<?php

namespace slvler\ether\Services;
namespace Slvler\Ether\Services;

use slvler\ether\Resources\Balance;
use Slvler\Ether\Exception\MissingApiKey;
use Slvler\Ether\Resources\Balance;

class EtherScanService
{
Expand All @@ -12,8 +13,14 @@ class EtherScanService

public function __construct()
{
$this->base_url = config('etherscan.ether.etherscan_url');
$this->api_key = config('etherscan.ether.etherscan_key');

$apiKey = config('etherscan.ether.api_key');
if (empty($apiKey) || ! isset($apiKey)) {
throw MissingApiKey::create();
}

$this->base_url = config('etherscan.ether.base_url');
$this->api_key = $apiKey;

$this->client = new \GuzzleHttp\Client(
['base_uri' => $this->base_url]
Expand Down

0 comments on commit 8c0f295

Please sign in to comment.