비 블록 체인 블록 체인에 대한 자세한 내용
시간이 지남에 따라 블록 체인 세계는 두 가지 부분으로 분리되었습니다. 한편으로, 암호 화폐와 관련된 퍼블릭 블록 체인은 최근 수백만 명이 넘는 사람들을 놀라게 한 놀라운 복귀를 누 렸습니다. 반면에, 허가 또는 엔터프라이즈 블록 체인의 사용은 조용하지만 꾸준히 증가하여 첫 번째를 보았습니다. 라이브 배포 2017 년 여러 산업 전반에 걸쳐
고려해야 할 한 가지 흥미로운 질문은이 두 가지 유형의 체인간에 적절한 수준의 유사성입니다. 둘 다 피어 투 피어 네트워킹, 공개-개인 키 암호화, 트랜잭션 규칙 및 악의적 인 행위자로부터 생존 할 수있는 합의 메커니즘을 사용하여 공유 데이터베이스를 구현합니다. 그것은 많은 공통점입니다. 그럼에도 불구하고 퍼블릭 및 프라이빗 블록 체인은 기밀성, 확장 성 및 거버넌스 측면에서 서로 다른 요구 사항이 있습니다. 아마도 이러한 차이점은 근본적으로 발산하는 설계가 필요하다는 것을 의미합니다.
XNUMXD덴탈의 코다 에 의해 개발 된 플랫폼 R3 은행 컨소시엄은이 질문에 대해 명확한 입장을 취합니다. 일부 측면은 퍼블릭 블록 체인에서 영감을 얻은 반면, Corda는 R3 멤버의 요구에 따라 처음부터 설계되었습니다. 실제로, R3는 여전히 "blockchain"이라는 단어를 사용하지만 널리 제품 판매를 돕기 위해 Corda에는 블록 체인이 전혀 없습니다. 내가 아는 다른 "분산 원장"플랫폼보다 Corda는 기존 블록 체인의 아키텍처와 근본적으로 다릅니다.
이 기사의 목표는 이러한 차이점을 설명하고 그 의미에 대해 논의하는 것입니다. 사실, 좋은 점과 나쁜 점은 그것을 넣는 잘못된 방법입니다. 더 흥미로운 질문은“좋은 점과 나쁜 점”때문입니다. 이 기사는 짧지 않습니다. 그러나 결국에는 독자들이 Corda의 차이점과 그에 따른 트레이드 오프에 대한 이해를 얻길 바랍니다. Corda는 설계 결정으로 인해 엔터프라이즈 블록 체인의 많은 딜레마가 급격히 완화되기 때문에 중요합니다.
우리가 다이빙을하기 전에 마지막으로해야 할 일 멀티 체인, 인기있는 엔터프라이즈 블록 체인 플랫폼인데, 아마도 경쟁 제품에 대해 깊이있게 글을 쓰는 이유는 무엇입니까? 표준 이유는 MultiChain의 우월성을 주장하는 것이지만, 이것이 나의 동기가 아닙니다. 사실, Corda와 MultiChain은 디자인, 아키텍처 및 대상 측면에서 근본적으로 다르기 때문에 경쟁자로 간주하지 않습니다. Corda와 MultiChain은 크루즈 라이너 및 제트 스키와 같은 방식으로 경쟁합니다. 두 사람 모두 바다로 사람들을 운송하지만 실제 상황은 거의 없습니다.
좀 더 개인적으로, 지난 몇 년 동안 회의, 서신 또는 공개 서적을 통해 Corda의 기술 리더십에서 많은 것을 배웠습니다. 대부분 R3에 합류하기 전에 발생했습니다. Corda에 대한 나의 관심 중 일부는이 팀에 대한 존 중심에서 비롯된 것이므로 이러한 이유만으로 Corda는 분산 원장 분야에 대한 이해를 추구하는 사람을 위해 공부할 가치가 있습니다.
블록 체인 소개
Corda를 이해하려면 기존 블록 체인으로 시작하는 것이 도움이됩니다. 블록 체인의 목적은 비 신뢰 당사자가 데이터베이스 또는 원장을 직접 안전하게 공유 할 수 있도록하는 것입니다. 이는 단일 조직에서 저장하고 제어하는 중앙 집중식 데이터베이스와 대조됩니다. 블록 체인에는 여러 개의 "노드"가 있으며 각 노드는 데이터베이스의 사본을 저장하고 다른 조직에 속할 수 있습니다. 노드는 각 노드가 자신에게 배우는 모든 것을 지속적으로 알려주는 "가십 프로토콜"을 사용하여 밀도가 높은 PXNUMXP 방식으로 서로 연결됩니다. 결과적으로 모든 노드는 많은 대체 경로를 통해 메시지를 전체 네트워크에 신속하게 브로드 캐스트 할 수 있습니다.
중앙 집중식이든 블록 체인 기반이든 데이터베이스는 빈 상태에서 시작하여“트랜잭션”을 통해 업데이트됩니다. 트랜잭션은 "원자"인 데이터베이스 변경 집합으로 정의되며, 이는 전체적으로 성공 또는 실패를 의미합니다. 계정 당 하나의 행으로 재정 원장을 나타내는 데이터베이스를 상상해보십시오. Alice가 Bob에게 10 달러를 지불하는 거래에는 1 가지 단계가 있습니다. 기본 요구 사항으로 모든 데이터베이스 플랫폼은 다른 트랜잭션을 방해하는 트랜잭션이 없도록해야합니다. 이“격리”는 지불이 진행되는 동안 Alice와 Bob의 행을 잠그면 달성됩니다. 이 행과 관련된 다른 트랜잭션은이 행이 완료 될 때까지 기다려야합니다.
블록 체인에서 모든 노드는 자체 데이터베이스 사본에서 모든 트랜잭션을 독립적으로 처리합니다. 트랜잭션은 네트워크의 어느 곳에서나 만들어지고 다른 모든 노드로 자동 전파됩니다. 노드를 운영하는 조직은 이해가 상이하거나 상충 될 수 있기 때문에 서로 거래하여 공정하게 거래 할 수는 없습니다. 따라서 블록 체인에는 특정 거래가 유효한지 여부를 정의하는 규칙이 필요합니다. 공유 된 재무 장부에서 이러한 규칙은 사용자가 서로 돈을 쓰거나 돈을 소액 지불하지 못하게합니다.
트랜잭션 유효성을 결정하는 규칙과 함께 블록 체인은 많은 경우이 순서가 중요하기 때문에 트랜잭션이 주문되는 방법을 정의해야합니다. Alice가 $ 15를 가지고 있고 두 개의 개별 거래에서 Bob과 Charlie에게 $ 10를 보내려고하면 이러한 지불 중 하나만 성공할 수 있습니다. 첫 번째 트랜잭션이 우선한다고 말하고 싶지만, 피어 투 피어 네트워크에는“첫 번째”라는 객관적인 정의가 없습니다. 메시지가 다른 순서로 다른 노드에 도착할 수 있기 때문입니다.
거래 규칙
일반적으로 모든 데이터베이스의 정보는 레코드 또는 "행"으로 분리되며 트랜잭션은 행 삭제, 행 작성 및 / 또는 행 수정의 세 가지 작업을 수행 할 수 있습니다. 행을 수정하는 것은 해당 행을 삭제하고 대신 새 행을 작성하는 것과 동일하므로 두 개로 더 줄일 수 있습니다. Bob에 대한 Alice의 지불로 돌아 가기 위해 $ 15를 포함하는 행이 삭제되고 Bob에 대해 $ 10를 포함하고 Alice에 대해 "change"에 $ 5를 포함하는 두 개의 새 행이 작성됩니다.
비트 코인과 Corda의 용어에 따라, 트랜잭션에 의해 삭제 된 행을 "입력"및 "출력"으로 생성 된 행을 나타냅니다. 트랜잭션에 의해 삭제 된 행은 이전 트랜잭션에 의해 작성되어야합니다. 따라서 각 트랜잭션 입력은 이전 트랜잭션의 출력을 소비 (또는 "지출")합니다. 데이터베이스의 최신 내용은 "사용하지 않은 트랜잭션 출력"또는 "UTXO"세트로 정의됩니다.
블록 체인에서 트랜잭션은 다음 세 가지 조건을 충족하면 유효합니다.
- 단정. 트랜잭션은 입력에서 출력으로의 합법적 인 변환을 나타내야합니다. 예를 들어, 재무 장부에서 입력의 총 자금 수량은 출력의 총 금액과 일치해야 돈이 마술처럼 나타나거나 사라지는 것을 방지 할 수 있습니다. 유일한 예외는 자금이 명시 적으로 추가 또는 제거되는 특수한 "발급"또는 "퇴직"거래입니다.
- 권한 부여. 트랜잭션은 입력이 소비하는 모든 출력의 소유자가 승인해야합니다. 재정 원장에서 이는 참가자가 허가없이 서로 돈을 쓰지 못하게합니다. 트랜잭션 인증은 비대칭 (또는 공개-개인 키) 암호화를 사용하여 관리됩니다. 모든 행에는 공개 키로 식별되는 소유자가 있으며 해당 개인 키는 비밀로 유지됩니다. 승인을 받으려면 각 입력 소유자가 거래에 디지털 서명해야합니다. 행에는 더 복잡한 "다중 서명"소유자가있을 수도 있습니다 (예 : XNUMX 명 중 XNUMX 명 중 XNUMX 명이 사용 권한을 부여 할 수있는 경우).
- 고유성. 트랜잭션이 특정 출력을 사용하는 경우 다른 트랜잭션은 해당 출력을 다시 사용할 수 없습니다. 이것이 Alice가 Bob과 Charlie에게 상충되는 지불을하지 못하게하는 방법입니다. 이 두 지불에 대한 거래는 모두 정확하고 승인 될 수 있지만 고유성 규칙은 데이터베이스에서 하나만 처리되도록합니다.
기존의 블록 체인에서 모든 노드는이 세 가지 규칙에 따라 모든 트랜잭션을 확인합니다. 나중에, 우리는 Corda가 어떻게이 책임을 다른 방식으로 나누는 지 볼 것입니다.
빌딩 블록
블록 체인은 말 그대로 블록 체인으로, 모든 블록은 내용을 고유하게 식별하는 "해시"를 통해 이전 블록에 연결됩니다. 각 블록에는 타임 스탬프 및 기타 정보뿐만 아니라 서로 또는 이전 블록의 트랜잭션과 충돌하지 않아야하는 정렬 된 트랜잭션 세트가 포함됩니다. 트랜잭션과 마찬가지로 블록은 네트워크 전체에 빠르게 전파되며 모든 노드에서 독립적으로 확인됩니다. 트랜잭션이 블록에 나타나면 "확인"되어 충돌하는 트랜잭션을 거부하게됩니다.
이러한 블록을 생성하는 담당자는 누구이며 모든 노드가 신뢰할 수있는 체인에 동의하는지 어떻게 확인할 수 있습니까? “합의 알고리즘”에 관한이 질문은 PoW (Proof of Work), PBFT (Practical Byzantine Fault Tolerance) 및 DPoS (Delegated Proof of Stake)와 같은 놀라운 두문자로 가득 찬 주제입니다. 우리는 여기서 모든 것을 다루지 않을 것입니다. 기업을 위해 허가 된 블록 체인은 일종의 투표 방식을 사용한다고 말하면 충분합니다. 투표 방식은 총괄 책임이있는 "검증 자 노드"에게 투표가 부여됩니다. 이 체계는 대다수의 유효성 검사기 노드가 올 바르고 정직하게 작동하는 한 거래가 (가까운) 공정한 순서로 체인에 들어가고 타임 스탬프가 (대략적으로) 정확하며 확인 된 거래를 후속 적으로 되돌릴 수 없도록합니다.
블록 체인의 몇 가지 과제를 논의하기 전에 세 가지 추가 사항을 분명히하고 싶습니다. 먼저,이 기사 전반에 걸쳐 재무 장부를 사용하는 동안, 입력 / 출력 트랜잭션 모델은 훨씬 다양한 사용 사례를 지원합니다. 각 행에는 다양한 유형의 정보가 포함 된 풍부한 데이터 개체 (JSON 생각)가 포함될 수 있습니다. 실제로 Corda는 이러한 이유로 "행"대신 "상태"라는 단어를 사용합니다. 보다 풍부한 상태는 트랜잭션 규칙에 대한 기본 사항을 전혀 변경하지 않습니다. 정확성은 여전히 입력 및 출력 측면에서 정의되며 모든 입력에 대해 권한 부여가 여전히 필요하며 고유성은 각 출력을 한 번만 사용할 수 있습니다.
둘째, 행은 데이터베이스에서만 작성되고 절대 삭제되지 않는 많은 블록 체인 사용 사례가 있습니다. 이러한 응용 프로그램은 유동적 인 일종의 원장을 유지하기보다는 일반적인 데이터 저장, 타임 스탬프 및 공증과 관련이 있습니다. 이러한 데이터 전용 응용 프로그램에서 트랜잭션은 출력에 데이터를 추가하지만 입력에 데이터를 소비하지 않으므로 정확성, 권한 부여 및 고유성에 대한 규칙을 단순화 할 수 있습니다. 데이터 전용 유스 케이스는 MultiChain에서 자체 개발의 초점이 점점 높아지고 있지만 Corda는 분명히 염두에두고 설계되지 않았으므로 여기에 전달할 때만 언급합니다.
마지막으로, 일부 블록 체인 플랫폼은 입력-출력 모델을 사용하지 않습니다. 이더 리움은 체인이 "계약"에 의해 관리되는 글로벌 상태로 가상 컴퓨터를 제어하고 트랜잭션이 서로 명시 적으로 연결되지 않는 대체 패러다임을 제시합니다. 허가 된 블록 체인에서 이더 리움 모델에 대한 논의는 여기서 다루지 않습니다. 이 문서 자세한 설명과 비평 입 / 출력 패러다임의 주요 장점 중 하나는 대부분의 트랜잭션을 병렬로 서로 독립적으로 처리 할 수 있다는 것입니다. 이 속성은 나중에 볼 수 있듯이 Corda에 중요합니다.
블록 체인 도전
세계 은행들이 다양한 금융 자산의 소유권, 이전 및 교환을 대표하는 공유 원장을 만들었다 고 상상해 봅시다. 이론적으로 이것은 위에서 설명한 것처럼 일반 블록 체인에서 구현 될 수 있습니다. 각 행에는 GOOG 또는 USD와 같은 자산 식별자, 소유 수량 및 소유자의 공개 키와 같은 XNUMX 개의 열이 포함됩니다. 각 거래는 하나 이상의 자산을 투입물에서 산출물로 이전하고 발행 및 처분에 대한 특별한 경우를 포함합니다.
네트워크의 모든 은행은 다른 은행에 연결되어 거래를 전파하고 검증하는 하나 이상의 노드를 운영합니다. 선임 회원은 거래를 확인, 주문 및 타임 스탬프하는 공동 책임이있는 검증 자 역할을합니다. 유효성 검사기의 오작동은 네트워크의 모든 노드에 표시되어 비난, 추방 및 / 또는 법적 절차로 이어집니다. 이 모든 것을 갖추면 모든 금융 자산을 몇 초 만에 전 세계로 옮길 수 있으며 정확성, 권한 부여 및 고유 규칙이 원장의 무결성을 보장합니다.
이 사진에 무슨 문제가 있습니까? 실제로 확장 성, 기밀성 및 상호 운용성이라는 세 가지 문제가 있습니다. 확장 성 문제는 간단합니다. 우리의 제안 된 인터 뱅크 블록 체인은 모든 회원이 세계의 모든 은행이 수행 한 모든 거래를 확인, 처리 및 저장하도록 요구합니다. 이것이 가장 큰 금융 기관에 기술적으로 실현 가능하더라도 계산 및 저장 비용은 많은 사람들에게 중요한 장벽을 만들 것입니다. 당연히 참가자는 즉시 관련된 거래 만 볼 수있는 시스템을 선호합니다.
그러나 고가의 컴퓨터와 영리한 엔지니어링을 사용하여 궁극적으로 해결할 수 있기 때문에 확장 성을 제외합시다. 보다 근본적인 문제는 기밀성입니다. 모든 거래가 모든 곳에서 눈에 띄는 것은 유토피아적인 것처럼 들릴지 모르지만 실제 세계에서는 이러한 급진적 투명성이 경쟁과 규제 측면에서 시작이 아닙니다. JP Morgan과 HSBC가 한 쌍의 자산을 교환하면 Citi와 중국 은행이 그들이 한 일을보기를 원하지 않을 것입니다. 거래가 해당 은행 고객을 대신하여 수행 된 경우 이러한 방식으로 공개하는 것은 불법 일 수 있습니다.
기밀성 문제에 대한 제안 된 솔루션 중 하나는 Hyperledger Fabric에 구현 된 "채널"입니다. 각 채널에는 네트워크의 전체 노드 하위 집합 인 특정 구성원이 있습니다. 채널의 거래는 회원 만 볼 수 있으므로 각 채널은 별도의 블록 체인으로 효과적으로 작동합니다. 이것은 기밀 유지에 도움이되지만 운동의 전체 요점을 손상시킵니다. 신뢰할 수있는 중개자의 도움 없이는 한 채널에서 다른 채널로 자산을 옮길 수 없습니다. 이 접근법의 어려움은 최근 SWIFT에 의해 강조되었습니다. 화해 개념 증명생산에 100,000 개가 넘는 채널이 필요할 것으로 추정했습니다. 자산을 직접 이동할 수없는 100,000 개의 섬입니다.
트랜잭션이 입력에서 데이터를 소비하지 않는 데이터 전용 사용 사례에서 출력의 데이터를 암호화 또는 해시하고 암호 해독 키 또는 해시되지 않은 데이터를 체인 외부로 전달하여 기밀성 문제를 회피 할 수 있습니다. 그러나 입력이 다른 트랜잭션의 출력을 소비하는 트랜잭션의 경우 모든 노드는 트랜잭션을 확인하기 위해 해당 입력 및 출력을 확인해야합니다. 고급 암호화 기술과 같은 기밀 자산 와 제로 지식 증명 재무 원장의 경우이 문제를 부분적으로 또는 완전히 해결하기 위해 개발 된 경우 상당한 성능 부담이 발생하거나 정확성 규칙으로 일반화 할 수 없습니다.
마지막으로 상호 운용성에 대해 이야기합시다. 이상적인 세계에서 모든 은행은 시작된 날에 즉시 글로벌 블록 체인에 참여할 것입니다. 그러나 실제로는 지리적 또는 기존 관계를 기반으로 여러 은행 그룹에서 여러 블록 체인을 채택합니다. 시간이 지남에 따라 한 그룹의 구성원이 체인간에 자산을 전송하여 다른 그룹의 구성원과 거래를 시작할 수 있습니다. 채널과 마찬가지로 이것은 신뢰할 수있는 중개인의 도움을 받아 만 달성 할 수 있으며 블록 체인의 목적을 무너 뜨립니다.
Corda는 분산 원장의 작동 방식에 대한 근본적인 재고를 통해 이러한 상호 관련 확장 성, 기밀성 및 상호 운용성 문제를 해결하는 것을 목표로합니다.
코다의 부분보기
Corda의 근본적인 차이점은 쉽게 설명 할 수 있습니다. 각 노드는 네트워크에서 처리 된 일부 트랜잭션 만 볼 수 있습니다. 이러한 모든 트랜잭션에 의해 단일 논리 및 개념 원장이 정의되지만 개별 노드가 해당 원장 전체를 보지 못합니다. 어느 시점에서나 비교를하기 위해, 세계의 모든 XNUMX 달러 지폐는 특정 장소에 있지만, 모두가 어디에 있는지는 아무도 모릅니다.
그렇다면 Corda 노드는 어떤 트랜잭션을 봅니까? 우선, 해당 거래의 입력 또는 출력 중 하나를 소유하기 때문에 직접 관련되는 거래입니다. 재무 장부에서 여기에는 노드가 자금을 보내거나받는 모든 거래가 포함됩니다. Alice가 15 달러를 소비하고 하나는 10 달러, 다른 하나는 5 달러를 가진 거래를 생성한다고 가정 해 봅시다. Alice가이 트랜잭션을 보내면 입력과 출력이 균형을 이루고 Alice가 서명했는지 확인하여 정확성과 권한 부여를 확인할 수 있습니다.
그러나이 거래 자체로는 충분하지 않습니다. 또한 Alice의 $ 15 입력 상태가 실제로 존재하는지 확인해야합니다. 즉,이 상태를 생성 한 트랜잭션을 확인하고 정확성과 권한 부여를 확인해야합니다. Alice $ 15를 보낸이 이전 거래에 Denzel에 속하는 $ 10의 입력과 Eric의 또 다른 $ 5의 입력이있는 경우 해당 거래를 만든 거래도 확인해야합니다. 계속해서 자산이 생성 된 원래의 "발급"거래로 돌아갑니다. 내가 확인해야 할 거래의 수는 자산이 몇 번이나 손을 변경했는지와 후진 분기의 정도에 달려 있습니다.
Corda 노드는 모든 트랜잭션을 자동으로 보지 못하므로 필요한 트랜잭션을 어떻게 얻습니까? 정답은 각각의 새로운 거래를 보낸 사람으로부터 온 것입니다. Alice는 $ 15를 소비하는 거래를 작성하기 전에 이미 거래를 확인한 상태 여야합니다. Alice는 위의 재귀 기술을 적용 했으므로이 확인에 필요한 모든 트랜잭션의 복사본을 갖게됩니다. Bob은 단순히 이러한 거래를 Alice의 상호 작용의 일부로 요청합니다. Alice가 적절하게 응답하지 않으면 Bob은 Alice가 자신을 속이려한다는 결론을 내리고 입금을 거부합니다. Bob에게 입력 값이 여러 소유자 인 새 트랜잭션이 전송 된 경우 Bob은 각각에서 필요한 증거를 얻을 수 있습니다.
공증인 소개
지금까지 Bob이 입력 출처를 재귀 적으로 추적하는 등 들어오는 트랜잭션의 정확성과 권한을 확인하는 방법에 대해 설명했습니다. 그러나 우리가 고려해야 할 규칙이 하나 더 있습니다 : 고유성. Alice가 악성이라고 가정 해 봅시다. 그녀는 Bob에게 $ 10를 지불하는 트랜잭션과 Charlie에게 $ 10를 지불하는 트랜잭션을 생성 할 수 있습니다. 그녀는 이러한 거래를 각각 Bob과 Charlie에게 각각의 정확성과 승인에 대한 완전한 증거와 함께 보낼 수 있습니다. 동일한 상태를 사용하여 두 트랜잭션이 서로 충돌하지만 Bob과 Charlie가이를 알 수있는 방법이 없습니다.
기존 블록 체인은 모든 트랜잭션을 보는 모든 노드에서이 문제를 해결하여 충돌을 쉽게 감지하고 거부 할 수 있습니다. 그렇다면 부분 트랜잭션 가시성으로 Corda는 어떻게 같은 문제를 해결합니까? 대답은“공증인”의 도움으로 이루어집니다. 공증인은 특정 국가가 한 번만 소비되도록하는 신뢰할 수있는 당사자 (또는 함께 협력하는 당사자)입니다. 각 주에는 특정 공증인이 있으며, 해당 주가 소비되는 거래에 서명해야합니다. 공증인이이를 한 후에는 동일한 주에 대한 다른 거래에 서명하지 않아야합니다. 공증인은 네트워크의 거래 고유성을 보호합니다.
모든 주마다 다른 공증인이있을 수 있지만 특정 거래에 사용되는 모든 주가 동일한 주에 할당되어야합니다. 이를 통해 교착 상태 및 동기화와 관련된 문제를 피할 수 있으며 이는 분산 데이터베이스 경험이있는 사용자에게 친숙해야합니다. Alice와 Bob이 Alice의 10 달러를 Bob의 £ 7로 바꾸겠다고합시다. 이 거래소의 거래는 두 주 공증인이 서명해야하지만 어느 쪽이 먼저 진행됩니까? Alice의 공증인이 서명했지만 Bob의 서명이 어떤 이유로 실패하면 Alice는 불완전한 거래로 남아서 다시는 10 달러를 다시 사용할 수 없습니다. 밥의 징후가 먼저 나타나면 마찬가지로 노출됩니다. 공증인이 단순히 함께 일하기를 원하지만 실제로는 상호 신뢰와 합의 프로토콜 사용, Corda의 설계자가 피하기로 선택한 합병증이 필요합니다.
단일 공증에 대한 입력으로 다른 공증인이있는 주가 필요한 경우, 소유자는 먼저 특수한 "공증인 변경"거래를 실행합니다. 따라서 당사자가 여러 입력을 사용하여 거래를 할 때는 먼저 공증인에 동의 한 다음 필요한 공증인 변경을 수행해야합니다. 이 해결 방법에 대해 읽을 때 개발자가 약간의 고통을 느꼈지만 공증인이 따라 다니는 동안 효과가없는 이유는 없습니다.
또한 각 공증인은 거래 서명 측면에서 단일 논리 행위자이지만 단일 당사자의 통제하에있을 필요는 없음을 분명히해야합니다. 단체는 유효한 서명을 생성하기 위해 대다수의 참가자가 필요한 적절한 합의 프로토콜을 사용하여 공증인을 공동으로 운영 할 수 있습니다. 이렇게하면 충돌하는 거래에 서명함으로써 단일 악의 당사자가 고유성을 손상시키지 못하게됩니다. 이론적으로, 우리는 네트워크의 모든 노드가 이러한 종류의 공유 공증에 참여할 수 있도록 허용 할 수도 있지만,이 경우 우리는 기존의 블록 체인으로 되돌아 갈 수 있습니다.
점수를 복용
Corda와 기존 블록 체인의 주요 차이점을 살펴 보겠습니다. Corda에는 확인 된 모든 거래가 포함 된 통합 블록 체인이 없습니다. 노드는 직접 관련된 트랜잭션 또는 역사적으로 의존하는 트랜잭션 만 볼 수 있습니다. 노드는 트랜잭션 정확성 및 권한 부여를 확인해야하지만 고유성을 확인하기 위해 신뢰할 수있는 공증인에 의존합니다.
물론 Corda에게는 ID보다 훨씬 많은 것이 있습니다. 즉, 신원을 인증하기 위해 디지털 인증서를 사용하고, 노드가 서로를 찾고 신뢰할 수 있도록하는 "네트워크 맵", 각 주별 관점에서 정확성을 정의하는 주별 "계약" 이러한 계약을 실행하는 결정적 버전의 Java Virtual Machine, 트랜잭션 협상을 자동화하는 "흐름", 시간별 트랜잭션을 제한하는 "시간 창", 외부 사실을 입증하는 "오라클"및 쉬운 배포를 위해 여러 항목을 하나로 묶는 "CorDapps" . 이러한 각 기능은 흥미롭지 만 다른 모든 블록 체인 플랫폼에서 동등한 기능을 찾을 수 있습니다. 이 기사의 목표는 Corda를 독특하게 만드는 것에 집중하는 것입니다.
그렇다면 Corda는 약속에 부응합니까? 블록 체인의 확장 성, 기밀성 및 상호 운용성 문제를 해결합니까? 그리고 특정 선택을 할 때 Corda는 얼마의 가격을 지불합니까?
더 확장 가능하고 때로는
확장 성부터 시작하겠습니다. 노드가 네트워크의 일부 트랜잭션 만 볼 수 있기 때문에 Corda의 장점은 분명해 보입니다. 일반 블록 체인에서 최대 처리량은 트랜잭션 처리에서 가장 느린 노드의 속도로 제한됩니다. 반대로 Corda 네트워크는 초당 백만 건의 트랜잭션을 처리 할 수 있지만 각 노드는 그 중 일부만 볼 수 있습니다. 고유성을 위해 트랜잭션에 서명하는 작업은 여러 가지 다른 공증인간에 분산 될 수 있기 때문에 확장 성도 공증인으로 확장됩니다. 각 공증인은 네트워크 상태의 작은 비율을 담당합니다.
그럼에도 불구하고 Corda가 블록 체인보다 훨씬 나쁜 상황이 있습니다. 이것은 이전에 보지 못한 많은 다른 트랜잭션에 의존하는 새 트랜잭션을 노드가 수신 할 때 발생합니다. 10 년 전에 발행 된 유동성이 높은 자산을 1000 분마다 변경한다고 상상해보십시오. 새로운 거래에서이 자산의 발행으로 돌아가는 경로는 백만 건이 넘는 거래입니다. 노드가이 자산을 처음으로 받으면 발신자로부터 이러한 백만 건의 트랜잭션을 검색하고 각 트랜잭션을 차례로 확인해야합니다. 초당 17 건의 거래가 상당히 낙관적 일 경우, 수신자가 자산을 보낼 수 있기까지 XNUMX 분의 지연이있을 것입니다.
왜 블록 체인이이 문제로 고통받지 않습니까? 노드는 모든 트랜잭션이 발생할 때보고 확인하기 때문에 원장의 상태를 지속적으로 업데이트하고 있으며 현재 모든 자산을 소유 한 사람을 정확하게 알고 있습니다. 노드가 이전에 특정 자산을 보유한 적이 없어도 해당 자산을받는 트랜잭션을 즉시 확인한 다음 즉시 전송할 수 있습니다. 다시 말해서, 블록 체인 노드는 관련이없는 트랜잭션을 확인해야하지만, 그렇게함으로써 향후 발생할 트랜잭션을 확인하는 비용을 선불로 지불해야합니다. Corda 노드는 전체적으로 사용량이 적지 만 즉시 통지 할 때 엄청난 양의 작업을 수행해야 할 위험이 있습니다. 그것에 대해 확장 가능한 것은 없습니다.
좀 더 기밀
기밀로 넘어 갑시다. Corda에서 노드는 일부 네트워크 트랜잭션 만 볼 수 있으며, 이는 기존 블록 체인보다 더 나은 개인 정보 보호를 의미합니다. 그럼에도 불구하고, 노드는 여전히 비즈니스가 아닌 일부 트랜잭션을 볼 수 있기 때문에 Corda는 기밀성 문제를 해결하지 못합니다. 간단한 예를 들어, Alice가 Bob에게 10 달러를 지불하면 Bob은 10 달러를 Charlie에게 보내면 Charlie와 관련이 없더라도 Charlie의 노드에 Alice와 Bob 간의 거래가 표시되어야합니다. Alice가 Bob에게 돈을 지불했을 때, 그녀는 앞으로이 거래를 볼 수있는 사람을 알 방법이 없었으며, 누구든지 언제든지 그 거래를 보냈습니다.
공정하게, Corda 개발자는이 문제점을 알고 있으며 15 장에서 논의합니다. 기술 백서. 이 백서는 엔터티 당 여러 공개 키를 사용하거나 재발급을 위해 자산을 발행자에게 반환함으로써 추적 가능성을 줄이는 것과 같은 간단한 전략을 제안합니다 (암호화“코인 믹서”와 유사). 또한 Tor와 같은 익명의 네트워크를 사용하여 참가자의 IP 주소를 숨기고 지식 증명을 제로로 활용하거나 인텔의 안전한 영토 내용을 공개하지 않고 거래의 유효성을 검사합니다. 이러한 제안은 모두 유효하지만 입력-출력 모델을 사용하여 일반 블록 체인에도 적용 할 수 있으며 실제로 Dash, Zcash 및 Verge와 같은 암호 화폐에있었습니다. 따라서 기밀성 측면에서 Corda의 유일한 장점은 불완전한 솔루션 인 트랜잭션 가시성 감소로 남아 있습니다.
번식에 모두
Corda의 확장 성과 기밀성 이점을보다 잘 이해하려면 이것이 트랜잭션 간의 관계의 밀도와 겹침에 따라 어떻게 달라지는 지 알아야합니다. 네트워크에서 수행되는 트랜잭션의 "가계도"를 상상해보십시오. 각 트랜잭션의 상위는 이전에 종속 된 이전 트랜잭션입니다. 특히 한 트랜잭션의 출력이 다른 트랜잭션의 입력에 의해 소비 될 때 부모와 자식의 관계를 나타내는 화살표를 그립니다. 거래는 부모와 자녀의 수에 제한이 없지만 대부분의 경우 몇 가지만 기대할 수 있습니다.
이 가계도에서 거래의 조상을 부모, 조부모, 증조부모 등으로 정의합니다. 우리 나무의“아담과 이브”는 자산을 창출하고 자신의 부모가없는 발행 거래입니다. 일반 가계도에서와 같이 두 거래는 서로의 조상이 될 수 없습니다. 공식적인 컴퓨터 과학 용어에서 이것은 directed acyclic graph 또는 조상이 부모 관계의 전 이적 폐쇄로 정의되는 DAG.
Corda 노드가 트랜잭션을 처리 할 때는 이전에 보았던 트랜잭션과는 별도로 해당 트랜잭션의 조상을 모두 다운로드하여 확인해야합니다. 따라서 가계도가 깊으면 들어오는 새로운 트랜잭션에 검증해야 할 많은 조상이있을 수 있으며 Corda의 확장 성 문제를 유발할 수 있습니다. 또한 가계도에 높은 수준의 인터 브리딩이 포함 된 경우 새 거래의 조상에는 네트워크에서 과거 또는 대부분의 과거 거래가 포함될 수 있습니다. 이 경우 Corda는 개인 정보 보호 측면에서 거의 이점을 제공하지 않습니다.
반대로, 거래의 가계도가 얕고 서로 상호 작용하지 않는 연결이 끊긴 섬이 많은 경우 Corda의 장점이 우선합니다. 노드는 한 번에 많은 수의 트랜잭션을 확인할 필요가 없으며 자신과 관련이없는 대부분의 트랜잭션에 대해 어두운 곳에서 유지할 수 있습니다. 재무 장부로 사용되는 경우 Corda가 자산이 거의 변화를 일으키지 않는 고도로 단편화 된 시장에 이상적이라고 말할 수 있습니다.
승리를위한 상호 운용성
다음은 Corda가 진정으로 빛나는 영역 중 하나입니다. 서로 다른 자산과 참가자 세트를 가진 두 개의 별도 Corda 네트워크를 상상해보십시오. 어느 시점에서 한 네트워크의 참가자는 다른 네트워크의 누군가에게 자산을 보내려고합니다. 기존의 블록 체인과 달리, 노드가 과거의 모든 거래를 검증 할 것으로 기대하지 않으므로이 새로운 자산을받는 노드는 별다른 경험이 없습니다. 거래가 들어 오면 거래가 "별도의 네트워크"에 있다는 것을 인식하지 않고 관련 이력을 요청하고 확인합니다. 진부함을 늘리기 위해, 우리는 Corda에 낯선 사람이 없다고 말할 수 있습니다.
실제로는 일이 그렇게 간단하지 않습니다. 어떤 Corda 노드는 어떤 공증인이 신뢰해야 하는지를 명시 적으로 결정합니다. 또한 노드의 네트워크에있는 다른 노드에 연결하려면“도어맨”이 부여한“인증서”가 필요합니다. 대중의 임의 구성원이 노드에 연결하여 리소스를 낭비 할 수 없기 때문입니다. 따라서 한 네트워크의 노드가 다른 네트워크의 트랜잭션을 요청하고 확인하기 전에 신뢰할 수있는 공증인 목록에 추가하고 적절한 인증서를 얻어야합니다. 여기에는 일부 수동 구성 및 관리가 포함되지만이 특성의 시스템에 필요한 최소값입니다. 전반적으로, 상호 운용성이 Corda의 기존 블록 체인보다 큰 승리라고 결론을 내릴 수 있습니다.
중개
이제 코르다의 방에있는 코끼리, 중개에 대해 이야기 할 시간입니다. 블록 체인의 맥락에서, 중개는 모든 참여자가 제 XNUMX 자의 좋은 행동에 의존하지 않고 모든 거래를 스스로 확인할 수 있음을 의미합니다. 에 내 견해, 중개는 중앙 집중식 데이터베이스에 비해 블록 체인의 핵심 이점으로, 모든 참가자는 해당 데이터베이스의 소유자에게 전적으로 의존합니다. 네트워크 참가자가 중개자에게 의지 할 수 있고 중개에 대한 비즈니스 또는 규제 사례가없는 경우 요점 블록 체인을 사용합니다. 중앙 집중식 데이터베이스는 더 빠르고 효율적이며 트랜잭션 기밀성 문제를 피합니다.
그렇다면 Corda 네트워크의 참가자는 중개를 달성합니까? 예, 그렇습니다.하지만 그렇습니다. 트랜잭션 전달의 경우 거래와 관련된 노드가 서로 직접 대화하기 때문에 Corda가 상자를 선택합니다. 정확성과 권한 부여 측면에서 각 노드는 이러한 속성을 자체적으로 확인할 수 있기 때문에 상태가 양호합니다. 그러나 트랜잭션 고유성을 검증 할 때 Corda는 중개 테스트에 실패합니다. 노드는 네트워크의 모든 트랜잭션을 볼 수 없으므로 작업이 신뢰할 수있는 공증인에게 아웃소싱되므로 노드 자체의 고유성을 확인할 수 없습니다.
Corda 참가자는 여러 가지 방법으로 공증인의 자비에 있습니다. 첫째, 공증인은 입력이 이전에 사용되지 않은 출력을 소비하더라도 거래에 서명을 거부 할 수 있습니다. 재정 원장에서는 누군가 자산을 보내거나 교환 할 수 없습니다. 둘째, 공증인은 동일한 결과를 소비하는 두 개의 상충 거래에 서명하여 두 당사자가 동일한 것을 받았다고 생각하게 할 수 있습니다. 중복 자산의 두 수신자가 추가 거래에서 자산을 보내거나 교환함에 따라 전염이 확산되고 전체 원장의 무결성이 곧 손상 될 수 있습니다. 마지막으로, 공증인은“공증인 변경”거래에 서명을 거부하여 상태를 경쟁사에게 이전하여 효과적으로 자산 소유자 인질을 보유 할 수 있습니다. 공증인이 다른 주와 관련된 거래의 경우 Corda가 소개한다고 말할 수는 없습니다. 중앙 데이터베이스보다 더 많은 중개여러 제 XNUMX자가 관리하고 있기 때문입니다.
이 위험을 관점에서 살펴 보려면 Corda 공증인이 단일 조직에 의해 제어 될 필요가 없다는 것을 상기 할 가치가 있습니다. 또한 나쁜 행위자를 용인 할 수있는 합의 알고리즘을 실행하는 노드 그룹으로 구성 될 수 있습니다. 이 경우 공증인은 대부분의 구성원 노드가 규칙을 따르는 한 정상적으로 작동합니다. 표면적으로 이것은 블록 체인처럼 들리는데, 대부분의 유효성 검사기가 잘 작동하는 데 달려 있습니다. 그러나 Corda에서는 위험이 상당히 높습니다. 블록 체인 유효성 검사기의 최악의 경우 일부 거래가 확인되지 않도록하는 것입니다. 악의적 인 Corda 공증인은 충돌하는 거래에 서명하여 원장을 일관성없는 심연으로 보낼 수 있습니다.
이상한 동물
확장 성, 기밀성, 상호 운용성 및 중개 기능을 결합하면 Corda 대안에 대한 간단한 판단에 도달하기가 어렵습니다. 전반적으로,이 블록 체인 플랫폼 개발자의 관점에서 보면, 설득력이 있지만 이상합니다. 확장 성과 기밀성의 주요 문제를 해결하도록 설계된 Corda의 솔루션은 불완전하며 트랜잭션 "패밀리 트리"의 모양에 따라 크게 달라집니다. 그러나 이러한 부분적인 승리를 달성하기 위해 Corda는 블록 체인의 핵심 속성 인 트랜잭션 중개자를 제거합니다. Corda는 의심 할 여지없이 상호 운용성에 뛰어나지 만 그 정도면 충분합니까?
회의적인 태도를 원한다면 Corda의 팀은 R3에 자금을 지원하는 은행에 적합한 블록 체인의 풍미를 설계하는 것이 불가능한 과제로 설정되었다고 말할 수 있습니다. 그러나 중앙 집중식 데이터베이스에 비해 블록 체인의 주요 이점은 중간 성 (intermediation)입니다. 이러한 트레이드 오프는 중개자 역할을하여 돈을 버는 개인 정보 보호에 매우 민감한 금융 기관에 어떤 의미가 있습니까? 이러한 관점에서 볼 때, Corda는 R3 멤버가 블록 체인을 수행하려는 욕구와 그들이 존재하는 상업적 및 규제 적 제약 사이에서 영웅적이지만 궁극적으로는 불만족스러운 타협으로 찬성 할 수 있습니다.
관리인 2.0
그러나 저는보다 긍정적 인 접근 방식을 선호합니다. 우리는 블록 체인과의 비교에 중점을 두지 않고 Corda를 재정 상태에 대한 주요 기술 업그레이드로 볼 수 있습니다. “공증인”이라는 단어를“양육권”으로 바꾸면 모든 것이 깔끔하게 정리됩니다. (ㅏ 후견인 그렇습니다. 공증인은 중개자이며 거래를 차단하고 갈등을 허용 할 수 있지만 오늘날의 관리 인도 마찬가지입니다. “공증인 변경 거래”는 한 관리인에서 다른 관리인으로 자산을 이전하는 것으로 볼 수 있습니다. 또한 Corda 거래는 한 당사자가 주머니에서 벗어나지 않도록 자산 교환이 한 곳에서 발생하는 것을 좋아하는 것과 같은 이유로 하나의 공증인에 의해 서명됩니다.
이런 방식으로 Corda를 살펴보면 전통적인 관리 모델에서 어떻게 개선되는지 확인할 수 있습니다.
- 금융 자산 및 기타 계약 약정을 표현하기위한 표준 전산 패러다임 및 형식을 정의합니다.
- 이 계약을 해석하고 실행하기위한 오픈 소스 소프트웨어를 제공하여 거래 당사자 및 관리인이 모든 거래의 결과에 동의하도록 보장합니다.
- 내결함성 합의 알고리즘을 활용하여 악용으로부터 보호하는 복잡한 다자간 관리자 (소프트웨어 만 사용)를 만들 수 있습니다.
- 관리인 간의 자산 양도에 대한 표준 프로세스 ( "공증 변경")가 정의되며 관리인은 거부 할 수 없습니다.
- 관리인은 소유자의 동의 없이는 자신의 양육권 하에서 자산을 사용할 수 없습니다. 거래는 또한 입력의 소유자가 서명해야하기 때문입니다.
나는 은행가와는 거리가 멀지 만 나에게는 이것이 유망한 것으로 들린다. 아마도 Corda는 보험이나 운송과 같은 복잡한 관리 구조를 가진 다른 산업에도 동일하게 적용될 수 있습니다. Corda의 설계는 블록 체인의 완전한 중개를 제공하지는 않지만 중개자가 필수적인 역할을하는 산업에 강력한 변화를 제안합니다.
일단 우리가이 사고 방식을 넘어 서면 필연적으로 의문이 생깁니다. 만약 우리가 독창성을 검증하는 삶과 죽음의 직업을 가진 공증인을 이미 신뢰하고 있다면 정확성과 권한을 위해 공증인에게 의존하지 않는 이유는 무엇입니까? Corda는 이미 서명을 추가하기 전에 트랜잭션을 완전히 검증하는 "유효성 검증 공증인"개념을 가지고 있습니다. 거래의 조상을 다운로드하고 확인하는 일반적인 Corda 노드 대신 공증인에게 물어보십시오. 대부분의 노드는 자신 이외의 트랜잭션을 볼 수 없으므로 확장 성과 기밀성을 유지하는 데 도움이 될 수 있습니다. 네트워크의 공증인이 서로를 완전히 신뢰한다고 제안 할 수도 있으므로 조상에 대해 걱정할 필요가 없습니다. 각주의 공증인은 다른 공증인의 도움을 받아 해당 거래를 생성 한 거래 만 확인하면서 유효성을 보증 할 수 있습니다.
Corda가 Corda가되게하십시오
이 모든 것은 우리가 처음 시작한 곳으로 되돌아갑니다. Corda는 MultiChain을 포함하여 기존 블록 체인의 경쟁자가 아닙니다. Corda는 흥미로운 새로운 유형의 분산 원장으로 Corda는 자금을 조달하는 사람들의 요구에 최적화되었습니다. 나는 Corda가 현재의 일을하는 방식과 비교하여 실제 비용과 이점을 알지 못하기 때문에 궁극적으로 성공할지 실패할지 모릅니다. 그러나 미래에 어떤 일이 일어나더라도 철학과 디자인 측면에서 공부할 가치가 있습니다.
MultiChain은 다른 접근 방식을 취하고 있습니다. 에서 라인을 훔치려면 웨스트 윙우리는“블록 체인을 블록 체인으로 만들겠다”고 결심했습니다. 블록 체인은 그 자체이며, 우리는 그것들을 다른 것으로 바꿀 계획이 없습니다. 공유 응용 프로그램의 데이터 인프라 인 블록 체인은 중앙 집중식 데이터베이스와 비교할 때 특정 절충점을 나타냅니다. 즉 기밀 유지 비용이 줄어들면서 중개가 증가합니다. 우리는 MultiChain 2.0을 최고로 만들기 위해 노력하고 있습니다. blockchain 응용 프로그램 개발자가 사용할 수있는 플랫폼.
의견을 적어주세요 링크드 인에.
출처 : https://www.multichain.com/blog/2018/05/r3-corda-deep-dive-and-technical-review/
- 계정
- 약어
- 활동적인
- 추가
- 이점
- 연산
- 알고리즘
- 어플리케이션
- 어플리케이션
- 아키텍처
- 지역
- 기사
- 유산
- 자산
- 청중
- 권한 부여
- 은행
- 중국 은행
- 은행
- 은행
- BEST
- 지폐
- blockchain
- 보물상자
- 건물
- 묶음
- 사업
- 가지 경우
- 원인
- 대표 이사
- 증명서
- 인증
- 이전 단계로 돌아가기
- 채널
- 확인
- 확인하는 것이 좋다.
- 아이
- 어린이
- 중국
- 씨티
- 폐쇄
- 댓글
- 상업
- 공통의
- 회사
- 경쟁
- 경쟁
- 컴퓨터 과학
- 컴퓨터
- 갈등
- 일치
- 동의
- 소비
- 함유량
- 내용
- 계약
- 코다
- 비용
- 만들기
- 순항
- 크립토 통화를
- 암호 화폐
- 암호 법
- Current
- 보관
- 고객
- DAG
- 대시
- 데이터
- 데이터 저장
- 데이터베이스
- 데이터베이스
- 일
- 거래
- 지연
- 배달
- 배달
- 디자인
- 개발자
- 개발자
- 개발
- DID
- 디지털
- 분산 된 원장
- 달러
- 코끼리
- 엔지니어링
- Enterprise
- 이더리움
- 교환
- 교환
- 운동
- 구조
- 공정한
- 가족
- 패션
- 특징
- 최종적으로
- 금융
- 금융 기관
- 끝
- 먼저,
- 처음으로
- 초점
- 체재
- 가득 찬
- 자금
- 자금
- 미래
- 일반
- 글로벌
- 전역 블록 체인
- 좋은
- 통치
- 큰
- 그룹
- 성장하는
- 여기에서 지금 확인해 보세요.
- 숨는 장소
- 높은
- 강조
- history
- 방법
- HTTPS
- 거대한
- 생각
- 통합 인증
- 불법
- 포함
- 산업
- 정보
- 인프라
- 제도
- 기관
- 보험
- 상호 작용
- 관심
- 상호 운용성
- 참여
- IP
- 배급
- 문제
- IT
- 자바
- 일
- 어울리다
- 키
- 키
- 지식
- 넓은
- 리드
- Leadership
- 지도
- 배운
- 원장
- 이용약관
- 레벨
- 빛
- 라인
- 링크드인
- 리퀴드
- 명부
- 긴
- 주요한
- 과반수
- 유튜브 영상을 만드는 것은
- 시장
- 시장
- 경기
- 회의
- 회원
- 언급하다
- 백만
- 모델
- 돈
- 움직임
- 멀티 체인
- 네트워크
- 네트워킹
- 네트워크
- 노드
- 개념
- 열 수
- 오픈 소스
- 주문
- 명령
- 기타
- 기타
- 소유자
- 소유자
- 고통
- 서
- 패러다임
- 부모님
- 지불
- 지불
- 결제
- 사람들
- 성능
- 관점
- 철학
- .
- 플랫폼
- 플랫폼
- 인기 문서
- 제시
- 가격
- 개인 정보 보호
- 사설
- 프로덕트
- 생산
- 증명
- 재산
- 보호
- 공개
- R3
- 독자들
- 읽기
- 현실
- 요약하다
- 기록
- 규제
- 관계
- 구조
- 요구조건 니즈
- 자료
- 퇴직
- 리뷰
- 위험
- 규칙
- 달리기
- 달리는
- 확장성
- 과학
- 바다
- 보고
- 감각
- 세트
- 공유
- 배송
- 짧은
- 안전표시
- 단순, 간단, 편리
- 작은
- So
- 소프트웨어
- 솔루션
- 풀다
- 속도
- 지출
- 전파
- 말뚝
- 스타트
- 시작
- 주 정부
- 미국
- Status
- 저장
- 저장
- 상점
- 지원
- 표면
- 체계
- 테크니컬
- test
- 미래
- 사고력
- 제 3 자
- 시간
- 공차
- 추적
- 거래
- 거래 내역
- 변환
- 투명도
- 수송
- 믿어
- 해시되지 않음
- us
- USD
- 사용자
- 가장자리
- 확인
- 관측
- 온라인
- 가상 머신
- 가시성
- 투표
- 기다리다
- West
- 누구
- 위키 백과
- 승리
- 작업
- 세계
- 가치
- 쓰기
- 년
- Zcash
- 제로