본문으로 바로가기

libbitcoin 라이브러리는 Bitcoin 어플리케이션을 제작하기위한 크로스 플랫폼 C++ 라이브러리입니다.

libbitcoin 라이브러리를 사용하여 Private 키, Public 키, Bitcoin address를 생성해보도록 하겠습니다.


libbitcoin 라이브러리를 설치하기전에 먼저 secp256k1 라이브러리를 설치해야 하니 다음과 같은 순서로 설치를 하도록 하겠습니다.

각 라이브러리의 설치는 해당 github의 내용을 참고로 설치하시면 됩니다.


secp256k1 : https://github.com/libbitcoin/secp256k1

libbitcoin : https://github.com/libbitcoin/libbitcoin


secp256k1 라이브러리 설치


$ git clone https://github.com/libbitcoin/secp256k1

$cd secp256k1

$ ./autogen.sh

$ ./configure

$ make

$ ./tests

$ sudo make install  # optional


libbitcoin 라이브러리 설치


$ git clone https://github.com/libbitcoin/libbitcoin

$ cd libbitcoin

$ ./autogen.sh

$ ./configure

$ make

$ sudo make install

$ sudo ldconfig


만약 위의  자동스크립트로 설치가 되지않으면 다음 순서로 해보시기 바랍니다.


$ g++ version # g++ 버전 확인


# 만약 g++ 버전이 낮다면 업그레이드 

$ sudo apt-get install g++-4.8

$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50

$ sudo update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-4.8 50


$ sudo apt-get install build-essential autoconf automake libtool pkg-config git

$ sudo apt-get install libboost-all-dev

$ wget https://raw.githubusercontent.com/libbitcoin/libbitcoin/version3/install.sh

$ chmod +x install.sh

$ sudo ./install.sh


정상적으로 설치가 된다면 다음과 같이 확인 가능합니다.


ihpark92@ubuntu:~/work$ ls -la /usr/local/include

합계 48

drwxr-xr-x  3 root root  4096 Mar  2 23:23 .

drwxr-xr-x 13 root root  4096 Feb 24 22:32 ..

drwxr-xr-x  3 root root  4096 Mar  2 23:23 bitcoin

-rw-r--r--  1 root root 25517 Mar  2 23:17 secp256k1.h

-rw-r--r--  1 root root  4700 Mar  2 23:17 secp256k1_recovery.h


다음과 같이 소스코드를 작성합니다.


#include <bitcoin/bitcoin.hpp>

#include <string>

#include <iostream>


using namespace bc;


int main(void) {

    data_chunk seed(16);

    pseudo_random_fill(seed);

    ec_secret secretKey = bitcoin_hash(seed);


    std::string hexKey = encode_base16(secretKey);

    std::cout << "secret key: " << hexKey << std::endl;


    wallet::ec_private privateKey(secretKey);

    std::cout << "Private key: " << privateKey.encoded() << std::endl;


    wallet::ec_public publicKey = privateKey.to_public();

    std::cout << "Public Key: " << publicKey.encoded() << std::endl;


    wallet::payment_address paymentAddress = publicKey.to_payment_address();

    std::cout << "Bitcoin address: " << paymentAddress.encoded() << std::endl;


    return 0;

}


다음과 같이 코드를 컴파일한후에 실행합니다.


$ g++ -std=c++11 -o key key.cpp $(pkg-config --cflags libbitcoin --libs libbitcoin)


다음과 같이 매번 랜덤한 secret key를 사용하여 Private 키를 생성하고, 이것을 기반으로 Public 키, BItcoin address를 생성합니다.

Private 키는 K 또는 L 접두어를 가지는 WIF 압축형임을 알수 있습니다.

Public 키는 02, 03 접두어를 가지는 압축 공개키임을 알수 있습니다.

그리고 Bitcoin adress는 1로 시작하는것을 볼수 있습니다.