All Projects → web3p → Web3.php

web3p / Web3.php

Licence: mit
A php interface for interacting with the Ethereum blockchain and ecosystem. Native ABI parsing and smart contract interactions.

Projects that are alternatives of or similar to Web3.php

Web3swift
Elegant Web3js functionality in Swift. Native ABI parsing and smart contract interactions.
Stars: ✭ 237 (-53.25%)
Mutual labels:  ethereum, smart-contracts, web3, hacktoberfest
Truffle
A tool for developing smart contracts. Crafted with the finest cacaos.
Stars: ✭ 11,909 (+2248.92%)
Mutual labels:  ethereum, smart-contracts, hacktoberfest
0x Tracker Client
React single page application which powers the frontend of 0x Tracker
Stars: ✭ 49 (-90.34%)
Mutual labels:  ethereum, web3, hacktoberfest
Alpha
Follow the white rabbit 🐇
Stars: ✭ 304 (-40.04%)
Mutual labels:  ethereum, smart-contracts, web3
Eth.social
An Ethereum dApp for posting social events.
Stars: ✭ 17 (-96.65%)
Mutual labels:  ethereum, smart-contracts, web3
Ethereum Php
PHP interface to Ethereum JSON-RPC API. Fully typed Web3 for PHP 7.X
Stars: ✭ 343 (-32.35%)
Mutual labels:  ethereum, smart-contracts, web3
Mythril
Security analysis tool for EVM bytecode. Supports smart contracts built for Ethereum, Hedera, Quorum, Vechain, Roostock, Tron and other EVM-compatible blockchains.
Stars: ✭ 1,968 (+288.17%)
Mutual labels:  ethereum, smart-contracts, hacktoberfest
Vyper.fun
Cryptozombies for Vyper: Learn Vyper by building games!
Stars: ✭ 42 (-91.72%)
Mutual labels:  ethereum, smart-contracts, hacktoberfest
Solidity Idiosyncrasies
Solidity gotchas, pitfalls, limitations, and idiosyncrasies.
Stars: ✭ 267 (-47.34%)
Mutual labels:  ethereum, smart-contracts, web3
Eth Crypto
Cryptographic javascript-functions for ethereum and tutorials to use them with web3js and solidity
Stars: ✭ 420 (-17.16%)
Mutual labels:  ethereum, smart-contracts, web3
Typechain
🔌 TypeScript bindings for Ethereum smart contracts
Stars: ✭ 769 (+51.68%)
Mutual labels:  ethereum, web3, hacktoberfest
Web3swift
Elegant Web3js functionality in Swift. Native ABI parsing and smart contract interactions on Ethereum network.
Stars: ✭ 462 (-8.88%)
Mutual labels:  ethereum, smart-contracts, web3
Ergo
The Language for Smart Legal Contracts
Stars: ✭ 108 (-78.7%)
Mutual labels:  ethereum, smart-contracts, hacktoberfest
Blockchainbooks.github.io
Blockchain Books
Stars: ✭ 139 (-72.58%)
Mutual labels:  ethereum, smart-contracts, web3
Web3.swift
A pure swift Ethereum Web3 library
Stars: ✭ 295 (-41.81%)
Mutual labels:  ethereum, smart-contracts, web3
React Ethereum Dapp Example
A starter boilerplate for an Ethereum dapp using web3.js v1.0, truffle, react, and parity
Stars: ✭ 384 (-24.26%)
Mutual labels:  ethereum, smart-contracts, web3
Nmr
The Numeraire Ethereum Smart Contract
Stars: ✭ 316 (-37.67%)
Mutual labels:  ethereum, smart-contracts
Uniswap V1
🐍Uniswap V1 smart contracts
Stars: ✭ 313 (-38.26%)
Mutual labels:  ethereum, smart-contracts
Populus
The Ethereum development framework with the most cute animal pictures
Stars: ✭ 315 (-37.87%)
Mutual labels:  ethereum, smart-contracts
Embark
Framework for serverless Decentralized Applications using Ethereum, IPFS and other platforms
Stars: ✭ 3,478 (+586%)
Mutual labels:  ethereum, smart-contracts

web3.php

PHP Build Status codecov Join the chat at https://gitter.im/web3-php/web3.php Licensed under the MIT License

A php interface for interacting with the Ethereum blockchain and ecosystem.

Install

Set minimum stability to dev

"minimum-stability": "dev"

Then

composer require sc0vu/web3.php dev-master

Or you can add this line in composer.json

"sc0vu/web3.php": "dev-master"

Usage

New instance

use Web3\Web3;

$web3 = new Web3('http://localhost:8545');

Using provider

use Web3\Web3;
use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;

$web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));

// timeout
$web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));

You can use callback to each rpc call:

$web3->clientVersion(function ($err, $version) {
    if ($err !== null) {
        // do something
        return;
    }
    if (isset($version)) {
        echo 'Client version: ' . $version;
    }
});

Eth

use Web3\Web3;

$web3 = new Web3('http://localhost:8545');
$eth = $web3->eth;

Or

use Web3\Eth;

$eth = new Eth('http://localhost:8545');

Net

use Web3\Web3;

$web3 = new Web3('http://localhost:8545');
$net = $web3->net;

Or

use Web3\Net;

$net = new Net('http://localhost:8545');

Batch

web3

$web3->batch(true);
$web3->clientVersion();
$web3->hash('0x1234');
$web3->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        // it may throw exception or array of exception depends on error type
        // connection error: throw exception
        // json rpc error: array of exception
        return;
    }
    // do something
});

eth

$eth->batch(true);
$eth->protocolVersion();
$eth->syncing();

$eth->provider->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        return;
    }
    // do something
});

net

$net->batch(true);
$net->version();
$net->listening();

$net->provider->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        return;
    }
    // do something
});

personal

$personal->batch(true);
$personal->listAccounts();
$personal->newAccount('123456');

$personal->provider->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        return;
    }
    // do something
});

Contract

use Web3\Contract;

$contract = new Contract('http://localhost:8545', $abi);

// deploy contract
$contract->bytecode($bytecode)->new($params, $callback);

// call contract function
$contract->at($contractAddress)->call($functionName, $params, $callback);

// change function state
$contract->at($contractAddress)->send($functionName, $params, $callback);

// estimate deploy contract gas
$contract->bytecode($bytecode)->estimateGas($params, $callback);

// estimate function gas
$contract->at($contractAddress)->estimateGas($functionName, $params, $callback);

// get constructor data
$constructorData = $contract->bytecode($bytecode)->getData($params);

// get function data
$functionData = $contract->at($contractAddress)->getData($functionName, $params);

Assign value to outside scope(from callback scope to outside scope)

Due to callback is not like javascript callback, if we need to assign value to outside scope, we need to assign reference to callback.

$newAccount = '';

$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    if ($err !== null) {
        echo 'Error: ' . $err->getMessage();
        return;
    }
    $newAccount = $account;
    echo 'New account: ' . $account . PHP_EOL;
});

Examples

To run examples, you need to run ethereum blockchain local (testrpc).

If you are using docker as development machain, you can try ethdock to run local ethereum blockchain, just simply run docker-compose up -d testrpc and expose the 8545 port.

Develop

Local php cli installed

  1. Clone the repo and install packages.
git clone https://github.com/sc0Vu/web3.php.git && cd web3.php && composer install
  1. Run test script.
vendor/bin/phpunit

Docker container

  1. Clone the repo and run docker container.
git clone https://github.com/sc0Vu/web3.php.git
  1. Copy web3.php to web3.php/docker/app directory and start container.
cp files docker/app && docker-compose up -d php ganache
  1. Enter php container and install packages.
docker-compose exec php ash
  1. Change testHost in TestCase.php
/**
 * testHost
 * 
 * @var string
 */
protected $testHost = 'http://ganache:8545';
  1. Run test script
vendor/bin/phpunit
Install packages

Enter container first

docker-compose exec php ash
  1. gmp
apk add gmp-dev
docker-php-ext-install gmp
  1. bcmath
docker-php-ext-install bcmath
Remove extension

Move the extension config from /usr/local/etc/php/conf.d/

mv /usr/local/etc/php/conf.d/extension-config-name to/directory

API

Todo.

Contribution

Thank you to all the people who already contributed to web3.php!

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].