Git이“블록 체인”으로 간주되지 않는 이유는 무엇입니까?


174

Git의 내부 데이터 구조는 데이터 객체의 트리이며 각 객체는 이전 객체 만 가리 킵니다. 각 데이터 블록은 해시됩니다. 저장된 해시와 실제 해시가 벗어날 때 중간 블록 수정 (비트 오류 또는 공격)이 나타납니다.

이 개념은 블록 체인과 어떻게 다릅니 까?
Git은 블록 체인의 예로 제시되지는 않지만 최소한 요약하면 데이터 블록, 단일 방향 역방향 연결, 해시 등 두 데이터 구조 설명은 모두 비슷합니다.

그렇다면 차이점은 어디에 있습니까, Git을 블록 체인이라고하지 않습니까?


2
Git은 블록 체인의 예로 나열되지 않았습니다. 블록 체인 이 무엇인지 처음으로 배우려고 할 때 git을 가장 눈에 띄는 예제라고 불렀습니다 (지금 정확한 링크가 없지만 맨 위에서 시작했습니다. "blockchain"에 대한 Google 검색 결과 목록)
Leon

2
Git과 블록 체인은 머클 트리 를 기본 데이터 구조로 사용합니다. 그러나 그것만으로는 Git을 블록 체인 또는 다른 방식으로 만들 수는 없습니다. – Git (및 내부)을 알고 있다면 머클 트리를 알고 있습니다. 이는 블록 체인의 작동 방식을 이해하는 데 매우 유용한 계시입니다.
poke

24
친애하는 유권자 여러분, 이유를 설명해 주시겠습니까? 2 개의 좋아요, 좋은 댓글 및 답변이 있습니다. 왜 의견을 기반으로합니까? 데이터 구조와 알고리즘에 관한 것으로 Git을 블록 체인으로 규정하지 않습니다.
Paebbels

2
"그것은 고려되지 않습니다 ..." bitcoin.stackexchange.com/a/43627/77469
v.oddou

4
@ v.oddou Merkle 나무는 1979 년 이래 존재합니다. 두 기술이 Merkle 나무를 개념의 일부로 눈에 띄게 사용하고 있기 때문에 똑같지는 않습니다. Git 또는 블록 체인을 머클 트리로 축소하지 않는 것은 잘못입니다. 그들은 단지 그것들을 사용합니다. 링크 된 게시물은 실제로 블록 체인이 아닌 머클 트리에 대해 이야기하기 때문에 완전히 관련이 없습니다.
찌를

답변:


53

git 여러 가지 이유로 블록 체인 기술의 예가 아닙니다 (이것이 처음으로 떠 올랐습니다).

  1. 블록 체인 구현에서 모든 블록은 블록 체인에 추가되기 전에 여러 번 독립적으로 검증됩니다. 이것은 실제로 블록 체인 기술에서 가장 중요한 것 중 하나이며 "해킹 불가능"을 보장합니다. 반면, 많은 git프로젝트는 독립적 인 검증이 필요하지 않으며 필요한 경우 저장소에 커밋되기 전에 한 사람 만 변경에 대해 사인 오프하도록 요구합니다. 따라서, 최대 1 개의 검증 포인트를 통해 신뢰해야하는 git블록 체인 기술의 핵심 원칙 중 하나를 깨뜨립니다.

  2. git저장소는 반드시 여러 서버에 복제되지 않습니다. git저장소에서 로컬로 작업 할 수 있으며 로컬 디스크가 손상된 경우 모든 것을 잃게됩니다. 블록 체인 기술은 서버에서 원장을 재생산 함을 의미합니다.

  3. git기록 을 다시 쓸 수 있습니다 . 에서보다 이전 상태로 설정되어 역사를 다시 쓸 것이다. 블록 체인에서 원장은 불변의 역사입니다.git push <remote> <branch> --force<branch><remote>


104
"블록 체인에서 원장은 불변의 역사입니다." -자식 역사도 마찬가지입니다. "기록을 다시 작성할 때"과거의 한 지점에서 시작하여 새로운 커밋을 추가합니다. 블록 체인에서도 마찬가지이며, 나중에 버려지더라도 포크가 발생할 때마다 발생합니다.
Holger Just

8
블록 체인과 Git을 이해하는 한 해시 충돌 문제를 해결하지 않는 한 블록 체인을 다시 작성할 수도 있습니다. 그리고 Git의 경우 다시 쓸 수 있지만 모든 리모컨에는 여전히 원래 기록이 있습니다. 기록을 다시 쓰면 새 해시와 다른 트리가 만들어집니다. 블록 체인이 그러한 작업을 끝내지 않으면 원하는 경우 구현할 수 있기 때문에 유효한 인수가 아닙니다. 또는 반대로 분기를 보호로 설정하여 강제 푸시를 거부 할 수 있습니다.
Paebbels

4
git history는 변경 가능합니다. push --force단일 분기에서 작업을 수행 하면 가비지 수집기가 정리 한 커밋에 대한 참조가 손실됩니다. 이것은 역사를 다시 쓰는 것이 아니라 대안적인 개발 경로 인 포크와 다릅니다.
houtanb

24
특수한 워크 플로를 적용하고 여러 작업을 금지함으로써 Git을 블록 체인 모드로 운영 할 수 있다고 요약 할 수 있습니까?
Paebbels

4
@Paebbels 네, 동의합니다. 기본적으로 정기적으로 사용되는 것은 아니지만 특별한 워크 플로에서는 그렇지 않습니다.
houtanb

123

Git과 블록 체인이 비슷한 것처럼 보이는 이유는 머클 트리 를 기본 데이터 구조로 사용하고 있기 때문 입니다. 머클 트리는 각 노드에 해당 컨텐츠의 암호화 해시 값으로 레이블이 지정된 트리이며 하위의 레이블을 포함합니다.

Git의 비순환 그래프는 각 노드 (태그, 커밋, 트리 또는 블로 브 객체)에 컨텐츠의 해시와 "자식"의 레이블이있는 머클 트리입니다. 커밋의 경우 "자식"이라는 용어는 Git의 부모에 대한 이해와 약간 충돌합니다. 부모 커밋 커밋 의 자식이므로 그래프를 다시 뿌리를 내림으로써 계속 자라는 나무로보아야합니다.

블록 체인은 이와 마찬가지로 계속 커지고 데이터 무결성을 보장하기 위해 머클 트리 속성을 사용하고 있기 때문에 이와 매우 유사합니다. 그러나 일반적으로 블록 체인은 단순한 어리석은 컨텐츠 추적기 인 Git 과 분리되는 머클 트리 이상의 의미로 이해됩니다. . 예를 들어, 블록 체인은 일반적으로 블록 수준에서 고도로 분산 된 시스템을 의미합니다 (모든 블록이 동일한 위치에있을 필요는 없음).

블록 체인을 이해하는 것은 어렵습니다 (개인적으로는 여전히 모든 것에 대해 이해하지 못합니다).하지만 Git 내부를 이해하는 것은 머클 트리를 이해하는 좋은 방법으로 블록 체인에 대한 기본 부분을 이해하는 데 도움이됩니다.


24
미안하지만 블록 체인이 git보다 더 많은 것을 가져 오는 곳은 없습니다. 블록 체인은 git만큼 바보입니다. 그렇게 믿지 않으면 과장된 것입니다. 피어 네트워크와 합의 시스템은 별개의 것입니다.
v.oddou 2019

2
개인 원장 (블록 체인)은 개념적으로 git
Munhitsu

일반적으로 git 저장소에는 루트 커밋이 하나 있지만 여러 가지가있을 수 있습니다. 브랜치에서 마지막 커밋을 루트 커밋으로, 부모를 자식으로 볼 경우 루트가 많은 나무가 생깁니다 ... 머클 트리에서 부모 참조가 대신 내용에있는 변형 인 것 같습니다. 아동 참조. 부모님과 자녀가 여러 명있을 수 있으므로 나무도 아닙니다.
herman

22

비트 코인과 같은 사이버 통화는 분산 된 합의 암호화 블록 체인 (머클 트리)을 사용합니다. 일반적인 사용법은 이것을 '블록 체인'으로 단축했습니다.

git은 일련의 블록 (머클 트리)을 사용하지만 'BlockChain'이라는 용어의 일반적인 사용이 암시하는 분산 합의 암호화 구성 요소가 없습니다.


17

Blockchain블록의 체인 이 아닙니다 .

Blockchain언제 두 개 이상이 전환되는 주쇄를 결정하는 방법이 , 어떠한 중앙 당국은 그 판정에 필요하지 않은 경우.


17

암호 화폐 블록 체인 과 달리 ; git에는 p2p trustless consensus 메커니즘이 없습니다.


왜 신뢰할 수없는 합의 시스템을 블록 체인의 일부로 생각하십니까? 블록 체인에서 신뢰를 만드는 많은 방법이 있습니다 .git의 경우 로컬 사본의 모든 내용을 다음 풀로 제거 할 수 없으며 원격 사본의 변경 사항을 원한다고 지정하는 것입니다. 옳은 것이 확실하지 않은 경우에는 신뢰할 수없는 합의 만 필요합니다. 자식에서 여러 분기가 "올 바르고"이벤트를 하나로 합칠 수 있습니다.
allo

@allo GitHub는 일반적으로 진실의 중심 소스로 사용되지만 관리자가 역사를 강요하고 무시하는 것을 막는 것은 무엇입니까? GitHub가없고 동료로부터 끌어 내렸다면 병합 충돌을 어떻게 처리합니까? 누구의 권리를 어떻게 결정합니까?
미구엘 모타

1
아무것도 당신이 강제로 밀지 못하게 막습니다. 그러나 블록 체인이 나를 보장하는 것처럼 내 체인이 이러한 커밋을 기반으로하는 것으로 확인할 수 없기 때문에이를 감지 할 수 있습니다. 그것이 분산 동의가 아닌 블록 체인의 요점입니다. 그리고 자식에서는 명시 적으로 내가 병합하는 것에 대한 동의 프로토콜을 원하지 않습니다 (개발은 민주주의가 아닙니다). 그러나 실제로 커밋을 병합 할 때 새로운 커밋을 읽습니다. 그래서 내 사본 이미 가지고있는 것들로 구성되어 있기 때문에 확인할 수 있습니다 (즉, 병합 충돌을보고) 내가 검토 한 다음 받아 들일 수 있습니다.
allo

1
@allo 당신은 그 점에서 정확하지만, 일반적으로 블록 체인이 아니라 "암호 화폐 블록 체인"이라는 답변에 언급되었지만, 지금은 그것에 대해 내 대답이 실제로 제기 된 질문에 맞지 않는 것 같습니다. 기본 데이터 구조가 아닌 시스템 전체에 대한 사고
Miguel Mota

git과 cryptocurrencies에 사용 된 블록 체인의 차이점에 대해 완전히 옳습니다. rigorouly라는 용어를 사용할 때 왜 git이 블록 체인으로 간주되지 않는지에 대한 대답은 아닙니다. 현재 승인 된 답변조차 귀하의 답변과 유사합니다. 나는 현상금을 얻은 대답을 여전히 선호합니다.
allo

1

머클 트리를 데이터 구조로 사용하지만 목표는 블록 체인과 자식에 대해 다릅니다.

A blockchain는 일반적으로 노드 간 통신을위한 프로토콜을 준수하고 새 블록을 검증하는 피어 투 피어 네트워크에 의해 관리됩니다. 일단 기록되면, 주어진 블록의 데이터는 모든 후속 블록을 변경하지 않고 소급하여 변경할 수 없으므로 네트워크 과반수의 합의가 필요합니다.

비트 코인 백서에 따르면 :

순전히 피어 투 피어 버전의 전자 현금을 사용하면 금융 기관을 거치지 않고 온라인 결제를 한 당사자에서 다른 당사자로 직접 보낼 수 있습니다. 디지털 서명은 솔루션의 일부를 제공하지만 이중 지출을 방지하기 위해 신뢰할 수있는 타사가 여전히 필요한 경우 주요 이점이 손실됩니다. 우리는 피어 투 피어 네트워크를 사용하여 이중 지출 문제에 대한 해결책을 제안합니다. 네트워크는 트랜잭션을 해시 기반 작업 증명 체인으로 해시하여 트랜잭션을 타임 스탬프 처리하여 작업 증명을 다시 작성하지 않고는 변경할 수없는 레코드를 형성합니다. 가장 긴 체인은 목격 된 이벤트 순서에 대한 증거 일뿐만 아니라 가장 큰 CPU 전원 풀에서 비롯된 것입니다. 대부분의 CPU 전원이 네트워크를 공격하기 위해 협력하지 않는 노드에 의해 제어되는 한 가장 긴 체인을 생성하고 공격자를 능가합니다. 네트워크 자체에는 최소한의 구조가 필요합니다. 메시지는 최선의 노력으로 브로드 캐스트되며 노드는 마음에 드는대로 네트워크를 떠나고 다시 참여할 수 있으며, 가장 긴 작업 증명 체인을 사라진 동안 발생한 일의 증거로 승인합니다.

Git소프트웨어 개발 중 소스 코드의 변경 사항을 추적하기위한 분산 버전 제어 시스템 인 반면 프로그래머 간의 작업 조정을 위해 설계되었지만 모든 파일 세트의 변경 사항을 추적하는 데 사용할 수 있습니다. 목표는 속도, 데이터 무결성 및 비선형 분산 워크 플로우 지원을 포함합니다.

Linus Torvalds에 따르면 :

많은 방법으로 git을 파일 시스템으로 볼 수 있습니다. 컨텐츠 주소 지정이 가능하고 버전 관리라는 개념이 있지만 파일 시스템 사람의 관점에서 문제가 발생하도록 설계했습니다 (이봐, 커널은 내가하는 일입니다) 실제로 기존 SCM 시스템을 만드는 데 전혀 관심이 없습니다.


0

으로 포크는 말했다 :

Git과 Blockchain은 Merkle Trees 를 사용하여 정렬 된 타임 스탬프 트랜잭션을 저장 하기 때문에 비슷하게 보입니다 . 머클 트리는 각 노드에 하위의 레이블을 포함하는 컨텐츠의 암호화 해시 값으로 레이블이 지정된 트리 데이터 구조입니다.

첫 번째 차이점은 해시 함수입니다 . 블록 체인은 매우 비싼 해시 함수를 사용하므로 간단한 커밋 메시지로 Git "블록"을 만들 수 있지만 각 블록을 채굴해야합니다.

Bitcoin의 목적은 거래 순서에 신뢰를 추가하는 것입니다. 가장 긴 체인에 중점을 둡니다. 계산하는 데 비용이 가장 많이 들고 진실 일 가능성이 큽니다.

Bitcoin은 해시가 만족스러운 해시를 찾을 때까지 메시지의 값 ( "nonce")을 증가시켜 특정 매개 변수 (특정 0으로 시작)를 충족하도록 요구함으로써이를 달성합니다. 이를 위해서는 노력이 필요하지만 nonce를 검증하는 데 단 하나의 계산 만 필요합니다. 다수의 논 스가 만족스러운 해시를 생성한다면, 하나는 낮아지고 진실로 간주됩니다. 다른 인증 체계는 네트워크 계약 또는 다른 방법으로 투표 한 권한에 대한 해시 발급을 중앙 집중화하여 해시를 신뢰할 수있게 만듭니다.

블록 체인 데이터는 트랜잭션으로 제한되며, 유효성을 준수해야합니다. 다음 블록에 포함 되려면 트랜잭션이 유효해야합니다. 비트 코인 거래는 돈 가치 교환과 같이이 전송을 기록하기 위해 비싼 블록을 사용하는 것을 정당화하는 현실 세계에서 중요한 무언가에 해당합니다. 우리는 실제로 최종 원장에 신경 쓰지 않습니다. 그것은 실제 세계에서 무언가에 대한 은유입니다.

반대로 커밋은 임의의 양의 데이터를 포함 할 수 있으므로 Git 블록은 임의적입니다. 값은 최종 제품에 관심을 갖기 때문에 git 트리로 구성되는 데이터의 변경에 있습니다 .git 저장소의 존재에 의해 검증됩니다.

Git의 목적은 저렴한 "리더"가 여러 제품 대안을 추적 할 수 있도록하는 것입니다. Git의 "지도자"는 우리가 관심을 갖는 것입니다. 이것이 최종 제품입니다. 거래 데이터는 단지 제품이 어떻게 만들어 졌는지를 기록합니다. 우리는 제작자가이 제품을 어떻게 만들 었는지 기록하기에 충분한 오버 헤드만으로 최종 제품의 여러 버전을 만드는 것이 매우 저렴 해 지길 원합니다. 데이터에 대한 명시 적 유효성 검증은 수행되지 않으며 최종 제품이 양호 할 경우 최종 제품을 유지 보수하며 해당 제품이 존재하면이 제품 작성의 체인을 보유하는 것이 유용합니다. 최종 제품이 잘못되었거나 커밋 순서가 유효하지 않은 경우이 "ledger"는 가비지 수집 중에 삭제됩니다.

두 번째 차이점은 블록 체인 거래는 유효한 이전 소스에서 가져와야한다는 것입니다. Git에서는 트리를 확장하는 데 사용하는 데이터는 중요하지 않습니다. 블록 체인에서 거래는 유효한 이전 소스에서 가져와야합니다. 그런 의미에서 Git은 환경의 확장을 추적하는 반면 Blockchain은 닫힌 환경 내에서 가치 교환을 추적합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.