Модель UTXO и модель учетной записи — это два разных подхода к управлению и представлению прав собственности на цифровые активы в системах блокчейна.
- Модель UTXO:
Модель UTXO (выход неизрасходованных транзакций) обычно используется в криптовалютах, таких как Биткойн. В этой модели транзакции представлены как входы и выходы. Каждая входная транзакция ссылается на определенный UTXO из предыдущей транзакции, а выходные данные создают новые UTXO. UTXO представляют собой неизрасходованную стоимость предыдущих транзакций и используются в качестве входных данных для будущих транзакций. Вот упрощенный пример кода на Python:
class UTXO:
def __init__(self, tx_id, index, value):
self.tx_id = tx_id
self.index = index
self.value = value
class Transaction:
def __init__(self, inputs, outputs):
self.inputs = inputs
self.outputs = outputs
# Create UTXOs
utxo1 = UTXO("tx1", 0, 10)
utxo2 = UTXO("tx2", 0, 5)
# Create transaction
transaction_inputs = [utxo1, utxo2]
transaction_output = UTXO("tx3", 0, 12)
transaction = Transaction(transaction_inputs, [transaction_output])
# Validate transaction inputs and update UTXOs
for utxo in transaction.inputs:
if not validate_utxo(utxo):
raise Exception("Invalid UTXO")
mark_utxo_spent(utxo)
# Add new UTXO to the UTXO set
add_utxo(transaction.output)
- Модель учетной записи.
Модель учетной записи обычно используется на платформах блокчейна, таких как Ethereum. В этой модели остатки на счетах и транзакции выполняются путем обновления остатков на счетах. Каждый счет имеет адрес и соответствующий баланс. Вот упрощенный пример кода на Python:
class Account:
def __init__(self, address, balance):
self.address = address
self.balance = balance
class Transaction:
def __init__(self, sender, recipient, amount):
self.sender = sender
self.recipient = recipient
self.amount = amount
# Create accounts
account1 = Account("0x1234567890", 10)
account2 = Account("0xabcdef1234", 5)
# Create transaction
transaction = Transaction(account1, account2, 3)
# Validate sender's balance
if transaction.sender.balance < transaction.amount:
raise Exception("Insufficient balance")
# Update account balances
transaction.sender.balance -= transaction.amount
transaction.recipient.balance += transaction.amount