티스토리 뷰

비밀키로부터 지갑주소를 만드는 방법에는 압축주소와 비압축주소 2가지 방법이 있습니다.

 

압축주소란 압축된 공개키로부터 비트코인 주소를 얻는 것을 말하며, 비압축주소란 압축되지 않은 공개키로부터 비트코인 주소를 얻는 것을 말합니다.

 

공개키 압축에 관한 상세 내용은 아래 자료를 참고해 주세요.

https://learnmeabitcoin.com/technical/public-key

 

 

사실 비압축 주소라는 이름은 상당히 어색한 이름입니다. 이보다는 그냥 레거시 주소 혹은 오리지날 주소 정도가 더 적절한 이름이지 않을까 싶습니다.

왜냐하면 이 주소 형태는 비트코인 초창기에 사용되었던 주소 형태이기 때문입니다. 이후에 공개키의 값을 압축하는 방법이 발견되면서 공개키를 압축해서 사용하는 주소들이 생겨났고 사실 이와 구별하기 위해서 이런 이상한 이름이 붙여진 것 뿐입니다.

비압축 주소 만들기

from bitcoin import *

priv = random_key()
pub = privtopub(priv)
addr = pubtoaddr(pub)

 

비압축 wif 만들기

from bitcoin import *

priv = random_key()
wif = encode_privkey(priv, 'wif')

hex(decode_privkey(wif))[2:] # equals priv

 

비압축 주소의 비트코인 출금

from cryptos import *

c = Bitcoin()
inputs = c.unspent('p2pkh_address_uncompressed')
fee = 500
outs = [{'value': 1000 - fee, 'address': 'to-address'}]
tx = c.mktx(inputs, outs)
signed = c.signall(tx, priv)
c.pushtx(signed)

 

압축주소를 사용하면 비트코인 출금시 하나의 UTXO당 64Byte(공개키의 y좌표) 만큼 데이터 사이즈가 줄어들어 수수료를 조금 더 아낄 수 있다.

 

압축주소 만들기

from bitcoin import *

priv = ramdom_key()
pub = privtopub(priv)

prefix = '02' if int(pub[-1], 16) % 2 == 0 else '03'

pub_compressed = prefix + pub[2:66]
addr_compressed = pubtoaddr(pub_compressed)

 

압축 wif 만들기

from bitcoin import *

priv = random_key()
wif_compressed = encode_privkey(priv, 'wif_compressed')

hex(decode_privkey(wif_compressed))[2:] # equals priv

 

압축주소의 비트코인 출금

from cryptos import *

c = Bitcoin()
inputs = c.unspent('p2pkh_address_compressed')
fee = 300
outs = [{'value': 1000 - fee, 'address': 'to-address'}]
tx = c.mktx(inputs, outs)
signed = c.signall(tx, encode_privkey(priv, 'wif_compressed'))
# signed = c.signall(tx, priv + '01')  # this works well also
c.pushtx(signed)

 

 


압축 주소와 비압축 주소의 거래 비교

https://www.blockchain.com/btc/address/1HnHcG4FMLVPfRK4BQFtyKgZnpe6Tds2Zk

 

참고로 주소값만 보고서는 해당 주소가 압축주소인지 비압축주소인지 알 수 있는 방법이 없습니다. 그래서 WIF 포맷의 비밀키를 만들 때는 반드시 이 둘을 구별하여 만들게 됩니다.

 

비압축주소의 거래 모습

 

압축주소의 거래 모습

 

 

 

 

요약

  • p2pkh 잠금장치의 경우 하나의 비밀키로부터 각각 압축/비압축 주소를 만들 수 있다.
    • 비압축 주소는 압축되지 않은 공개키로부터 나온다
    • 압축 주소는 압축된 공개키로부터 나온다
    • 압축된 공개키는 본래 공개키에서 y축 값의 홀짝수 여부에 따라 접두어를 붙이고 y축 좌표 값을 제거한 결과이다
  • 압축 주소는 비압축 주소보다 거래사이즈를 줄이는 개선된 주소 형태이다.
  • 하나의 비밀키는 압축 형태 wif, 또는 비압축 wif 로 변환할 수 있다.
  • 압축 주소의 잠금장치를 해제할 때는 압축형태 wif 로 서명한다.

 

 

 


 

 

https://youtu.be/5mY4yUVId24

 

728x90
반응형
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함