집돌이 공대남 IT

실질적인 코인 트랜잭션 처리하기! 블록체인 활용하기! 본문

IT/파이썬

실질적인 코인 트랜잭션 처리하기! 블록체인 활용하기!

집공이 2023. 8. 6. 12:00

안녕하세요! 공대남입니다!

이번 포스팅에서는 우리가 이전에 만들었던 블록체인 채굴 프로그램을 발전시켜 실제 코인의 트랜잭션을 처리하는 블록체인 시스템을 만들어 봅시다.!!

1. 코인 밸런스 계산

블록체인을 이용한 트랜잭션 시스템에서 중요한 것 중 하나는 사용자의 코인 밸런스를 정확하게 계산하는 것입니다. 이를 위해 우리는 각 주소의 밸런스를 계산하는 함수를 만들어야 합니다.

function calculateBalance(address, blockchain) {
    let balance = 0;
    for (const block of blockchain) {
        for (const trans of block.transactions) {
            if (trans.fromAddress === address) {
                balance -= trans.amount;
            }
            if (trans.toAddress === address) {
                balance += trans.amount;
            }
        }
    }
    return balance;
}

 

2. 트랜잭션 검증

트랜잭션을 처리하기 전에, 트랜잭션이 유효한지 확인하는 것이 중요합니다. 유효한 트랜잭션은 아래의 조건을 충족해야 합니다:

  1. fromAddressnull이 아니면, 이는 채굴 보상이 아닌 일반 트랜잭션입니다. 이 경우, 보내는 사람의 주소에서 해당 금액이 빠져나갈 수 있도록, 보내는 사람의 밸런스가 트랜잭션의 금액보다 커야 합니다.
  2. 트랜잭션의 서명이 유효해야 합니다. 이를 위해 ecdsa 라이브러리를 사용할 수 있습니다.

이를 구현한 함수는 아래와 같습니다.

function isValidTransaction(transaction, blockchain) {
    const senderBalance = calculateBalance(transaction.fromAddress, blockchain);
    if (transaction.fromAddress !== null) {
        if (senderBalance < transaction.amount) {
            return false;
        }
    }
    return isValidSignature(transaction);
}

 

3. 채굴 보상

채굴에 성공한 사람에게는 코인을 보상으로 제공합니다. 이를 구현하기 위해, 채굴 성공 시 트랜잭션을 생성하고 이를 블록체인에 추가합니다.

function addRewardTransaction(minerAddress, blockchain) {
    const rewardTransaction = new Transaction(null, minerAddress, 50);
    blockchain.push(rewardTransaction);
}

 

4. 전체 시스템 테스트

이제 전체 시스템을 테스트해 봅시다. 사용자 A가 사용자 B에게 코인을 보내는 트랜잭션을 생성하고, 이를 블록체인에 추가해 봅시다. 이후, 사용자 A와 B의 밸런스가 올바르게 업데이트 되었는지 확인해 봅시다.

let blockchain = new Blockchain();
let transaction1 = new Transaction('addressA', 'addressB', 100);
blockchain.addTransaction(transaction1);
console.log('Balance of A: ', calculateBalance('addressA', blockchain));
console.log('Balance of B: ', calculateBalance('addressB', blockchain));

이렇게 블록체인 채굴 프로그램을 발전시켜 실제 코인의 트랜잭션을 처리하는 블록체인 시스템을 만들어 보았습니다.

이를 통해 블록체인 기술의 기본적인 원리를 이해하고 실제로 적용해 볼 수 있었습니다.