이미지를 오디널스를 이용하여 비트코인 인스크립션하는 절차

이미지를 오디널스를 이용하여 비트코인 인스크립션하는 절차입니다. 간략하게 정리해봤습니다. #비트코인 #사토시 #BRC-20 #NFT #인스크립션

1. 이미지 준비

아이콘 이미지를 준비합니다. 각 이미지는 트랜잭션에 인스크립션될 데이터로 사용될 것입니다.

2. 오디널스 생성

아이콘 이미지를 각각의 오디널스로 변환합니다. 각 오디널스에는 하나의 이미지가 인스크립션될 것입니다. 오디널스 그 자체 의미는 그냥 순서라고 보면 됩니다. 비트코인 트랜잭션 발생할때 사용한 트랜잭션 순서. 최소는 1사토시 단위에 대한 트랜잭션. 1비트코인은 1억 사토시입니다. 우리나라 화폐단위로 말하면 쉽네요. 1비트코인 현재 가격이 1억원이라면 1사토시는 1원이 됩니다.  #coinbase trx vs. utxo trx

2-1. 이미지 준비

아이콘 이미지를 준비합니다. 각 이미지는 오디널스로 변환되어 트랜잭션에 인스크립션될 것입니다.

2-2. 이미지를 바이트로 변환

각 이미지를 이진 데이터로 변환합니다. 대부분의 프로그래밍 언어에서는 이미지 파일을 바이너리 모드로 열어서 바이트 스트림으로 읽을 수 있습니다.

2-3. 오디널스 생성

이진 데이터를 오디널스로 변환합니다. 오디널스는 비트코인 트랜잭션에 데이터를 인스크립션하는 데 사용됩니다. 아래는 각 이미지를 오디널스로 변환하는 간단한 예시 코드입니다. 2개 이미지라고 가정하고 데이터 2개만 나열해놨음.

# Python 예시 코드
from hashlib import sha256

image_data_1 = b'\x00\x01\x02\x03\x04'  # 간단한 바이트 시퀀스
image_data_2 = b'\x05\x06\x07\x08\x09'  # 간단한 바이트 시퀀스

image_datas = [image_data_1, image_data_2]

def create_ordinal(data):
    # 데이터를 해시 함수로 변환하여 오디널스 생성
    ordinal = sha256(data).hexdigest()
    return ordinal

# 각 이미지를 오디널스로 변환
ordinals = []
for image_data in image_datas:  # 이미지 데이터 리스트
    ordinal = create_ordinal(image_data)
    ordinals.append(ordinal)

print(ordinals)

이렇게 생성된 각 오디널스는 이미지 데이터의 해시 값으로 구성되어 있습니다.

주의사항
- 오디널스는 고유한 값이어야 합니다. 같은 데이터에 대해서는 항상 같은 오디널스가 생성되어야 합니다.
- 데이터의 크기에 따라 오디널스의 길이가 달라질 수 있습니다. 하지만 일반적으로는 일정한 길이를 가집니다.
- 데이터의 보안을 고려하여 안전한 해시 함수를 사용해야 합니다.

위의 과정을 따라서 진행하면 각 이미지를 오디널스로 변환할 수 있습니다.

3. 비트코인 주소 생성

오디널스를 인스크립션할 비트코인 주소를 생성합니다. 이 주소는 데이터를 저장할 대상이 됩니다.

from bitcoin.wallet import CBitcoinAddress
from bitcoin.core import CMutableTxOut, CMutableTransaction, CTransaction, Hash160
from bitcoin.core.script import OP_RETURN, CScript

# 비트코인 주소 설정 (임의의 주소 사용)
address = CBitcoinAddress('비트코인 주소 입력')

# 오디널스 데이터 설정 (이전 단계에서 생성한 오디널스 사용)
ordinal_1 = '...'
ordinal_2 = '...'

# OP_RETURN 스크립트 생성
script = CScript([OP_RETURN, bytes.fromhex(ordinal_1), bytes.fromhex(ordinal_2)])

# 출력 설정
output = CMutableTxOut(0, script)

# 트랜잭션 생성
tx = CMutableTransaction()
tx.vout.append(output)

print("트랜잭션 생성 완료:")
print(tx)

 

4. 트랜잭션 서명

해당 개수의 오디널스를 비트코인 주소로 인스크립션하는 트랜잭션을 생성합니다. 각각의 오디널스는 `OP_RETURN` 스크립트를 사용하여 트랜잭션에 데이터를 기록합니다.

from bitcoin.wallet import CBitcoinSecret
from bitcoin.core.script import SIGHASH_ALL

# 비트코인 비밀키 설정 (트랜잭션을 서명할 키)
secret = CBitcoinSecret('비트코인 비밀키 입력')

# 트랜잭션 입력 설정 (임의의 값을 사용)
txin = CMutableTxIn()
tx.add_in(txin)

# 트랜잭션 서명
sighash = SignatureHash(script, tx, 0, SIGHASH_ALL)
sig = secret.sign(sighash) + bytes([SIGHASH_ALL])
txin.scriptSig = CScript([sig, secret.pub])

print("트랜잭션 서명 완료:")
print(tx)

 

5. 트랜잭션 브로드캐스팅

트랜잭션을 서명하고 브로드캐스트합니다. 이 단계에서는 개인키를 사용하여 트랜잭션을 서명하고, 서명된 트랜잭션을 네트워크에 브로드캐스트하여 인스크립션을 완료합니다.

from bitcoin.rpc import Proxy

# 비트코인 RPC 연결 설정
rpc_connection = Proxy('비트코인 RPC 연결 정보 입력')

# 서명된 트랜잭션을 브로드캐스트
tx_hex = tx.serialize().hex()
txid = rpc_connection.sendrawtransaction(tx_hex)

print("트랜잭션 브로드캐스트 완료:")
print("트랜잭션 ID:", txid)

 

6. 블록체인에 기록

트랜잭션이 블록체인에 포함되면, 오디널스에 인스크립션된 이미지 데이터가 블록체인에 기록됩니다. 이후에는 누구나 해당 트랜잭션을 조회하여 이미지 데이터를 확인할 수 있습니다. 이 단계는 트랜잭션이 블록체인에 포함되었음을 확인하는 단계입니다. 이 단계는 코드로 직접 구현하기보다는 블록체인 탐색기를 통해 수행하는 것이 일반적입니다. 블록체인 탐색기를 사용하면 트랜잭션의 상태를 조회하고 확인할 수 있습니다.

만약 파이썬 코드로 블록체인 네트워크에 트랜잭션이 포함되었는지를 확인하고 싶다면, 비트코인 RPC를 사용하여 블록체인 네트워크로부터 트랜잭션 상태를 직접 확인할 수 있습니다. 이를 통해 트랜잭션이 블록체인에 포함되었는지를 확인할 수 있습니다. 하지만 주로 사용되는 방법은 블록체인 탐색기를 사용하여 트랜잭션의 상태를 확인하는 것입니다. 이는 일반적으로 개발자가 직접 구현하지 않고도 쉽게 수행할 수 있는 방법입니다.

주의사항

- 각 이미지의 크기가 너무 크지 않도록 주의합니다. 블록체인에는 데이터 크기에 대한 제한이 있으며, 너무 큰 데이터는 처리가 어려울 수 있습니다.
- 데이터 인스크립션에는 수수료가 발생합니다. N개의 이미지를 인스크립션하는데 필요한 수수료를 충분히 고려해야 합니다.
- 데이터를 블록체인에 영구적으로 저장한다는 점을 유의하세요. 한 번 기록된 데이터는 변경되거나 삭제될 수 없으므로, 필요한 경우에만 데이터를 인스크립션하세요.

위의 단계를 따라서 진행하면 여러개의 아이콘 이미지를 오디널스를 이용하여 인스크립션할 수 있습니다.

 

Leave a Comment