Ethereum

**Ethereum** **(ETH)** là một nền tảng điện toán có tính chất phân tán, công cộng, mã nguồn mở dựa trên công nghệ Blockchain. Nó có tính năng hợp đồng thông minh (kịch bản), tạo thuận lợi cho các thỏa thuận hợp đồng trực tuyến. Nền tảng này bao gồm một máy ảo hoàn toàn Turing - Ethereum Virtual Machine (EVM), có thể thực thi các kịch bản bằng cách sử dụng một mạng lưới máy tính Ethereum. Ethereum cũng cung cấp một loại tiền mã hóa gọi là "Ether", có thể được chuyển giữa các tài khoản và được sử dụng để trả công cho các thợ đào giúp thực hiện việc tính toán. "Gas" là một cơ chế giá giao dịch nội bộ, được sử dụng để giảm thiểu giao dịch rác (spam) và phân bổ các nguồn lực trên mạng lưới.

Ethereum đã được đề xuất vào cuối năm 2013 bởi Vitalik Buterin, một nhà nghiên cứu tiền mã hóa và nhà lập trình. Việc phát triển Ethereum ban đầu được tài trợ qua hình thức crowd funding (tài trợ đám đông) suốt tháng 7 và tháng 8 năm 2014. Hệ thống này đã được khởi động vào ngày 30 tháng 7 năm 2015, với 11,9 triệu đồng ether đã được đào sẵn (premined) để bán lại cho những người đã tài trợ. Số tiền này chiếm khoảng 13% tổng số ether được lưu hành.

Năm 2016, Ethereum bị chia rẽ thành hai blockchain, do sự sụp đổ của dự án DAO (Decentralized autonomous organization). Hai chuỗi có số lượng người sử dụng khác nhau, và nhánh thiểu số được đổi tên thành Ethereum Classic. Nhánh đa số giữ nguyên tên Ethereum.

## Lịch sử

### Nguồn gốc
Ethereum ban đầu được mô tả trong một văn bản của Vitalik Buterin, một lập trình viên liên quan đến Bitcoin vào cuối năm 2013 với mục tiêu xây dựng các ứng dụng phân quyền. Buterin đã lập luận rằng Bitcoin cần một ngôn ngữ kịch bản để phát triển ứng dụng. Không đạt được thỏa thuận với nhóm phát triển Bitcoin, ông đề xuất phát triển một nền tảng mới với một ngôn ngữ kịch bản tổng quát hơn.

Bốn thành viên ban đầu của nhóm Ethereum là Vitalik Buterin, Mihai Alisie, Anthony Di Iorio và Charles Hoskinson. Phát triển chính thức của dự án phần mềm Ethereum bắt đầu vào đầu năm 2014 thông qua một công ty Thụy Sĩ tên là Ethereum Switzerland GmbH (EthSuisse). Sau đó, một tổ chức phi lợi nhuận tại Thụy Sĩ với tên gọi là Ethereum Foundation cũng được thành lập. Việc phát triển Ethereum được tài trợ bởi đám đông trực tuyến trong suốt tháng 7 và tháng 8 năm 2014, với những người tham gia mua Ethereum bằng các loại tiền kỹ thuật số khác như bitcoin. Mặc dù đã có những lời khen ngợi đầu tiên về những đổi mới kỹ thuật của Ethereum, nhưng cũng có các ngờ vực về tính an toàn và khả năng mở rộng của nó.

### Sự sụp đổ của dự án DAO
Ethereum đã thu được một số lượng lớn các phương tiện thông tin đại chúng trong năm 2016 khi một tổ chức tự trị phân cấp được gọi là The DAO - một bộ hợp đồng thông minh được phát triển trên nền tảng - thu được một khoản kỷ lục 150 triệu USD tài trợ thông qua hình thức đóng góp đám đông (crowd-funding). DAO đã bị hack một cách ngoạn mục vào tháng 6, khi một cá nhân vô danh đã lấy trộm được khoản tiền trị giá 50 triệu đô la Mỹ. Sự kiện này đã gây ra một cuộc tranh luận đáng kể trong cộng đồng mật mã về việc liệu Ethereum nên thực hiện việc chia nhánh (hard-fork) gây tranh cãi để lấy lại số tiền bị đánh cắp. Số tiền lên tới 3.36 triệu ETC chính là số Ethereum tại thời điểm đó đã bị hacker lấy cắp, tuy nhiên sau sự kiện harrd-fork thì đồng Ethereum bị mất giá trầm trọng và phải mất 1 năm sau nữa mới phục hồi hoàn toàn và phát triển rất mạnh về sau này.

Về số tiền đã bị hack đang được lưu trữ tại địa chỉ ví 0x5E8F0e63E7614C47079A41AD4c37Be7dEF06Df5A và được cộng đồng theo dõi liên tục để tránh trường hợp việc hacker tẩu tán số ETC này ra tiền mặt qua các sàn giao dịch

Do việc tranh chấp, Ethereum bị chia thành hai mạng. Phía thiểu số từ chối thực hiện việc chia nhánh tiếp tục sử dụng phiên bản Ethereum Blockchain cũ và gọi nó là Ethereum Classic, còn phía đa số đã ủng hộ việc chia nhánh chính thức của Ethereum.

Sự kiện DAO tạo ra sự phân ly giữa Ethereum và Ethereum Classic, mà theo một số nhà quan sát, đã tạo ra sự cạnh tranh kinh tế và tâm lý cay đắng giữa hai bên. Đây là sự tiếp nối của cuộc tranh cãi khó khăn, nơi mà phía chống lại việc chia nhánh (Ethereum Classic) bảo vệ về sự không thay đổi, mã là luật, chống lại phía Ethereum mà bảo vệ cho ý định của giao thức, cách thức phân quyền trong việc ra quyết định và giải quyết xung đột.

Các nhà phê bình khác nhau từ phía Ethereum Classic đã tố cáo việc chia nhánh như là một vụ lừa đảo và là một hành vi trộm cắp tiềm năng về sở hữu trí tuệ. Ethereum Classic đã giữ lại một số người dùng của Ethereum và cũng đã thu hút những người khác từ cộng đồng mật mã rộng hơn - những người đã từ chối việc chia nhánh gây tranh cãi trên cơ sở ý thức hệ. Tuy nhiên, dự án này không được Ethereum Foundation tài trợ chính thức và cũng không được hỗ trợ bởi hiệp hội các nhà phát triển, đối tác kinh doanh, thợ mỏ và người sử dụng hệ sinh thái Ethereum.

### Các điểm khác biệt cơ bản so với Bitcoin
Về nguồn gốc, Bitcoin được tạo ra như một loại tiền tệ và để lưu trữ giá trị. Còn Ethereum được tạo ra như một nền tảng giao dịch hợp đồng thông minh phân tán. Lưu ý rằng Bitcoin cũng có thể xử lý được hợp đồng thông minh, và Ethereum cũng có thể được sử dụng như một loại tiền tệ. Ngoài ra, giữa Bitcoin và Ethereum còn có những điểm khác biệt cơ bản sau:

* Bitcoin có thể sử dụng để thanh toán hàng hóa và dịch vụ tại bất cứ nơi nào đồng tiền này được chấp nhận, còn đồng tiền Ether của mạng lưới Ethereum không được thiết kế như một giải pháp thanh toán thay thế, mà là để thúc đẩy các lập trình viên và các tổ chức sáng tạo và vận hành các ứng dụng phi tập trung trong mạng Ethereum.
* Thời gian tạo khối Ethereum mới là 14 tới 15 giây thay vì 10 phút trong Bitcoin.
* Việc sử dụng giao thức GHOST giúp giao dịch Ether nhanh hơn Bitcoin.
* Số lượng Bitcoin bị giới hạn ở mức 21 triệu với phần thưởng giảm còn một nửa sau mỗi 4 năm. Còn Ethereum thì không giới hạn số lượng ether. Lượng lạm phát ether hàng năm không được xác định rõ. Các ngân hàng trung ương thường thích Ethereum hơn vì cách phát hành tiền này.
* Phí giao dịch của Ethereum được trả bằng Gas (quy đổi được ra ether), được tính dựa trên khối lượng tính toán, băng thông, lưu trữ. Còn phí giao dịch Bitcoin bị cạnh tranh trực tiếp với nhau để vào được khối của Bitcoin mà bị giới hạn.
* Ethereum cho phép chạy mã Turing-complete, cho phép mọi tính toán được thực thi nếu có đủ khả năng tính toán và thời gian. Tuy nhiên điều này cũng mang lại nhiều rủi ro bị tấn công hơn cho Ethereum so với cấu trúc đơn giản hơn của Bitcoin.
* Có 13% số ether được bán cho lượng người đã tài trợ dự án ban đầu. Còn những người đầu tiên đào Bitcoin nắm giữ số lượng lớn lượng Bitcoin đang phát hành.
* Ethereum chống lại việc sử dụng ASIC như Bitcoin. Người đào Ethereum phải sử dụng card đồ họa vì hàm băm của Ethereum yêu cầu sử dụng bộ nhớ.
* Ethereum chống lại việc đào mỏ tập trung bằng cách sử dụng giao thức Ghost.
* Bitcoin đã có một lịch sử chưa bao giờ can thiệp vào dữ liệu trên sổ cái. Còn Ethereum đã phải chia nhánh sau khi DAO bị tấn công.

## Kiến trúc

### Ether

Tiền mã hóa được giao dịch trong mạng lưới Ethereum được gọi là ether. Nó được liệt kê dưới mã ETH và giao dịch trên các sàn giao dịch tiền mã hóa. Nó cũng được sử dụng để trả phí giao dịch và dịch vụ tính toán trên mạng Ethereum.

Giá trị của ether có thể biến động lớn, ví dụ như sự sụt giảm của ether từ 21,50 đô la Mỹ xuống còn 8 đô la Mỹ sau khi The DAO bị tấn công vào ngày 17 tháng 6 năm 2016.

### Máy ảo Ethereum
Máy ảo Ethereum (EVM)  là một môi trường chạy các hợp đồng thông minh Ethereum. Định nghĩa chính thức của EVM được quy định trong Ethereum Yellow Paper của Gavin Wood. Nó được hoàn toàn cô lập từ mạng, hệ thống tập tin và các quá trình khác của hệ thống máy chủ. Mỗi nút Ethereum trong mạng chạy một EVM và thực hiện các hướng dẫn giống nhau. Ethereum Virtual Machines đã được lập trình trong C++, Go, Haskell, Java, Python, Ruby, Rust và WebAssembly (hiện đang được phát triển).

### Hợp đồng thông minh
Bình thường, khi ký một hợp đồng để trao đổi giá trị kinh tế, chúng ta cần một bên thứ 3 có trách nhiệm hòa giải (ví dụ: Nhà môi giới, Tòa án, Sở đất đai,...) Hợp đồng thông minh là một cơ chế trao đổi xác định, được kiểm soát bởi các phương tiện kỹ thuật số mà có thể giúp cho việc thực hiện giao dịch trực tiếp giữa các thực thể mà không cần tin cậy nhau. Các hợp đồng này được định nghĩa bằng cách lập trình và được chạy chính xác như mong muốn mà không bị kiểm duyệt, lừa đảo hay sự can thiệp từ bên thứ ba trung gian.

Chúng có thể được sử dụng để tạo điều kiện, xác minh và thực thi việc đàm phán hoặc thực hiện các hướng dẫn thủ tục kinh tế và có khả năng tránh được sự kiểm duyệt, thông đồng và rủi ro từ phía đối tác. Trong Ethereum, các hợp đồng thông minh được coi là các kịch bản tự trị hoặc các ứng dụng phân cấp được lưu trữ trong chuỗi khối Ethereum để thực hiện sau đó bởi EVM. Các hướng dẫn được nhúng trong các hợp đồng Ethereum được thanh toán bằng ether và có thể được thực hiện bằng nhiều ngôn ngữ Turing-complete khác nhau.

### Tài khoản
Mỗi tài khoản Ethereum được đại diện bởi 20 ký tự. Các thông số sau được lưu trong dữ liệu trạng thái (state) của Ethereum cho mỗi tài khoản:
* Số nonce, để đảm bảo mỗi giao dịch chỉ được xử lý một lần.
* Số dư tài khoản
* Mã nguồn hợp đồng (nếu có)
* Phần lưu trữ của tài khoản (mặc định là trống)
Các giao dịch giữa các tài khoản được trả tiền bằng Ether. Có hai loại tài khoản: Tài khoản ngoại vi được quản lý bởi khóa riêng tư, và tài khoản hợp đồng được quản lý bởi mã hợp đồng. Tài khoản ngoại vi không chứa mã hợp đồng, có thể gửi thông điệp đi bằng cách tạo và ký kết một giao dịch, giống như tài khoản Bitcoin. Về phía tài khoản hợp đồng, mỗi khi nó nhận được 1 thông điệp, mã hợp đồng sẽ chạy và cho phép đọc và ghi vào phần lưu trữ của nó, kèm theo việc gửi thông điệp đi và tạo ra hợp đồng khác lần lượt.

Lưu ý rằng "hợp đồng" trong Ethereum không phải là một cái gì đó phải "hoàn thành" hoặc "tuân thủ". Thay vào đó, nó giống như các "thực thể tự trị" sống bên trong môi trường Ethereum, luôn thực hiện một đoạn mã cụ thể khi được tác động bởi một thông điệp hoặc giao dịch, và có quyền kiểm soát trực số Ether và dữ liệu trong phần lưu trữ của nó.

### Thông điệp và Giao dịch
Thuật ngữ "giao dịch" được sử dụng để chỉ tới gói dữ liệu mà bao gồm thông điệp. Một giao dịch bao gồm:
* Tài khoản nhận thông điệp
* Chữ ký tài khoản gửi
* Số Ether chuyển đi
* Trường dữ liệu tùy chọn
* Giá trị `STARTGAS` , đại diện cho số lượng tối đa các bước tính toán thực hiện giao dịch được phép thực hiện
* Giá trị `GASPRICE`, đại diện cho khoản phí mà người gửi trả cho mỗi bước tính toán
Ba trường dữ liệu đầu tiên là các trường tiêu chuẩn trong các loại tiền mã hóa. Trường dữ liệu không có chức năng theo mặc định, nhưng EVM có mã opcode mà hợp đồng có thể truy cập vào dữ liệu. Ví dụ: Nếu một hợp đồng đang hoạt động như là một dịch vụ đăng ký tên miền trên blockchain, thì nó có thể nhận dữ liệu được truyền cho nó như là có chứa hai trường: Trường đầu tiên là tên miền đăng ký, trường thứ hai là địa chỉ IP để đăng ký với tên miền đó. Hợp đồng sẽ đọc các giá trị này từ dữ liệu thông điệp và đưa chúng vào lưu trữ một cách hợp lý.

Các trường `STARTGAS` và `GASPRICE` rất quan trọng để chống tấn công từ chối dịch vụ. Để ngăn chặn các vòng vô hạn hoặc các lãng phí điện toán khác trong mã, mỗi giao dịch được yêu cầu để đặt một giới hạn số bước tính toán của việc thực thi mã nó có thể sử dụng. Đơn vị cơ bản của tính toán là "gas". Thông thường, một bước tính toán tốn 1 gas, nhưng một số mã tốn nhiều tiền hơn vì chúng cần nhiều tính toán hơn, hoặc tăng lượng dữ liệu phải lưu giữ vào dữ liệu state. Ngoài ra, có một khoản phí là 5 gas cho mỗi byte trong dữ liệu giao dịch. Mục đích của hệ thống phí là yêu cầu một kẻ tấn công phải trả một cách tương xứng cho mọi nguồn lực mà họ tiêu thụ, bao gồm tính toán, băng thông và lưu trữ.

### Thông điệp
Một hợp đồng có khả năng gửi "thông điệp" đến các hợp đồng khác. Thông điệp là các đối tượng ảo không bao giờ được serialize và chỉ tồn tại trong môi trường thực thi Ethereum. Một thông điệp chứa:
* Tài khoản gửi tin nhắn (ẩn)
* Tài khoản nhận tin nhắn
* Số lượng Ether để truyền tải cùng với thông điệp
* Trường dữ liệu tùy chọn
* Giá trị `STARTGAS`
Về cơ bản, một thông điệp giống như một giao dịch, ngoại trừ nó được tạo ra bởi hợp đồng chứ không phải là tài khoản ngoại vi. Một thông điệp được tạo ra khi hợp đồng hiện đang thực thi mà gọi đến mã lệnh CALL, tạo ra và thực hiện một thông điệp. Giống như giao dịch, một thông điệp được gửi tới tài khoản nhận. Do đó, các hợp đồng có thể có mối quan hệ với các hợp đồng khác giống như cách mà các bên tham gia bên ngoài có thể.

### Blockchain và Khai thác
Blockchain của Ethereum có nhiều điểm tương tự như của Bitcoin, tuy nhiên có một số khác biệt sau: Khối Ethereum chứa một bản sao của cả danh sách giao dịch và trạng thái gần nhất. Bên cạnh đó, số khối và độ khó cũng được lưu trữ trong khối. Thuật toán xác nhận khối cơ bản trong Ethereum như sau:
* Kiểm tra tham chiếu khối trước đó tồn tại và hợp lệ.
* Kiểm tra dấu thời gian của khối lớn hơn dấu thời gian của khối được tham chiếu trước và nhỏ hơn 15 phút trong tương lai.
* Kiểm tra số khối, độ khó, gốc giao dịch, uncle gốc và giới hạn gas là hợp lệ.
* Kiểm tra xem chứng minh công việc trên khối là hợp lệ.
* Đặt `S[0]` là trạng thái cuối ở khối trước đó.
* Đặt `TX` là danh sách giao dịch của khối, với n giao dịch. Đối với tất cả `i` từ `0...n-1`, đặt `S[i+1] = APPLY(S[i],TX[i])`. Nếu bất kỳ ứng dụng nào trả về lỗi hoặc nếu tổng lượng khí tiêu thụ trong khối cho đến thời điểm này vượt quá `GASLIMIT`, trả lại lỗi. (`APPLY` là một hàm thay đổi trạng thái S khi có giao dịch).
* Đặt `S_FINAL` là `S[n]`, nhưng thêm phần thưởng cho thợ mỏ.
* Kiểm tra xem gốc cây Merkle của trạng thái `S_FINAL` bằng với gốc trạng thái cuối cùng được cung cấp trong tiêu đề khối. Nếu có, khối này là hợp lệ; Nếu không, nó không hợp lệ.
Cách tiếp cận có thể có vẻ không hiệu quả ở cái nhìn đầu tiên, bởi vì nó cần phải lưu trữ toàn bộ trạng thái với mỗi khối, nhưng hiệu quả thực tế là ngang với Bitcoin. Lý do là trạng thái được lưu trữ trong cấu trúc cây, và sau mỗi khối chỉ cần một phần nhỏ của cây phải thay đổi. Do đó, nói chung, giữa hai khối liền kề, phần lớn cây phải giống nhau, và do đó dữ liệu có thể được lưu trữ một lần và được tham chiếu hai lần bằng cách sử dụng các con trỏ (ví dụ: hash các cây con). Một loại cây đặc biệt được gọi là "cây Patricia" được sử dụng để thực hiện việc này, bao gồm sửa đổi khái niệm cây Merkle cho phép chèn và xóa các nút một cách hiệu quả. Ngoài ra, vì tất cả các thông tin trạng thái là một phần của khối cuối cùng nên không cần lưu trữ toàn bộ lịch sử blockchain đối với các nút không có khả năng lưu trữ nhiều.

## Tham khảo