2014-09-28 15:52:50 +00:00
|
|
|
#include <bitcoin/bitcoin.hpp>
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
// Private secret key.
|
2015-01-18 20:19:57 +00:00
|
|
|
bc::ec_secret secret;
|
|
|
|
bool success = bc::decode_hash(secret,
|
2014-09-28 15:52:50 +00:00
|
|
|
"038109007313a5807b2eccc082c8c3fbb988a973cacf1a7df9ce725c31b14776");
|
2015-01-18 20:19:57 +00:00
|
|
|
assert(success);
|
2014-09-28 15:52:50 +00:00
|
|
|
// Get public key.
|
|
|
|
bc::ec_point public_key = bc::secret_to_public_key(secret);
|
|
|
|
std::cout << "Public key: " << bc::encode_hex(public_key) << std::endl;
|
|
|
|
|
|
|
|
// Create Bitcoin address.
|
|
|
|
// Normally you can use:
|
|
|
|
// bc::payment_address payaddr;
|
|
|
|
// bc::set_public_key(payaddr, public_key);
|
|
|
|
// const std::string address = payaddr.encoded();
|
|
|
|
|
|
|
|
// Compute hash of public key for P2PKH address.
|
|
|
|
const bc::short_hash hash = bc::bitcoin_short_hash(public_key);
|
|
|
|
|
|
|
|
bc::data_chunk unencoded_address;
|
|
|
|
// Reserve 25 bytes
|
|
|
|
// [ version:1 ]
|
|
|
|
// [ hash:20 ]
|
|
|
|
// [ checksum:4 ]
|
|
|
|
unencoded_address.reserve(25);
|
|
|
|
// Version byte, 0 is normal BTC address (P2PKH).
|
|
|
|
unencoded_address.push_back(0);
|
|
|
|
// Hash data
|
|
|
|
bc::extend_data(unencoded_address, hash);
|
|
|
|
// Checksum is computed by hashing data, and adding 4 bytes from hash.
|
|
|
|
bc::append_checksum(unencoded_address);
|
|
|
|
// Finally we must encode the result in Bitcoin's base58 encoding
|
|
|
|
assert(unencoded_address.size() == 25);
|
|
|
|
const std::string address = bc::encode_base58(unencoded_address);
|
|
|
|
|
|
|
|
std::cout << "Address: " << address << std::endl;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|