
왜 블록체인이죠
- 개인적인 이유:
- 저도 이쪽 투자 하려구요
- 주식으로 받은 내상, 코인으로 치유하자!
- 관심도:
- 왜 블록체인은 무슨 알고리즘과 로직으로 개발 되었고
- web3.0이 뭐고 , 블록체인과 무슨연관이 있으며
- 해당 시장에 대한 확장성/ 현실적인 개발 생태계가 궁금했다
강의
블록체인 기본 개념
- 블록과 체인: 블록체인은 '블록'이라는 데이터 묶음을 '체인'처럼 연결한 형태입니다. 각 블록은 고유한 값(해시)을 가지며, 이전 블록의 해시를 포함하여 연결됩니다. 이를 통해 데이터의 무결성과 순서가 보장됩니다.
- 노드: 블록체인 네트워크에 참여하여 블록을 검증하고 관리하는 주체입니다. 모든 유저가 직접 노드를 운영하는 대신, 노드 운영자(채굴자, 거래소, ITM 등)가 장부를 관리하고 사용자들은 이 통로를 통해 거래할 수 있습니다.
- 중앙화 시스템과의 비교: 블록체인은 기존 중앙화 시스템과 달리 유통 플랫폼이 필요 없으며, 거래 처리 시간이 단축됩니다.
합의 알고리즘 (비잔틴 장군의 딜레마 해결)
비잔틴 장군의 딜레마는 분산 시스템에서 신뢰할 수 없는 노드가 존재해도 시스템이 일관된 결정을 내릴 수 있도록 하는 문제입니다. 블록체인은 다양한 합의 알고리즘을 통해 이를 해결합니다.
- 작업 증명 (Proof of Work, PoW): 비트코인에서 사용하며, 복잡한 암호화 퍼즐을 풀어 블록을 생성할 권리를 얻습니다. 악의적인 노드가 조작하려면 전체 네트워크 컴퓨팅 파워의 51% 이상을 확보해야 하므로 사실상 불가능합니다.
- 지분 증명 (Proof of Stake, PoS): 이더리움 2.0에서 사용하며, 암호화폐 '지분'을 많이 가진 노드가 블록을 생성하고 검증할 확률이 높아집니다. 악의적인 행동 시 스테이킹한 코인을 잃는 페널티(Slashing)가 부과되어 경제적으로 악의적 행동을 억제합니다.
- 위임 지분 증명 (Delegated Proof of Stake, DPoS): EOS, Tron 등에서 사용하며, 코인 보유자들이 투표로 선출한 소수의 노드가 블록을 생성하고 검증합니다. 선출된 노드가 악의적인 행동을 하면 다음 투표에서 제외될 수 있습니다.
- 실용적 비잔틴 장애 허용 (Practical Byzantine Fault Tolerance, PBFT): Hyperledger Fabric과 같은 프라이빗/컨소시엄 블록체인에서 사용되며, 다수의 합의(2/3 이상)에 도달해야 최종 결정을 내립니다.
블록체인 특징 및 이슈
- 마이닝 풀: 여러 명이 컴퓨팅 자산을 모아 협력하여 채굴하는 방식입니다. 기여한 연산량만큼 보상을 분배합니다.
- Ordinals: 비트코인의 가장 작은 단위인 사토시에 순서 번호를 부여하고, 이미지, 텍스트, 비디오 등 다양한 디지털 데이터를 "새겨넣는(Inscribe)" 방식으로 작동합니다. 비트코인 블록체인에서도 NFT와 같은 복잡한 데이터와 자산 개념을 도입했습니다.
- 개인키 탈취 이슈: 개인키 유출은 자산 손실로 이어지므로, 개인 스스로 철저히 관리해야 합니다. 하드웨어 지갑 사용이나 거래용 PC를 따로 사용하는 것이 보안에 유리합니다.
- EIP-191 서명과 JWT 토큰: 웹3 서비스에서 사용자가 지갑으로 특정 메시지에 서명하면, 서버는 이를 검증하고 JWT 토큰을 발행하여 사용자 인증 및 인가를 처리합니다.
개발 관련 개념
- 저장 공간 (이더리움):
- 스토리지: 컨트랙트 상태 변수를 영구적으로 저장하며 가장 비용이 비쌉니다.
- 메모리: 함수 내 임시 변수 및 복합 데이터 처리용으로 사용되며 휘발성이고 중간 비용입니다.
- 칼데이터 (Calldata): 외부 함수 호출의 읽기 전용 입력 데이터로 휘발성이며 저렴합니다.
- 블롭 (Blob): 레이어2 롤업 데이터 게시용으로 대량의 데이터를 단기적으로 저장하며 가장 비용이 저렴합니다.
- Solidity: 블록체인 스마트 컨트랙트 개발 언어입니다.
pure
: 가스비가 발생하지 않는 함수에 사용합니다.
virtual
/ override
: 스마트 컨트랙트 상속 시 함수를 재정의할 때 사용됩니다.
- 이벤트: 블록체인에 기록을 남기는 용도로, 거래 내역 등을 추적하는 데 활용됩니다.
logger
와 유사한 개념입니다.
- EVM (Ethereum Virtual Machine): 이더리움 가상 머신으로, 트랜잭션을 실행하고 스마트 컨트랙트 코드를 처리합니다.
- 이더스캔 (Etherscan): 이더리움 블록체인 익스플로러로, 트랜잭션, 블록, 컨트랙트 등을 조회할 때 사용됩니다.
- 컨트랙트 통신 배포: 컨트랙트에 접근하려면 ABI(Application Binary Interface)와 컨트랙트 주소가 필요합니다.
학습 자료 및 유용한 링크
기타 용어
- 증표 토큰 (Proof Token / Attestation Token / Verifiable Credential): 특정 사실, 권리, 자격 등을 "증명"하는 데 사용되는 토큰입니다. NFT, SBT(Soulbound Token), VC(Verifiable Credentials) 등이 이에 해당할 수 있습니다.
기록 내용 중 개념 오류 및 추가 설명
- hash →rand() (동일한길이의 랜덤값): 이 부분은 해시 함수의 작동 방식에 대한 오해로 보입니다. 해시 함수는 임의의 길이의 데이터를 입력받아 고정된 길이의 고유한 해시값을 출력하는 단방향 함수입니다. "랜덤값"이라기보다는 입력값에 따라 결정론적으로 생성되는 "고유한 값"에 가깝습니다. 동일한 입력에 대해 항상 동일한 해시값을 반환합니다. 블록체인에서 해시는 블록의 고유성을 부여하고 체인 연결성을 확보하는 데 사용됩니다.
- 해시에 위 3가지 attribute 들어가는거임? (0(genesis blcok+prev+data)_Hash →1_(block2+prev+data)_Hash): "해시에 위 3가지 attribute 들어가는거임?"이라는 질문은 정확한 개념을 묻는 것으로 보입니다. 일반적으로 블록의 해시값은 해당 블록의 모든 주요 정보(블록 번호, 이전 블록 해시, 거래 데이터, 타임스탬프, 논스 등)를 포함하여 계산됩니다. 즉, 블록의 모든 내용이 해시값 생성에 영향을 미칩니다.
- 노드 - 모든유저가 foreach로 받는게 아니라, 시장참여자가 (노드운영자)가 자체 장부를 받아서 노드를 이용해서 유통하는건가..?: 이 질문에 대한 답변은 "블록체인 노드를 열어준 통로를 통해서 개인 유저들이 거래한다.(접근성과기술장벽 낮춤)"로 되어 있는데, 이는 정확한 설명입니다. 모든 개별 사용자가 노드를 직접 운영하여 블록체인 전체를 다운로드하고 검증하는 것은 아니며, 주로 노드 운영자(채굴자/거래소/인퓨라/ITM 등)가 블록을 관리하고 장부를 유지합니다. 개인 사용자들은 이러한 노드를 통해 블록체인 네트워크에 접근하고 거래를 수행합니다.
- 자물쇠 - 무작위 값을 계속 넣는 brutal force attack: 이 표현은 작업 증명(PoW) 방식의 채굴 과정을 설명하려는 것으로 보이지만, 'brutal force attack'이라는 용어는 암호 해독에서 비밀번호 등을 무작위로 대입하는 공격 방식을 의미합니다. 채굴은 특정 조건을 만족하는 해시값을 찾기 위해 '논스(nonce)' 값을 무작위로 변경하며 해시 함수를 계속 실행하는 과정입니다. 이는 '무차별 대입'과 유사한 개념이지만, '공격'보다는 '퍼즐 풀이'에 가깝습니다.
- 개인키로 서명한다고? (.개인키가 유출되면 돈이 다 뺏김) / 공개키로 복호화하는건 맞음:
- 개인키로 서명: 이 부분은 정확합니다. 거래(transaction)에 서명할 때 개인키를 사용합니다. 개인키가 유출되면 해당 지갑의 모든 자산을 잃을 위험이 있습니다.
- 공개키로 복호화: 일반적으로 암호화된 데이터를 공개키로 복호화하는 것은 맞습니다. 하지만 블록체인 거래에서 '서명'의 맥락에서는, 서명된 데이터가 유효한지 확인하기 위해 서명자의 공개키를 사용합니다. 즉, 공개키는 개인키로 생성된 서명이 해당 개인키의 소유자에 의해 생성되었음을 '검증'하는 데 사용됩니다. 데이터를 암호화하고 복호화하는 기능과는 별개로 서명의 유효성을 검증하는 데 쓰입니다.
- low transaction > signed transaction > 합의알고리즘 pos/pow/dpos> 블록화 > 서명한데이터등등 기록 원장 기록 > 공개키로 plaintext 변환: 이 흐름은 대체로 맞지만, "공개키로 plaintext 변환" 부분은 정확하지 않습니다. 공개키는 서명의 유효성을 검증하는 데 사용되며, 거래 자체가 '암호화'되어 '복호화'되는 과정은 아닙니다. 거래 내용은 일반적으로 네트워크에 평문(plaintext) 형태로 전파되거나, 적어도 특정 노드들이 내용을 이해할 수 있는 형태로 전파됩니다. 중요한 것은 개인키로 서명된 거래가 위변조되지 않았음을 공개키로 검증하는 것입니다.
- Ordinals > inefficency < 이더리움 기반 nft: 이 부분은 오디널스(Ordinals)가 이더리움 기반 NFT보다 '비효율적'이라고 단정하는 뉘앙스가 있습니다. 오디널스는 비트코인 네트워크에 NFT와 유사한 개념을 도입했다는 점에서 의미가 크지만, 이더리움 기반 NFT와는 기술적 구현 방식과 특성이 다릅니다. 효율성은 사용 목적과 네트워크 구조에 따라 다르게 평가될 수 있습니다. 비트코인 블록체인에 직접 데이터를 기록하기 때문에 데이터 저장 비용이 높다는 비판도 있지만, 데이터의 영구성과 비트코인의 강력한 보안성을 활용한다는 장점도 있습니다.
- 하드웨어 지갑 - 느리다: "느리다"라는 표현보다는, 사용 편의성 측면에서 소프트웨어 지갑보다 '번거롭다'는 의미로 해석될 수 있습니다. 하드웨어 지갑은 개인키를 오프라인에 안전하게 보관하여 해킹으로부터 보호하는 것이 주 목적이며, 거래 시 물리적인 확인 절차가 필요해 소프트웨어 지갑보다 즉각적인 사용이 어렵습니다. 하지만 이는 보안을 위한 trade-off입니다.
- EIP-191 서명과 JWT 토큰의 연동 시나리오 (일반적인 Web3 서비스) - 계좌번호는 생각보다 짧다> 후처리를해서 짧다: "계좌번호가 짧다"는 것은 아마도 블록체인 주소(공개 주소)를 의미하는 것으로 보입니다. 블록체인 주소는 일반적으로 16진수 문자열로 표현되며, 기존 은행 계좌번호와 비교했을 때 길다고 느껴질 수 있습니다. "후처리를 해서 짧다"는 설명은 불분명합니다. 블록체인 주소는 기본적으로 해시 알고리즘을 통해 생성되므로 정해진 길이를 가지며, 특정 압축이나 단축 과정을 거치지 않습니다. 아마도 UI 상에서 짧게 보여주거나 QR코드 등으로 편리하게 사용하는 것을 염두에 둔 것일 수 있습니다.
- solidity - 조회 무료 다만 느리다:
view
나 pure
함수는 블록체인 상태를 변경하지 않기 때문에 가스비가 들지 않습니다. 하지만 노드에서 데이터를 가져오는 네트워크 지연이나 노드의 부하 등으로 인해 '느리다'고 느낄 수 있습니다. 이는 블록체인의 본질적인 특성(탈중앙화, 분산 저장)에서 오는 제약입니다.
- 블록체인 중 일반적으로 많은 경우가 변수 선언까지 이벤트로 남김: 이벤트는 변수 선언 자체가 아닌, 특정 중요한 상태 변화나 액션(예: 토큰 전송, 컨트랙트 배포, 값 변경 등)을 기록할 때 사용됩니다. 이를 통해 외부 애플리케이션(익스플로러, 백엔드 서비스)이 블록체인 상태 변화를 쉽게 모니터링하고 추적할 수 있습니다.
logger
와 같은 개념으로 이해할 수 있습니다.
- run > 실행했을때 배포비용이 싸진다? deafult :200: 이 부분은 '최적화' 또는 컴파일러 설정과 관련된 내용으로 보입니다. Solidity 컴파일러는 코드 최적화 옵션을 제공하여 배포되는 스마트 컨트랙트의 바이트코드 크기를 줄이고, 이는 결과적으로 네트워크에 배포할 때 발생하는 가스 비용을 절감하는 데 도움이 될 수 있습니다.
default: 200
은 특정 컴파일러 최적화 레벨을 의미할 수 있습니다.