불가능한 현명한 계약을 조심하십시오

소스 노드 : 1576899

세 가지 가장 일반적인 스마트 계약 오해

인기 있는 블록체인 플랫폼의 개발자로서 우리는 때때로 이더리움과 같은 스마트 계약이 멀티 체인 로드맵. 제가 항상 드리는 답변은 다음과 같습니다. 아니, 아니면 적어도 아직.

그러나 과대 광고로 가득 찬 블록체인 세계에서 스마트 계약이 대세인데 왜 안 될까요? 글쎄, 문제는 허가된 비트코인 ​​스타일 블록체인(출처, 회사 간 기록 및 경량 금융)에 대한 세 가지 강력한 사용 사례를 알고 있지만 아직 이더리움 스타일 스마트 계약에 해당하는 것을 찾지 못했다는 것입니다.

사람들이 스마트 계약으로 무엇을 하기를 원하는지에 대한 아이디어가 부족한 것은 아닙니다. 오히려 이러한 아이디어가 너무 많다는 것입니다. 단순히 불가능하다. 똑똑한 사람들이 "스마트 계약"이라는 말을 들으면 상상력이 요동치는 경향이 있습니다. 그들은 자율 지능 소프트웨어의 꿈을 떠올리게 하고, 세계로 나가서 데이터를 타고 이동합니다.

불행히도 스마트 계약의 현실은 그 모든 것보다 훨씬 더 평범합니다.

스마트 계약은 블록체인에 저장되고 블록체인 트랜잭션에 의해 트리거되며 해당 블록체인의 데이터베이스에서 데이터를 읽고 쓰는 코드 조각입니다.

그게 다야 진짜. 스마트 계약은 블록체인에서 실행되고 해당 블록체인의 상태와 상호 작용하는 코드의 멋진 이름입니다. 그리고 뭐 is 암호? 파스칼, 파이썬, PHP입니다. Java, Fortran, C++입니다. 데이터베이스에 대해 이야기하고 있다면 저장 프로 시저 SQL 확장으로 작성되었습니다. 이 모든 언어는 근본적으로 동일하며 동일한 종류의 문제를 동일한 방식으로 해결합니다. 물론 각각의 장단점이 있습니다. C로 웹사이트를 구축하거나 Ruby에서 HD 비디오를 압축하는 것은 미친 짓일 것입니다. 그러나 원칙적으로는 다음과 같이 할 수 있습니다.. 편리함, 성능, 그리고 아마도 당신의 머리카락이라는 면에서 엄청난 대가를 치르게 될 것입니다.

스마트 계약의 문제는 사람들의 기대가 너무 과하다는 것뿐만이 아닙니다. 이러한 기대로 인해 많은 사람들이 실현할 수 없는 아이디어에 시간과 돈을 투자하게 됩니다. 대기업은 고위 경영진이 새로운 기술을 접하는 순간부터 해당 기술의 장점과 한계가 진정으로 이해되기까지 긴 여정을 여행하기에 충분한 자원을 가지고 있는 것 같습니다. 아마도 우리 자신의 경험이 이 시간을 줄이는 데 도움이 될 것입니다.

지난 XNUMX개월 동안 우리는 많은 스마트 계약 사용 사례를 발표했으며, 그것들은 단순히 수행할 수 없다는 응답을 반복해서 발견했습니다. 그 결과, 우리는 가장 일반적으로 가지고 있는 세 가지 스마트 계약에 대한 오해를 확인했습니다. 기술이 미숙하거나 도구가 아직 사용 가능하지 않기 때문에 이러한 아이디어가 잘못된 것은 아닙니다. 오히려 그들은 오해한다. 데이터베이스에 존재하고 분산된 방식으로 실행되는 코드의 기본 속성.

외부 서비스에 연락하기

종종 제안된 첫 번째 사용 사례는 외부 이벤트에 대한 응답으로 동작을 변경하는 스마트 계약입니다. 예를 들어, 주어진 달의 강우량에 따라 조건부로 지불하는 농업 보험 정책. 상상된 프로세스는 다음과 같습니다. 스마트 계약은 미리 결정된 시간까지 기다렸다가 외부 서비스에서 날씨 보고서를 검색하고 수신된 데이터를 기반으로 적절하게 행동합니다.

이 모든 것이 간단해 보이지만 불가능합니다. 왜요? 블록체인은 합의 기반 시스템이기 때문에 모든 트랜잭션과 블록을 처리한 후 모든 노드가 동일한 상태에 도달해야 작동합니다. 블록체인에서 일어나는 모든 일은 완전히 결정적이어야 하며 차이가 생길 가능성이 없어야 합니다. 두 정직한 노드가 체인의 상태에 대해 동의하지 않는 순간 전체 시스템은 무가치해집니다.

이제 스마트 계약은 체인의 모든 노드에서 독립적으로 실행된다는 것을 기억하십시오. 따라서 스마트 계약이 외부 소스에서 일부 정보를 검색하는 경우 이 검색은 각 노드에서 반복적으로 개별적으로 수행됩니다. 하지만 이 소스는 블록체인 외부에 있기 때문에 모든 노드가 동일한 응답을 받을 것이라는 보장은 없습니다.. 아마도 소스는 다른 노드의 요청 사이에 응답을 변경하거나 일시적으로 사용할 수 없게 될 것입니다. 어느 쪽이든, 합의가 깨지고 전체 블록체인이 죽습니다.

해결 방법은 무엇입니까? 사실, 그것은 오히려 간단합니다. 외부 데이터 검색을 시작하는 스마트 계약 대신 하나 이상의 신뢰할 수 있는 당사자("오라클")가 해당 데이터를 체인에 포함하는 트랜잭션을 생성합니다. 모든 노드는 이 데이터의 동일한 복사본을 가지므로 스마트 계약 계산에 안전하게 사용할 수 있습니다. 즉, 오라클 밀어 스마트 계약이 아닌 블록체인에 데이터 당기 거기에.

외부 세계에서 사건을 일으키는 스마트 계약에 관해서도 비슷한 문제가 나타납니다. 예를 들어 많은 사람들이 돈을 이체하기 위해 은행의 API를 호출하는 스마트 계약의 아이디어를 좋아합니다. 그러나 모든 노드가 체인의 코드를 독립적으로 실행하는 경우 이 API를 호출하는 책임은 누구에게 있습니까? 답이 단 하나의 노드라면, 그 특정 노드가 고의적이든 아니든 오작동하면 어떻게 됩니까? 그리고 답이 모든 노드라면 해당 API의 비밀번호로 모든 노드를 신뢰할 수 있습니까? API가 수백 번 호출되기를 정말로 원합니까? 설상가상으로 스마트 계약이 API 호출의 성공 여부를 알아야 하는 경우 외부 데이터에 의존하는 문제로 바로 돌아갑니다.

이전과 마찬가지로 간단한 해결 방법을 사용할 수 있습니다. 외부 API를 호출하는 스마트 계약 대신 블록체인의 상태를 모니터링하고 이에 대한 응답으로 특정 작업을 수행하는 신뢰할 수 있는 서비스를 사용합니다. 예를 들어 은행은 블록체인을 사전에 감시하고 온체인 거래를 반영하는 송금을 수행할 수 있습니다. 이것은 체인이 완전히 수동적인 역할을 하기 때문에 블록체인의 합의에 위험이 없습니다.

이 두 가지 해결 방법을 살펴보면 몇 가지 관찰할 수 있습니다. 첫째, 둘 다 블록체인과 외부 세계 간의 상호 작용을 관리하기 위해 신뢰할 수 있는 엔터티가 필요합니다. 이것은 기술적으로 가능하지만 분산 시스템의 목표를 훼손합니다. 둘째, 이러한 해결 방법에 사용된 메커니즘은 다음과 같은 간단한 예입니다. 데이터베이스 읽기 및 쓰기. 외부 정보를 제공하는 오라클은 단순히 해당 정보를 체인에 쓰는 것입니다. 그리고 실제 세계에서 블록체인의 상태를 미러링하는 서비스는 해당 체인에서 읽는 것 외에는 아무 것도 하지 않습니다. 즉, 블록체인과 외부 세계 간의 모든 상호 작용은 일반적인 데이터베이스 작업으로 제한됩니다. 이 사실에 대해서는 나중에 더 이야기하겠습니다.

온체인 결제 시행

여기 우리가 많이 듣는 경향이 있는 또 다른 제안이 있습니다. 스마트 계약을 사용하여 소위 "스마트 본드"에 대한 쿠폰 지불을 자동화하는 것입니다. 아이디어는 스마트 계약 코드가 적절한 시간에 자동으로 지불을 시작하여 수동 프로세스를 피하고 발행자가 채무 불이행을 방지할 수 있도록 하는 것입니다.

물론 이것이 작동하려면 지불에 사용된 자금도 블록체인 내부에 있어야 합니다. 그렇지 않으면 스마트 계약이 지불을 보장할 수 없습니다. 이제 블록체인은 발행된 채권과 약간의 현금이 포함된 재무 원장과 같은 데이터베이스일 뿐임을 상기하십시오. 따라서 우리가 쿠폰 지불에 대해 이야기할 때 실제로 말하는 것은 합의된 시간에 자동으로 발생하는 데이터베이스 작업입니다.

이 자동화는 기술적으로 실현 가능하지만 재정적 어려움을 겪고 있습니다. 쿠폰 지불에 사용되는 자금이 채권의 스마트 계약에 의해 통제된다면 그러한 지불은 실제로 보장될 수 있습니다. 그러나 이것은 또한 그 자금을 의미합니다 채권 발행자는 다른 용도로 사용할 수 없습니다.. 그리고 만약 그 자금이 있지 않다. 스마트 계약의 통제 하에 지불을 보장할 수 있는 방법이 없습니다.

즉, 스마트본드는 발행자에게 무의미하거나 투자자에게 무의미합니다. 생각해보면 이것은 완전히 명백한 결과입니다. 투자자의 관점에서 채권의 요점은 채무 불이행의 위험을 감수하면서 매력적인 수익률입니다. 그리고 발행인에게 있어 채권의 목적은 새로운 공장을 건설하는 것과 같이 생산적이지만 다소 위험한 활동을 위한 자금을 모으는 것입니다. 채권 발행자가 모금된 자금을 사용하는 동시에 투자자의 상환을 보장할 수 있는 방법은 없습니다. 놀라운 일이 아닐 수 없다. 위험과 수익의 연결은 블록체인이 해결할 수 있는 문제가 아닙니다..

기밀 데이터 숨기기

나는 이전에 작성된, 블록체인 배포의 가장 큰 과제는 블록체인이 제공하는 근본적인 투명성입니다. 예를 들어, XNUMX개 은행이 함께 블록체인을 설정하고 XNUMX개 은행이 양자간 거래를 수행하면 다른 XNUMX개 은행에서 즉시 볼 수 있습니다. 이 문제를 완화하기 위한 다양한 전략이 있지만 신뢰할 수 있는 관리자가 누가 무엇을 볼 수 있는지 완전히 제어할 수 있는 중앙 집중식 데이터베이스의 단순성과 효율성을 능가하는 전략은 없습니다.

어떤 사람들은 스마트 계약이 이 문제를 해결할 수 있다고 생각합니다. 그들은 각 스마트 계약이 모든 권한을 가진 자체 미니어처 데이터베이스를 포함한다는 사실에서 시작합니다. 이 데이터베이스의 모든 읽기 및 쓰기 작업은 계약 코드에 의해 중재되므로 한 계약에서 다른 계약의 데이터를 직접 읽을 수 없습니다. (데이터와 코드 사이의 긴밀한 결합을 캡슐화라고 하며 대중적인 객체 지향 프로그래밍 어형 변화표.)

따라서 하나의 스마트 계약이 다른 스마트 계약의 데이터에 액세스할 수 없는 경우 블록체인 기밀성 문제를 해결했습니까? 스마트 계약에서 정보를 숨기는 것에 대해 이야기하는 것이 의미가 있습니까? 불행히도 대답은 아니오입니다. 한 스마트 계약이 다른 스마트 계약의 데이터를 읽을 수 없더라도 해당 데이터는 여전히 체인의 모든 단일 노드에 저장되기 때문입니다. 각 블록체인 참가자의 경우 메모리 또는 디스크에 있습니다. 참가자가 완전히 통제하는 시스템. 그리고 그들이 그렇게 하기로 선택한 경우, 그들이 자신의 시스템에서 정보를 읽는 것을 막을 수 있는 방법은 없습니다.

스마트 계약에서 데이터를 숨기는 것은 웹 페이지의 HTML 코드에서 숨기는 것만큼 안전합니다. 물론, 일반 웹 사용자는 브라우저 창에 표시되지 않기 때문에 볼 수 없습니다. 그러나 웹 브라우저가 '소스 보기' 기능을 추가하기만 하면(모두가 그렇듯이) 숨겨진 정보가 보편적으로 표시됩니다. 마찬가지로 스마트 계약에 숨겨진 데이터의 경우 누군가가 계약의 전체 상태를 표시하도록 블록체인 소프트웨어를 수정하기만 하면 모든 기밀성이 손실됩니다. 반쯤 괜찮은 프로그래머라면 한 시간 정도면 그렇게 할 수 있습니다.

스마트 계약은 무엇을 위한 것입니까?

스마트 계약으로는 할 수 없는 일이 너무 많기 때문에 실제로 무엇을 위한 것인지 물을 수 있습니다. 그러나 이 질문에 답하기 위해서는 블록체인 자체의 기본으로 돌아가야 합니다. 요약하자면, 블록체인을 사용하면 중앙 관리자 없이도 서로를 신뢰하지 않는 엔터티가 직접 안전하게 데이터베이스를 공유할 수 있습니다. 블록체인은 데이터 중개화를 가능하게 하여 복잡성과 비용을 크게 절감할 수 있습니다.

모든 데이터베이스는 전체적으로 성공하거나 실패해야 하는 해당 데이터베이스에 대한 변경 세트를 포함하는 "트랜잭션"을 통해 수정됩니다. 예를 들어, 재무 원장에서 Alice가 Bob에 대한 지불은 (a) Alice가 충분한 자금을 보유하고 있는지 확인하고, (b) Alice의 계정에서 수량을 공제하고, (c) Bob의 계정에 동일한 수량을 추가하는 트랜잭션으로 표시됩니다. .

일반 중앙 집중식 데이터베이스에서 이러한 트랜잭션은 신뢰할 수 있는 단일 기관에 의해 생성됩니다. 대조적으로, 블록체인 기반 공유 데이터베이스에서는 해당 블록체인의 모든 사용자가 트랜잭션을 생성할 수 있습니다. 그리고 이러한 사용자들은 서로를 완전히 신뢰하지 않기 때문에 데이터베이스는 수행되는 트랜잭션을 제한하는 규칙을 포함해야 합니다. 예를 들어, PXNUMXP 재무 원장에서 각 거래는 총 자금 양을 보존해야 합니다. 그렇지 않으면 참가자는 원하는 만큼 돈을 자유롭게 제공할 수 있습니다.

이러한 규칙을 표현하는 다양한 방법을 상상할 수 있지만 현재로서는 각각 비트코인과 이더리움에서 영감을 받은 두 가지 지배적인 패러다임이 있습니다. "트랜잭션 제약"이라고 부를 수 있는 비트코인 ​​방법은 (a) 해당 트랜잭션에 의해 삭제된 데이터베이스 항목 및 (b) 생성된 항목 측면에서 각 트랜잭션을 평가합니다. 재무 원장에서 규칙에 따르면 삭제된 항목의 총 자금 수량이 생성된 항목의 총 금액과 일치해야 합니다. (기존 항목의 수정은 해당 항목을 삭제하고 그 자리에 새 항목을 만드는 것과 동일하다고 간주합니다.)

이더리움에서 나온 두 번째 패러다임은 스마트 계약입니다. 이는 계약 데이터에 대한 모든 수정이 해당 코드에 의해 수행되어야 함을 나타냅니다. (기존 데이터베이스의 맥락에서 우리는 이것을 다음과 같이 생각할 수 있습니다. 강요된 저장 프로시저.) 계약의 데이터를 수정하기 위해 블록체인 사용자는 요청 해당 요청을 이행할지 여부와 방법을 결정하는 코드입니다. 에서와 같이 이 예, 재무 원장에 대한 스마트 계약은 중앙 데이터베이스의 관리자와 동일한 세 가지 작업을 수행합니다. 충분한 자금 확인, 한 계정에서 공제 및 다른 계정에 추가.

이 두 패러다임 모두 효과적이며 각각 장단점이 있습니다. 이전에 깊이 논의. 요약하자면, 비트코인 ​​스타일의 트랜잭션 제약은 우수한 동시성과 성능을 제공하는 반면 이더리움 스타일의 스마트 계약은 더 큰 유연성을 제공합니다. 따라서 스마트 계약이 무엇을 위한 것인지에 대한 질문으로 돌아가려면:

스마트 계약은 트랜잭션 제약으로 구현할 수 없는 블록체인 사용 사례를 위한 것입니다.

스마트 계약을 사용하기 위한 이 기준을 고려할 때, 저는 자격이 있는 허가된 블록체인에 대한 강력한 사용 사례를 아직 보지 못했습니다. 내가 아는 모든 매력적인 블록체인 애플리케이션은 자산 생성, 전송, 에스크로, 교환 및 파기뿐 아니라 허가 및 일반 데이터 저장을 처리할 수 있는 비트코인 ​​스타일 트랜잭션으로 구현할 수 있습니다. 그럼에도 불구하고 새로운 사용 사례가 여전히 나타나고 있으며 일부 do 스마트 계약의 힘이 필요합니다. 또는 최소한 비트코인 ​​패러다임의 확장입니다.

답이 무엇이든 간에 기억해야 할 핵심은 스마트 계약은 단순히 데이터베이스에서 수행되는 트랜잭션을 제한하는 한 가지 방법이라는 것입니다. 이것은 의심할 여지 없이 유용한 것이며 해당 데이터베이스를 공유하기에 안전하게 만드는 데 필수적입니다. 그러나 스마트 계약은 다른 어떤 것도 할 수 없으며 확실히 그들이 상주하는 데이터베이스의 경계를 벗어날 수 없습니다.

의견을 적어주세요 링크드인에서.

타임 스탬프 :

더보기 멀티 체인