BTC - Bitcoin softfork "Taproot" 로컬에서 Core를 빌드해보기

Dahun Yoo·2021년 11월 12일
0

BlockChain and QA

목록 보기
5/5

Toproot 대응 준비

곧 Bitcoin의 Toproot 소프트포크가 진행되는데, 그 전에 프로덕트에서 대응해야할 사항이 있어서 조금 조사를 해보았다.

몇몇 Software wallet은 대응하였지만, signet이나 regtest 와 같은 testnet의 경우에만 생성해놓았고, mainnet용도로 생성은 아직 막아놓은 상태였다.

bech32m 알고리즘을 적용(Pay to TapRoot) 현황은 아래 페이지에서 확인할 수 있다.

https://en.bitcoin.it/wiki/Bech32_adoption

Testnet은 저걸로 어떻게든 해결했는데, mainnet이 문제였다.
testnet이랑 mainnet의 address format은 서로 다른데, 이 mainnet에 taproot이 적용되기 전에 mainnet의 address를 구해서 이것을 Prod환경에서 테스트에서 써야했기 때문.
mainnet의 taproot 대응 address를 생성하는 Software wallet이 없어서 구할 수가 없었다.

뭔가 Descriptors를 설정하면 된다고 하는 것 같긴 한데, 내 수준에서는 너무 어려운 것 같고...

마침 일본에 어느 개발자가, merge대기 중인, Bitcoin core에서 address를 Taproot대응 format으로 기본생성하게끔 수정한 Pull request를 로컬에 내려받아 생성해봤다는 글을 봐서 시도할 수 있었다.


1. Local에 Bitcoin source를 내려받기

https://github.com/bitcoin/bitcoin

일단 로컬에 Bitcoin core의 소스를 clone한다.
git clone https://github.com/bitcoin/bitcoin.git

2. 기본으로 Taproot 대응 address를 생성하는 PR을 내려받아 로컬에서 Merge하고 브랜치 조정을 한다.

https://github.com/bitcoin/bitcoin/pull/22364

이 PR을 손쉽게 받기 위해 Github-CLI를 사용했다.
gh pr checkout 22364

자동으로 알아서해주더라.

3. Bitcoin core를 Compile/Build하기 위한 준비

관련 의존성 라이브러리를 로컬에 받아주었다.

brew install automake libtool boost miniupnpc libnatpmp pkg-config berkeley-db4 libevent

조금 시간이 걸렸다..

4. 환경설정 파일 자동생성

cd bitcoin
./autogen.sh

현재 폴더를 확인하고, bitcoin 폴더로 이동한 후 실행한다.

5. 환경설정 파일 실행

./configure --without-gui

6. Compile

make

파일들을 컴파일한다.

7. Build

컴파일 된다면, 빌드를 진행한다.
sudo make install

8. Build file확인

빌드가 성공한다면, bitcoindbitcoin-cli 를 확인한다.

bitcoind -version
bitcoin-cli -version

bitcoind는 나의 로컬에서 블록체인 네트워크를 동기화시키기 위해 계속 켜놓을 필요가 있다.


Wallet 생성하기

참고로, 아래에서 서술하는 모든 커맨드 들에, 커맨드 후 옵션으로 -testnet, -signet 을 넣으면 해당 테스트넷으로 동작한다. 기본은 mainnet이다.

일단 bitcoind를 켜놓고 작업해야한다.

bitcoind -daemon

bitcoin-cli -named createwallet wallet_name=test descriptors=true

-namedcreatewallet 으로 wallet생성을 진행한다. 이 때, descriptors를 true로 옵션을 넣어주어야한다.
이 것을 true로 함으로 인해, PR에서의, 기본적으로 Taproot 대응 포맷이 address를 생성할 수 있게 된다.

wallet생성이 성공한다면 아래와 같이 출력될 것 이다.

{
  "name": "test",
  "warning": "Wallet is an experimental descriptor wallet"
}

Address 생성하기

이어서 Address를 생성한다.
bitcoin-cli -rpcwallet="test" -named getnewaddress address_type=bech32m

Address가 생성될 wallet의 이름을 지정해주고, address의 타입을 지정해준다. Taproot대응 address는 bech32m 이라는 방법으로 생성된다한다.

(자세히는 잘 모르겠다..암호화 기능으로 알고있는중)


생성하면 어드레스가 생성될 것이다.
mainnet의 경우, bc1p 로 시작하는 주소일 것이다. 만일 bc1q 로 시작되는 주소라면, 기존의 Segwit주소이며 이것은 Taproot에 대응하는 주소가 아니다.

Ref

profile
QA Engineer

0개의 댓글