블록체인

블록체인에 대한 이야기

블록체인이란

  • Q. 블록체인이 무엇이라고 생각하시나요?
  • A. 블록체인은 탈중앙화된 거버넌스에 의해 운영되는 분산형 데이터베이스입니다. 기존에 중앙화된 기업에 의해서 운영되던 데이터베이스가 탈중앙화된 참여자에 의해서 운영되는 공개된 데이터베이스라는 측면에서 활용 가치가 매우 크다고 생각합니다.

왜 블록체인인가

  • Q. 블록체인을 좋아하는 이유는?
  • A. 첫번째로, 블록체인이라는 기술과 얽혀있는 생태계에 매력을 느꼈습니다. 사실 이전에는 인공지능에 관심이 더 많았는데요, 인공지능과 그 생태계를 보다보니, 인공지능을 다들 갖다 쓰려고만 하고, 이 인공지능을 어떻게 하면 잘 쓰고, 인공지능을 어떻게 발전시키려고 하는지에 대한 고민은 부족해보였습니다. 그 고민은 소수의 똑똑한 수학자들이나 인공지능 전문가의 몫이었습니다. 하지만, 블록체인은 달랐습니다. 이 블록체인을 사용하는 것을 뛰어넘어서, 어떻게 하면 블록체인을 실생활에 녹여내고 가치를 높이는 것에 엔지니어 뿐만 아니라 디자이너, 기획자, 금융인들 너무나 다양한 주체들이 참여하는 것을 볼 수 있었습니다. 즉, 소수에 의해서 만들어진 나이스한 기술보다는 아직 성숙하지 않은 기술을 발전시키기 위한 다양한 참여자들의 노력이 들어가있는 기술이라는 측면에서 매력적으로 다가왔습니다.
  • 두번째로, 기술적인 측면에서 가장 이상적인 엔지니어링을 가능하게 하는 기술이라고 생각이 들었습니다. 이더리움을 예시로 들면, 코드를 수행하는데 드는 가스비를 줄이기 위해서 코드를 최적화해야합니다. 기존에는 단지 컴퓨터 리소스를 줄이기 위해서 코드 최적화를 했다면, 블록체인 위에서 프로그래밍하는 것은 그때그때의 비용이라는 측면에서 코드 최적화를 자연스럽게 유도하는 매커니즘입니다.
  • 또한, 확장성 측면에서 단순히 오픈소스가 아니라, 수행할 수 있는 오픈소스라는 점이 매력적입니다. 예를 들어, 현재 중앙화된 서비스의 경우 그 서비스에서 API를 제공하지 않으면 그 서비스를 제공받을 수 있는 방법이 없습니다. 하지만, 블록체인 위에 올라간 컨트랙트는 같은 블록체인 위에 있다고 하면 컨트랙트 호출이 가능합니다. 즉, 한 컨트랙트에서 다른 컨트랙트를 호출할 수 있다는 것 입니다. 이런 컨트랙트 공유 측면에서 블록체인 안에서의 확장성이 얼마나 클지 기대되는 부분입니다.
  • 마지막으로 블록체인 위에 올라간 web3의 철학에 대해서 매력을 느꼈습니다. 인터넷의 역사가 짧지만, 그 안에서 대부분 중앙화된 서비스와 특정 기업들에 의해서 좌지우지 되었습니다. 앞으로는 인터넷에 참여하는 사람들의 가치가 더 올라가고, 그 안에서의 민주주의가 녹아들어가고 또 새로운 가치를 창출해내는 것이 기대가 됩니다. 따라서, 기존에 없던 새로운 패러다임을 만드는 기술이라는 측면에서 기대가 됩니다.

블록체인의 보안

  • Q. 블록체인은 안전하다고 생각하시나요? 왜?
  • A. 하나의 중앙화된 주체에 의한 시스템이 아니라 탈중앙화된 주체들의 합의에 의해 운영되는 시스템으로 데이터의 위변조를 어렵게 합니다.

블록체인의 특징

  • Q. 블록체인의 특징에는 무엇이 있을까요?
  • A. Permissionless, 탈중앙화, 공개성,데이터의 영속성

블록체인의 문제점

  • Q. 블록체인의 문제점은 무엇이 있을까요?
  • A. 블록체인의 특징과 맵핑되는 다음과 같은 특징이 있습니다.
    • Permissionless
      • 악의적인 노드가 네트워크에 참여하여 악의적인 행동을 할 수 있음.
      • 이를 해결하기 위해 확장성 솔루션에서는 데이터 가용성 문제에 대한 솔루션을 개발하거나 악의적인 노드에게 페널티를 주는 등의 방법을 고안하거있음.
    • 탈중앙화
      • x
    • 공개성
      • 민감한 데이터를 저장할 때는 블록체인을 사용하기 어려움.
      • 이를 해결하기 위해 secret network처럼 컨트랙트와 컨트랙트의 수행 등의 내역을 암호화시킨 솔루션들이 있음.
    • 데이터의 영속성
      • 데이터에 선정적이거나 불온한 데이터가 남아있음.
    • 느린 속도
      • 블록체인 트릴레마에서 볼 수 있는 것처럼 탈중앙성을 높일수록 블록체인의 확장성이 떨어진다. 확장성은 단위 시간 내에 처리할 수 있는 트랜잭션의 수를 검증 시간으로 나눈 것을 의미한다. 즉, 중앙화가 될수록 검증 시간은 줄어들지만 탈앙중성이 떨어지고, 탈중앙화가 될수록 검증시간은 늘어난다.
      • 이를 해결하기 위한 다양한 레이어2 솔루션들이 제안되고 있는데, 아직까지 대부분은 실행 레이어만 분리한 것으로 보인다. 하지만 점점 이러한 확장성 문제를 해결하기 위하여 기능별로 모듈화 시키는 모듈러 블록체인이 생기고 있고, 모듈의 종류 또한 실행 레이어를 벗어나서 데이터 가용성 레이어 등으로 확장해나가고 있다. 참고로 모듈러 블록체인의 선구자는 폴리곤이다.

블록체인의 합의 알고리즘

  • Q. 블록체인에서 사용하는 합의 알고리즘에는 어떤 것이 있나요?
  • A. PoW, PoS, PoA. Pow는 어려운 문제를 해결하고 다른 노드에게 가장 빨리 전파한 블록을 블록체인에 추가한다. 이 때 다른 노드들은 전파받은 블록을 검증한다. Pos는 지분이많은 노드가 블록을 생성할 수 있지만, 확률적으로만 높다는 특징이 있다. PoA는 권한이 있는 검증자들에 의해서 합의를 한다는 중앙화적인 특징이 있다.

소프트포크 vs 하드포크

  • Q. 소프트포크와 하드포크의 차이는 무엇인가요?
  • A. 소프트포크는 블록체인의 소프트웨어 업데이트를 진행할 때 발생하는 포크로 기존의 블록체인은 그대로 유지된다. 반면에 하드포크는 기존의 블록체인과 별개의 블록체인을 만드는 것으로 볼 수 있다. 예를 들어, 이더리움과 이더리움 클래식, 비트코인과 비트코인 캐시가 하드포크라고 볼 수 있다

머클 트리란

  • 머클트리는 complete binary tree로 리프노드에는 트랜잭션이, 중간 노드에는 자식노드를 해싱한 값이 저장된다. 머클트리를 사용하는 이유는 어떤 트랜잭션이 저장이 되어있고 위변조되지 않았는지 파악하기 쉽다는 것이다. 만약에 어떤 트랜잭션이 누락되거나 다른 트랜잭션 해시값이 들어가 있다고 하면 그 노드와 관련된 중간 노드들, 즉 머클 경로에 있는 노드값들이 모두 바뀌고 최종적으로 머클 루트까지 바뀌게 된다. 이러한 점이 검증, 즉 머클 증명을 하기 쉽기 때문에 머클트리를 사용하는 것이다.
  • 흥미로운 점은, 이더리움은 3가지 종류의 머클 루트 정보를 블록 해더에 저장한다. 첫번째로 dataroot 라 하여 트랜잭션으로 구성되어 있는 머클루트, 두번째로 stateroot라 하여 트랜잭션의 상태 정보로 구성된 머클루트, 마지막으로 receipt hash로 구성되어 있는 머클트리가 있다. 여기서 state root를 만드는 머클 트리는 특수한 머클트리인데 이를 상태전이 머클 패트리시아 트리라고 부른다.

EVM이란

  • EVM은 JVM처럼 하드웨어나 운영체제에 영향받지 않고 어느 환경에서든 이더리움 위의 dapp을 구동시킬 수 있는 가상 환경이다. JVM이 JVM에서 구동 가능한 소프트웨어를 실행할 수 있는 환경을 제공하는 것처럼, EVM도 EVM위에서 구동 가능한 dapp들을 구동시킬 수 있는 환경을 제공한다. 사실 그 dapp은 solidity나 vyper등 어떤 언어로 작성되어도 상관없고 다만 EVM이 지원하는 opcode로 컴파일되어야 한다

컴파일

  • Opcode로 컴파일하는 방법은 solidity compiler와 같은 컴파일러를 사용해야한다. 컴파일하게 되면 opcode와 abi가 나오게 된다. Opcode는 스마트컨트랙트를 올리게 될 때 블록체인 상에 저장이 되고, abi는 따로 저장되지 않는다. Abi는 무엇일까? Abi는 컨트랙트에 대한 메타데이터를 제공하는 것으로 payable인지, 함수의 이름과 함수의 파라미터 등에 대한 정보를 제공한다.

개발 환경

  • 많이 사용하는 것은 remix일 것 같다. IDE 기능도 있으면서 바로 테스트넷 또는 메인넷에 배포도 가능하고, 컴파일 기능도 있는 통합 개발 환경이다. Ganache라는 것은 로컬에 블록체인 환경을 가상으로 구축한 것이다. 사실 블록체인이라고 하긴 어렵지만 튜토리얼과 같이 스마트 컨트랙트를 배포하고, 블록이 생기는 것을 육안으로 확인하는 등의 기능을 제공한다. Truffle은 스마트 컨트랙트를 개발하기 위한 프레임워크를 제공한다. Hardhat은 truffle과 같은 목적이지만 더 많은 기능을 제공한다고 한다. Openzepplin은 표준화된 컨트랙트를 사용할 수 있는 라이브러리를 제공한다. 오픈소스로서, 예를 들어 ERC20 토큰을 개발할 때 open zeppelin의 라이브러리를 사용하는 것으로 간편하게 개발할 수 있다.

블록체인의 기술적인 문제점

  • Q. 현재 블록체인의 기술적인 문제는 어떤게 있을까요?
  • A. 확장성 문제, 데이터 가용성 문제. 이러한 문제들을 해결하기 위한 다양한 레이어2 솔루션들이 개발되고 있고, 한 걸음 더 나아가서 데이터 가용성 레이어와 같은 레이어를 별도로 구분한 솔루션들도 개발되고 있음. 이들의 최종적인 목적은 모듈러 블록체인인 것으로 보임. 하지만, 모놀리틱과 모듈러 블록체인 둘 중 어떤게 더 성공할지는 미지수임.
  • 가장 먼저 확장성 문제가 가장 크다고 생각합니다. 블록체인 상에 있는 트랜잭션이 증가함에 따라서 이 트랜잭션들을 검증하는데 시간이 소요되는데, 현재 이더리움의 경우 이러한 블록 검증이 완료되는 시간이 15초 정도 걸립니다. 이러한 문제를 해결하기 위해서 다양한 확장성 솔루션이 나오고 있습니다. 예를 들어, 플라즈마, 옵티미즘, zk 롤업 같은 경우에는 트랜잭션 실행 네트워크를 별도로 구성합니다. 그리고 매 트랜잭션에 대해서 블록에 포함시키고 검증하는 것이 아니라, 트랜잭션들을 일정 주기로 모은 다음에 요약된 정보 즉, 머클루트를 메인 체인인 이더리움 네트워크에 저장합니다. 이러한 방식을 통해서 검증에 소요되는 시간은 줄이고, 보안성은 유지할 수 있게 됩니다.
  • 또 다른 문제는 데이터 가용성 문제가 있습니다. 이러한 데이터 가용성 문제는 보통 확장성 솔루션에서 많이 발견할 수 있는데, 간단히 이야기하면, 검증을 할 수 있는 충분한 데이터를 얻지 못하는 상황을 의미합니다. 예를 들어, 라이트 노드를 추가하여 확장성을 개선하려는 경우에는 라이트 노드가 특정 트랜잭션이 빠져있는 것을 알지 못합니다. 이러한 문제를 해결하기 위해서 RS-erasure code 기반의 Data Availability Sampling 을 수행합니다. 이것은 즉, 원본데이터를 서로 주고 받는 것이 아니라, 인코딩된 데이터를 주고 받음으로써 일부 데이터가 누락되더라도 데이터를 복구할 수 있는 메커니즘에 기반하고 있고, 또한 이러한 인코딩된 데이터 정보를 하나의 노드에게서 요청받는 것이 아니라 여러 노드에게서 샘플링함으로써 반복적인 요청에 기반하여 최종적으로 100%의 원본 데이터를 복구할 수 있도록 합니다. 이러한 기능을 하는 레이어는 블록체인 네트워크에 구현되어있을 수 있고, 또는 별도의 레이어를 구축할 수 있습니다. 대표적으로 Celestia 라는 블록체인은 데이터 가용성 레이어를 담당하는 블록체인을 개발하였습니다. 이 Celestia 가 하는 역할은 실행 레이어에서 데이터에 대한 요약본을 전달할 때 바로 메인 네트워크로 내리지 않고 Celesita 를 거쳐서 데이터 가용성을 보장한 상태의 데이터를 내리도록 합니다. 왜냐하면 기존에 두 개의 서로 다른 네트워크로 구성했을 때는 데이터를 내릴 때, sequencer 라는 주체에 의존을 했지만, 이러한 역할을 믿을 수 있는 Celestia 네트워크를 통함으로써 맡길 수 있습니다. 따라서, 메인 체인에 있는 데이터가 정상적인지 검증하고자 하는 검증자는 Celestia 를 통해서 특정 블록에 대한 정보를 받을 수 있고, 이렇게 얻은 정보를 통해서 Fraud Proof 를 진행할 수 있습니다.

블록체인의 비기술적인 문제

  • Q. 현재 블록체인의 비기술적인 문제는 어떤게 있을까요?
  • A. 블록체인 자체적으로는 MEV 문제. NFT 에서는 유동성 문제가 있다고 생각합니다

MEV문제

  • MEV 문제는 이더리움 네트워크에서 가장 두드러지게 보여지는 문제입니다. Maximal Extractable Value 의 줄임말로, 블록체인 사용자가 의도하지 않았지만 추가로 내는 세금이라는 말로 쓰입니다. 원래는 M 이 miner 였는데, 조사를 해보니 miner는 MEV 의 20%정도만 가져가고 대부분은 searcher 이 가져갑니다. 따라서 이 M 은 Maximal 로 변환되었습니다. 그러면 이 MEV 가 발생하는 사례를 말씀드리겠습니다. 먼저 front running 과 back running 에 대해서 이해를 하고 있어야되는데요, front running 은 이더리움 네트워크가 더 많은 가스비를 지불하는 트랜잭션을 먼저 처리하는 메커니즘을 이용하여 자신의 트랜잭션이 먼저 처리되도록 조치를 취하는 것입니다. 그리고 back running 은 다른 사람의 트랜잭션 뒤에 바로 이어서 트랜잭션을 수행시킴으로써 의도적으로 이익을 취하는 행위를 의미합니다.. 이 두 가지를 조합하여 sandwich attack을 할 수 있는데, 예를 들어 A 라는 사용자의 Dex swap (ETH -> BTC) 트랜잭션에 대해서 front running 으로 일부러 BTC 를 매수하여 사용자가 더 많은 ETH를 갖고 BTC 를 갖고 가도록 하고, 이렇게 높아진 BTC의 가치에 대해서 back running 을 통해서 BTC를 매도함으로써 차익을 얻을 수 있습니다.
  • 이러한 문제를 해결하기 위해서는 첫번째로 private mining pool 을 사용하는 방법이 있습니다. Private mining pool 을 사용하게 되면 tx pool에 pending 하고 있는 tx 가 보이지 않으므로 외부 노출의 위험은 줄일 수 있습니다. 하지만, 만약에 그 private mining pool 이 tx 를 검열하고자하면, 탈중앙성을 해치게 되는 문제점이 발생합니다. 따라서, 완전히 이 탈중앙성을 크게 훼손시키지 않고, MEV 를 해결할 수 있는 Flashbot 이 존재합니다. 이 Flashbot은 중간 매개자의 역할을 하는데 , searcher 가 tx 의 번들을 만들고 bidding 하여서 flashbot 에 제출하게 되면, flashbot 은 중간에서 miner 에게 tx 를 갖고 가라고 합니다. 그러면 minier 들은 그 중에서 가장 자신이 최고의 이익을 얻을 수 있는 번들을 선택한다. 이 때, 번들 안에 있는 tx는 수정이 불가능하다는 점이 flashbot 을 안전하게 만드는 이유중 하나입니다.

NFT 유동성 문제

  • 자산에서 중요한 요소 중 하나는 유동성 문제이다. 유동성이 메마르면 자산의 가격이 불안정한 문제점을 갖고 있다. 어떻게 하면 NFT 씬에서는 유동성 문제를 해결하려고 할까?
  • 하나의 방법으로는 NFT를 하나의 채굴기처럼 활용하여 토큰을 찍어내는 방법이 있다. 따라서, 토큰을 통해 유동성을 끌어오는 방식이다. 하지만, 이 방법은 많은 사례에서 봤던 것처럼 토큰의 소각처 없이 무한 공급되는 것은 토큰 가격을 끊임없는 나락으로 떨구는 방법이기도 하면서 NFT 의 유동성 문제를 해결하지도 못한다.
  • 고질적인 NFT의 유동성을 해결할 수 있는 신박한 방법은 없을까?

크립토 좀비 요약

프라이빗 블록체인 기반한 ERC20 토큰 개발기

블록체인에서의 검색

  • Q. 블록체인에서 각 블록을 탐색하는 방법 외에 다른 방법은 없을까?
  • A. 다른 방법은 없다. 예를 들어서 A 라는 주소의 트랜잭션을 골라서 보고 싶다고 하면, 모든 블록을 하나씩 보면서 트랜잭션을 가져오는 방법 밖에 없다. 따라서, 특정 서비스들에서는 탐색하는 시간을 줄이기 위해서 자체 데이터베이스의 인덱스를 활용하여 저장하고 있다. 예를 들어, NFT 거래소인 오픈씨에서는 사용자의 NFT 보유 현황을 지속적으로 모니터링하여 데이터를 저장하고 있고, 이를 통해 바로바로 내 NFT 보유 현황을 보여줄 수 있다. 그렇지 않고서는 그렇게 빨리 NFT 보유 현황을 보여줄 수 없다.

이더리움의 튜링 완전성