Tại sao Git không được coi là một chuỗi khối của người Viking?


174

Cấu trúc dữ liệu bên trong của Git là một cây các đối tượng dữ liệu, trong đó mỗi đối tượng chỉ trỏ đến người tiền nhiệm của nó. Mỗi khối dữ liệu được băm. Sửa đổi (lỗi bit hoặc tấn công) một khối trung gian sẽ được chú ý khi hàm băm đã lưu và hàm băm thực tế bị lệch.

Khái niệm này khác với chuỗi khối như thế nào?
Git không được liệt kê như một ví dụ về chuỗi khối, nhưng ít nhất là trong các bản tóm tắt, cả hai mô tả cấu trúc dữ liệu trông giống nhau: khối dữ liệu, liên kết ngược hướng đơn, băm, ...).

Vậy đâu là điểm khác biệt, Git không được gọi là chuỗi khối?


2
Git không được liệt kê như một ví dụ về chuỗi khối Khi lần đầu tiên tôi cố gắng tìm hiểu blockchain là gì, tôi đã được gọi là git là ví dụ nổi bật nhất (hiện tại tôi không có liên kết chính xác, nhưng nó là từ đầu trang danh sách được trả về bởi tìm kiếm của Google cho "blockchain")
Leon

2
Cả Git và blockchain đều đang sử dụng cây merkle làm cấu trúc dữ liệu cơ bản của chúng. Nhưng điều đó một mình không làm cho Git trở thành một blockchain, hay ngược lại. - Nếu bạn biết Git (và các bộ phận bên trong của nó), thì bạn cũng biết cây merkle, đây có thể là một tiết lộ rất hữu ích để hiểu cách thức hoạt động của blockchains.
chọc

24
Kính gửi cử tri thân thiết, bạn có thể giải thích lý do của bạn? Tôi thấy 2 lượt thích, bình luận tốt và một câu trả lời. Tại sao nó dựa trên ý kiến? Đó là về các cấu trúc dữ liệu và thuật toán, mà đường may không đủ điều kiện Git là một chuỗi khối.
Paebbels

2
Theo ý kiến ​​của bạn rằng "nó KHÔNG được coi là ..." bitcoin.stackexchange.com/a/43627/77469
v.oddou

4
@ v.oddou Cây Merkle tồn tại từ năm 1979. Chỉ vì hai công nghệ đang sử dụng cây Merkle nổi bật như một phần của khái niệm của chúng, điều đó không làm cho chúng giống nhau. Không đúng khi giảm chuỗi Git hoặc chuỗi khối thành chỉ buôn cây vì cả hai đều không phải cây merkle. Họ chỉ sử dụng chúng. Điều đó làm cho bài đăng được liên kết hoàn toàn không liên quan vì nó thực sự đang nói về cây merkle, và không phải chuỗi khối.
chọc

Câu trả lời:


53

git không phải là một ví dụ về công nghệ blockchain vì nhiều lý do (đây là những lý do đầu tiên xuất hiện trong tâm trí):

  1. Trong triển khai chuỗi khối, mọi khối được xác minh độc lập nhiều lần trước khi được thêm vào chuỗi khối. Đây thực sự là một trong những điều quan trọng nhất về công nghệ blockchain và là điều đảm bảo "tính không ổn định" của nó. Mặt khác, nhiều gitdự án không yêu cầu xác minh độc lập và khi thực hiện, họ chỉ yêu cầu một người đăng nhập vào một thay đổi trước khi cam kết với kho lưu trữ. Do đó, với nhiều nhất một điểm xác thực mà bạn phải tin tưởng, gitphá vỡ một trong những nguyên lý cốt lõi của công nghệ blockchain.

  2. Một gitkho lưu trữ không nhất thiết phải được sao chép trên nhiều máy chủ. Bạn có thể làm việc từ một gitkho lưu trữ cục bộ và nếu đĩa cục bộ của bạn bị hỏng, bạn sẽ mất tất cả. Công nghệ chuỗi khối ngụ ý việc sao chép sổ cái trên các máy chủ.

  3. Bạn có thể viết lại gitlịch sử. Một git push <remote> <branch> --forcenơi <branch>được đặt ở trạng thái trước đó <remote>sẽ viết lại lịch sử. Trong blockchains, sổ cái là một lịch sử bất di bất dịch.


104
"Trong blockchains, sổ cái là một lịch sử bất di bất dịch." - Lịch sử git cũng vậy. Khi "viết lại lịch sử", bạn bắt đầu từ một điểm trong quá khứ và thêm các cam kết mới. Điều tương tự cũng xảy ra với chuỗi khối và trên thực tế, nó xảy ra mỗi khi xảy ra ngã ba, ngay cả khi sau đó nó bị bỏ rơi.
Holger Chỉ cần

8
Theo như tôi hiểu chuỗi khối so với Git, bạn cũng có thể viết lại chuỗi khối, trừ khi bạn giải quyết vấn đề va chạm băm. Và đối với Git, có bạn có thể viết lại, nhưng tất cả các điều khiển từ xa vẫn có lịch sử ban đầu. Viết lại lịch sử tạo ra các giá trị băm mới và một cây khác. Nếu chuỗi khối không vượt quá thao tác như vậy, đó không phải là đối số hợp lệ, vì tôi có thể triển khai nó nếu tôi muốn. Hoặc ngược lại tôi có thể từ chối các cú đẩy bắt buộc bằng cách đặt một nhánh là được bảo vệ.
Paebbels

4
@HolgerJust lịch sử git là đột biến. Khi thực hiện một push --forcenhánh duy nhất, bạn sẽ mất các tham chiếu đến các xác nhận được dọn sạch bởi trình thu gom rác. Điều này khác với một ngã ba không phải là viết lại lịch sử mà là một con đường phát triển thay thế.
houtanb

24
Chúng ta có thể tóm tắt, rằng Git có thể được vận hành trong chế độ chuỗi khối bằng cách áp dụng một quy trình công việc đặc biệt và cấm một số hoạt động không?
Paebbels

4
@Paebbels vâng, tôi đồng ý với điều đó. Theo mặc định và sử dụng thường xuyên thì không, nhưng với quy trình làm việc đặc biệt thì sẽ như vậy.
houtanb

123

Lý do tại sao Git và blockchains xuất hiện tương tự nhau là vì cả hai đều sử dụng cây merkle làm cấu trúc dữ liệu cơ bản của chúng. Cây merkle là một cây trong đó mỗi nút được gắn nhãn với giá trị băm mật mã của nội dung của chúng, bao gồm các nhãn của con của nó.

Biểu đồ chu kỳ theo hướng của Git chính xác là một cây merkle nơi mỗi nút (thẻ, cam kết, cây hoặc đối tượng blob) được gắn nhãn với hàm băm của nội dung của nó và nhãn của nhãn con của nó. Lưu ý rằng đối với các cam kết, thuật ngữ trẻ con của Google mâu thuẫn một chút với sự hiểu biết của cha mẹ Git: Cam kết của cha mẹ con của các cam kết, bạn chỉ cần xem biểu đồ như một cái cây tiếp tục phát triển bằng cách lấy lại rễ.

Blockchains rất giống với điều này, vì chúng cũng tiếp tục phát triển theo cách đó và chúng cũng đang sử dụng thuộc tính cây merkle của nó để đảm bảo tính toàn vẹn dữ liệu. Nhưng thông thường, blockchains được hiểu là cách nhiều hơn là chỉ các cây merkle, nơi chúng được tách ra khỏi trình theo dõi nội dung ngu ngốc của Keith Git . Ví dụ, blockchains thường cũng có nghĩa là có một hệ thống phi tập trung cao ở cấp độ khối (không phải tất cả các khối cần phải ở cùng một nơi).

Hiểu về blockchains là một điều khó khăn (cá nhân tôi vẫn còn xa mới hiểu mọi thứ về nó), nhưng tôi coi việc hiểu nội bộ Git là một cách tốt để hiểu cây merkle, điều chắc chắn giúp hiểu một phần cơ bản về blockchain.


24
Tôi xin lỗi nhưng không nơi nào blockchains mang lại nhiều thứ hơn git. blockchains chính xác là ngu ngốc như git. Nếu bạn không tin như vậy, bạn sẽ bị bội thực. Mạng ngang hàng và các hệ thống đồng thuận là một điều riêng biệt.
v.oddou

2
sổ cái riêng (blockchains) giống hệt về mặt khái niệm với git
Munhitsu

Thông thường, trong kho git có một cam kết gốc nhưng có thể có bất kỳ số lượng nhánh. Nếu bạn thấy cam kết cuối cùng trong một nhánh là một cam kết gốc và cha mẹ là trẻ em, bạn có một cây có nhiều rễ mọc ... Tôi nghĩ đó chỉ là một biến thể trên cây Merkle nơi các tham chiếu của cha mẹ nằm trong nội dung thay vì tài liệu tham khảo trẻ em. Có thể có nhiều cha mẹ và con cái nên nó thậm chí không phải là một cái cây.
herman

22

Các loại tiền điện tử như Bitcoin, sử dụng một chuỗi khối tiền mã hóa phân tán (cây merkle). Việc sử dụng phổ biến đã rút ngắn điều này thành 'blockchain'

Mặc dù git sử dụng một chuỗi các khối (cây merkle), nó thiếu các bộ phận phân phối mật mã được sử dụng phổ biến cho cụm từ 'BlockChain'.


17

Blockchainkhông chỉ bất kỳ chuỗi của bất kỳ khối.

Blockchainlà khi có một cách xác định chuỗi chính khi hai hoặc nhiều hơn được chuyển hướng và khi không cần cơ quan trung ương nào cho quyết định đó.


17

Không giống như các blockchain tiền điện tử ; git không có cơ chế đồng thuận tin cậy p2p.


Tại sao bạn coi một hệ thống đồng thuận không tin cậy là một phần của chuỗi khối? Có nhiều cách để tạo niềm tin trong chuỗi khối, vì git chỉ là bạn biết rằng mọi thứ trong bản sao cục bộ của bạn không thể bị xóa bởi lần kéo tiếp theo và bạn xác định rằng bạn muốn thay đổi trong bản sao từ xa. Bạn chỉ cần sự đồng thuận không tin cậy khi nó sẽ không rõ ràng những gì đúng. Trong git, nhiều nhánh có thể "đúng" và được kết hợp lại với nhau.
allo

@allo GitHub thường được sử dụng làm nguồn trung tâm của sự thật nhưng điều gì ngăn một quản trị viên không ép buộc và ghi đè lịch sử? Nếu không có GitHub và bạn rút ra từ các đồng nghiệp thì làm thế nào để bạn xử lý xung đột hợp nhất? Làm thế nào để bạn xác định quyền của ai?
Miguel Mota

1
Không có gì ngăn bạn khỏi lực đẩy. Nhưng giống như một blockchain đảm bảo cho tôi, tôi có thể phát hiện ra nó bởi vì chuỗi của tôi không thể xác minh những cam kết này là dựa trên nó. Đó là điểm với một blockchain, không phải là sự đồng ý phi tập trung. Và trong git tôi rõ ràng không muốn có một giao thức đồng ý cho những gì tôi hợp nhất (phát triển không phải là một nền dân chủ), nhưng tôi thực sự đã đọc các cam kết mới khi sáp nhập chúng vào chuỗi của tôi. Vì vậy, bản sao của tôi đúng, bởi vì nó bao gồm những thứ tôi đã có và do đó có thể xác minh (tức là bằng cách xem xung đột hợp nhất) và những thứ tôi xem xét và sau đó chấp nhận vào nó.
allo

1
@allo bạn đúng về vấn đề đó, tuy nhiên tôi đã nêu trong câu trả lời "chuỗi khối tiền điện tử", không phải là chuỗi khối nói chung, nhưng bây giờ tôi nghĩ về câu trả lời của mình dường như không phù hợp với câu hỏi đang được hỏi bởi vì tôi đã suy nghĩ về toàn bộ hệ thống thay vì các cấu trúc dữ liệu cơ bản
Miguel Mota

Bạn hoàn toàn đúng về sự khác biệt của chuỗi khối được sử dụng trong git và tiền điện tử. Nó chỉ không phải là một câu trả lời cho câu hỏi tại sao (hoặc nếu) git không được coi là một chuỗi khối, khi sử dụng thuật ngữ một cách nghiêm ngặt. Ngay cả câu trả lời hiện đang được chấp nhận cũng tương tự như câu trả lời của bạn. Tôi vẫn thích câu trả lời có tiền thưởng.
allo

1

Các Mục tiêu khác nhau đối với blockchain và git mặc dù cả hai đều sử dụng cây merkle làm cấu trúc dữ liệu.

A blockchainthường được quản lý bởi một mạng ngang hàng tuân thủ một giao thức để liên lạc giữa các nút và xác nhận các khối mới. Sau khi được ghi lại, dữ liệu trong bất kỳ khối cụ thể nào cũng không thể được thay đổi hồi tố mà không thay đổi tất cả các khối tiếp theo, điều này đòi hỏi sự đồng thuận của đa số mạng.

Theo như whitepaper Bitcoin:

Một phiên bản hoàn toàn ngang hàng của tiền điện tử sẽ cho phép thanh toán trực tuyến được gửi trực tiếp từ bên này sang bên khác mà không cần thông qua một tổ chức tài chính. Chữ ký kỹ thuật số cung cấp một phần của giải pháp, nhưng những lợi ích chính sẽ bị mất nếu một bên thứ ba đáng tin cậy vẫn được yêu cầu để ngăn chặn chi tiêu gấp đôi. Chúng tôi đề xuất một giải pháp cho vấn đề chi tiêu gấp đôi bằng cách sử dụng mạng ngang hàng. Các dấu thời gian của mạng giao dịch bằng cách băm chúng thành một chuỗi bằng chứng hoạt động dựa trên hàm băm đang diễn ra, tạo thành một bản ghi không thể thay đổi mà không làm lại bằng chứng công việc. Chuỗi dài nhất không chỉ đóng vai trò là bằng chứng của chuỗi các sự kiện đã chứng kiến, mà là bằng chứng cho thấy nó đến từ nhóm sức mạnh CPU lớn nhất. Miễn là phần lớn năng lượng CPU được điều khiển bởi các nút không hợp tác để tấn công mạng, chúng ' sẽ tạo ra những kẻ tấn công chuỗi dài nhất và vượt ra ngoài. Mạng lưới đòi hỏi cấu trúc tối thiểu. Tin nhắn được phát trên cơ sở nỗ lực tốt nhất và các nút có thể rời khỏi và tham gia lại mạng theo ý muốn, chấp nhận chuỗi bằng chứng công việc dài nhất làm bằng chứng về những gì đã xảy ra trong khi chúng biến mất

Mặc dù Gitlà một hệ thống kiểm soát phiên bản phân tán để theo dõi các thay đổi trong mã nguồn trong quá trình phát triển phần mềm. Nó được thiết kế để phối hợp công việc giữa các lập trình viên, nhưng nó có thể được sử dụng để theo dõi các thay đổi trong bất kỳ tập tin nào. Mục tiêu của nó bao gồm tốc độ, tính toàn vẹn dữ liệu và hỗ trợ cho các quy trình công việc phi tuyến tính phân tán.

Theo Linus Torvalds:

Theo nhiều cách, bạn chỉ có thể xem git như một hệ thống tệp - nó có thể định địa chỉ nội dung và nó có một khái niệm về phiên bản, nhưng tôi thực sự đã thiết kế nó đến vấn đề từ quan điểm của một người hệ thống tệp (hey, hạt nhân là những gì tôi làm) và tôi thực sự không có hứng thú với việc tạo ra một hệ thống SCM truyền thống.


0

Như chọc nói :

Git và Blockchains xuất hiện tương tự nhau vì cả hai đều sử dụng Merkle Tree để lưu trữ các giao dịch được đánh dấu thời gian. Cây merkle là một cấu trúc dữ liệu cây trong đó mỗi nút được gắn nhãn với giá trị băm mật mã của nội dung của chúng, bao gồm các nhãn của các phần tử con của nó.

Sự khác biệt đầu tiên là chức năng Hash : Blockchain có chức năng băm rất tốn kém để mỗi khối phải được khai thác, có thể tạo ra một "khối" Git bằng một thông điệp cam kết đơn giản.

Mục đích của Bitcoin là thêm niềm tin vào thứ tự giao dịch. Trọng tâm là chuỗi dài nhất, vì đó là đắt nhất để tính toán và do đó rất có thể là sự thật.

Bitcoin thực hiện điều này bằng cách yêu cầu hàm băm đáp ứng một số tham số nhất định (bắt đầu bằng số 0 cụ thể), bằng cách tăng giá trị ("nonce") trong thông báo cho đến khi tìm thấy hàm băm thỏa đáng. Điều này cần nỗ lực để tìm, nhưng chỉ có 1 phép tính để xác minh cho một lần mở; và nếu nhiều nonces tạo ra một hàm băm thỏa đáng, thì một cái sẽ thấp hơn và được coi là sự thật. Các lược đồ xác thực khác làm cho hàm băm đáng tin cậy bằng cách tập trung phát hành hàm băm cho một cơ quan, có thể được bỏ phiếu theo thỏa thuận mạng hoặc một số phương pháp khác.

Dữ liệu blockchain được giới hạn trong các giao dịch, phải phù hợp với xác nhận. Giao dịch phải hợp lệ để được bao gồm trong khối tiếp theo. Một giao dịch Bitcoin tương ứng với một cái gì đó quan trọng trong thế giới thực, biện minh cho việc sử dụng một khối đắt tiền để ghi lại chuyển khoản này, như trao đổi giá trị tiền. Chúng tôi không thực sự quan tâm đến sổ cái cuối cùng, đó là một phép ẩn dụ cho một cái gì đó trong thế giới thực.

Ngược lại, các khối Git là tùy ý, vì một cam kết có thể chứa bất kỳ lượng dữ liệu nào. Giá trị nằm ở những thay đổi của dữ liệu được sắp xếp vào cây git vì chúng tôi quan tâm đến sản phẩm cuối cùng, nó được xác nhận bởi sự tồn tại của kho git.

Mục đích của Git là cho phép các "sổ cái" giá rẻ theo dõi nhiều lựa chọn thay thế sản phẩm. "Sổ cái" trong Git là thứ chúng tôi quan tâm, đó là sản phẩm cuối cùng của chúng tôi; dữ liệu giao dịch chỉ ghi lại cách sản phẩm được xây dựng. Chúng tôi muốn làm cho nó rất rẻ để tạo ra nhiều phiên bản của sản phẩm cuối cùng, chỉ đủ chi phí để yêu cầu người tạo ghi lại cách họ xây dựng sản phẩm này. Không có xác nhận rõ ràng được thực hiện trên dữ liệu, bạn duy trì sản phẩm cuối nếu nó trông tốt và sự tồn tại đó giúp cho việc tạo ra chuỗi sản phẩm này hữu ích. Nếu sản phẩm cuối là xấu hoặc thứ tự cam kết không hợp lệ, "sổ cái" này sẽ bị xóa trong quá trình thu gom rác.

Sự khác biệt thứ hai là các giao dịch Blockchain phải đến từ một nguồn hợp lệ trước đó. Trong Git, chúng tôi không quan tâm bạn sử dụng dữ liệu nào để mở rộng cây. Trong Blockchain, các giao dịch phải đến từ một nguồn hợp lệ trước đó. Theo nghĩa đó, Git theo dõi sự mở rộng của môi trường của chúng tôi, trong khi Blockchain theo dõi việc trao đổi giá trị trong một môi trường khép kín.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.