BTC
ETH
HTX
SOL
BNB
Xem thị trường
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Khoa học phổ biến: Diễn giải Sách vàng Ethereum (7/2)

以太坊爱好者
特邀专栏作者
2019-09-22 23:30
Bài viết này có khoảng 4657 từ, đọc toàn bộ bài viết mất khoảng 7 phút
Một số thành phần chính của Ethereum và vai trò của chúng trong tổng thể hệ thống.
Tóm tắt AI
Mở rộng
Một số thành phần chính của Ethereum và vai trò của chúng trong tổng thể hệ thống.

Lưu ý của biên tập viên: Bài viết này đến từNhững người đam mê Ethereum (ID: ETHfans)Lưu ý của biên tập viên: Bài viết này đến từ

Những người đam mê Ethereum (ID: ETHfans)

, Tác giả: Lucas Saldanha, dịch & hiệu đính: An Zi Clint & A Jian, được Odaily in lại với sự ủy quyền.

Tôi hy vọng rằng bạn trước màn hình có thể hiểu cây Merkle là gì và vai trò của nó trong Ethereum sau khi đọc nó; hiểu các khái niệm về "trạng thái thế giới" và "trạng thái tài khoản"; Cấu trúc của khối.

(Tuyên bố miễn trừ trách nhiệm: Bài viết này dựa trên Sách vàng của phiên bản Byzantine e94ebda vào ngày 5 tháng 6 năm 2018)

tiêu đề phụ

cây thủy sinh

Trước khi thảo luận về các đối tượng dữ liệu chính của Ethereum, tôi muốn giới thiệu sơ qua về cây Merkle là gì và các thuộc tính giúp nó hoạt động.

Cây Merkle-Patricia có nhiều đặc tính thú vị và nếu bạn muốn tìm hiểu thêm về cách sử dụng chúng trong Ethereum, tôi khuyên bạn nên đọc bài viết này.

Trong cây Merkle, các nút lá giữ giá trị băm của dữ liệu khối, trong khi các nút không phải lá giữ giá trị băm của các nút con của chúng.

Mô tả hình ảnh

  • -Sơ đồ cây Merkle (bao gồm các nút và mối quan hệ giữa chúng)-

  • Bất kỳ thay đổi nào trong dữ liệu được chỉ ra bởi cây Merkle sẽ gây ra những thay đổi trong hàm băm của nút. Vì giá trị băm được lưu trữ trong mỗi nút cha phụ thuộc vào dữ liệu chứa trong nút con, nên việc thay đổi dữ liệu trong nút con sẽ gây ra sự thay đổi của hàm băm của nút cha. Và tác động như vậy là một phản ứng dây chuyền, từ nút lá đến nút gốc. Do đó, những thay đổi đối với dữ liệu được trỏ tới bởi các nút lá sẽ gây ra những thay đổi trong hàm băm được lưu trữ bởi nút gốc. Từ các đặc điểm cấu trúc trên, chúng ta có thể rút ra hai thuộc tính quan trọng:

Khi đánh giá liệu dữ liệu được trỏ đến bởi hai cây Merkle có hoàn toàn giống nhau hay không, chúng ta không cần so sánh từng nút lá mà chỉ cần so sánh hàm băm được lưu trữ trong nút gốc.

Điều quan trọng về thuộc tính đầu tiên là chúng ta chỉ có thể sử dụng giá trị băm của nút gốc để đánh dấu dữ liệu được trỏ tới bởi toàn bộ cây tại một thời điểm nhất định. Điều này có nghĩa là khối chỉ có thể được đánh dấu bằng cách lưu giá trị băm của nút gốc (không lưu trữ tất cả dữ liệu trong chuỗi khối) và dữ liệu không thể bị giả mạo.

Cho đến nay, chúng tôi đã làm rõ vai trò của hàm băm nút gốc trong cây Merkle và hãy giới thiệu các đối tượng chính trong Ethereum.

tiêu đề phụ

Trạng thái thế giới là ánh xạ từ địa chỉ (tài khoản) sang trạng thái tài khoản. Mặc dù trạng thái của thế giới không được lưu trữ trên chuỗi khối, nhưng trong phần mô tả của Sách vàng, trạng thái của thế giới cũng được lưu bởi một cây (cây này còn được gọi là cơ sở dữ liệu trạng thái hoặc cây trạng thái). Trạng thái thế giới có thể được xem là trạng thái toàn cầu được cập nhật liên tục khi các giao dịch được thực hiện. Ethereum giống như một máy tính phi tập trung và trạng thái của thế giới là ổ cứng của máy tính này.

Mô tả hình ảnh

-Cây trạng thái thế giới và lưu trữ tài khoản-

tiêu đề phụ

Tình trạng tài khoản

Có hai loại tài khoản trong Ethereum: Tài khoản sở hữu bên ngoài (EOA) và tài khoản hợp đồng. Các tài khoản chúng tôi sử dụng để gửi và nhận Ethereum cho nhau và triển khai hợp đồng thông minh là tài khoản EOA và tài khoản được tạo tự động khi triển khai hợp đồng thông minh là tài khoản hợp đồng. Mỗi hợp đồng thông minh có tài khoản Ethereum duy nhất của riêng mình.

nonce

Trạng thái tài khoản phản ánh nhiều thông tin khác nhau của tài khoản Ethereum. Ví dụ: nó lưu trữ thông tin số dư Ethereum của tài khoản hiện tại, số lượng giao dịch được gửi bởi tài khoản hiện tại... Mỗi tài khoản có một trạng thái tài khoản.

balance

Chúng ta hãy xem những gì được bao gồm trong trạng thái tài khoản:

storageRoot

Số lượng giao dịch được gửi từ địa chỉ này (nếu nó hiện là tài khoản EOA) hoặc hoạt động tạo hợp đồng được tạo bởi tài khoản này (không cần quan tâm đến hoạt động tạo hợp đồng hiện tại là gì).

codeHash

Lượng ether (được đo bằng Wei) thuộc sở hữu của tài khoản này.

Giá trị băm của nút gốc của cây lưu trữ tài khoản (chúng tôi sẽ giới thiệu về lưu trữ tài khoản sau).

Đối với tài khoản hợp đồng, tài khoản này lưu trữ giá trị băm của mã EVM. Đối với các tài khoản EOA, hãy để trống phần này.

Tính bất biến của codeHash khiến không thể sửa chữa và cập nhật hợp đồng thông minh có lỗ hổng nếu nó được triển khai. Tương ứng, chỉ có một hợp đồng mới có thể được triển khai (và phiên bản dễ bị tấn công sẽ luôn tồn tại trên chuỗi khối). Đây là lý do tại sao cần sử dụng Truffle để phát triển và triển khai hợp đồng thông minh, đồng thời tuân theo các yêu cầu của các phương pháp hay nhất khi lập trình với Solidity.

-Trạng thái tài khoản và cây lưu trữ tài khoản-

buôn bán

tiêu đề phụ


  • buôn bán

  • Các giao dịch thúc đẩy quá trình chuyển đổi từ trạng thái hiện tại sang trạng thái tiếp theo. Có ba loại giao dịch trong Ethereum:

  • Một giao dịch chuyển giá trị giữa các EOA (ví dụ: thay đổi kích thước số dư của người gửi và người nhận).


Gửi tin nhắn để gọi giao dịch của hợp đồng (ví dụ: để đặt giá trị trong hợp đồng bằng cách gửi tin nhắn gọi để kích hoạt phương thức setter).

Một giao dịch để triển khai hợp đồng (do đó tạo tài khoản hợp đồng).

nonce

(Từ quan điểm kỹ thuật, hai giao dịch đầu tiên giống nhau... Chúng đều là các giao dịch thay đổi trạng thái tài khoản thông qua các cuộc gọi tin nhắn, ngoại trừ một giao dịch là tài khoản EOA và giao dịch còn lại là tài khoản hợp đồng. Ở đây, các giao dịch được chia thành ba loại Đó là để người đọc thuận tiện hiểu.)

gasPrice

Một giao dịch bao gồm các phần sau:

gasLimit

Số lượng giao dịch được phát hành bởi tài khoản này (lưu ý hiệu đính: có thể hiểu nôm na là "đây là giao dịch đầu tiên của tài khoản này").

to


  • Phí (được đo bằng Wei) trả cho mỗi đơn vị gas khi thực hiện giao dịch này, thực hiện các phép tính.

  • Lượng gas tối đa có thể được sử dụng khi thực hiện giao dịch này.

  • Nếu giao dịch này là để gửi ether, thì đây là địa chỉ EOA để nhận ether.


value


  • Nếu giao dịch này được sử dụng để gửi tin nhắn đến một hợp đồng (ví dụ: gọi một phương thức trong hợp đồng thông minh), thì đây là địa chỉ của hợp đồng.

  • Nếu giao dịch này được sử dụng để tạo hợp đồng, giá trị ở đây sẽ trống.

  • Nếu giao dịch này đang gửi hoặc nhận ether, đây là số lượng mã thông báo trong Wei được gửi đến tài khoản nhận.


v, r, s

Nếu giao dịch này được sử dụng để gửi một cuộc gọi tin nhắn đến một hợp đồng, thì đây là số tiền Wei đã trả cho hợp đồng thông minh đã nhận được tin nhắn này.

dataNếu giao dịch này được sử dụng để tạo hợp đồng, thì đây là lượng ether trong Wei được lưu trữ trong tài khoản khi hợp đồng được khởi tạo.

Giá trị được sử dụng trong chữ ký mật mã của giao dịch, có thể được sử dụng để xác định người gửi giao dịch.

init(Chỉ được sử dụng để chuyển giá trị và gửi cuộc gọi tin nhắn đến hợp đồng thông minh)

Dữ liệu đầu vào được đính kèm với cuộc gọi tin nhắn (ví dụ: nếu bạn muốn thực thi phương thức setter trong hợp đồng thông minh, vùng dữ liệu phải bao gồm mã định danh của phương thức setter và giá trị tham số bạn muốn đặt).

(chỉ dành cho việc tạo hợp đồng)

Như bạn có thể mong đợi, tất cả các giao dịch trong một khối cũng được lưu trữ trong cây Merkle. Và giá trị băm của nút gốc của cây này được lưu bởi tiêu đề khối! Hãy phân tích cấu trúc khối của Ethereum.

khối

tiêu đề phụ

khối

Tiêu đề khối là một phần của chuỗi khối trong Ethereum. Nó lưu giá trị băm của khối trước đó (còn được gọi là khối chính) và tạo thành một chuỗi được chứng thực bằng mật mã thông qua kết nối của các tiêu đề khối.

Phần thân khối chứa một loạt các giao dịch được ghi lại trong khối này, cũng như danh sách các tiêu đề khối chú (ommer). Nếu bạn muốn tìm hiểu thêm về khối chú, tôi khuyên bạn nên đọc bài viết này.

Mô tả hình ảnh

parentHash

-Sơ đồ trừu tượng của khối Ethereum-

ommersHash

Hãy giới thiệu những phần tiêu đề khối bao gồm.

beneficiary

Băm tiêu đề khối của khối trước đó. Mỗi khối chứa hàm băm của các khối trước đó, tất cả đều quay trở lại khối gốc trên chuỗi. Đây cũng là thiết kế cấu trúc để duy trì dữ liệu không bị giả mạo (bất kỳ sự giả mạo nào với khối trước đó sẽ ảnh hưởng đến giá trị băm của tất cả các khối tiếp theo).

stateRoot

Giá trị băm của tiêu đề khối chú và một phần của thân khối.

transactionsRoot

Tài khoản Ethereum kiếm được thu nhập để khai thác khối này.

receiptsRoot

Hàm băm của nút gốc của cây trạng thái thế giới (sau khi tất cả các giao dịch đã được thực hiện).

logsBloom

Giá trị băm của nút gốc của cây giao dịch. Cây này chứa tất cả các giao dịch của thân khối.

difficulty

Bất cứ khi nào một giao dịch được thực hiện, Ethereum sẽ tạo biên lai giao dịch tương ứng với kết quả. Đây là hàm băm của nút gốc của cây nhận giao dịch.

number

Bộ lọc Bloom, được sử dụng để xác định xem một nhật ký nhất định có được tạo bởi một giao dịch trong một khối nhất định hay không (nếu bạn quan tâm đến khía cạnh này, bạn có thể tham khảo câu trả lời này trên Stack Overflow). Điều này tránh lưu trữ thông tin nhật ký theo khối (tiết kiệm nhiều dung lượng).

gasLimit

Giá trị độ khó của khối này. Đây là thước đo độ khó của việc khai thác khối hiện tại (chi tiết và tính toán của khái niệm này không được đề cập ở đây).

gasUsed

Tổng số khối mở đầu. Điều này cho biết chiều cao của chuỗi khối (tức là có bao nhiêu khối trên chuỗi khối). Số lượng khối genesis là 0.

timestamp

Mọi giao dịch đều tiêu tốn gas. Giới hạn gas cho biết tổng lượng gas có thể được sử dụng bởi tất cả các giao dịch được ghi trong khối này. Đây là một phương tiện để giới hạn số lượng giao dịch trong một khối.

extraData

Tổng lượng gas thực tế được tiêu thụ bởi mỗi giao dịch trong khối.

mixHash

Dấu thời gian Unix khi khối được tạo. Hãy nhớ rằng do tính chất phi tập trung của mạng Ethereum, chúng tôi không thể tin tưởng vào giá trị này, đặc biệt là khi viết các hợp đồng thông minh liên quan đến logic kinh doanh liên quan đến thời gian.

nonce

Một mảng byte có độ dài thay đổi có thể nhập bất cứ thứ gì. Khi những người khai thác tạo khối, họ có thể thêm bất cứ thứ gì vào khu vực này.

Rất tiếc... Miệng tôi chua chát khi nói về nó... Tôi khuyên bạn nên bình tĩnh và hấp thụ nó từ từ! Nhưng tôi muốn nhấn mạnh lại rằng đọc bài viết này không nên nhằm mục đích ghi nhớ mọi danh từ và chức năng của nó (bạn có thể tìm thấy những danh từ này trên Google). Mục đích ban đầu của bài viết của tôi là giới thiệu tất cả các khía cạnh của các đối tượng Ethereum theo cách đơn giản (ít nhất là đơn giản hơn Sách vàng), để giúp những người mới hiểu những thuật ngữ chuyên môn đó đại diện cho điều gì. Chỉ cần coi bài viết này là "Học các đối tượng Ethereum theo cách ngu ngốc"! 🙂

Tóm lại là

tiêu đề phụ


  • Tóm lại là

  • Hãy tóm tắt ngắn gọn những gì chúng ta đã học được! Nói chung, Ethereum có bốn cây tiền tố:

  • Cây trạng thái thế giới bao gồm ánh xạ từ địa chỉ đến trạng thái tài khoản. Giá trị băm của nút gốc của cây trạng thái thế giới được lưu bởi khối (trong trường stateRoot), cho biết trạng thái hiện tại khi khối được tạo. Chỉ có một cây trạng thái thế giới trong toàn bộ mạng.

  • Cây lưu trữ tài khoản lưu trữ thông tin dữ liệu liên quan đến một hợp đồng thông minh nhất định. Hàm băm của nút gốc của cây lưu trữ tài khoản (trong trường storageRoot) được lưu theo trạng thái tài khoản. Mỗi tài khoản có một cây lưu trữ tài khoản.


Cây giao dịch chứa tất cả thông tin giao dịch trong một khối. Băm của nút gốc của cây giao dịch được lưu bởi tiêu đề khối (trong trường giao dịchRoot). Mỗi khối có một cây giao dịch.


  • Cây biên nhận giao dịch chứa thông tin biên nhận cho tất cả các giao dịch trong một khối. Ngoài ra, tiêu đề khối (trong khu vực recesRoot) chứa giá trị băm của nút gốc của cây nhận giao dịch; mỗi khối có một cây nhận giao dịch tương ứng.

  • Các đối tượng chúng ta đang thảo luận hôm nay là:

  • Trạng thái của thế giới: ổ cứng của máy tính phân tán Ethereum. Nó là ánh xạ từ địa chỉ đến trạng thái tài khoản.

  • Trạng thái tài khoản: Lưu trữ thông tin trạng thái của từng tài khoản Ethereum. Trạng thái tài khoản cũng chứa storageRoot của cây trạng thái tài khoản, chứa dữ liệu lưu trữ của tài khoản.


Khối: Chứa một liên kết đến khối trước đó (parentHash) và giữ các giao dịch khi được thực thi dẫn đến một trạng thái mới trong hệ thống. Khối này cũng lưu trạng tháiRoot, giao dịchRoot, biên nhậnRoot, hàm băm nút gốc của cây trạng thái thế giới, cây giao dịch và cây biên nhận giao dịch tương ứng.

Tôi muốn sử dụng một hình ảnh để đại diện cho các thông tin khái niệm khác nhau được đề cập trong bài báo.

Mô tả hình ảnh

ETH
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Nhóm trò chuyện
https://t.me/Odaily_CryptoPunk
Tài khoản chính thức
https://twitter.com/OdailyChina
Nhóm trò chuyện
https://t.me/Odaily_CryptoPunk