-
블록체인 코드를 변경해 pseudo 암호화폐 만들기Cryptography 2021. 12. 14. 18:13반응형
암호화폐는 블록체인에 기반하고 있다고들 합니다. 그렇다면 블록체인은 암호화폐인 것일까요?
아니라면 암호화폐는 블록체인과 어떤 점이 다른 걸까요?
이번 글에서는 이전 글인 '파이썬으로 간단한 블록체인 만들어보기'에서 만든 블록체인을 변형해서 간단한 암호화폐를 만들어 보며 암호화폐를 이해해보려 합니다.
- 암호화폐에는 블록체인에 어떤 부분을 추가해야 하는가
- Flask API 추가
암호화폐에는 블록체인에 어떤 부분을 추가해야 하는가
암호화폐는 분산된 원장(distributed ledger)입니다.
먼저, 원장이라는 부분을 고려하면 원장은 소유권, identity, 상태, 권위 등을 확정하는 데에 사용됩니다 [2]. 이러한 목적을 위해 원장은 기록 대상의 변동사항을 기록합니다. 즉, 트랜잭션(transaction) 기록이 주된 내용입니다.
또한, '분산'이라는 측면(좀 더 정확히는 탈중앙화된, decentralized [3])을 위해서 암호화폐는 시스템을 구성하는 노드라는 개념과 컨센서스를 도입합니다.
그렇기에 우리는 기본적인 블록체인에 크게 트랜잭션, 노드, 컨센서스(아래 예시에서는 제외)를 더하여 암호화폐를 만들 수 있습니다.
트랜잭션의 추가
그렇기에 아래와 같이 트랜잭션 리스트를 추가하고, 블록 생성 시에 트랜잭션 리스트를 더해줍니다. 또한, 블록 생성 시 트랜잭션 리스트에 새로운 리스트를 할당하여 초기화 해줍니다 (commit):
이후에는 Blockchain 클래스에 트랜잭션을 추가하는 데 사용할 메소드를 추가해주어야 합니다. 여기서는 간단하게 트랜잭션 역시 블록과 같이 파이썬 딕셔너리로 구성하였습니다. 키(key)는 송신자, 수신자, 양(amount)으로 3가지 모두 아규먼트로 받아서 인스턴스 변수 transactions에 추가해주고 현재 블록의 인덱스를 리턴해줍니다 (commit):
def add_transaction(self, sender, receiver, amount): self.transactions.append({ 'sender': sender, 'receiver': receiver, 'amount': amount }) return self.get_previous_block()['index'] + 1
노드 추가
다음으로는 노드를 추가해줍니다 (commit):
비트코인의 경우 가장 긴 체인의 메인으로 남고 다른 (길이가 짧은) 체인의 블록들은 Orphan 블록이 됩니다. 유사한 기능을 추가하기 위해서 노드의 체인 길이와 다른 노드들의 길이를 비교해 길이가 더 긴 체인이 있다면 해당 노드의 체인을 긴 체인으로 교체하는 메소드를 아래와 같이 추가할 수 있습니다 (commit):
Flask API 추가
위에서 더해준 암호화폐 기능들을 호출할 수 있도록 Flask API를 추가해줍니다.
트랜잭션 추가 POST API
POST로 sender, receiver, amount를 받아 add_transaction 메소드를 통해 트랜잭션을 추가해주는 API를 추가합니다 (commit):
노드 추가 POST API
역시 json 형태의 body를 받아 인스턴스 변수 nodes에 더하는 API를 추가합니다:
노드 업데이트 GET API
마지막으로 노드 리스트를 순회하며 각 노드의 체인 길이를 확인하고, 더 길 때 update하는 update_chain을 호출하는 API를 추가합니다 (commit):
최종 코드는 이곳에 있습니다:
Reference
[1] https://www.udemy.com/course/build-your-blockchain-az/
[3] https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274
반응형'Cryptography' 카테고리의 다른 글
라이트닝 네트워크(Lightning Network)란? (0) 2022.06.12 메타마스크 내부구조(Metamask Internal (0) 2022.06.09 커스토디얼(custodial) vs 논커스토디얼(noncustodial) 월렛 (0) 2022.06.07 파이썬으로 간단한 블록체인 만들기 (0) 2021.12.13 Corda란? (0) 2021.10.26 마이닝 풀이란? (0) 2021.10.26 비트코인 채굴 시스템 (0) 2021.10.26 비트코인 채굴(마이닝, mining)이란? (0) 2021.10.24