Ethereum Oracle 계약: Oracle을 신뢰할 수 있습니까?
게시 됨: 2022-03-11이 기사는 이더리움 오라클 계약의 사용에 관한 3부작 시리즈의 마지막 부분입니다.
- 1부에서는 트러플 프레임워크를 사용하여 코드를 설정, 실행 및 테스트할 수 있게 하는 방법을 소개했습니다.
- 2부에서는 코드를 조금 살펴보고 이를 Solidity의 일부 코드 및 디자인 기능에 대한 논의를 위한 시작점으로 사용했습니다.
이제 이 마지막 부분에서 질문을 하고 싶습니다. 우리가 방금 무엇을 했으며 왜 그렇습니까? 그리고 희망적으로 생각을 불러일으키는 몇 가지 방법을 제공하려고 노력하십시오. 배심원단은 오라클의 사용이 무신뢰와 어떤 관련이 있는지, 그리고 블록체인과 관련된 "무신뢰"라는 단어가 실제 사용에서 실제로 무엇을 의미하는지에 대해 여전히 많은 의견이 있습니다. 개념적 형식에서 실제 사용으로 이러한 아이디어 중 일부를 가져옴에 따라 우리는 이와 같은 질문과 씨름하고 조건을 갖추게 될 것입니다. 시작하겠습니다.
요약: 왜 이더리움 오라클이 필요한가요?
이것은 블록체인에서 코드를 실행하는 본질의 핵심에 도달합니다. 불변성과 결정론의 요구 사항을 충족하고 코드가 실제로 체인의 노드에 의해 실행되는 방식의 인공물로 스마트 계약은 블록체인 외부에 직접 도달하여 아무 것도 할 수 없습니다.
대부분의 프로그래머에게 이 사실은 매우 부자연스러운 사고 방식을 도입합니다. 어딘가에서 데이터가 필요한 경우 일반적으로 어딘가에 연결하고 가져옵니다. 일기예보 데이터가 필요한 스마트 계약? 날씨 피드에 연결하기만 하면 됩니다. 하지만; 블록체인 스마트 계약은 절대 이를 수행할 수 없습니다. 일부 데이터가 이미 블록체인에 없는 경우 계약 코드는 실행 시 해당 데이터에 액세스할 수 없습니다. 따라서 솔루션은 계약 실행 시점에 이미 필요한 데이터 가 블록체인에 존재하도록 하는 것입니다. 이를 위해서는 데이터를 체인으로 가져오는 대신 특히 다른 계약에서 사용하기 위해 데이터를 체인으로 푸시하는 외부 기계가 필요합니다. 그 외부 기계가 신탁입니다. 체인에 푸시된 데이터는 오라클 계약으로 푸시되며, 다른 계약과 공유하기 위한 규정을 마련했을 것입니다. 이 설정의 예는 바로 이 3부작 기사의 이전 두 부분에서 구축하고 조사한 것입니다.
눈부신 보안 구멍
저에게 모든 퍼블릭 블록체인과 관련된 핵심 문제는 T 단어: 신뢰입니다. 가장 순수한 상태에서 이러한 시스템이 하는 일은 우리가 어떤 당사자도 맹목적으로 신뢰할 필요가 없다는 것을 보장하기 위해 최선을 다하는 것입니다. 예리한 독자는 Boxing Bets의 예에서 눈에 띄는 보안 허점 중 일부에 대해 이미 의문을 제기했을 수 있습니다 . 저는 무신뢰에 대한 논의에서 가장 중요하고 이것이 스마트 계약과 함께 오라클을 사용하는 것과 어떤 관련이 있는지에 초점을 맞추고 싶습니다.
1. 베팅 계약의 소유자/관리자가 손상되었을 수 있습니다.
BoxingBets.sol의 58행부터 다음 기능이 있습니다.
/// @notice sets the address of the boxing oracle contract to use /// @dev setting a wrong address may result in false return value, or error /// @param _oracleAddress the address of the boxing oracle /// @return true if connection to the new oracle address was successful function setOracleAddress(address _oracleAddress) external onlyOwner returns (bool) { boxingOracleAddr = _oracleAddress; boxingOracle = OracleInterface(boxingOracleAddr); return boxingOracle.testConnection(); }
이것이 무엇을 허용하는지 분명해야 합니다. 계약 소유자(및 계약 소유자만)는 제한 없이 언제든지 권투 경기를 제공하는 데 사용되는 오라클을 변경하고 승자를 결정할 수 있습니다. 그게 왜 문제야? 아직 명확하지 않은 경우 계약 소유자가 자신의 이익을 위해 계약을 고의적으로 남용할 수 있습니다.
예: 다음 권투 시합은 Soda Popinski 대 Glass Joe입니다. 소다는 넓은 차이로 분명히 좋아하는 것입니다. 모두 소다에 내기합니다. 그것에 타고 있는 돈의 톤. 계약 소유자인 나, 빠른 계약을 체결하기로 결정합니다. 경기가 결정되기 직전에, 나는 Glass Joe를 승자로 선언하도록 하드코딩된 것을 제외하고는 공식 오라클과 동일한 나만의 악의적인 오라클로 오라클을 변경합니다. Glass Joe는 모든 돈을 벌고 아무도 나를 막을 수 없다고 선언합니다. 그 후에는 아무도 내 계약을 더 이상 신뢰하지 않을 수 있지만 내가 신경 쓰지 않는다고 가정해 보겠습니다. 아마도 나는 그 강도를 끌어내기 위한 유일한 목적으로 계약서를 작성하고 발표했을 것입니다.
어떤 대안이 있습니까?
1. 오라클이 변경되는 것을 허용하지 마십시오
위에서 식별한 문제는 계약 소유자가 Oracle을 변경할 수 있도록 허용한다는 사실에서 발생합니다. 그렇다면 오라클 주소를 하드 코딩하고 변경을 전혀 허용하지 않는다고 가정해 봅시다. 글쎄, 우리는 실제로 그렇게 할 수 있습니다. 그것은 의심의 여지가 없습니다. 그러나 그 다음 질문이 생깁니다. 그 오라클이 종료되면 어떤 이유에서든 데이터 제공을 중단합니까? 그러면 우리는 새로운 오라클을 얻어야 합니다. 아니면 처음에 신뢰했던 그 오라클이 부패하여 더 이상 신뢰할 수 없는 것으로 판명되면 어떻게 됩니까? 다시 말하지만, 우리는 새로운 오라클로 변경하기를 원할 것입니다. 오라클을 하드 코딩했다면 오라클을 변경하는 유일한 방법은 다른 오라클을 사용하는 새 계약을 릴리스하는 것입니다. 다시, 우리 는 이것을 할 수 있습니다. 당연하지. 물론 스마트 계약은 웹사이트처럼 쉽게 업데이트될 수 없다는 점에 유의하십시오. 쉽지 않겠죠? 버그나 보안 허점을 발견하면 패치만 하면 됩니다. 아무도 현명하지 않습니다. 스마트 계약 배포 모델은 축소 포장된 소프트웨어 모델에 조금 더 가깝습니다. 소프트웨어가 사용자의 손에 있으면 거기에 있고 고칠 수 없습니다. 사용자에게 수동으로 업그레이드하라는 메시지를 표시해야 합니다. 스마트 계약은 약간 비슷합니다. 해당 계약이 블록체인에 있으면 변경 가능하도록 논리를 작성한 부분을 제외하고 나머지 블록체인과 마찬가지로 변경할 수 없습니다.
그러나 이것이 반드시 차단기는 아닙니다. 스마트 계약을 수정 가능하게 만드는 방법에 대한 많은 모델과 학교가 있습니다. 이 주제는 그 자체로 괜찮은 기사가 될 것이지만 지금은 이 Hackernoon 기사와 스마트 계약 전략에 대한 이 기사를 확인할 수 있습니다.
사용자의 관점에서 보면 어떤 모습일까요? 다가오는 Don Flamenco 경기에 베팅하는 것을 고려하고 있다고 가정해 보겠습니다. 내가 이미 알고 신뢰하는(음, 특정 규모의 베팅을 할 만큼 충분히 신뢰하는) 계약이 복잡하지 않게 하드코딩되어 있음을 분명히 알 수 있습니다. 그게 다야 아주 간단합니다. 계약 소유자가 새 오라클과 함께 새 버전의 계약을 출시하더라도 나는 여전히 이전 버전을 계속 사용할 자유가 있습니다. 글쎄, 아마도. 업그레이드가 처리된 방식에 따라 다릅니다. 계약이 비활성화되거나 파기되면 운이 좋지 않을 수 있습니다. 그러나 바닐라의 경우에는 그대로 유지되어야 합니다.
2. 해당 기간 동안 오라클을 잠급니다.
위에서 설명한 것과 같은 속임수를 완화하기 위해 코드에 약간의 복잡성을 추가할 수 있습니다(예가 너무 복잡한 경우에는 그다지 바람직하지 않지만 실제 솔루션의 경우 이러한 복잡성이 가져오는 이점을 원할 수 있음). 내 생각에 매우 합리적인 방법은 베팅 기간 동안 오라클을 "고정"하는 코드를 추가하는 것입니다. 다시 말해서, 계약의 논리는 내가 내기를 할 때 존재했던 오라클이 승자를 결정하는 데 사용된 것과 동일한 오라클이어야 한다는 것을 매우 명확하고 간단한 방식으로 보장할 수 있습니다. 그 사이에 오라클이 바뀌더라도 다른 경기, 내 경기, 내 내기 모두 동일하게 유지되어야 합니다. 이것은 사용자가 신탁이 누구인지 알 수 있도록 하는 것과 함께 진행됩니다.
이를 설명하기 위해 간단한 예를 들어 보겠습니다. 나는 사용자입니다. 나는 다가오는 리틀 맥 시합에 베팅하는 것을 고려하고 있습니다. 이 경기의 승자를 결정하는 데 사용할 오라클을 검사할 수 있는 기능이 계약서에 있습니다. 해당 계약은 Nintendo Sports에서 제시한 잘 알려진 계약임을 확인합니다. 나는 그 신탁에 대해 충분히 자신감을 느낀다. (좀 더 복잡함을 추가하기 위해 계약을 통해 사용자는 주어진 일치에 대해 사용 가능한 오라클 배열 중에서 선택할 수 있습니다.) 이제 나는 오라클의 코드를 검사할 수 있고 오라클의 논리가 동일한 오라클이 매치의 결과를 결정하는 데 사용될 것임을 보장한다는 것을 확인할 수 있습니다. 그래서 나는 베터로서 최소한 그 확신을 가지고 있습니다. 그것은 내 신탁이 나쁠 수 있다는 사실을 배제하지 않지만(즉, 부패하거나 신뢰할 수 없음) 적어도 백그라운드에서 변경할 수 없다는 것을 확신합니다.
여기서 위험은 내가 베팅을 하고 경기가 결정되는 시간 사이에 오라클이 "폐업"(유지 관리 또는 업데이트 중지)되는 것입니다. 돈이 계약에 묶여 회수할 수 없게 될 수 있습니다. 이를 위해 우리는 (어쩌면) 시간 활성화 조항을 계약에 넣을 수 있습니다. 여기서 경기가 특정 시간 또는 날짜까지 결정되지 않으면(경기 정의의 일부일 수 있음) "죽은" 것으로 간주되고 모든 돈이 내부에 잠겨 있습니다. 베터에게 반환됩니다.
3. 오라클이 사용자 정의되도록 하기
훨씬 더 복잡하지만(하지만 더 흥미로울 수 있음) 사용자가 자신의 오라클을 지정하고 해당 오라클을 중심으로 자체 베팅 풀(계약을 통해)을 형성할 수 있도록 어떤 의미에서 "공백"으로 오라클 주소를 남겨두는 것입니다. 동일한 오라클을 사용하는 사용자 그룹은 계약의 논리에 따라 함께 베팅할 수 있습니다. 이는 사용자가 신뢰하는 오라클을 선택하고 그 오라클을 비슷한 생각을 가진 다른 사용자와 공유할 책임이 있습니다. 이는 사실상 베팅 커뮤니티를 분열시키므로 대규모 사용자 기반이 있는 경우에만 작동합니다. 그렇지 않으면 베팅을 흥미롭고 수익성 있게 만들기에 관련된 베터가 너무 적습니다. 내가 가장 좋아하는 오라클에 베팅하는 유일한 사람이라면 인센티브가 많지 않습니다! 그러나 다른 한편으로는 계약 소유자로부터 신뢰할 수 있는 신탁을 선택하는 책임이 있으며 그는 그것에 대해 손을 씻을 수 있습니다. 일부 사용자가 오라클을 신뢰할 수 없다고 생각하면 사용을 중단하고 다른 오라클로 전환할 것이며 아무도 계약 소유자에게 화를 내지 않을 것입니다. 그는 단순히 도박장을 제공하고 명예롭게 그의 서비스를 수행했습니다.
이 전략의 복잡성을 가중시키는 것은 우리가 어떻게든 유기적인 오라클 배치를 야생에서 '성장'하도록 해야 하고 이 솔루션에 정확히 맞는 오라클 배치를 허용해야 한다는 사실입니다. 우리는 잠재적인 오라클이 준수해야 하는 정확한 인터페이스를 세상에 알려야 하고, 실제로 사용자에게 선택권을 주기에 충분한 수의 오라클이 나타나길 바랍니다. 어쩌면 우리는 하나 또는 두 개의 배치로 배치를 시드할 수 있습니다. 그것이 걸리지 않으면 우리는 DApp에 베팅하지 않습니다. 그러나 만약 그렇다면, 사용자가 선택하고 야생에서 유기적으로 자란 오라클이라는 아이디어가 흥미롭고 매력적인 솔루션이라는 것을 인정해야 합니다.
2. 오라클의 소유자/관리자가 손상되었을 수 있습니다.
부패, 즉 신뢰할 수 없다는 의미에서. 오라클의 소유자/관리자/관리자가 자신을 부유하게 하기 위해 경기에 대한 잘못된 결과를 선언할 가능성이 있습니다.
예: 저는 베팅 계약이 사용할 블록체인에 복싱 데이터를 공급하는 실제 오라클의 소유자/유지자입니다. 내 오라클은 베팅 또는 베팅 관리에 직접 관여하지 않습니다. 그 역할은 베팅 계약(및 기타 여러 계약)이 사용할 수 있는 데이터를 제공하는 것입니다. 그러나 내 오라클을 사용하는 베팅 계약을 사용하여 개인적으로 베팅할 수 있습니다. 어쨌든 나는 익명이기 때문에 어떤 보복도 두려워하지 않습니다. 그러한 계약에 내기를 걸면 명백한 이해 상충이 있습니다. 특히, 내가 진실하고 정확한 정보로 내 오라클을 업데이트하는 정직함이 내 베팅 행동과 상충될 수 있습니다.
따라서 von Kaiser가 압도적으로 약자인 다가오는 Sandman/von Kaiser 경기에서 내가 계속해서 von Kaiser에 막대한 베팅을 한다고 가정해 보겠습니다. von Kaiser가 예상대로 졌을 때 나는 내 신탁을 사용하여 대신 그를 승자로 거짓 선언합니다! 베팅 계약은 정상적으로 실행되고(이 시점에서 중지할 방법이 없음), 나는 경기에서 살인을 저지르고, 나를 처벌할 수단과 방법도 없고, 삶은 계속됩니다. 아마도 그 이후로 사람들은 더 이상 내 신탁을 사용하기를 거부할 것입니다. 아마도 나는 상관하지 않습니다.
이를 어떻게 방지할 수 있습니까?
이제 우리는 훨씬 더 큰 질문에 직면해 있으며, 이는 오라클과 관련하여 소위 무신뢰의 핵심을 꿰뚫고 있습니다. 오라클은 중립적인 제3자 또는 신뢰할 수 있는 제3자로 신뢰됩니다. 문제는 오라클이 인간에 의해 운영된다는 것입니다. 또 다른 문제는 오라클이 계약이 작동하는 데이터를 제공하기 때문에 클라이언트 계약이 의무를 수행하는 방식에 대해 많은 통제권을 행사한다는 것입니다. 우리가 주어진 오라클을 신뢰할 수 있다는 것을 어떻게 알 수 있습니까?
오라클을 믿어야 하는 이유는 무엇입니까?
블록체인 스마트 계약의 전체 아이디어가 누군가를 신뢰할 필요성을 제거하는 것이라면, 우리가 신탁을 "신뢰"해야 한다는 사실이 무신뢰 앞에서 날아가지 않습니까? 글쎄, 나는 말할 것입니다 : 그것은 자랄 시간입니다, 아들 (또는 딸)! 순수한 무신뢰는 없으며 블록체인은 무신뢰 환경을 제공하지 않습니다. 블록체인은 인간의 상호작용을 용이하게 하는 계층입니다. 인간 상호 작용은 여전히 핵심 또는 최종 결과이며 인간 상호 작용은 신뢰할 수 없습니다.

링크: 오라클 문제
신뢰의 진화
시간의 새벽으로 돌아가서 내가 어떻게 다른 사람을 믿을 수 있겠습니까? 내가 매머드를 사냥하고 있는데 그 남자가 고기의 절반을 받는 대가로 매머드 사냥을 도와주겠다고 말했다고 가정해 봅시다. 내가 절반을 제공할 것이라고 그가 어떻게 믿을 수 있습니까? 사냥이 끝나면 머리를 치지 않고 매머드 전체를 차지하지 않을 것이라고 어떻게 믿을 수 있습니까?
그 당시에는 폭력의 위협이 많은 종류의 사회경제적 신뢰의 핵심이었을 것입니다. 내가 그 사람의 몫을 훔치려고 하면 그가 나를 공격하려고 하고 그것은 나에게 위험을 초래할 것이라고 확신합니다. 그와의 싸움에서 이길 자신이 있어도 (원시인으로서) 나는 (원시인으로서) 싸움에 대해 충분히 알고 있고 어떤 일이 일어날 수 있다는 것을 알고 기술적으로 이기더라도 생명을 위협하는 부상을 쉽게 견딜 수 있습니다. 항상 위험과 에너지 투자입니다. 그 세계에서는 사람들을 정직하게 유지하기에 충분할 수 있습니다.
일반적으로 나는 부정행위를 하는 것이 전반적으로 그리고 평균적 으로 내 최선의 이익이 아니기 때문에 부정행위를 하지 않을 것입니다. 즉, 부정 행위의 예상 결과는 협력의 예상 결과보다 적습니다.
그렇지 않은 경우 또는 배우가 이것이 사실이 아니라고 인식하면 아마도 한 명 이상이 단순히 참여하지 않기로 선택할 것입니다. 예를 들어, 다른 사람이 뿔과 괴물 이빨을 가진 9피트 키의 거인이라는 것을 알게 된다면 나는 그냥 도망가기로 선택하고 거래를 하지 않을 것입니다. 그 남자는 내가 다루기에는 너무 위험해 보입니다. 그는 처벌받지 않고 좋아하는 것을 훔칠 수 있습니다. 우리가 대략 동등하게 짝을 이룬다면, 속이는 것이 어느 당사자에게도 최선의 이익이 되지 않고 협력하는 것이 우리 모두에게 이익이 되는 상황에 있다는 것을 인식하고, 따라서 양 당사자가 제정신이고 합리적이라고 가정하고, 양 당사자가 협력할 것입니다.
문화가 발달하면서 인간의 상호작용도 발전했습니다. 무력의 암묵적인 위협이 사라지지 않았지만 그들은 덜 폭력적이 되었습니다. 문화적 관습은 사람들에게 협력에 대한 더 큰 동기를 부여하고 부정 행위에 대한 다양한 유형의 유인을 제공했습니다.
초기 문명의 시간으로 빨리 감기; 나는 밀 100부셸을 사기 위해 거래를 하고 있습니다. 일종의 원시적인 선물 계약입니다. 나는 다음 달에 수확할 때 받을 곡식 값을 오늘 지불하고 있습니다. 나는 그 남자에게 내 동화를 주고 악수를 하고 보리 맥주를 한 잔 하고 다음 달까지 계약을 맺기 위해 헤어진다. 괜찮아 보인다.
나는 그 사람의 자비에 나 자신을 맡겼습니다. 그는 내 돈 전액을 가지고 있고 나는 아직 아무것도 가지고 있지 않습니다. 그래서 그가 계약을 이행할 것이라고 확신하는 이유는 무엇입니까? 몇 가지. 그는 사업가이다; 그는 정기적으로 지역 주민들과 거래합니다. 그는 내가 아는 사람들과 거래를 했으며 항상 공정하고 정시에 납품했습니다. 그는 정직하기로 정평이 나 있다. 게다가 그가 부정 행위에 대한 의욕을 꺾는다는 것을 알고 있습니다. 그는 정직한 상인으로 알려져 있다는 사실에 주로 근거하여 생계를 유지합니다. 그가 나를 속인다면 나는 모두에게 이 사실을 알릴 것이고 이것은 그의 평판과 사업에 해를 끼칠 것입니다. 그가 나를 속여서 번 돈의 양은 그의 고객 기반이 그를 버릴 경우 그가 참을 수 있는 미래의 금액에 비해 작을 것입니다. 그래서 나는 나를 속이는 것이 반드시 그의 최선의 이익이 아니라는 것을 알고 있습니다.
이것은 훌륭합니다. 위의 그림에는 무력이나 폭력의 위협이 없습니다. 두 가지를 제외하고:
- 무력의 위협이 완전히 사라지는 것은 아닙니다. 부정 행위에 대한 또 다른 방해 요인은 부정 행위자가 무엇을 할 것인지에 대한 생각일 수 있습니다. 나에게는 무기가 있고 나에게 충성하는 친구들이 있습니다. 나는 화난 사기꾼으로서 무력에 의지할 수 있었다. 그렇게 클랜 전쟁이 시작됩니다!
- 또한 사건의 세부 사항을 평가하고 상인에게 벌금을 부과하거나 감옥에 가둘 수 있는 일종의 거버넌스 시스템이 있을 수 있습니다. 정부가 지원하는 표준 디스인센티브는 항상 무력의 위협으로 뒷받침됩니다. 벌금 납부 거부, 수감 거부, 모든 조치 준수 거부에 대한 근본적인 처벌은 궁극적으로 강제이기 때문입니다. 그리고 그것이 오늘날까지 이어지고 있습니다. 벌금 납부를 거부하면 체포될 수 있습니다. 내가 체포를 거부하면 나에게 무력이 사용되며 내 의지에 반해 감옥에 갇히거나 심지어 죽임을 당할 수도 있습니다(내 저항이 충분히 완고하다면). 거기에서 우리는 단 두 걸음 거리에서 사소한 위반에도 무력의 위협을 봅니다!
오늘날의 탈중앙화된 신뢰
현재로 빠르게 이동합니다. 계약 위반에 대한 불이익은 무엇입니까? 이전 시나리오와 많이 다른가요?
X사는 이 제품 구매에 대한 우편 환불을 받았습니다. 그들이 이것을 제공할 것이라고 믿는 이유는 무엇입니까? 이전 예와 동일합니다. 회사는 약간의 속임수를 써서 얻는 것이 거의 없고 평판을 훼손하여 잃는 것이 많습니다. 이것은 많은 신뢰 시나리오의 기반이 되며 오랫동안 유지되어 왔습니다. 그리고 다시, 곡물 상인의 예에서와 같이 무력의 위협이 있지만 이 경우에는 그러하지 않을 것입니다. 회사는 벌금 또는 집단 소송으로 처벌될 수 있으며, 회사는 벌금을 내지 않으면 더 무거운 처벌을 받아야 합니다. 이러한 형벌은 정부에 의해 뒷받침되며, 정부는 경제적, 군사적 무력의 위협에 의해 뒷받침되지만, 경제적 무력의 위협은 차례로 군사력, 즉 폭력에 의해 뒷받침된다고 생각할 수 있습니다.
기존 시스템
정부가 승인한 무력 사용으로 뒷받침되는 계약 모델이 수천 년 동안 인류에게 잘 봉사해 왔습니까? 아니면 가지고 있습니까? 글쎄요, 하지만 그것은 자연스러운 진행입니다. 정부가 없을 때 사람들의 집단이 정부를 형성합니다. 사람들이 정부를 구성하는 것을 막을 수는 없는 것 같습니다. 그들은 형성됩니다.
그렇다면 블록체인 스마트 계약은 어떻습니까? 블록체인과 스마트 계약 모델은 어떻게 신뢰성을 보장하거나 부정 행위에 대한 인센티브를 없애나요? 그냥 "신뢰할 수 없음"이라고 말하지 마십시오. 그것은 답이 아닙니다! 이전 예에서 부정 행위는 어떤 식으로든 인센티브를 제거합니다.
블록체인이 그 기능을 어떻게 수행(또는 대체)하는지 자세히 살펴보겠습니다.
블록체인 시스템: 비트코인
이 큰 질문을 작은 질문으로 나누기 위해 비트코인부터 시작하겠습니다. 비트코인은 부정 행위를 어떻게 유도합니까? 비트코인 네트워크의 프로토콜을 준수하는 것으로 보이는 한 원하는 비트코인 노드 소프트웨어를 자유롭게 실행할 수 있습니다. 네트워크 프로토콜을 준수하면서 원하는 작업을 수행하는 자체 홈스펀 비트코인 노드를 실행하는 것을 막는 사람은 없습니다. 불법 이익을 위해 사용할 수있는 방법이 있습니까?
물론 승인을 위해 모든 종류의 거래를 비트코인 네트워크에 공개할 수 있습니다. 당신의 모든 비트코인을 나에게 보내는 트랜잭션을 해제하고 네트워크에 공개하고 블록에 추가될 때까지 기다리면 와우, 이제 당신의 모든 비트코인이 내 것 입니까? 아니요, 암호화 때문입니다.
나는 당신의 개인 키를 가지고 있지 않으며 그러한 거래는 당신의 개인 키로 서명되어야 합니다. 그래서 저는 그곳에서 암호화에 의해 차단되었습니다. 아니면 내가? 누가 그러한 거래에 서명해야 한다고 말합니까? 내가 그것을 시도하면 어떻게 될까요? 음, 물론 일어날 일은 전체 비트코인 네트워크가 내 거래를 거부한다는 것입니다. 왜 누군가가 그것을 받아 들일 것입니까? 그들이 모두 표준 노드를 실행하고 있다는 사실을 제외하고는 즉시 거부할 것입니다. 왜 그들이 제가 속임수를 쓰는 데 도움이 될까요? 그렇게 하는 것은 확실히 비트코인 네트워크의 무결성을 훼손하고 그렇게 함으로써 그들 자신의 암호화 자산을 훼손할 것입니다. 따라서 그들이 익명의 낯선 사람인 나를 도와 다른 익명의 낯선 사람을 속이는 것은 의미가 없습니다. 한 명의 비합리적인 행위자가 어떻게든 내 유효하지 않은 거래를 수락하더라도 대다수의 비트코인 네트워크는 이를 거부할 것이며 기회가 없습니다. 이번에도 순전히 숫자로 패배했습니다.
하지만 내가 강력한 채굴 작업이라면? 확실히 지금은 나에게 유리하게 일을 마무리할 수 있는 더 많은 권한이 있습니다. 하지만 여전히 절대적인 힘에 가까운 것을 주지는 않습니다. 아무리 강력한 채굴자라도 네트워크의 50% 미만을 제어하면 많은 것을 할 수 없습니다. 나는 블록에 트랜잭션이 추가되는 순서를 선택할 수 있는 권한이 있지만 코인을 주조하거나 훔치는 권한은 거의 없습니다. 내가 네트워크의 50% 이상을 제어하더라도(여기서 독자가 비트코인과 같이 작업 증명과 관련하여 잘 알려진 51% 공격을 알고 있다고 가정), 나의 주요 능력은 이중 지출입니다. 일종의 멋진 힘이기는 하지만 비트코인의 무결성을 훼손할 것이기 때문에 그렇게 하는 것이 최선인지 여부는 매우 의심스럽습니다. 내 통제력을 사용하여 모든 동전을 채굴하여 더 많은 돈을 벌고 그 부의 기반을 유지하는 것이 더 나을 것 같습니다. 따라서 나는 구타를 당하지 않았지만 속이려는 충동은 프로토콜에 유기적으로 내장된 의욕을 억제합니다. 그리고 그 인센티브는 기본적으로 숫자의 힘으로 뒷받침됩니다. 비트코인 네트워크에 대한 참가자들의 압도적인 합의.
블록체인 스마트 계약 및 Oracle 계약
스마트 계약이란 무엇입니까? 사람들이 돈을 보내도록 속이기 위해 오도하는 계약을 체결했다고 가정해 봅시다. 아니면 내가 베팅 계약을 배포하고 앞에서 설명한 공격 중 하나(당신이 그렇게 부를 수 있는 경우)를 사용했다고 가정해 봅시다. 내가 할 수 있습니다. 일부 사람들을 속일 수 있습니다. 나는 부정직한 배우로서 그런 노력으로 약간의 이익을 얻을 수 있다. 이에 대한 방어는 각 참가자가 당사자가 되려는 계약과 그것이 남용될 수 있는 잠재적인 방법을 신중하게 고려하는 것입니다(모든 계약과 마찬가지로). 그들은 출처도 고려해야 합니다. 계약을 발표하고 유지 관리하는 당사자와 관련 오라클 또는 관련 계약에 대해 알고 있는 것이 있다면 무엇입니까? 네트워크가 부정직한 계약을 비공식적으로 표시하여 참가자가 자발적으로 계약을 피하고 차단하기 전까지 부정직한 계약이 오래 지속되지 않기를 바랍니다. 네트워크는 크고 소문은 빠르게 전달됩니다.
어떤 시점을 제외하고는 여전히 인간을 믿어야 합니다. 베팅 계약에 대한 데이터는 오라클에서 제공합니다. 오라클은 인간이 관리합니다. 네트워크를 정직하게 유지하기 위해 몇 개의 레이어를 추가하더라도 어느 시점에서는 여전히 인간에게 돌아옵니다. 그렇다면 우리의 베팅 예를 고려할 때 어떤 유형의 오라클을 신뢰하시겠습니까? 나는 속임으로써 얻는 것보다 잃는 것이 더 많은 신탁을 믿겠다. 예: ESPN 또는 이와 유사한 네트워크가 오라클의 후원자라고 상상해 보십시오. 권투 베팅에서 불법적으로 적은 금액을 이기는 것은 평판의 손실로 인해 가려지기 때문에 누구보다 그들이 정직한 데이터를 제공할 것으로 기대할 것입니다. 이 경우 우리가 정직한 곡물 상인을 신뢰하는 것과 같은 이유로 귀하의 신뢰가 잘 자리 잡았습니다. 이러한 유형의 신뢰 관계는 오래되고 잘 확립되어 있습니다.
그렇다면 스마트 계약을 사용하여 얻은 것은 무엇입니까? 스마트 계약은 거버넌스 또는 이전의 계약 유지 방법과 어떻게 다릅니까?
마무리
요점을 만들고 생각과 토론을 위한 음식을 제공하고 내 기사를 마무리하기 위해 어려운 결론 대신 몇 가지 간단한 관찰을 제시하겠습니다. 이 복잡성의 주제에 대해 간결한 결론은 일종의 그저그런 이야기와 지나치게 단순화된 것처럼 느껴지기 때문입니다. 내가 제시할 관찰(그리고 자유롭게 토론/반박/반대)은 다음과 같습니다.
- 상대방이 부정 행위보다 협력을 통해 얻을 수 있는 것이 더 많다는 가정에 기반한 신뢰는 오래되고 실제 상황에서 작동하며 사라지지 않았습니다. 블록체인 세계의 특정 경우에는 여전히 내재되어 있지만 많은 경우에 제거될 수 있습니다. 우리의 오라클 예의 경우 여전히 살아 있고 잘 유지되고 있습니다.
- 무력이나 폭력의 위협에 기반한 신뢰는 태곳적부터 인간 사회에 내재되어 있지만 스마트 계약 모델 에는 현저히 없으며 암호화와 많은 수의 합의를 영리하게 조합하여 시행하는 방식으로 대체되었습니다.
저는 동료 이더리움 개발자들에게 두 가지 일을 하도록 요구합니다.
- 어떤 식으로든 암시적 또는 명시적 무력 위협에 의해 강제되는 퍼블릭 블록체인(비트코인 또는 이더리움 등) 시스템에서 생각해 보십시오.
- 명시적 또는 묵시적 무력 위협에 의해 강제 되지 않는 현대 계약 또는 금융법의 주요 규칙 시스템을 생각해 보십시오.
오래된 것, 새로운 것
그리고 저는 여기서 우리가 과거 시스템과 비교하여 블록체인 시스템이 "혁명적"이라고 말하는 주된 차이점, 그리고 실제로 진정한 이유에 도달했다고 생각합니다. 내 생각에 그것은 신뢰가 전혀 없는 것이 아니라 신뢰를 위한 보다 안정적인 플랫폼이며, 가장 주목할만한 것은 무력이나 폭력의 위협에 전혀 의존하지 않는 플랫폼입니다.
한편으로는 부정 행위에 대한 인센티브가 부족한 상황에서 상호 이익에 대한 오래되고 검증된 확신이 있습니다. 그것은 새로운 것이 아닙니다. 새로운 기능은 부정 행위를 방지하고 시스템을 정직하게 유지하는 데 도움이 되는 암호화 지원 합의의 도입입니다. 그리고 이 두 가지 요소의 종합은 인류 역사상 처음으로 가능한 진정으로 놀라운 것을 만들어냈습니다. 대규모의 익명의 그룹이 사용할 수 있는 시스템입니다. 이 시스템에서는 억지 또는 처벌로서의 명시적 또는 암묵적 무력 위협이 어디에도 없습니다. . 그리고 저는 그것이 진정으로 놀라운 것이라고 믿습니다. 그 측면이 간과된다면, 우리가 가진 것은 멋진 신기술입니다(나는 인정하지만, 그것만으로도 충분히 멋지다). 그러나 그 측면을 고려할 때 우리는 거버넌스의 새로운 시대에 진입했음이 분명합니다.