- Published on
왜 대부분의 스마트 컨트랙트 사례가 실현 불가능한가?
- Author
- Name
- yceffort
인기 있는 블록체인 플랫폼을 개발하면서, 나는 때때로 Ethereum과 같은 스마트 컨트랙트가 MultiChain 로드맵에 있는지 질문을 받는다. 내가 항상 하는 대답은 항상 '아니오, 아니면 아직 아니다'이다.
그러나 과대 광고로 가득 찬 블록체인 세계에서는 스마트 컨트랙트가 대유행이다. 문제는, 현재 허가된 비트코인 스타일의 블록체인(증명서, 회사 기록 보관 및 경량의 금융)에 대한 세 가지 강력한 사용 사례를 알고 있지만, 이더리움의 스마트 컨트랙트에 상응하는 것을 아직 찾지 못했다는 것이다.
사람들이 스마트 컨트랙트가 무엇을 하길 원하는지 이해하지 못하는 것은 아니다. 오히려, 이런 생각들 중 그렇게 많은 것들이 단순히 불가능하다는 것이 사실이다. 똑똑한 사람들이 "스마트 컨트랙트"라는 말을 들으면, 그들의 상상력은 폭발하는 경향이 있다. 그들은 자율적인 지능형 소프트웨어의 꿈을 만들어내고, 세계로 뻗어나가고, 데이터를 가고 나아가려한다. 불행히도, 스마트 컨트랙트의 현실은 더 평범하다.
스마트 컨트랙트는 블록체인에 저장된 코드로, 블록체인 트랜잭션에 의해 트리거되고 블록체인의 데이터베이스에서 데이터를 읽고 쓴다. 바로 그게 전부다.
스마트 컨트랙트는 블록체인에서 실행되고 그 블록체인 상태와 상호작용하는 코드의 멋진 이름일 뿐이다. 코드는 어떻게 구성되어 있는가? 파스칼, 파이썬, PHP 자바, 포트란, C++ 다. 만약 우리가 데이터베이스에 대해서 이야기 한다면, 그것은 단순히 SQL 확장으로 작성된 저장 프로시저다.
이 모든 언어는 근본적으로 동등하며, 같은 종류의 문제를 같은 방법으로 해결한다. 물론 각기 강점과 약점이 있다. C로 웹 사이트를 만들거나 루비에서 HD 비디오를 압축하는 것은 미친 짓이다. 하지만 원칙적으로는 원한다면 할 수 있다. 당신은 단지 편리함과 성과, 그리고 아마도 당신의 일자리에 대해 큰 대가를 치르게 될 것이다.
스마트한 컨트랙트와 관련된 문제는 사람들의 기대가 부풀려진 것뿐만이 아니라, 많은 사람들이 실행 불가능한 아이디어에 시간과 돈을 쓰도록 유도하고 있다는 것이다.
대기업은 고위 경영진이 새로운 기술을 접하는 순간부터 기술의 장점과 한계가 진정으로 이해되는 시점까지 오랜 경로를 여행할 수 있는 충분한 자원을 보유하고 있는 것으로 보인다. 어쩌면 우리 자신의 경험이 이번에는 단축하는 데 도움이 될지도 모른다.
지난 9개월 동안 우리는 많은 스마트 컨트랙트 활용 사례를 제시받았고, 이러한 사례들이 간단하게 이루어질 수 없다는 것에 대해 몇번이고 반응을 해줬다.
결과적으로, 우리는 가장 일반적으로 행해지는 세 가지 스마트 컨트랙트의 오해들을 확인했다. 기술이 미숙하거나 도구를 아직 사용할 수 없기 때문에 이러한 생각은 틀리지 않다.
오히려, 그들은 데이터베이스에 존재하는 분산되어 있는 코드의 근본적인 특성을 오해한다.
1. 외부 서비스와 결합되는 스마트 컨트랙트
종종 제안된 첫 번째 사용 사례는 일부 외부 이벤트에 대한 응답으로 동작을 변경하는 스마트 컨트랙트다. 예를 들어, 주어진 달의 강우량에 따라 조건부로 지불하는 농업 보험 정책같은 것을 예로 들 수 있다.
상상 속의 과정은 이렇다: 스마트 컨트랙트는 미리 정해진 시간까지 기다리고, 외부 서비스에서 기상 보고서를 검색하며, 수신된 데이터에 따라 적절하게 행동한다.
이 모든 것이 충분히 간단해 보이지만, 또한 불가능하다. 왜일까? 블록체인은 합의 기반 시스템이기 때문에 모든 거래와 블록을 처리한 후 모든 노드가 동일한 상태에 도달할 경우에만 작동한다.
블록체인에서 일어나는 모든 일은 완전히 결정론적이어야 하며, 차이가 생겨날 수 있는 방법은 없다. 두 개의 정직한 노드가 체인의 상태에 대해 동의하지 않는 순간, 전체 시스템은 쓸모 없게 된다.
이제 스마트 컨트랙트가 체인의 모든 노드에 의해 독립적으로 실행된다는 점을 기억하라. 따라서 스마트 계약이 외부 소스에서 일부 정보를 검색할 경우 이 검색은 각 노드에 의해 반복적으로 별도로 수행된다. 그러나 이 소스는 블록체인 외부에 있기 때문에 모든 노드가 동일한 답변을 받을 것이라는 보장은 없다.
소스가 다른 노드의 요청 사이에 응답을 변경하거나 일시적으로 사용할 수 없게 될 수 있다. 어느 쪽이든, 합의는 깨지고 전체 블록체인 전체가 죽어 버린다.
그렇다면 해결 방법이 무엇일까? 사실, 이는 간단하다. 외부 데이터의 검색을 실행하는 스마트 컨트랙트 대신, 하나 이상의 신뢰할 수 있는 당사자("요약")가 해당 데이터를 체인에 내장하는 트랜잭션을 생성한다. 모든 노드에는 동일한 데이터 복사본이 있으므로 스마트 컨트랙트 계산에 안전하게 사용할 수 있다.
다시 말해, 신탁은 데이터를 끌어오기 보다는 블록체인에 데이터를 밀어넣는 것이다.
In other words, an oracle pushes the data onto the blockchain rather than a smart contract pulling it in.
외부 세계에서 사건을 일으키는 스마트 컨트랙트에서도 비슷한 문제가 나타난다. 예를 들어, 많은 사람들은 돈을 이체하기 위해 은행의 API를 호출하는 스마트 컨트랙트 아이디어를 좋아한다. 하지만 모든 노드가 체인에서 코드를 독립적으로 실행하고 있다면, 이 API를 호출하는 책임은 누구에게 있는가?
정답이 하나의 노드일 경우, 의도적으로 오작동을 일으키거나 그렇지 않을 경우 어떻게 되는건가? 모든 노드가 정답이라면 해당 API의 암호를 사용하여 모든 노드를 신뢰할 수 있는가? 그리고 우리는 정말로 수백번이나 API를 호출하기를 원하는가? 더욱이, 스마트 컨트랙트에서 API 호출의 성공 여부를 알아야 한다면, 우리는 바로 외부 데이터에 의존하는 문제로 되돌아가게 된다.
이전과 마찬가지로 간단한 해결 방법이 있다. 외부 API를 호출하는 스마트 컨트랙트 대신 블록체인의 상태를 모니터링하고 특정 작업을 수행하는 신뢰할 수 있는 서비스를 사용한다. 예를 들어, 은행은 미리 블록체인을 감시하고 온체인 거래를 반영하는 자금 이전을 수행할 수 있다. 이것은 이 체인이 완전히 소극적인 역할을 하기 때문에 블록체인의 합의에 위험을 주지 않는다.
이 두 가지 해결 방법을 보면 우리는 몇 가지 관찰을 할 수 있다.
첫째, 둘 다 블록체인과 외부 세계 사이의 상호작용을 관리하기 위해 신뢰할 수 있는 실체가 필요하다. 이것은 기술적으로 가능하지만 분산형 시스템의 목표를 약화시킨다.
둘째, 이러한 해결 방안에 사용되는 메커니즘은 데이터베이스를 읽고 쓰는 간단한 예다. 외부 정보를 제공하는 신탁은 단순히 그 정보를 체인에 쓰는 것이다. 그리고 실제 세계의 블록체인 상태를 반영하는 서비스는 그 사슬에서 읽는 것 이외에는 아무것도 하지 않는다. 즉, 블록체인과 외부 세계 간의 상호 작용은 정기적인 데이터베이스 작업으로 제한된다.
2. 온체인 지불 실행
우리가 자주 듣는 또 다른 제안서는 다음과 같다. 스마트 컨트랙트를 통해 이른바 "스마트 채권(Smart bond)"에 대한 쿠폰 지급을 자동화하는 것다. 이 아이디어는 스마트 컨트랙트 코드가 수동 프로세스를 피하고 발행자가 채무불이행을 할 수 없다는 것을 보장하면서 적절한 시기에 지급을 자동으로 개시하는 것이다.
물론, 이것이 효과를 거두기 위해서는 지급에 사용되는 자금 또한 블록체인 내에 있어야 한다. 그렇지 않으면 스마트 컨트랙트가 지급을 보장할 수 없다.
블록체인은 단지 데이터베이스일 뿐이며, 이 경우에는 발행된 채권과 현금이 들어있는 재무원장일 뿐이다. 그래서 우리가 쿠폰 지급에 대해 이야기할 때, 우리가 말하고자 하는 것은 합의된 시간에 자동으로 일어나는 데이터베이스 운영이다.
이 자동화는 기술적으로 실현 가능하지만 재정적 어려움으로 고통 받고 있다. 쿠폰 지불에 사용된 자금이 채권의 스마트 계약에 의해 통제된다면, 그 지불금은 실제로 보장 될 수 있다. 그러나 이는 또한 채권 발행자가 다른 어떤 것에도 사용할 수 없다는 것을 의미한다. 그리고 만약 그 자금들이 스마트 컨트랙트의 통제하에 있지 않다면, 지불을 보장할 방법이 없다.
다시 말하면, 스마트 채권은 발행자나 투자자에게 의미가 없다. 그리고 생각해보면, 이것은 완전히 명백한 결과다.
투자자의 관점에서 채권의 전체 포인트는 채무불이행 위험의 비용으로 매력적인 수익률이다. 그리고 발행자의 경우, 채권의 목적은 새로운 공장 건설과 같은 다소 불확실한 활동을 위한 자금을 조달하는 것이다.
채권 발행자가 조성된 자금을 활용하는 동시에 투자자가 상환될 것임을 보장할 방법은 없다. 위험과 수익 사이의 연관성이 블록체인이 해결할 수 있는 문제가 아니라는 것은 놀라운 일이 아니다.
3. 민감한 정보 숨기기
앞서 말씀드린 바와 같이, 블록체인 구축의 가장 큰 도전은 그들이 제공하는 근본적인 투명성이다.
예를 들어, 만약 10개의 은행이 함께 블록체인을 설정하고, 두 개의 은행이 쌍방 거래를 한다면, 이것은 다른 8개의 은행이 즉시 볼 수 있을 것이다. 이 문제를 완화하기 위한 다양한 전략은 있지만, 신뢰할 수 있는 관리자가 누가 무엇을 볼 수 있는지를 완벽하게 제어할 수 있는 중앙 집중식 데이터베이스의 단순성과 효율성을 능가하는 것은 없다.
어떤 사람들은 스마트 컨트랙트가 이 문제를 해결할 수 있다고 생각한다. 그들은 각각의 스마트 컨트랙트들이 완전한 통제력을 가지고 있는 자체적인 미니어처 데이터베이스를 포함하고 있다는 사실에서 출발한다. 이 데이터베이스에 대한 모든 읽기 및 쓰기 작업은 컨트랙트 코드에 의해 조정되므로 한 계약에서 다른 사람의 데이터를 직접 읽을 수 없다. (데이터와 코드 간의 이러한 긴밀한 결합을 캡슐화라고 하며, 널리 사용되는 객체 지향 프로그래밍 패러다임의 기반이다)
그렇다면, 한 스마트 컨트랙트가 다른 사람의 데이터에 액세스할 수 없다면, 블록체인 기밀성의 문제를 해결했을까요? 스마트한 컨트랙트에서 정보를 숨기는 것에 대해 말하는 것이 이치에 맞는가? 불행히도 대답은 '아니오'이다.
왜냐하면 한 스마트 컨트랙트에서 다른 사람의 데이터를 읽을 수 없더라도 해당 데이터는 체인의 모든 노드에 저장되어 있기 때문이다. 각 블록체인 참가자의 경우, 참가자가 완전히 제어하는 시스템의 메모리 또는 디스크에 있다. 그리고 만약 그들이 그렇게 하기를 선택한다면, 만약 그들이 그들의 시스템에서 정보를 읽는 것을 막을 수 있는 것은 아무것도 없다.
스마트 컨트랙트에서 데이터를 숨기는 것은 웹 페이지의 HTML 코드에서 데이터를 숨기는 것만 안전하다. 물론, 일반적인 웹 사용자들은 브라우저 창에 표시되지 않기 때문에 이 정보를 볼 수 없다. 그러나 웹 브라우저가 '소스 보기' 기능(모두가 가지고 있는 것처럼)을 추가하면 정보가 보편적으로 표시되게 된다.
마찬가지로 스마트 계약에 숨겨진 데이터의 경우 누군가가 블록 체인 소프트웨어를 수정하여 계약의 전체 상태를 표시하는 것이 필요하며 모든 비밀 유지가 손실된다.
스마트 컨트랙트는 무엇을 위한 것인가?
스마트 컨트랙트 자체만으로는 할 수 없는 것들이 너무 많기 때문에, 사람들은 그들이 실제로 무엇을 위한 것인지 물어볼 수도 있다. 하지만 이 질문에 답하기 위해서는, 블록체인 자체의 기본 원칙으로 돌아가야 한다. 블록체인을 통해서 중앙 관리자 없이도 서로 신뢰하지 않는 엔티티가 데이터베이스를 직접 안전하게 공유할 수 있다.
블록체인은 데이터 분리를 가능하게 하며, 이로 인해 복잡성과 비용이 크게 절감될 수 있다.
모든 데이터베이스는 '트랜잭션'을 통해 수정된다. 이 트랜잭션에는 전체 데이터베이스의 성공 또는 실패가 필요한 데이터베이스에 대한 일련의 변경 사항이 포함되어 있다. 예를 들어, 재무 책임자의 경우, 앨리스에서 밥으로의 지급은 (a) 앨리스가 충분한 자금을 가지고 있는지 확인하고, (b) 앨리스의 계좌에서 수량을 차감하고, 밥의 수량을 동일한 수량을 더하는 거래로 나타난다.
일반 중앙 관리 데이터베이스에서 이러한 트랜잭션은 신뢰할 수 있는 단일 권한에 의해 생성된다. 반대로 블록체인 기반 공유 데이터베이스에서 블록체인의 사용자가 트랜잭션을 생성할 수 있다. 그리고 이러한 사용자들은 서로를 완전히 신뢰하지 않기 때문에, 데이터베이스는 수행되는 트랜잭션을 제한하는 규칙을 포함해야 한다.
예를 들어, P2P(Peer-to-Peer) 재무 책임자의 경우, 각 거래는 총 자금의 양을 보존해야 하며, 그렇지 않으면 참여자들은 원하는 만큼 자유롭게 자신에게 돈을 줄 수 있게 되어 버린다.
사람들은 이러한 규칙들을 표현하는 다양한 방법을 상상할 수 있지만, 현재는 각각 비트코인과 이더리움에 의해 영감을 받은 두 개의 지배적인 패러다임이 있다. "트랜잭션 제약조건"이라고 부를 수 있는 비트코인 방식은 (a) 해당 거래에서 삭제된 데이터베이스 항목과 (b) 생성된 항목의 측면에서 각 거래를 평가한다.
금융 원장의 경우, 삭제된 항목의 총 기금 양이 생성된 총 기금 수와 일치해야 한다고 명시한다. (기존 항목의 수정은 해당 항목을 삭제하고 해당 항목에 새 항목을 생성하는 것과 같다고 생각한다)
두 번째 패러다임은 스마트 컨트랙트다. 이것은 계약 데이터에 대한 모든 수정은 계약 규정에 의해 수행되어야 한다고 명시한다. (기존 데이터베이스의 경우, 이를 강제 저장 절차라고 생각할 수 있다.) 계약 데이터를 수정하기 위해 블록체인 사용자는 해당 요청의 이행 여부 및 방법을 결정하는 코드로 요청을 보내게 된다.
이 예와 같이, 금융 책임자의 스마트 컨트랙트는 중앙집중형 데이터베이스의 관리자와 동일한 세 가지 작업을 수행한다. 즉, 충분한 자금 확인, 한 계정에서 차감, 다른 계정에 추가.
이 두 패러다임 모두 효과적이며 각각 장단점이 있다. 요약하자면, 비트코인 방식의 거래 제약조건은 우수한 동시성과 성능을 제공하는 반면, Ethereum 스타일의 스마트 계약은 더 큰 유연성을 제공한다.
다시 스마트 컨트랙트가 무엇에 대한 것인지 질문으로 돌아가 보자. 스마트 컨트랙트는 트랜잭션 제약으로 구현할 수 없는 블록체인 사용 사례를 위한 것이다.
what smart contracts are for: Smart contracts are for blockchain use cases which can't be implemented with transaction constraints.
스마트 컨트랙트 사용에 대한 이 기준을 고려할 때, 나는 아직 자격이 되는 허가된 블록체인에 대한 강력한 사용 사례를 볼 수 없다.
내가 알고 있는 모든 강력한 블록체인 애플리케이션은 자산 생성, 전송, 에스크로, 교환 및 파괴뿐만 아니라 허가 및 일반 데이터 스토리지를 처리할 수 있는 비트코인형 트랜잭션으로 구현될 수 있다. 그럼에도 불구하고 새로운 사용 사례는 여전히 나타나고 있으며, 스마트 컨트랙트의 힘을 필요로 하는 사례가 있다고 해도 놀라지 않을 것입니다. 최소한 비트코인 패러다임의 확장도 있다.
답이 무엇이든 간에 기억해야 할 핵심은 스마트 컨트랙트는 단지 데이터베이스에서 수행되는 트랜잭션을 제한하는 한 가지 방법이라는 것입니다.
Whatever the answer turns out to be, the key to remember is that smart contracts are simply one method for restricting the transactions performed in a database.
이는 분명 유용한 것이며 데이터베이스를 공유하기 위해 안전하게 만드는 데 필수적이다 그러나 스마트 컨트랙트에서는 다른 작업을 수행할 수 없으며, 해당 컨트랙트에서 상주하는 데이터베이스의 경계를 벗어날 수는 없다.
Why Many Smart Contract Use Cases Are Simply Impossible