엔지니어링 공부방
파이썬을 활용한 비트코인 개인지갑 송금[출금] 본문
비트코인 개인지갑 송금에 앞서
비트코인을 송금하는 과정은 일반적인 은행계좌에서 돈을 출금하는 것과는 다릅니다. 우선 입력값과 출력값이 있는데, 입력값 – 출력값은 수수료로 자동 책정되니 주의해야 합니다.
다음은 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 명령어를 입력하면 라이브러리가 설치됩니다.
- 아래 코드에서 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
'비트코인과 가상화폐' 카테고리의 다른 글
[비트코인 기록] 비트코인 가격 예측 (1) | 2023.01.05 |
---|---|
파이썬을 활용한 비트코인 개인지갑[개인키] 만들기 (0) | 2022.12.29 |