;

Tìm hiểu về Ethereum và EVM Traces

Kiến Thức

Posted by Huynh Duc - 10/08/2023

CryptoViet Info

    MỤC LỤC

Là những nhà phát triển, điều quan trọng là chúng ta hiểu được những gì thực sự diễn ra bên trong một giao dịch Ethereum. Cố gắng debug, cải thiện hoặc bảo mật code, các nhà phát triển thường chỉ có khả năng nhìn thấy một phần hạn chế quá trình thực thi của hợp đồng thông minh. Đó là lúc các EVM Traces xuất hiện, giúp họ có cái nhìn rõ ràng hơn về quá trình này.

Trong bài viết này, chúng ta sẽ xem xét loại dữ liệu mà Trace cung cấp, cách thực hiện Trace và các lựa chọn cho việc Trace thủ công, chạy các node lưu trữ và sử dụng giao diện lập trình ứng dụng Trace của Infura.

Traces giúp cho quá trình làm việc của một nhà phát triển EVM dễ dàng hơn rất nhiều. Hãy bắt đầu với cách chúng hoạt động nhé!

Tìm hiểu về Ethereum Transaction

Các giao dịch Ethereum liên quan đến rất nhiều thông tin. Có thông tin cơ bản như ai là khởi tạo chúng, sử dụng bao nhiêu gas và khi nào chúng được gọi. Ngoài ra còn có một tập hợp các thông tin phức tạp hơn như những gì được chuyển giao và những gì các tương tác hợp đồng thông minh đã diễn ra. Đối với những nhà phát triển web3, việc cố gắng hiểu rõ tất cả những điều này có thể trở nên khá khó khăn!

Đúng, bạn có thể check transaction để hiểu thông tin cơ bản - mã trạng thái (status code), v.v. - nhưng vẫn còn thiếu thông tin cụ thể, chi tiết khiến bạn không thể hoàn toàn hiểu được điều gì đã xảy ra và những bước tiếp theo bạn nên thực hiện để khắc phục các vấn đề khi chúng xuất hiện.

Ethereum Transaction
Ethereum Transaction

EVM Traces là phần quan trọng cung cấp cho bạn những thông tin còn thiếu - các nguyên nhân gây ra sự cố, các internal calls, các tương tác với các hợp đồng khác, chuyển giao asset, v.v.

EVM Traces có thể cung cấp cho bạn các phân tích từng bước của một giao dịch, bao gồm cả những chi tiết không có trên chain. Traces cho phép bạn nhìn thấy rõ ràng những hành động mà Ethereum Virtual Machine thực hiện trong một giao dịch cụ thể. 

Điều này giúp việc debug, phân tích và hiểu rõ các ứng dụng phi tập trung/hợp đồng thông minh trở nên dễ dàng hơn và bạn có thể hiểu rõ chính xác những gì đang diễn ra bên trong nó. Bạn có thể sử dụng Traces để xem tất cả những chi tiết cốt lỗi mà một nhà phát triển cần thấy.

Với thông tin Trace, bạn có thể:

  • Xem chi tiết về những gì đang diễn ra trong một giao dịch.
  • Phân tích và tối ưu hóa hiệu suất.
  • Nghiên cứu các vi phạm bảo mật và attack vector.
  • Kiểm tra và giám sát bằng cách theo dõi luồng token/assets.
  • Lấy dữ liệu lịch sử cho nghiên cứu hoặc công cụ phân tích.

Nói một cách ngắn gọn, bạn cần dùng Traces khi bạn cần hiểu rõ từng chi tiết về những gì đang diễn ra trên Ethereum - như trong các tình huống phân tích, debug Solidity và cải thiện bảo mật.

Vậy làm thế nào để dùng Traces? Một số cách thông thường để xem EVM Traces bao gồm:

  • Bạn có thể xem Trace API hoạt động và truy cập một số kết quả tại Etherscan.io.
  • Bạn có thể thử chạy lại giao dịch bằng cách sử dụng một full node Ethereum. (Cảnh báo: điều này phức tạp, chậm chạp và yêu cầu một full node.)
  • Bạn có thể chạy một nút lưu trữ đầy đủ với dấu vết được kích hoạt. (Warning: việc này tốn kém, chậm và yêu cầu một node lưu trữ đầy đủ.)
  • Bạn có thể sử dụng một API của bên thứ ba từ code của bạn.

Rất tiếc, như bạn có thể thấy, việc thực hiện Trace có thể tốn thời gian và tài nguyên. Giao diện lập trình ứng dụng Trace của Infura là một lựa chọn mới (vừa được phát hành phiên bản beta vào ngày 6/6/2023).

Infura Trace API

Infura Trace API là một tập hợp mới các API cung cấp cách nhanh chóng và có thể lập trình để lấy thông tin.

Trích từ trang web của họ:

"Trace API là một công cụ cần thiết cho các nhà phát triển Ethereum, đem lại cái nhìn sâu sắc hơn vào việc thực thi các hợp đồng thông minh và giao dịch trên Ethereum.

Các nhà phát triển có thể thu thập thông tin từ các dữ liệu giao dịch không đăng nhập trên chain, cho phép họ debug, phân tích, và thực hiện các nhiệm vụ khác, smart contract function - thứ cần một sự hiểu biết chi tiết về việc thực thi giao dịch trên Ethereum."

Các tùy chọn của Trace API

Hãy xem xét những tùy chọn.

Có năm loại Call mà bạn có thể thực hiện đối với Trace API:

  • Trace Transaction: Giúp bạn hiểu được những gì đã xảy ra trong một giao dịch (lượng gas sử dụng, kết quả, tại sao giao dịch thất bại, v.v). Đây là công cụ tốt để tối ưu hóa hiệu suất. Bạn cung cấp mã hash của giao dịch và nhận lại tất cả các chi tiết.
  • Trace Block: Theo dõi tất cả các giao dịch trong một block cụ thể. Giúp bạn phân tích hành vi tổng thể của Blockchain.
  • Trace Call:  Cung cấp thông tin về một Call cụ thể dựa trên một giao dịch. Bạn cung cấp địa chỉ nguồn (from) và đích (to) cùng với số block. Trace Call khá giống với Trace Transaction , ngoại trừ việc Trace Call cũng trả về state diff khác nhau.
  • Trace Call Many: Tương tự như trên, nhưng theo dõi nhiều Call cùng lúc.
  • Trace Filter: Bạn có thể cung cấp bộ lọc cho các tham số cụ thể để xác định các Traces được trả về, chẳng hạn như số khối, địa chỉ đích, địa chỉ nguồn, v.v. Có thể theo dõi từ khối này đến khối khác, hoặc từ địa chỉ này đến địa chỉ khác. Cho phép bạn theo dõi ví tiền, hoạt động hợp đồng, v.v.

Để biết thêm chi tiết, bạn có thể xem docs của Infura.

Ví dụ về Trace API

Hãy xem một ví dụ nhanh để bạn có thể thấy nó hoạt động như thế nào. Chúng ta sẽ sử dụng Call trace_transaction để theo dõi giao dịch này.

Request:

curl --location 'https://mainnet.infura.io/v3/<INFURA API KEY> \
    --header 'Content-Type: text/plain' \
    --data '{ "id": 1, "method": "trace_transaction", "jsonrpc": "2.0", "params": ["0xeb852958eeb1d026b10c6ad3c995520364b83929e1e0908801194f5b680d54ea"] }'

Response:

{
 "jsonrpc": "2.0",
 "id": 1,
 "result": [
   {
     "action": {
       "callType": "call",
       "from": "0xeecc9674d3600e3feb1b01b9ff7c72ac2e1c560f",
       "gas": "0x1a0c8",
       "input": "0xe2bbb158000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037b1d9c38a24b27c",
       "to": "0xfb063b1ae6471e6795d6ad1fc7f47c1cab1f3422",
       "value": "0x0"
     },
     "blockHash": "0x89b3ee89b30133dfd67888bf0baeea58b8a52b1beb983efcc7aa771a3fd489af",
     "blockNumber": 17370663,
     "error": "out of gas",
     "result": null,
     "subtraces": 4,
     "traceAddress": [],
     "transactionHash": "0xeb852958eeb1d026b10c6ad3c995520364b83929e1e0908801194f5b680d54ea",
     "transactionPosition": 110,
     "type": "call"
   },
. . .
}

Đây là một ví dụ đơn giản — nhưng bạn có thể thấy ở phía trên rằng chúng ta đã truyền vào một mã transaction hash và nhận lại một Trace cho giao dịch đó, bao gồm lý do giao dịch thất bại: out of gas. Những ví dụ phức tạp hơn có thể trả về các Child Traces, kết quả đã được lọc và nhiều hơn nữa.

Hãy xem tài liệu và các hướng dẫn khác tại đây.

Lời kết

EVM Trace là một phần quan trọng của quá trình làm việc của một nhà phát triển Ethereum/EVM. Chúng cung cấp cho bạn những chi tiết bạn cần để gỡ lỗi, cải thiện và bảo mật code. 

Vậy bạn đã tìm hiểu qua bài viết Tìm hiểu về Ethereum và EVM Traces. CryptoViet Info hy vọng bài viết này đã giải thích vì sao bạn cần Traces, hiểu được cách Traces hoạt động và một số cách bạn có thể khai thác Traces để có thông tin bạn cần.

DISCLAIMER: Thông tin trên trang web này chỉ được cung cấp cho mục đích thông tin và không đại diện cho lời khuyên đầu tư. Để đưa ra quyết định đầu tư, chúng tôi khuyên bạn nên tự nghiên cứu.

Có thể bạn sẽ quan tâm

Recent PostPopular Post
Categories
Follow Us
CryptoViet Info
CryptoViet Info
CryptoViet Info
CryptoViet Info
CryptoViet Info
CryptoViet Info
CryptoViet Info
CryptoViet Info
CryptoViet Info
©2017 CryptoViet Info. All Rights ReservedMedia Kit