How to generate addresses in PHP

5

4

I need some PHP code to generate bitcoin addresses from a given public key.

I can only find algorithms to generate addresses from the master private key but according to https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses the private key is not required at all.

Gianluca Ghettini

Posted 2016-08-14T09:05:13.457

Reputation: 282

Answers

8

Use BitWasp Bitcoin-php library https://github.com/Bit-Wasp/bitcoin-php

<?php
use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Key\PrivateKeyFactory;

$network = Bitcoin::getNetwork();
$privateKey = PrivateKeyFactory::create(true);
$publicKey = $privateKey->getPublicKey();
$address = $publicKey->getAddress(); // returns AddressInterface
echo $address->getAddress($network); // prints address for $network as string

If you want to create Bitcoin address from Public key string check documentation for Factory classes

or newer versions:

<?php
use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Address\AddressCreator;
use BitWasp\Bitcoin\Key\PrivateKeyFactory;
use BitWasp\Bitcoin\Key\KeyToScript\Factory\P2pkhScriptDataFactory; 

$network = Bitcoin::getNetwork();
$privateKey = PrivateKeyFactory::create(true);
$publicKey = $privateKey->getPublicKey();

$addrCreator = new AddressCreator();
$factory = new P2pkhScriptDataFactory();
$scriptPubKey = $factory->convertKey($publicKey)->getScriptPubKey();
$address = $addrCreator->fromOutputScript($scriptPubKey); // returns AddressInterface
echo $address->getAddress($network); // prints address for $network as string

Farghaly

Posted 2016-08-14T09:05:13.457

Reputation: 849

You can do PublicKeyFactory::fromHex and avoid using a private key. For newer versions, getAddress was removed, see this example https://github.com/Bit-Wasp/bitcoin-php/blob/9e535f04665ba22ba2b8b63f371ec50d2e7eabb8/examples/addresstypes.script.php#L16-18

karimkorun 2019-05-16T14:46:13.027

This answer still uses a private key and is not purely public key based, like asked for.Wouter 2018-06-24T12:10:51.733

2

Full instruction based on response of @Farghaly: Ubuntu 16

Install dependencies

sudo apt-get install php-bcmath php-gmp
composer require bitwasp/bitcoin

And then in fiel app.php

<?php
require 'vendor/autoload.php';

use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Address;
use BitWasp\Bitcoin\Key\PrivateKeyFactory;

$network = Bitcoin::getNetwork();

$privateKey = PrivateKeyFactory::create(true);
$publicKey = $privateKey->getPublicKey();
$address = $publicKey->getAddress();

Daniel

Posted 2016-08-14T09:05:13.457

Reputation: 133