bitcoind을 이용해서 로컬에서 비트코인 테스트 환경을 구축해보자.
brew를 이용해서 bitcoind를 설치한다.
혹은 사이트에서 직접 다운로드 받고 설치해도 된다.
bitcoind 설치에 성공했다면 아래 명령어로 실행해보자.
테스트 환경에서 실행하기 위해 regtest 옵션을 입력했다. bitcoind 실행을 통해 하나의 비트코인 노드가 실행된다. 이제부터 bitcoin-cli를 통해 이 노드의 API를 호출할 수 있다.
getblockchaininfo를 호출하면 블록체인의 일반적인 정보를 확인할 수 있다.
x번째 블록의 정보를 출력하기 위해서는 getblockhash으로 해시값을 가져오고 그 값을 getblock에 입력하면 된다.
첫 번째 블록은 제네시스 블록을 의미하며 이미 채굴된 상태로 존재한다.
createwallet 명령어로 지갑을 생성할 수 있다.
getnewaddress 명령어를 호출하면 HD지갑으로 생성된 주소를 순차적으로 반환한다. getnewaddress를 호출할 때마다 새로운 주소가 반환된다.
두 번째 주소인 bcrt1qjys8x6fcrx68wc6062pp9kc0czfp660kvhdmsr
의 hdkeypath 값은 m/84'/1'/0'/0/1
이다.
getwalletinfo 명령어는 잔액을 포함한 지갑의 자세한 정보를 출력한다.
generate 명령어를 입력하면 블록이 채굴된다. 처음에는 난이도가 매우 낮은 상태이므로 명령어를 입력하는 순간 바로 채굴에 성공한다.
bcrt1qqk6nhak7nt3e908ga84y9uaj225degvjkv5av4 주소로 채굴 보상이 입금된다. 이 주소는 wallet1
HD지갑에 속한 주소다.
getbalances 명령어를 통해 잔액을 확인해보면 immature
속성에서 50 BTC를 확인할 수 있다. 채굴 보상은 100 confirmation이 지나야 사용될 수 있는데 immature
속성은 100 confirmation이 지나지 않은 금액을 나타낸다.
100번의 채굴을 진행시켜보면 trusted
속성에서 50 BTC를 확인할 수 있다. trusted
속성은 현재 사용 가능한 금액을 나타낸다.
로컬에서 노드 여러 개를 띄워서 트랜잭션과 블록 정보가 노드 간에 동기화가 잘 되는지 확인해보자.
원하는 곳에 node1, node2 폴더를 만들자. 그리고 각 폴더 밑에 bitcoin.conf 파일을 만들고 아래 내용을 입력하자.
아래는 /path/to/node1/bitcoin.conf
파일의 내용이다.
아래는 /path/to/node2/bitcoin.conf
파일의 내용이다.
아래 명령어로 비트코인 노드를 실행하자.
deamon 옵션을 이용해서 백그라운드에서 실행되도록 했다.
명령어 입력을 간편하게 하기 위해 별칭을 등록하자.
잘 동작하는지 테스트해보자.
node1에서 지갑을 생성하고 해당 지갑으로 비트코인을 넣어주기 위해 블록 101개를 생성한다.
node2를 node1로 연결한다.
잘 연결이 되었다면 두 노드의 상태가 동기화된다. 동기화가 잘 되었는지 확인해보자.
블록 개수가 같아졌으니 동기화가 잘 된 것 같다.
w1 지갑에서 다른 지갑으로 비트코인을 전송해보자. node2에 w2 지갑을 생성한다.
w1에서 w2로 3 BTC를 전송해보자.
w2의 잔고를 확인해보자.
해당 트랜잭션이 포함된 블록이 아직 채굴되지 않아서 untrusted_pending
에서 확인할 수 있다.
pending 상태인 트랜잭션은 mempool에서 확인할 수 있다. 해당 트랜잭션이 node1, node2의 mempool에 잘 들어있는지 확인해보자.
이전에 생성했던 트랜잭션이 mempool에 잘 들어있는 것을 확인할 수 있다. node1에서 생성했던 트랜잭션이 node2로 전파가 잘 되었다는 것을 확인할 수 있다.
채굴을 통해 해당 트랜잭션을 블록에 포함시키자.
채굴은 node1, node2 중에 누가 하더라도 (채굴 보상을 받는 사람만 다를 뿐) 결과는 같다.
채굴이 잘 되었는지 확인해보자.