Phân tích dữ liệu Ethereum cơ bản

- 18 mins

Khái niệm và kiến thức cơ bản về Ethereum

Là một blockchain: Giống như Bitcoin, Ethereum kế thừa đầy đủ các tính chất cơ bản của một blockchain như là:

Thuật toán đồng thuận: Để thêm block mới vào blockchain, Ethereum cũng sử dụng một thuật toán đồng thuận. Tuy nhiên khác với Bitcoin, thuật toán đồng thuận của Ethereum không yêu cầu các bên phải cạnh tranh tìm lời giải cho mỗi block (Proof of Work) như Bitcoin, thay vào đó mỗi bên muốn tham gia vào quá trình xác thực giao dịch (được gọi là Validator) đều phải cược (staking) 32 ETH cho mỗi Validator, thuật toán sẽ lựa chọn ngẫu nhiên 1 Validator để làm Block Proposer, người sẽ xác thực các giao dịch và thêm block mới vào blockchain. Cơ chế này của Ethereum được gọi là Proof-of-Stake.

Phần thưởng: Cũng giống như thợ đào trong Bitcoin, các Validator của Ethereum sẽ nhận được phần thưởng khi thêm block mới vào blockchain. Tuy nhiên phần thưởng sẽ không phải là cố định cho mỗi block mã sẽ phụ thuộc vào số lượng Validator tham gia. Càng nhiều Validator tham gia mạng lưới thì tổng số phần thưởng sẽ tăng lên tuy nhiên lợi nhuận trên mỗi ETH staking lại giảm đi, điều này khuyến khích có nhiều Validator tham gia để tăng cường bảo mật cho mạng lưới nhưng cũng hạn chế tính trạng một bên nắm giữ nhiều Validator dẫn đến làm giảm sự phi tập trung của mạng lưới. Hiện tại mức lợi nhuận tính trên mỗi ETH staking là khoảng 4.5%/năm.

Phí gas: Bên cạnh phần thưởng, Validator còn nhận được phí gas cho mỗi giao dịch. Để thực hiện xác thực 1 giao dịch, Validator sẽ cần tiêu tốn một lượng tài nguyên tính toán và bộ nhớ nhất định, Ethereum sử dụng Gas để đo lường lượng tài nguyên này, giao dịch càng phức tạp thì sẽ càng tốn Gas. Tuy nhiên Validator chỉ nhận được 1 phần phí Gas, phần còn lại sẽ bị đốt (burn) điều này sẽ giúp cân bằng lại với lượng ETH được tạo mới, từ đó giữ cho nguồn cung ETH ổn định và kiểm soát lạm phát.

Nếu như Bitcoin chỉ cho phép thực hiện các giao dịch đơn giản, khả năng lập trình rất hạn chế, thì ở Ethereum với sự xuất hiện của EVM đã cho phép các nhà phát triển có thể viết các chương trình chạy trên nó, từ đó mở ra nhiều ứng dụng đa dạng cho công nghệ này.

Máy ảo Ethereum (EVM): Gọi là máy ảo là bởi vì bản chất của nó là một phần mềm, tuy nhiên phần mềm này đặc biệt ở chỗ nó cho phép các chương trình chạy trên nó. Cũng giống như ở Bitcoin, phần mềm máy ảo EVM được chạy trên máy tính của tất cả các bên tham gia mạng lưới (gọi là các Validator). Nhiệm vụ của Validator cũng giống như thợ đào (Miner) của Bitcoin là xác thực giao dịch để nhận phần thưởng

Hợp đồng thông minh (Smart contract): Là chương trình được cài đặt trên máy ảo Ethererum, Smart contract thường được viết bằng ngôn ngữ Solidity sau đó được biên dịch thành ngôn ngữ máy (byte code) của EVM, từ đó EVM mới có thể thực thi được. Ví dụ:

pragma solidity ^0.8.0;

contract HelloWorld {

    string private message = "Hello, World!";

    // Event bắn ra khi message thay đổi
    event MessageUpdated(string oldMessage, string newMessage, address updatedBy);

    // Hàm cập nhật message
    function setMessage(string calldata newMessage) external {
        string memory old = message;
        message = newMessage;

        emit MessageUpdated(old, newMessage, msg.sender);
    }

    // Hàm lấy message
    function getMessage() external view returns (string memory) {
        return message;
    }
}
[
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "oldMessage",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "newMessage",
        "type": "string"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "updatedBy",
        "type": "address"
      }
    ],
    "name": "MessageUpdated",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "getMessage",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "newMessage",
        "type": "string"
      }
    ],
    "name": "setMessage",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]

Trong ABI sẽ định nghĩa các function, event của contract, từ đó giúp cho người dùng và các ứng dụng có thể dễ dàng tương tác và hiểu được dữ liệu của contract.

Decentralized Application (DApp): Không chỉ là smart contract, DApp là một ứng dụng hoàn chỉnh bao gồm cả giao diện tương tác người dùng (web, mobile app), xử lý logic trong smart contract, có thể có cả server backend. DApp ẩn đi sự phức tạp của công nghệ, giúp người dùng dễ dàng làm việc với Smart Contract thông qua các tương tác trên giao diện

Ethereum Standard: Là các mô tả thiết kế tiêu chuẩn được sử dụng phổ biến trên Ethereum. Khi xây dựng Smart Contract tuân thủ các tiêu chuẩn này sẽ giúp nhiều DApp có thể làm việc với các Contract này. Một số tiêu chuẩn được sử dụng phổ biến nhất như ERC20 - Tiêu chuẩn cho các Token trên Ethereum, ERC721ERC1155 - Tiêu chuẩn cho NFT…

Upgradeable Contract: Sau khi 1 contract được deploy lên blockchain, nó sẽ tồn tại vĩnh viễn và không ai có thể thay đổi logic của contract, điều này đem lại sự tin cậy tuyệt đối vào logic đã lập trình của contract. Tuy nhiên nếu trong trường hợp có lỗ hổng bảo mật hoặc contract cần nâng cấp tính năng mới, các lập trình viên buộc phải triển khai một hợp đồng mới, sau đó migrate dữ liệu từ hợp đồng cũ sang hợp đồng mới, thay đổi logic của các hợp đồng khác gọi đến nó. Vấn đề này có thể được giải quyết bằng cách sử dụng kiến trúc Upgradeable gồm có 2 contract, 1 contract quản lý dữ liệu được gọi là proxy và 1 contract implement logic. Khi một yêu cầu được gửi đến proxy contract, nó sẽ sử dụng DELEGATECALL để gọi logic của implementation contract và thực thi trên dữ liệu của proxy contract. Nếu cần thay đổi logic chỉ cần viết một implementation contract mới và trỏ contract proxy vào contract mới.

Lưu ý: Khi làm việc với 1 contract bất kỳ, bạn cần kiểm tra xem contract đó có phải là Upgradeable không, nếu có thì điều đó có nghĩa là các logic trong hợp đồng có thể bị thay đổi.

Phân tích dữ liệu Ethereum cùng Chainslake

Bạn có thể xem lại bài viết này nếu cần: Học phân tích dữ liệu, làm Insight blockchain cùng Chainslake

Phân tích thô

Phân tích transactions

select * from ethereum.transactions where block_date = date '2025-12-05' order by block_number desc limit 5

Kết quả:

block_date        , block_number, block_time                  , hash                                                              , updated_time               , block_hash                                                        , method_id , from                                      , to                                        , gas_limit  , gas_price   , gas_used , index, nonce    , success, type, value                  , data
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", 0x540e23b2631558b860c8cdf4ad7560870ae0a82c548e4845431b218531b8e943, "December 6, 2025, 1:41 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56,           , 0x8a605b28f3ed0a60671b2798e1c2ac098255bab1, 0x30c8d8686eb19619c858d0f62f062285c3ace233, "21,200"   , "25,606,970", "21,000" ,   105, 3        , true   , 0x2 , "1,000,000,000"        , 0x
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", 0x3b4357b1a1326612517e6e678a9da104d0c243d87595a8b0c7644d0dd7bf4663, "December 6, 2025, 1:41 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56,           , 0xeb943c230218e0da7b2ca18b81f7eb7fbbbe9665, 0xc07cc26e8e4c5543fd6a681152ca935a576b696f, "21,000"   , "24,298,180", "21,000" ,   125, "127,646", true   , 0x2 , "9,000,432,691,413,001", 0x
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", 0x7d898f9e4a3a0e75af2bb6ebccfdb3fcb0bca242415ca66850df8aa8ae0bdb71, "December 6, 2025, 1:41 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x00000000, 0xa1de68d07945b1ff1222a73418fa295cf02ed102, 0x6745024462abf2c049f54b381c4ad4a8c8d999c4, "1,000,000", "55,447,795", "185,386",    42, "9,902"  , true   , 0x2 , "269,223,515"          , 0x000000000000000000000000000003803b800b8017000000000000ec0ac8188fbf2df70020006004a6be7f7c6c454b364cda446ea39be9e5e4369de8010300000c812c00200020481629b0259e6e5c315b8eea09fd1a4d0a26291f980103000108012c002000200c4b618087dae7765823bc47ffbf38c8ee8489f5ca0103000128812c
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", 0xc440588f6498bfe79a9767f95cd3caab01490256474258434c2842009932c2c8, "December 6, 2025, 1:41 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x0965d04b, 0x818e97cefabb0f86736d20cda82a713e35bf8eb1, 0xf81377c3f03996fde219c90ed87a54c23dc480b3, "5,000,000", "31,856,051", "73,722" ,    64, "7,520"  , false  , 0x2 , 0                      , 0x0965d04b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000704f497df754d5536efcf1b5d43bdbfa7d81b4c08ed2109b9fcbdc9da94f9638cd658e0eaed000000000000000000000000b347abf310504e239c4a96d7fab6d7
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", 0x1d972db5323a5b7cd4e8c9bd8bfe38d8919b1b4823d73a6a775abd77946802db, "December 6, 2025, 1:41 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x38ed1739, 0xa6c9fb980028fbdf792b454c4b2ac6982d2bc989, 0x7a250d5630b4cf539739df2c5dacb4c659f2488d, "200,000"  , "25,827,766", "163,379",    73, 155      , true   , 0x0 , 0                      , 0x38ed1739000000000000000000000000000000000000000000000000000009184e72a000000000000000000000000000000000000000000000000000000001b8757d49e300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a6c9fb980028fbdf792b454c4b2ac6982d2bc9

Câu truy vấn trên sẽ lấy 5 transactions trong block đầu tiên trong ngày 05/12/2025. Mình sẽ giải thích một số column quan trọng

Phân tích traces: Trong cùng 1 giao dịch có thể có nhiều contract được gọi đến, không phải gọi trực tiếp từ địa chỉ ví của người dùng mà là gián tiếp thông qua các contract khác, trường hợp này giao dịch chính sẽ được lưu trong bảng transactions, còn các giao dịch nội bộ giữa các contract được lưu trong bảng traces.

select * from ethereum.traces where block_date = date '2025-12-01' order by block_number desc limit 5

Kết quả

block_date        , block_time                  , block_number, updated_time               , block_hash                                                        , tx_hash                                                           , method_id , gas        , gas_used , from                                      , to                                        , input                                                                                                                                     , output                                                            , value       , type        , sub_traces, trace_address, success
"December 1, 2025", "December 1, 2025, 11:59 PM", "23,922,066", "December 2, 2025, 2:24 AM", 0x2b153d4a963ee4456cb064402fb2464c1ec854fcdf4db3c9c25c8e1b67dee17f, 0xadff1508e0a87f1693829f8357a4e42092575d2293e6488bd0ed83f245432f72, 0xa9059cbb, "168,420"  , "35,328" , 0x3c3a81e81dc49a522a592e7622a7e711c06bf354, 0xcd368c1d80120b0dd92447c87eb570154f8e685c, 0xa9059cbb000000000000000000000000ebf55f9845c1a6c924ad5159d7df94c17ad8407b000000000000000000000000000000000000000000000000b83825141d8eac00, 0x0000000000000000000000000000000000000000000000000000000000000001, 0           , delegatecall,          0, [0]          , true
"December 1, 2025", "December 1, 2025, 11:59 PM", "23,922,066", "December 2, 2025, 2:24 AM", 0x2b153d4a963ee4456cb064402fb2464c1ec854fcdf4db3c9c25c8e1b67dee17f, 0xb2594968b474f999d424bb727f9eae80b9dcdfadcb680dcd6dddaf497284b052, 0x000000c3, "1,411,916", "903,648", 0x5b43453fce04b92e190f391a83136bfbecedefd1, 0xfbd4cdb413e45a52e2c8312f670e9ce67e794c37, 0x000000c30000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000041a, 0x                                                                , "23,922,066", call        ,         10, []           , true
"December 1, 2025", "December 1, 2025, 11:59 PM", "23,922,066", "December 2, 2025, 2:24 AM", 0x2b153d4a963ee4456cb064402fb2464c1ec854fcdf4db3c9c25c8e1b67dee17f, 0xadff1508e0a87f1693829f8357a4e42092575d2293e6488bd0ed83f245432f72, 0xa9059cbb, "178,356"  , "42,635" , 0x853f4850540d58e1f2f90d4908698df8de62efb6, 0x3c3a81e81dc49a522a592e7622a7e711c06bf354, 0xa9059cbb000000000000000000000000ebf55f9845c1a6c924ad5159d7df94c17ad8407b000000000000000000000000000000000000000000000000b83825141d8eac00, 0x0000000000000000000000000000000000000000000000000000000000000001, 0           , call        ,          1, []           , true
"December 1, 2025", "December 1, 2025, 11:59 PM", "23,922,066", "December 2, 2025, 2:24 AM", 0x2b153d4a963ee4456cb064402fb2464c1ec854fcdf4db3c9c25c8e1b67dee17f, 0xb2594968b474f999d424bb727f9eae80b9dcdfadcb680dcd6dddaf497284b052, 0xa9059cbb, "1,326,698", "12,862" , 0xcd423f3ab39a11ff1d9208b7d37df56e902c932b, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0xa9059cbb000000000000000000000000fbd4cdb413e45a52e2c8312f670e9ce67e794c3700000000000000000000000000000000000000000000000004ac94549f84cb9b, 0x0000000000000000000000000000000000000000000000000000000000000001, 0           , call        ,          0, "[0, 0]"     , true
"December 1, 2025", "December 1, 2025, 11:59 PM", "23,922,066", "December 2, 2025, 2:24 AM", 0x2b153d4a963ee4456cb064402fb2464c1ec854fcdf4db3c9c25c8e1b67dee17f, 0xb2594968b474f999d424bb727f9eae80b9dcdfadcb680dcd6dddaf497284b052, 0x128acb08, "1,385,451", "77,143" , 0xfbd4cdb413e45a52e2c8312f670e9ce67e794c37, 0xcd423f3ab39a11ff1d9208b7d37df56e902c932b, 0x128acb08000000000000000000000000fbd4cdb413e45a52e2c8312f670e9ce67e794c370000000000000000000000000000000000000000000000000000000000000001, 0x000000000000000000000000000000000000000000000048e20f748db295fad4, 0           , call        ,          4, [0]          , true

Phân tích log:

select * from ethereum.logs where block_date = date '2025-12-05' order by block_number desc limit 5

Kết quả:

block_date        , block_number, block_time                  , updated_time                , block_hash                                                        , tx_hash                                                           , index, contract_address                          , topic1                                                            , topic2                                                            , topic3                                                            , topic4, tx_index, data
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", "December 6, 2025, 12:56 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x6909ad1b76ec414238bc9f4b41a3938c04c5ad526e99197c1a90c6cf3487e46f,     4, 0xca7c2771d248dcbe09eabe0ce57a62e18da178c0, 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822, 0x000000000000000000000000fbd4cdb413e45a52e2c8312f670e9ce67e794c37, 0x000000000000000000000000fbd4cdb413e45a52e2c8312f670e9ce67e794c37,       ,        0, 0x00000000000000000000000000000000000000000000000065aaf3e7309ea8630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e3d46e7055de8b
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", "December 6, 2025, 12:56 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x6909ad1b76ec414238bc9f4b41a3938c04c5ad526e99197c1a90c6cf3487e46f,     3, 0xca7c2771d248dcbe09eabe0ce57a62e18da178c0, 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1,                                                                   ,                                                                   ,       ,        0, 0x0000000000000000000000000000000000000000000000612c4b36c4a175570800000000000000000000000000000000000000000000000694033167e21cc8ad
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", "December 6, 2025, 12:56 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x6909ad1b76ec414238bc9f4b41a3938c04c5ad526e99197c1a90c6cf3487e46f,     0, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000fbd4cdb413e45a52e2c8312f670e9ce67e794c37, 0x000000000000000000000000ca7c2771d248dcbe09eabe0ce57a62e18da178c0,       ,        0, 0x00000000000000000000000000000000000000000000000065aaf3e7309ea863
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", "December 6, 2025, 12:56 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x6909ad1b76ec414238bc9f4b41a3938c04c5ad526e99197c1a90c6cf3487e46f,     2, 0xcf0c122c6b73ff809c693db761e7baebe62b6a2e, 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000ca7c2771d248dcbe09eabe0ce57a62e18da178c0, 0x000000000000000000000000fbd4cdb413e45a52e2c8312f670e9ce67e794c37,       ,        0, 0x00000000000000000000000000000000000000000000000006de89cf6332cbb4
"December 5, 2025", "23,950,139", "December 5, 2025, 11:59 PM", "December 6, 2025, 12:56 AM", 0x4bdff6564db68e319c51e77a6af74c556a94b7b644105c282353bba52187ba56, 0x6909ad1b76ec414238bc9f4b41a3938c04c5ad526e99197c1a90c6cf3487e46f,     1, 0xcf0c122c6b73ff809c693db761e7baebe62b6a2e, 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000ca7c2771d248dcbe09eabe0ce57a62e18da178c0, 0x000000000000000000000000bc530bfa3fca1a731149248afc7f750c18360de1,       ,        0, 0x00000000000000000000000000000000000000000000000000054a9f0d2312d7

Câu truy vấn trên sẽ lấy 5 event log trong block đầu tiên trong ngày 05/12/2025. Một số column quan trọng như sau:

Lưu ý: Dữ liệu trong các giao dịch (bao gồm cả transactions và traces) và dữ liệu event log đều đã được mã hóa, để có thể giải mã và hiểu được chúng cần có ABI của contract tương ứng. Mình sẽ giới thiệu với các bạn các kỹ thuật để giải mã dữ liệu này trong các bài viết tới nhé.

Phân tích cơ bản

Từ dữ liệu transaction, chúng ta có nghĩ đến một số phân tích cơ bản để theo dõi hoạt động của mạng lưới như theo dõi biến động về số lượng giao dịch, số lượng ví hoạt động, giá gas theo thời gian… Những phân tích cơ bản này bạn đều có thể tìm thấy trong trang phân tích chuyên về Ethereum của Chainslake:

Bạn cũng có thể xem thêm mã nguồn của các bảng phân tích cơ bản này trên trang tài liệu kỹ thuật của Chainslake: