Cách đọc Block Explorers và hiểu Giao dịch, Traces và Logs trên Ethereum (EVM)

Nâng cao9/13/2024, 10:17:49 PM
Tìm hiểu cách đọc các trình duyệt như Etherscan và naviGate dữ liệu qua ba cấu trúc dữ liệu quan trọng này và cách tìm bảng bạn cần truy vấn.

Giao dịch bao gồm những gì?

Nếu bạn từng thực hiện giao dịch trên Ethereum (hoặc bất kỳ blockchain nào có khả năng hợp đồng thông minh), thì bạn có thể đã tìm kiếm nó trên trình duyệt khối như etherscan.io và thấy một đống thông tin này:

Tab Tổng quan giao dịch

Và nếu bạn đã cố gắng xem các nhật ký hoặc dấu vết (giao dịch nội bộ), bạn có thể đã thấy những trang này gây nhầm lẫn:

Tab Nhật ký (bạn may mắn nếu chúng được giải mã đẹp như thế này)

Tab Traces (đúng vậy, nó trông giống như một đống vô nghĩa)

Học cách đọc chi tiết giao dịch trên trình duyệt khối sẽ là nền tảng cho tất cả việc phân tích dữ liệu và kiến thức về Ethereum của bạn, vì vậy hãy bao quát tất cả các phần và cách làm việc với chúng trong SQL.

Tôi chỉ đi qua cách hiểu những khái niệm này ở mức cao; nếu bạn muốn học cách giải mã chúng bằng tay, thì bạn sẽ cần phải làm quen với cáchdữ liệu được mã hóa (điều này cũng áp dụng cho giao dịch/đoạn mã/nhật ký) và cách sử dụng Các chức năng bytearray/hex của Duneđể chuyển đổi giữa các loại khác nhau.

Đến cuối hướng dẫn này, bạn sẽ có khả năng hiểu và điều hướng bảng dữ liệu cho bất kỳ hợp đồng nào bằng cách sử dụng truy vấn tìm bảng giao dịch này:

Liên kết truy vấn(Thêm bất kỳ mã giao dịch nào, chuỗi và số khối nào)

Sau khi bạn đã học các khái niệm trong hướng dẫn này, bạn cũng nên học cách sử dụng của tôi Bảng điều khiển khởi động nhanh EVMđể bắt đầu phân tích bất kỳ hợp đồng nào.

Cách Phân Tích Bất Kỳ Giao Thức Hoặc Sản Phẩm Ethereum Nào Trong Năm Phút

Andrew Hong

·

30 tháng 12 năm 2022

Đọc toàn bộ câu chuyện

Giao dịch

Các giao dịch chỉ là phần nổi của tảng dữ liệu, tất cả các dấu vết và nhật ký được gọi sau khi dữ liệu đầu vào ban đầu kích hoạt chức năng cấp cao nhất. Hãy đầu tiên gắn nhãn cho tất cả các trường bạn sẽ thấy trong trang giao dịch của trình duyệt khối:

Đây là các trường giống như khi bạn truy vấn “ethereum.transactions” trên Dune. Mục chính cần phải học để xác định ở đây là nếu “to” là một hợp đồng hay không. Thông thường, hợp đồng sẽ được đánh dấu rõ ràng. Nếu nó là một hợp đồng, nó nên có “dữ liệu đầu vào” chứa một cuộc gọi hàm.

liên kết giao dịch

Trong tất cả những khái niệm này, điều quan trọng nhất cần học kỹ là một EOA so với một địa chỉ hợp đồng. Hợp đồng được triển khai bởi EOA, và có thể được gọi trong trường “to” của một giao dịch. Nếu bạn nhấp vào một địa chỉ, các trình duyệt sẽ hiển thị ở phía trên bên trái nếu đó là một hợp đồng hoặc một tài khoản. Trên dune, bạn có thể tham gia vào bảng ethereum.creation_traces để kiểm tra xem đó có phải là một hợp đồng không. Lưu ý rằng chỉ có EOAs mới có thể là người ký “from” của giao dịch.

Học cách phân biệt dữ liệu trực tiếp từ onchain và dữ liệu được thêm vào bởi explorer/frontends. Mọi thứ trong blockchain đều được biểu thị dưới dạng hex (đôi khi được gọi là nhị phân hoặc byte), vì vậy gọi swap 1inch sẽ có chuỗi dữ liệu đầu vào này:

giao dịch ví dụ

4 byte đầu tiên (8 ký tự) là “function signature”, làbăm keccakcủa tên chức năng và loại đầu vào. Etherscan có một nút “giải mã” tốt cho một số hợp đồng, cho bạn dạng đọc này:

giao dịch ví dụ

Như bạn có thể thấy, có rất nhiều biến được đóng gói cùng nhau vào chuỗi hex dài đó từ trước đó. Cách mà chúng được mã hóa tuân theo đặc tả giao diện nhị phân ứng dụng (ABI) của hợp đồng thông minh.

ABI giống như tài liệu API cho các hợp đồng thông minh (như thông số kỹ thuật OpenAPI), bạn có thể đọc thêm về chi tiết kỹ thuật ở đây. Hầu hết các nhà phát triển sẽ xác minh rằng ABI của họ phù hợp với hợp đồng và tải lên ABI để mọi người tham khảo khi giải mã. Nhiều hợp đồng có thể liên quan đến MEV/giao dịch, nơi mà nhà phát triển muốn giữ mọi thứ kín đáo và riêng tư - vì vậy chúng ta không nhận được bất kỳ giải mã nào từ họ.

Trong Dune, chúng tôi đã giải mã các bảngdựa trên các ABI hợp đồng được gửiđể bảng hợp đồng (tức là ethereum.contracts), các hàm và sự kiện được chuyển đổi thành chữ ký bytes (ethereum.signatures), sau đó chúng được so khớp với các dấu vết và nhật ký để cung cấp cho bạn các bảng được giải mã như uniswap_v2_ethereum.Pair_evt_Swap lưu trữ tất cả các giao dịch trao đổi cho tất cả các hợp đồng cặp được tạo bởi nhà máy cặp Uniswap v2. Bạn có thể lọc các giao dịch trao đổi trên một cặp cụ thể bằng cách xem bảng địa chỉ hợp đồng cho sự kiện.

Trên Dune, bạn muốn truy vấn bảng này cho cuộc gọi chức năng này oneinch_ethereum.AggregationRouterV6_call_swap. Bạn sẽ thấy tên bảng này ở đầu kết quả truy vấn trong bảng tìm kiếm ở đầu hướng dẫn.

Đối với các phần sau về các dấu vết và nhật ký, chúng tôi sẽ sử dụnggiao dịch trao đổi tổng hợp 1inch tương tự. Đây là một ví dụ tốt vì một bộ định tuyến sẽ hoán đổi token qua nhiều hợp đồng DEX, vì vậy chúng ta sẽ có một sự đa dạng tốt của các dấu vết và nhật ký để điều traGate.

Nhật ký

Tiếp theo, chúng ta hãy nói về nhật ký sự kiện. Nhật ký có thể được phát ra tại bất kỳ điểm nào trong một cuộc gọi hàm. Các nhà phát triển thường sẽ phát ra một nhật ký vào cuối một hàm, sau khi tất cả các giao dịch / logic được hoàn thành mà không có lỗi. Hãy xem sự kiện hoán đổi uniswap v3 được phát ra từ giao dịch trước đó:

giao dịch ví dụ

Bạn sẽ thấy có một chủ đề0, chủ đề1, chủ đề2 và trường dữ liệu. Chủ đề0 tương tự như chữ ký hàm, ngoại trừ nó có 32 byte thay vì chỉ 4 byte (vẫn băm cách tương tự). Sự kiện có thể có các trường “được lập chỉ mục” để tăng tốc việc lọc dữ liệu, có thể xuất hiện trong chủ đề1, chủ đề2 hoặc chủ đề3. Tất cả các trường khác được mã hóa cùng nhau trong đối tượng “dữ liệu”. Một lần nữa, chúng tuân theo cùng các quy tắc mã hóa như giao dịch và theo dõi. Số “28” là chỉ mục của sự kiện trong toàn bộ khối. Đôi khi nó có thể hữu ích khi bạn muốn tham gia vào khi bạn muốn giao dịch swap hoặc chuyển trong một giao dịch.

Để tìm logic đằng sau việc phát ra sự kiện này, tôi sẽ cần phải đào sâu vào mã Solidity. Tôi sẽ nhấp vào địa chỉ được liên kết của sự kiện, đi đến tab hợp đồng, và tìm kiếm từ khóa “emit swap” vì tôi biết rằng tất cả các sự kiện đều có từ khóa “emit” ngay trước khi được gọi trong mã.

Đây là hợp đồng uniswapv3poolđược tạo ra nhà máy cho mỗi cặp.

Tôi có thể thấy rằng điều này được phát ra ở dòng 786 của hợp đồng, như là một phần của chức năng “swap”.

Có khả năng điều hướng các chức năng và sự kiện trong dòng tổ tiên của các hợp đồng sẽ là một kỹ năng chính mà bạn cần phải nắm được để hiểu chính xác dòng tổ tiên của dữ liệu mà bạn đang truy vấn. Bạn không cần phải học solidity sâu để điều hướng các tệp này, chỉ cần biết cách hiểu.giao diện hợp đồngvà khi các hàm/sự kiện được gọi (function và emit là từ khóa của bạn).

Để có ví dụ chi tiết về việc điều tra mã cho các hàm và sự kiện,Hãy xem bảng phân tích này về hợp đồng và dữ liệu Sudoswap.

Sử dụng truy vấn bảng từ trước, tôi có thể thấy rằng bảng tôi nên truy vấn cho việc đổi này là uniswap_v3_ethereum.Pair_evt_Swap và nó được phát ra sau khi hàm swap() được gọi.

Traces (ethereum.traces)

Dấu vết có thể nhanh chóng trở nên rất khó điều hướng, vì cách các cuộc gọi lồng nhau giữa các hợp đồng khác nhau nhận được. Trước tiên chúng ta hãy hiểu các loại dấu vết:

  • CREATE: đây là một dấu vết được phát ra khi một hợp đồng mới được triển khai. Bạn có thể triển khai một hợp đồng trực tiếp ở đầu của một giao dịch, điều này có nghĩa là không có địa chỉ "to" trong dữ liệu giao dịch. Bạn cũng có thể triển khai một hợp đồng trong một cuộc gọi hàm, vì vậy có sự tồn tại của nhà máy hợp đồng. Hãy kiểm tra bảng ethereum.creation_traces để xem cách nhìn đơn giản hơn về điều này.
  • DELEGateCALL: điều này sẽ được bỏ qua khi xem giao dịch. Hãy nghĩ đến việc chuyển tiếp yêu cầu từ một máy chủ sang máy chủ tiếp theo mà không thay đổi logic nào. Điều này liên quan đến proxy và lưu trữ, bạn có thể @bansaltushar014/deleGatecall-in-solidity-4138b121cbe">kiểm tra thêm chi tiết tại đây.
  • CALL: đây là một loại dấu vết phổ biến và chung nhất. Một cuộc gọi có thể chỉ là một giao dịch chuyển giá trị ETH mà không có bất kỳ hợp đồng nào được liên quan. Nó cũng có thể là bất kỳ cuộc gọi hàm nào trên bất kỳ hợp đồng nào.
  • STATICCALL: đây là một lệnh gọi hàm KHÔNG sửa đổi bất kỳ trạng thái nào và hoàn toàn được sử dụng để tính toán. Những thứ như nguồn cấp dữ liệu giá oracle, tính toán giá AMM, kiểm tra tỷ lệ thanh lý, kiểm tra số dư, v.v. tất cả đều xảy ra trong các cuộc gọi tĩnh. Thường thấy trong solidity là các loại chức năng "view" hoặc "pure".

Bạn cũng cần hiểu cột / chỉ mục trace_address. Đây là mẫu [0,1,1,1,1] mà bạn thường thấy. Hãy tưởng tượng nó giống như các dấu đầu dòng, trong đó số lượng số trong mảng cho biết độ sâu và thứ tự của các cuộc gọi hàm.

Một (null) - giao dịch đầu tiên có trace_address của []

CALLs B (0)

CALLs C (0,0)

CALLs D (1)

CALLs E (1,0)  CALLs F (1,0,0)CALLs G (1,1)

CALLs H (2)

Như bạn có thể thấy từ bức ảnh chụp các giao dịch nội bộ (dấu vết) trước đó của chúng tôi, etherscan không phải là một nơi thân thiện để xem dấu vết. Tôi thích sử dụng phalcon blocksec thay vì, nó giải mã giao dịch như sau:

Nối kết đến Explorer

Điều này có vẻ quá sức, nhưng nó thực sự là một cách siêu dễ dàng để khám phá tất cả các chức năng, sự kiện và đối số trong luồng giao dịch. Khi bạn có thể hiểu điều này, thì bạn có thể nói rằng bạn hiểu tất cả dữ liệu trong một giao dịch một cách an toàn. Lưu ý rằng tìm bảng truy vấn là một bản sao gần như chính xác của bố cục này, tôi phần lớn được truyền cảm hứng từ chúng!

Lưu ý rằng trên Dune, chúng tôi tự động giải mã cả cuộc gọi giao dịch và các dấu vết của cùng tên chức năng vào cùng một bảng. Bạn có thể đang tự hỏi liệu bạn có thể dễ dàng kết hợp sự kiện và các dấu vết/giao dịch theo thứ tự đẹp như trong phalcon. Trên Dune, bạn có thể kết hợp theo mã giao dịch để tổng hợp dữ liệu chung, nhưng bạn không thể kết hợp theo bất kỳ chỉ số nào để tái tạo thứ tự tương tác chính xác. Điều này là một hạn chế không may ở thời điểm này đòi hỏi một bộ chỉ mục tùy chỉnh.

Trở đi, sâu hơn vào khu rừng đen tối của tiền điện tử

Nếu bạn hiểu các khái niệm mà tôi đã đề cập trong hướng dẫn này, thì bạn sẵn sàng đào sâu hơn và viết các truy vấn phức tạp hơn. Điều hướng dữ liệu qua các giao dịch bằng cách sử dụng nhiều công cụ khác nhau sẽ là một trong những kỹ năng chính mà bạn cần để xuất sắc trong lĩnh vực này.

Có lẽ có 10 nhà thám hiểm khác nhau mà tôi thấy mình sử dụng mỗi tuần và số lượng công cụ gấp 10 lần số tiền đó. Tôi viết một hướng dẫn hàng năm bao gồm cách ngăn xếp công cụ dữ liệu tiếp tục phát triển và bạn nên sử dụng từng công cụ để làm gì:

Liên kết Hướng dẫn

Tuyên bố từ chối trách nhiệm:

  1. Bài viết này được tái bản từ [cryptodatabytes], Tất cả bản quyền thuộc về tác giả gốc [Andrew Hong]. Nếu có ý kiến ​​phản đối về việc tái bản này, vui lòng liên hệ với Gate Học và họ sẽ xử lý kịp thời.
  2. Miễn trách nhiệm về trách nhiệm: Các quan điểm và ý kiến được thể hiện trong bài viết này chỉ thuộc về tác giả và không đại diện cho bất kỳ lời khuyên đầu tư nào.
  3. Bản dịch của bài viết sang các ngôn ngữ khác được thực hiện bởi nhóm Gate Learn. Trừ khi có ghi chú, việc sao chép, phân phối hoặc đạo văn bản dịch là cấm.

Cách đọc Block Explorers và hiểu Giao dịch, Traces và Logs trên Ethereum (EVM)

Nâng cao9/13/2024, 10:17:49 PM
Tìm hiểu cách đọc các trình duyệt như Etherscan và naviGate dữ liệu qua ba cấu trúc dữ liệu quan trọng này và cách tìm bảng bạn cần truy vấn.

Giao dịch bao gồm những gì?

Nếu bạn từng thực hiện giao dịch trên Ethereum (hoặc bất kỳ blockchain nào có khả năng hợp đồng thông minh), thì bạn có thể đã tìm kiếm nó trên trình duyệt khối như etherscan.io và thấy một đống thông tin này:

Tab Tổng quan giao dịch

Và nếu bạn đã cố gắng xem các nhật ký hoặc dấu vết (giao dịch nội bộ), bạn có thể đã thấy những trang này gây nhầm lẫn:

Tab Nhật ký (bạn may mắn nếu chúng được giải mã đẹp như thế này)

Tab Traces (đúng vậy, nó trông giống như một đống vô nghĩa)

Học cách đọc chi tiết giao dịch trên trình duyệt khối sẽ là nền tảng cho tất cả việc phân tích dữ liệu và kiến thức về Ethereum của bạn, vì vậy hãy bao quát tất cả các phần và cách làm việc với chúng trong SQL.

Tôi chỉ đi qua cách hiểu những khái niệm này ở mức cao; nếu bạn muốn học cách giải mã chúng bằng tay, thì bạn sẽ cần phải làm quen với cáchdữ liệu được mã hóa (điều này cũng áp dụng cho giao dịch/đoạn mã/nhật ký) và cách sử dụng Các chức năng bytearray/hex của Duneđể chuyển đổi giữa các loại khác nhau.

Đến cuối hướng dẫn này, bạn sẽ có khả năng hiểu và điều hướng bảng dữ liệu cho bất kỳ hợp đồng nào bằng cách sử dụng truy vấn tìm bảng giao dịch này:

Liên kết truy vấn(Thêm bất kỳ mã giao dịch nào, chuỗi và số khối nào)

Sau khi bạn đã học các khái niệm trong hướng dẫn này, bạn cũng nên học cách sử dụng của tôi Bảng điều khiển khởi động nhanh EVMđể bắt đầu phân tích bất kỳ hợp đồng nào.

Cách Phân Tích Bất Kỳ Giao Thức Hoặc Sản Phẩm Ethereum Nào Trong Năm Phút

Andrew Hong

·

30 tháng 12 năm 2022

Đọc toàn bộ câu chuyện

Giao dịch

Các giao dịch chỉ là phần nổi của tảng dữ liệu, tất cả các dấu vết và nhật ký được gọi sau khi dữ liệu đầu vào ban đầu kích hoạt chức năng cấp cao nhất. Hãy đầu tiên gắn nhãn cho tất cả các trường bạn sẽ thấy trong trang giao dịch của trình duyệt khối:

Đây là các trường giống như khi bạn truy vấn “ethereum.transactions” trên Dune. Mục chính cần phải học để xác định ở đây là nếu “to” là một hợp đồng hay không. Thông thường, hợp đồng sẽ được đánh dấu rõ ràng. Nếu nó là một hợp đồng, nó nên có “dữ liệu đầu vào” chứa một cuộc gọi hàm.

liên kết giao dịch

Trong tất cả những khái niệm này, điều quan trọng nhất cần học kỹ là một EOA so với một địa chỉ hợp đồng. Hợp đồng được triển khai bởi EOA, và có thể được gọi trong trường “to” của một giao dịch. Nếu bạn nhấp vào một địa chỉ, các trình duyệt sẽ hiển thị ở phía trên bên trái nếu đó là một hợp đồng hoặc một tài khoản. Trên dune, bạn có thể tham gia vào bảng ethereum.creation_traces để kiểm tra xem đó có phải là một hợp đồng không. Lưu ý rằng chỉ có EOAs mới có thể là người ký “from” của giao dịch.

Học cách phân biệt dữ liệu trực tiếp từ onchain và dữ liệu được thêm vào bởi explorer/frontends. Mọi thứ trong blockchain đều được biểu thị dưới dạng hex (đôi khi được gọi là nhị phân hoặc byte), vì vậy gọi swap 1inch sẽ có chuỗi dữ liệu đầu vào này:

giao dịch ví dụ

4 byte đầu tiên (8 ký tự) là “function signature”, làbăm keccakcủa tên chức năng và loại đầu vào. Etherscan có một nút “giải mã” tốt cho một số hợp đồng, cho bạn dạng đọc này:

giao dịch ví dụ

Như bạn có thể thấy, có rất nhiều biến được đóng gói cùng nhau vào chuỗi hex dài đó từ trước đó. Cách mà chúng được mã hóa tuân theo đặc tả giao diện nhị phân ứng dụng (ABI) của hợp đồng thông minh.

ABI giống như tài liệu API cho các hợp đồng thông minh (như thông số kỹ thuật OpenAPI), bạn có thể đọc thêm về chi tiết kỹ thuật ở đây. Hầu hết các nhà phát triển sẽ xác minh rằng ABI của họ phù hợp với hợp đồng và tải lên ABI để mọi người tham khảo khi giải mã. Nhiều hợp đồng có thể liên quan đến MEV/giao dịch, nơi mà nhà phát triển muốn giữ mọi thứ kín đáo và riêng tư - vì vậy chúng ta không nhận được bất kỳ giải mã nào từ họ.

Trong Dune, chúng tôi đã giải mã các bảngdựa trên các ABI hợp đồng được gửiđể bảng hợp đồng (tức là ethereum.contracts), các hàm và sự kiện được chuyển đổi thành chữ ký bytes (ethereum.signatures), sau đó chúng được so khớp với các dấu vết và nhật ký để cung cấp cho bạn các bảng được giải mã như uniswap_v2_ethereum.Pair_evt_Swap lưu trữ tất cả các giao dịch trao đổi cho tất cả các hợp đồng cặp được tạo bởi nhà máy cặp Uniswap v2. Bạn có thể lọc các giao dịch trao đổi trên một cặp cụ thể bằng cách xem bảng địa chỉ hợp đồng cho sự kiện.

Trên Dune, bạn muốn truy vấn bảng này cho cuộc gọi chức năng này oneinch_ethereum.AggregationRouterV6_call_swap. Bạn sẽ thấy tên bảng này ở đầu kết quả truy vấn trong bảng tìm kiếm ở đầu hướng dẫn.

Đối với các phần sau về các dấu vết và nhật ký, chúng tôi sẽ sử dụnggiao dịch trao đổi tổng hợp 1inch tương tự. Đây là một ví dụ tốt vì một bộ định tuyến sẽ hoán đổi token qua nhiều hợp đồng DEX, vì vậy chúng ta sẽ có một sự đa dạng tốt của các dấu vết và nhật ký để điều traGate.

Nhật ký

Tiếp theo, chúng ta hãy nói về nhật ký sự kiện. Nhật ký có thể được phát ra tại bất kỳ điểm nào trong một cuộc gọi hàm. Các nhà phát triển thường sẽ phát ra một nhật ký vào cuối một hàm, sau khi tất cả các giao dịch / logic được hoàn thành mà không có lỗi. Hãy xem sự kiện hoán đổi uniswap v3 được phát ra từ giao dịch trước đó:

giao dịch ví dụ

Bạn sẽ thấy có một chủ đề0, chủ đề1, chủ đề2 và trường dữ liệu. Chủ đề0 tương tự như chữ ký hàm, ngoại trừ nó có 32 byte thay vì chỉ 4 byte (vẫn băm cách tương tự). Sự kiện có thể có các trường “được lập chỉ mục” để tăng tốc việc lọc dữ liệu, có thể xuất hiện trong chủ đề1, chủ đề2 hoặc chủ đề3. Tất cả các trường khác được mã hóa cùng nhau trong đối tượng “dữ liệu”. Một lần nữa, chúng tuân theo cùng các quy tắc mã hóa như giao dịch và theo dõi. Số “28” là chỉ mục của sự kiện trong toàn bộ khối. Đôi khi nó có thể hữu ích khi bạn muốn tham gia vào khi bạn muốn giao dịch swap hoặc chuyển trong một giao dịch.

Để tìm logic đằng sau việc phát ra sự kiện này, tôi sẽ cần phải đào sâu vào mã Solidity. Tôi sẽ nhấp vào địa chỉ được liên kết của sự kiện, đi đến tab hợp đồng, và tìm kiếm từ khóa “emit swap” vì tôi biết rằng tất cả các sự kiện đều có từ khóa “emit” ngay trước khi được gọi trong mã.

Đây là hợp đồng uniswapv3poolđược tạo ra nhà máy cho mỗi cặp.

Tôi có thể thấy rằng điều này được phát ra ở dòng 786 của hợp đồng, như là một phần của chức năng “swap”.

Có khả năng điều hướng các chức năng và sự kiện trong dòng tổ tiên của các hợp đồng sẽ là một kỹ năng chính mà bạn cần phải nắm được để hiểu chính xác dòng tổ tiên của dữ liệu mà bạn đang truy vấn. Bạn không cần phải học solidity sâu để điều hướng các tệp này, chỉ cần biết cách hiểu.giao diện hợp đồngvà khi các hàm/sự kiện được gọi (function và emit là từ khóa của bạn).

Để có ví dụ chi tiết về việc điều tra mã cho các hàm và sự kiện,Hãy xem bảng phân tích này về hợp đồng và dữ liệu Sudoswap.

Sử dụng truy vấn bảng từ trước, tôi có thể thấy rằng bảng tôi nên truy vấn cho việc đổi này là uniswap_v3_ethereum.Pair_evt_Swap và nó được phát ra sau khi hàm swap() được gọi.

Traces (ethereum.traces)

Dấu vết có thể nhanh chóng trở nên rất khó điều hướng, vì cách các cuộc gọi lồng nhau giữa các hợp đồng khác nhau nhận được. Trước tiên chúng ta hãy hiểu các loại dấu vết:

  • CREATE: đây là một dấu vết được phát ra khi một hợp đồng mới được triển khai. Bạn có thể triển khai một hợp đồng trực tiếp ở đầu của một giao dịch, điều này có nghĩa là không có địa chỉ "to" trong dữ liệu giao dịch. Bạn cũng có thể triển khai một hợp đồng trong một cuộc gọi hàm, vì vậy có sự tồn tại của nhà máy hợp đồng. Hãy kiểm tra bảng ethereum.creation_traces để xem cách nhìn đơn giản hơn về điều này.
  • DELEGateCALL: điều này sẽ được bỏ qua khi xem giao dịch. Hãy nghĩ đến việc chuyển tiếp yêu cầu từ một máy chủ sang máy chủ tiếp theo mà không thay đổi logic nào. Điều này liên quan đến proxy và lưu trữ, bạn có thể @bansaltushar014/deleGatecall-in-solidity-4138b121cbe">kiểm tra thêm chi tiết tại đây.
  • CALL: đây là một loại dấu vết phổ biến và chung nhất. Một cuộc gọi có thể chỉ là một giao dịch chuyển giá trị ETH mà không có bất kỳ hợp đồng nào được liên quan. Nó cũng có thể là bất kỳ cuộc gọi hàm nào trên bất kỳ hợp đồng nào.
  • STATICCALL: đây là một lệnh gọi hàm KHÔNG sửa đổi bất kỳ trạng thái nào và hoàn toàn được sử dụng để tính toán. Những thứ như nguồn cấp dữ liệu giá oracle, tính toán giá AMM, kiểm tra tỷ lệ thanh lý, kiểm tra số dư, v.v. tất cả đều xảy ra trong các cuộc gọi tĩnh. Thường thấy trong solidity là các loại chức năng "view" hoặc "pure".

Bạn cũng cần hiểu cột / chỉ mục trace_address. Đây là mẫu [0,1,1,1,1] mà bạn thường thấy. Hãy tưởng tượng nó giống như các dấu đầu dòng, trong đó số lượng số trong mảng cho biết độ sâu và thứ tự của các cuộc gọi hàm.

Một (null) - giao dịch đầu tiên có trace_address của []

CALLs B (0)

CALLs C (0,0)

CALLs D (1)

CALLs E (1,0)  CALLs F (1,0,0)CALLs G (1,1)

CALLs H (2)

Như bạn có thể thấy từ bức ảnh chụp các giao dịch nội bộ (dấu vết) trước đó của chúng tôi, etherscan không phải là một nơi thân thiện để xem dấu vết. Tôi thích sử dụng phalcon blocksec thay vì, nó giải mã giao dịch như sau:

Nối kết đến Explorer

Điều này có vẻ quá sức, nhưng nó thực sự là một cách siêu dễ dàng để khám phá tất cả các chức năng, sự kiện và đối số trong luồng giao dịch. Khi bạn có thể hiểu điều này, thì bạn có thể nói rằng bạn hiểu tất cả dữ liệu trong một giao dịch một cách an toàn. Lưu ý rằng tìm bảng truy vấn là một bản sao gần như chính xác của bố cục này, tôi phần lớn được truyền cảm hứng từ chúng!

Lưu ý rằng trên Dune, chúng tôi tự động giải mã cả cuộc gọi giao dịch và các dấu vết của cùng tên chức năng vào cùng một bảng. Bạn có thể đang tự hỏi liệu bạn có thể dễ dàng kết hợp sự kiện và các dấu vết/giao dịch theo thứ tự đẹp như trong phalcon. Trên Dune, bạn có thể kết hợp theo mã giao dịch để tổng hợp dữ liệu chung, nhưng bạn không thể kết hợp theo bất kỳ chỉ số nào để tái tạo thứ tự tương tác chính xác. Điều này là một hạn chế không may ở thời điểm này đòi hỏi một bộ chỉ mục tùy chỉnh.

Trở đi, sâu hơn vào khu rừng đen tối của tiền điện tử

Nếu bạn hiểu các khái niệm mà tôi đã đề cập trong hướng dẫn này, thì bạn sẵn sàng đào sâu hơn và viết các truy vấn phức tạp hơn. Điều hướng dữ liệu qua các giao dịch bằng cách sử dụng nhiều công cụ khác nhau sẽ là một trong những kỹ năng chính mà bạn cần để xuất sắc trong lĩnh vực này.

Có lẽ có 10 nhà thám hiểm khác nhau mà tôi thấy mình sử dụng mỗi tuần và số lượng công cụ gấp 10 lần số tiền đó. Tôi viết một hướng dẫn hàng năm bao gồm cách ngăn xếp công cụ dữ liệu tiếp tục phát triển và bạn nên sử dụng từng công cụ để làm gì:

Liên kết Hướng dẫn

Tuyên bố từ chối trách nhiệm:

  1. Bài viết này được tái bản từ [cryptodatabytes], Tất cả bản quyền thuộc về tác giả gốc [Andrew Hong]. Nếu có ý kiến ​​phản đối về việc tái bản này, vui lòng liên hệ với Gate Học và họ sẽ xử lý kịp thời.
  2. Miễn trách nhiệm về trách nhiệm: Các quan điểm và ý kiến được thể hiện trong bài viết này chỉ thuộc về tác giả và không đại diện cho bất kỳ lời khuyên đầu tư nào.
  3. Bản dịch của bài viết sang các ngôn ngữ khác được thực hiện bởi nhóm Gate Learn. Trừ khi có ghi chú, việc sao chép, phân phối hoặc đạo văn bản dịch là cấm.
Bắt đầu giao dịch
Đăng ký và giao dịch để nhận phần thưởng USDTEST trị giá
$100
$5500