엔지니어링 공부방

파이썬을 활용한 비트코인 개인지갑 송금[출금] 본문

비트코인과 가상화폐

파이썬을 활용한 비트코인 개인지갑 송금[출금]

송도방랑객 2023. 1. 3. 22:39

비트코인 개인지갑 송금에 앞서

비트코인을 송금하는 과정은 일반적인 은행계좌에서 돈을 출금하는 것과는 다릅니다. 우선 입력값과 출력값이 있는데, 입력값 출력값은 수수료로 자동 책정되니 주의해야 합니다.

다음은 UTXO(Unspent Transaction Outputs), 미사용 트랜잭션 출력값에 대해 알아야 합니다.

비트코인 지갑은 잔액이라는 개념이 존재하질 않습니다. 따라서 트랜잭션에 따라 생겨나는 UTXO데이터의 합이 잔액이나 마찬가지입니다. 즉 아래 그림처럼 지갑 하나에는 많은 UTXO에 각각 비트코인이 담겨있습니다.

위의 4.8 BTC가 들어있는 A지갑에서 B지갑으로 3.5 BTC 보낸다고 하면 출력값에 차액을 A로 보내주는 값을 적어야 합니다. 다시 말해 아래처럼 출력값에 B지갑 : 3.5 BTC, A지갑 1.2 BTC로 입력하지 않으면 큰일 날 수 있습니다.

너무 복잡하고 어려워서 구체적으로 어떤 순서로 UTXO가 사용되는지, 혹은 개별 input으로 어떤 UTXO를 선택하는지에 대한 방법은 생략하겠습니다.

 

파이썬으로 개인지갑 비트코인 송금하는 방법 [코드]

1. 비트코인 라이브러리 설치

pip install cryptos requests 명령어를 입력하면 라이브러리가 설치됩니다.

- 해당 명령어는 파이썬이 아닌 CMD[명령 프롬프트]에서 입력하는 것
- 아래 코드에서 requests 모듈을 직접 사용하진 않지만, cryptos 내부적으로 requests를 사용하므로 사전 설치가 필요.

2. 개인지갑 출금 [비트코인 송금 코드]

파이썬을 실행합니다.
아래의 코드를 사용합니다.

from cryptos import *
c = Bitcoin()                                      // c 정의, 대소문자 주의
from_address = 'address1’              // 보내는 주소 입력
inputs = c.unspent(from_address)             // 해당 주소에 존재하는 모든 UTXO를 inputs 값으로 사용
balance = sum([i['value'] for i in inputs])    // inputs에 들어있는 모든 UTXO의 잔액 합계
Fee = 1500                                     // 수수료
change = 20000         // 2만 사토시는 그대로 잔액으로 남기는 경우,      // 잔액(즉, 다시 내 지갑으로 보낼 양)
To = 'address2’                                           // 받는 주소 입력
outs = [{'value': balance - fee - change, 'address': to}, {'value': change, 'address': from_address}]
                // Outs에 두 개의 주소에 ‘value’를 넣어주면 ‘입력–출력-출력’나머지는 수수료
tx = c.mktx(inputs, outs)                // 트랜잭션 만들기
signed_tx = c.signall(tx, priv)         // 트랜잭션에 서명하기

# send tx to bitcoin node
c.pushtx(signed_tx)                       // 서명한 트랜잭션을 메인넷으로 보내기

 

아래는 예시입니다. 4000 사토시가 있는 지갑에서 2000 사토시를 보내고 1000 사토시를 남기고 1000 사토시를 수수료로 씁니다.

그렇게 한 뒤에 해당 지갑에 만들어진 트랜잭션을 확인하면 아래와 같이 나옵니다.

 

해당 글은 아래의 블로그를 참고하여 작성하였습니다.

비트로그 https://bitcoinlog.tistory.com/133

블록체인 테크 https://blog.naver.com/mage7th/221439829511

 

반응형