1. Home
  2. smart contract hoạt động như thế nào
  3. Giải thích event và log dùng để làm gì trong smart contract cho người mới học blockchain

Giải thích event và log dùng để làm gì trong smart contract cho người mới học blockchain

Event và log trong smart contract chủ yếu được dùng để ghi nhận những hành động quan trọng đã xảy ra trong quá trình contract thực thi, từ đó giúp ứng dụng, ví, blockchain explorer và các hệ thống phân tích theo dõi được trạng thái hoạt động của contract mà không phải đọc lại toàn bộ logic bên trong. Nói ngắn gọn, nếu state là nơi contract “ghi nhớ” dữ liệu để tự vận hành, thì event và log là nơi contract “phát tín hiệu” ra bên ngoài để hệ sinh thái biết chuyện gì vừa diễn ra.

Để hiểu rõ hơn, người mới cần tách bạch ba lớp thường bị nhầm lẫn: event, logtransaction receipt. Trong Solidity, lập trình viên khai báo event; khi contract chạy, EVM tạo ra log tương ứng; sau đó log này được đưa vào receipt của giao dịch. Chính mối liên hệ này khiến rất nhiều người khi mới học blockchain thấy event giống như dữ liệu on-chain thông thường, trong khi bản chất sử dụng của nó lại khác đáng kể so với biến state.

Bên cạnh việc trả lời câu hỏi event và log dùng để làm gì, bài viết này còn giúp bạn hiểu smart contract hoạt động như thế nào, vì sao nhiều dApp cần nghe event để cập nhật giao diện, và đâu là khác biệt giữa dữ liệu contract dùng cho logic nội bộ với dữ liệu phát ra để phục vụ truy vấn off-chain. Đây cũng là nền tảng để sau này bạn đọc tốt hơn các ví dụ như chuyển token, mint NFT hoặc ví dụ quy trình swap trên DEX bằng smart contract.

Ngoài ra, nhiều người mới còn nhầm event/log với bằng chứng pháp lý hoặc nghĩ rằng contract chỉ cần có hàm là đủ, không cần emit event. Thực tế, khi nhìn theo cách smart contract chạy trên blockchain ra sao, bạn sẽ thấy event/log là lớp dữ liệu cực kỳ quan trọng để frontend, indexer và analytics kết nối được với blockchain. Sau đây, chúng ta đi từ khái niệm nền tảng đến ứng dụng thực tế, rồi mới mở rộng sang phần đọc, lọc và phân tích log trong hệ sinh thái blockchain.

Event và log trong smart contract là gì?

Event trong smart contract là cơ chế khai báo sự kiện ở tầng Solidity, còn log là dữ liệu mà EVM ghi ra trong transaction receipt khi sự kiện đó được phát trong lúc thực thi.

Để hiểu đúng phần này, cần bám chặt vào móc xích khái niệm: Solidity là nơi bạn viết event, EVM là nơi sinh log, còn receipt là nơi log được lưu lại sau giao dịch. Cụ thể hơn, event không phải là một “biến đặc biệt” để contract đọc lại như state, mà là một định nghĩa giúp contract thông báo cho thế giới bên ngoài rằng một hành động cụ thể vừa xảy ra.

Ethereum và smart contract trên blockchain

Event trong Solidity có phải là cách contract thông báo một hành động đã xảy ra không?

Có, event trong Solidity chính là cách contract thông báo một hành động đã xảy ra, vì nó giúp ghi lại dấu vết của thao tác vừa hoàn tất, hỗ trợ theo dõi ngoài chuỗi và làm cho giao diện dApp phản hồi chính xác hơn.

Cụ thể, khi bạn thấy một contract ERC-20 phát event Transfer, điều đó có nghĩa là contract muốn hệ sinh thái biết rằng một lần chuyển token đã diễn ra. Ví dụ tương tự xuất hiện ở Approval, Mint, Burn, Swap hoặc PoolCreated. Frontend có thể nghe các event này để cập nhật số dư, hiển thị lịch sử hoạt động hoặc gửi thông báo theo thời gian thực mà không cần quét toàn bộ từng dòng mã đã chạy trong EVM. Chính ở điểm này, người học mới bắt đầu hiểu rõ hơn smart contract hoạt động như thế nào: contract không chỉ xử lý logic, mà còn phát ra các tín hiệu dữ liệu để hệ sinh thái ngoài blockchain tiêu thụ.

Nói cách khác, event đóng vai trò như “ngôn ngữ phát sóng” của contract. Nó không tự thay đổi state, nhưng nó kể lại những gì contract vừa làm. Với các dApp có giao diện phức tạp, đây là lớp dữ liệu gần như bắt buộc nếu muốn hiển thị đúng hành vi on-chain cho người dùng cuối.

Log trong EVM được định nghĩa như thế nào?

Log trong EVM là bản ghi dữ liệu được tạo khi giao dịch thực thi, bao gồm địa chỉ contract phát log, một dãy topics 32-byte và phần data nhị phân đi kèm.

Để hiểu rõ hơn, bạn có thể xem log như “gói dữ liệu kỹ thuật” mà máy ảo Ethereum sinh ra từ event. Ở tầng thấp hơn, log entry gồm địa chỉ của logger, danh sách topics và phần data; còn ở tầng ứng dụng, log này xuất hiện trong receipt và có thể được giải mã theo ABI để đọc ra nội dung có ý nghĩa. Điều này giải thích vì sao cùng là “event”, nhưng khi kiểm tra trên công cụ kỹ thuật hoặc RPC, bạn thường thấy trường topics, data, address, logIndex thay vì chỉ thấy tên event đẹp như trong code Solidity.

Transaction log chỉ lưu event data chứ không tự lưu đầy đủ “kiểu” của event theo cách con người đọc được; vì vậy muốn diễn giải log chính xác, ứng dụng phải biết ABI, biết tham số nào được indexed, và biết event đó có anonymous hay không. Đây là lý do event/log rất hữu ích, nhưng vẫn cần đúng ngữ cảnh kỹ thuật để giải mã chính xác.

Một cách hình dung đơn giản là: event là lớp “từ điển cho lập trình viên”, còn log là lớp “dữ liệu nhị phân cho máy và hạ tầng đọc chuỗi”. Khi mới học, nắm đúng cặp khái niệm này sẽ giúp bạn không nhầm giữa cách viết code Solidity với cách blockchain thực sự ghi nhận dữ liệu.

Event và log dùng để làm gì trong smart contract?

Event và log trong smart contract được dùng chủ yếu cho 4 nhóm tác vụ chính: thông báo hành động đã xảy ra, hỗ trợ frontend/backend theo dõi contract, phục vụ truy vấn và phân tích off-chain, và tạo dấu vết minh bạch cho explorer hoặc công cụ kiểm toán.

Nói cách khác, đây là phần trả lời trực diện nhất cho truy vấn “event và log dùng để làm gì”. Nếu không có event/log, nhiều ứng dụng vẫn chạy được ở mức tối thiểu, nhưng sẽ khó quan sát, khó index, khó dựng lịch sử hoạt động và khó cập nhật giao diện theo thời gian thực. Chính vì vậy, trong rất nhiều chuẩn token và protocol DeFi, event được xem là một phần gần như mặc định của thiết kế contract tốt.

Dữ liệu event log được dApp và công cụ phân tích sử dụng

Event và log có giúp frontend, backend và công cụ phân tích theo dõi hoạt động contract không?

Có, event và log giúp frontend, backend và công cụ phân tích theo dõi hoạt động contract hiệu quả hơn vì chúng cung cấp dữ liệu dễ lọc, dễ index, dễ phản ứng theo từng hành động quan trọng của giao dịch.

Cụ thể, một frontend DeFi có thể lắng nghe event Swap để cập nhật trạng thái giao dịch thành công; một backend có thể bắt event Liquidation để gửi cảnh báo rủi ro; một explorer có thể hiển thị tab Logs cho từng transaction; còn một hệ thống analytics có thể gom event theo block hoặc theo địa chỉ contract để dựng dashboard. Điều đó cho thấy event/log không chỉ để “xem cho biết”, mà là nền tảng cho cả một lớp hạ tầng dữ liệu Web3.

Nếu bạn từng thắc mắc smart contract chạy trên blockchain ra sao, thì đây là một mắt xích quan trọng: contract thực thi trên EVM, tạo thay đổi state khi cần, đồng thời sinh log để lớp ứng dụng ngoài chuỗi nhận biết kết quả. Nhờ vậy, blockchain vẫn giữ được tính xác thực, còn dApp vẫn có trải nghiệm gần thời gian thực.

Event và log thường được dùng cho những nhóm tác vụ nào?

4 nhóm tác vụ chính mà event và log thường phục vụ: theo dõi hành động on-chain, cập nhật giao diện dApp, xây hệ thống analytics/auditing và kết nối blockchain với hạ tầng off-chain.

Để làm rõ nhóm công dụng này, bảng dưới đây tóm tắt từng nhóm tác vụ và vai trò của event/log trong mỗi nhóm:

Nhóm tác vụ Event/log hỗ trợ gì? Ví dụ thực tế
Theo dõi hành động on-chain Ghi nhận thao tác vừa xảy ra Transfer, Approval, Swap, Mint
Cập nhật giao diện dApp Giúp UI phản hồi sau khi giao dịch xác nhận Hiện số dư mới, trạng thái swap thành công
Analytics và auditing Tạo dữ liệu có cấu trúc để index, thống kê, kiểm tra Dashboard volume, lịch sử pool, cảnh báo
Kết nối off-chain Cho backend, bot, indexer, warehouse đọc dữ liệu The Graph, Dune, hệ thống cảnh báo nội bộ

Nhìn vào bảng, bạn sẽ thấy event/log đặc biệt mạnh ở bài toán “quan sát” và “tổ chức dữ liệu”. Ví dụ, trong ví dụ quy trình swap trên DEX bằng smart contract, người dùng ký giao dịch swap, contract xử lý kiểm tra thanh khoản và chuyển tài sản, state thay đổi, rồi contract emit event như Swap, Transfer, có thể kèm Sync. Nhờ những event này, frontend hiện kết quả đổi token, explorer hiển thị log của giao dịch, còn công cụ phân tích tính được volume hoặc slippage lịch sử. Nếu chỉ có state cuối cùng mà không có event, việc dựng lại toàn bộ ngữ cảnh hành động sẽ kém hiệu quả hơn rất nhiều.

Event, log, state và transaction khác nhau như thế nào?

Event thắng ở khả năng thông báo và truy vấn off-chain, state mạnh ở lưu dữ liệu cho logic contract, còn transaction input chủ yếu dùng để truyền yêu cầu vào contract trước khi thực thi.

Event, log, state và transaction khác nhau như thế nào?

Đây là so sánh cực kỳ quan trọng vì phần lớn nhầm lẫn của người mới đến từ việc xem tất cả đều là “dữ liệu blockchain”. Thực tế, chúng thuộc các lớp chức năng khác nhau. State là bộ nhớ vận hành của contract. Transaction input là đầu vào mà người dùng hoặc ứng dụng gửi vào. Event/log là đầu ra mô tả hành động đã xảy ra để hệ bên ngoài theo dõi. Nếu hiểu sai lớp chức năng này, bạn dễ thiết kế contract kém tối ưu hoặc đọc transaction trên explorer theo cách không chính xác.

Event và log có phải là nơi lưu dữ liệu để contract sử dụng lại về sau không?

Không, event và log không phải nơi lưu dữ liệu để contract sử dụng lại về sau, vì contract không thể truy cập lại log đã tạo như cách nó đọc biến state, và log chủ yếu được tối ưu cho việc truy xuất từ bên ngoài blockchain.

Đây là điểm mấu chốt phải nhớ. Nếu business logic của bạn cần tham chiếu dữ liệu trong những lần gọi hàm tiếp theo, bạn phải dùng state hoặc cấu trúc lưu trữ phù hợp, không được xem event như nơi “cất dữ liệu rẻ hơn”.

Chính vì vậy, khi so sánh smart contract vs hợp đồng pháp lý, cũng không nên hiểu event như “điều khoản ràng buộc pháp lý” được contract dùng để tra cứu lại. Trong ngữ cảnh kỹ thuật, event giống bản ghi công khai để người ngoài quan sát hơn là kho dữ liệu vận hành nội bộ. Hợp đồng pháp lý truyền thống dựa vào diễn giải ngôn ngữ và cơ chế thực thi pháp luật, còn smart contract dựa vào mã chạy trên blockchain; event/log ở đây chỉ là lớp ghi nhận sự kiện của quá trình thực thi đó.

Event khác state và transaction input ở những điểm nào?

Event khác state và transaction input ở 4 tiêu chí cốt lõi: mục đích, nơi dữ liệu xuất hiện, cách truy cập và nhóm người/hệ thống sử dụng.

Để việc so sánh rõ ràng hơn, bảng sau tổng hợp ba lớp dữ liệu này trong cùng một ngữ cảnh:

Thành phần Mục đích chính Nơi xuất hiện Ai dùng nhiều nhất Dùng lại trong logic contract?
State Lưu trạng thái bền vững của contract Storage / state trie Contract, RPC, dApp
Transaction input Gửi yêu cầu/hàm/tham số vào contract Giao dịch trước khi thực thi User, wallet, RPC Là đầu vào, không phải bộ nhớ
Event/Log Thông báo điều đã xảy ra và hỗ trợ truy vấn Transaction receipt / logs Frontend, explorer, indexer, analytics Không theo cách state làm được

Từ bảng này, bạn có thể đọc vấn đề theo một flow đơn giản: người dùng gửi transaction input, EVM chạy code, state có thể thay đổi, rồi event/log được sinh ra để mô tả hành động hoàn tất. Đây cũng là cách dễ nhất để hiểu smart contract hoạt động như thế nào ở mức nền tảng mà không bị sa vào chi tiết opcode quá sớm.

Khi nào nên dùng event và khi nào không nên dùng?

Bạn nên dùng event cho các hành động quan trọng cần quan sát từ bên ngoài, nhưng không nên lạm dụng event để thay cho state hoặc để ghi mọi thứ một cách dư thừa vì điều đó vừa làm thiết kế rối hơn vừa có thể phát sinh chi phí gas không cần thiết.

Khi nào nên dùng event và khi nào không nên dùng?

Đây là phần định hướng thực hành. Một contract tốt không chỉ “chạy đúng”, mà còn phải emit đúng event ở đúng điểm để toàn bộ hệ sinh thái xung quanh hiểu được hành vi của nó. Tuy nhiên, event hiệu quả không đồng nghĩa với càng nhiều càng tốt. Điều quan trọng là chọn đúng hành động nghiệp vụ trọng yếu và chọn cấu trúc event hợp lý.

Có nên emit event cho mọi hành động trong smart contract không?

Không, không nên emit event cho mọi hành động trong smart contract, vì ba lý do chính là không phải hành động nào cũng cần quan sát từ ngoài, event dư thừa làm dữ liệu khó đọc hơn và mỗi lần ghi log đều gắn với chi phí thực thi.

Cụ thể, hành động nào liên quan đến quyền sở hữu, trạng thái nghiệp vụ, dòng tiền, thanh khoản hoặc sự thay đổi quan trọng của giao thức thì rất nên có event. Ngược lại, những bước nội bộ nhỏ, ít giá trị quan sát hoặc chỉ phục vụ thao tác tạm thời có thể không cần emit. Nếu contract phát quá nhiều event vụn, indexer và dashboard vẫn đọc được, nhưng tín hiệu nghiệp vụ sẽ loãng đi và người vận hành khó xác định đâu là bản ghi thực sự quan trọng.

Trong thiết kế DeFi, người ta thường ưu tiên emit event cho các “mốc có ý nghĩa”: tạo vị thế, đóng vị thế, vay, trả nợ, swap, thêm/rút thanh khoản, thay đổi admin, hoặc cập nhật tham số cốt lõi. Đây là các sự kiện mà frontend, auditor, bot cảnh báo và nhà phân tích đều có nhu cầu đọc.

Những trường hợp nào nên nhóm vào best practice khi thiết kế event?

5 nhóm best practice chính khi thiết kế event: emit cho hành động trọng yếu, đặt tên rõ nghĩa, chọn indexed parameter hợp lý, tránh dữ liệu dư thừa và giữ tính nhất quán với logic nghiệp vụ.

Thứ nhất, chỉ emit ở những điểm mà người ngoài thực sự cần quan sát. Thứ hai, tên event phải bộc lộ rõ hành động như Transfer, SwapExecuted, LiquidationTriggered thay vì các tên mơ hồ. Thứ ba, tham số nào thường cần lọc theo địa chỉ, id hoặc cặp tài sản thì nên cân nhắc indexed. Thứ tư, không nên nhét mọi thứ vào event vì event không phải nơi thay thế cấu trúc dữ liệu chuẩn hóa. Thứ năm, event phải đồng bộ với nghiệp vụ: nếu giao diện và analytics đang dựa vào event, việc đổi format tùy tiện có thể làm gãy cả pipeline ngoài chuỗi.

Một cách thực dụng là hãy tự hỏi: “Nếu bỏ event này đi, frontend có mù thông tin không, explorer có mất ngữ cảnh không, indexer có khó tổng hợp dữ liệu không?” Nếu câu trả lời là có, event đó nhiều khả năng là cần thiết. Ngược lại, nếu event chỉ lặp lại những gì không ai dùng tới, bạn nên cân nhắc loại bỏ.

Event và log được đọc, lọc và phân tích như thế nào trong hệ sinh thái blockchain?

Event và log được đọc, lọc và phân tích chủ yếu qua RPC, explorer, indexer và nền tảng dữ liệu blockchain, trong đó topics, indexed parameters và ABI đóng vai trò trung tâm để giải mã đúng dữ liệu.

Event và log được đọc, lọc và phân tích như thế nào trong hệ sinh thái blockchain?

Đây là phần mở rộng sau ranh giới ngữ cảnh chính. Từ đây, trọng tâm không còn là “event/log dùng để làm gì” nữa, mà chuyển sang “chúng được tiêu thụ như thế nào trong thực tế”. Nếu phần trước giúp bạn hiểu khái niệm và công dụng, thì phần này giúp bạn hiểu vì sao event trở thành nguyên liệu cốt lõi cho explorer, dashboard, monitoring và các hệ thống dữ liệu Web3.

Indexed parameters có giúp lọc event nhanh hơn không?

Có, indexed parameters giúp lọc event nhanh hơn vì chúng được đưa vào topics, từ đó cho phép công cụ và hạ tầng tìm đúng log theo khóa quan trọng như địa chỉ, id hoặc signature của event.

Trong Solidity, việc đánh dấu một tham số là indexed không chỉ để “làm đẹp” cấu trúc event, mà còn để phục vụ tìm kiếm. Chẳng hạn, với event Transfer(address indexed from, address indexed to, uint256 value), các ứng dụng có thể lọc log theo from hoặc to thuận tiện hơn nhiều. Chính cơ chế này khiến event/log trở thành dữ liệu lý tưởng cho bot theo dõi ví, công cụ anti-fraud, dashboard địa chỉ lớn hoặc hệ thống báo động on-chain.

Topics và data trong log khác nhau như thế nào?

Topics là phần dùng để nhận diện và lọc event, còn data là phần payload chứa dữ liệu còn lại của log sau khi mã hóa theo ABI.

Cụ thể hơn, topic đầu tiên thường liên quan đến chữ ký của event, còn các topic tiếp theo có thể chứa các tham số indexed. Phần data sẽ giữ các tham số không indexed theo quy tắc ABI encoding. Đây là lý do khi bạn đọc raw log trên RPC hoặc explorer, dữ liệu ban đầu rất khó hiểu nếu chưa có ABI; nhưng khi có ABI, frontend hoặc thư viện sẽ giải mã chúng thành tên event và danh sách tham số dễ đọc. Từ góc nhìn hạ tầng, việc tách topics và data giúp blockchain vừa giữ được khả năng lọc hiệu quả, vừa vẫn mang được payload phục vụ phân tích.

Vì sao event log thường được dùng trong explorer, indexer và dashboard analytics?

Event log thường được dùng trong explorer, indexer và dashboard analytics vì nó là nguồn dữ liệu có cấu trúc, có thể truy vấn và có ngữ nghĩa nghiệp vụ rõ ràng hơn so với việc chỉ nhìn transaction thô hoặc trạng thái cuối cùng.

Một explorer như Etherscan hiển thị logs để người dùng biết contract đã phát ra sự kiện gì. Một indexer như Graph Node đọc events rồi biến thành entities để truy vấn bằng GraphQL. Một nền tảng dữ liệu on-chain có thể dùng event logs, receipts và các lớp dữ liệu liên quan để dựng lịch sử volume, user actions, protocol growth hoặc mô hình hành vi địa chỉ. Điều đó cho thấy event/log là “nhiên liệu dữ liệu” thực thụ của Web3, không chỉ là lớp phụ trợ cho developer.

Event log có thể gây tốn gas hoặc bị lạm dụng trong thiết kế smart contract không?

Có, event log có thể bị lạm dụng và có thể làm tăng chi phí thực thi, đặc biệt khi contract emit quá nhiều sự kiện không cần thiết hoặc thiết kế event dài, rối và thiếu trọng tâm nghiệp vụ.

Tuy nhiên, cần nhìn cân bằng. Vấn đề không phải event “xấu”, mà là emit sai chỗ. Trong nhiều protocol, event giúp giảm độ mù dữ liệu và làm trải nghiệm dApp tốt hơn đáng kể. Nhưng nếu nhà phát triển xem event như nơi nhét mọi thông tin, hệ thống sẽ chịu thêm gánh nặng dữ liệu, indexer khó tối ưu và người đọc log cũng khó phân biệt tín hiệu chính với nhiễu. Vì vậy, thiết kế event tốt luôn là bài toán trade-off giữa khả năng quan sát, tính ổn định của pipeline dữ liệu và chi phí.

Tóm lại, event và log không phải phần “trang trí” của smart contract. Chúng là lớp ghi nhận sự kiện giúp blockchain giao tiếp với thế giới ứng dụng xung quanh. Khi hiểu đúng event là gì, log là gì, chúng khác state ra sao, và vì sao frontend/indexer cần chúng, bạn sẽ nhìn rõ hơn cách một smart contract vận hành trong thực tế thay vì chỉ nhìn nó như vài hàm Solidity đứng riêng lẻ.

3 lượt xem | 0 bình luận
Nguyễn Đức Minh là chuyên gia phân tích tài chính và blockchain với hơn 12 năm kinh nghiệm trong lĩnh vực đầu tư và công nghệ. Sinh năm 1988 tại Hà Nội, anh tốt nghiệp Cử nhân Tài chính Ngân hàng tại Đại học Ngoại thương năm 2010 và hoàn thành chương trình Thạc sĩ Quản trị Kinh doanh (MBA) chuyên ngành Tài chính tại Đại học Kinh tế Quốc dân năm 2014.Từ năm 2010 đến 2016, Minh làm việc tại các tổ chức tài chính lớn ở Việt Nam như Vietcombank và SSI (Công ty Chứng khoán SSI), đảm nhận vai trò phân tích viên tài chính và chuyên viên tư vấn đầu tư. Trong giai đoạn này, anh tích lũy kiến thức sâu rộng về thị trường vốn, phân tích kỹ thuật và quản trị danh mục đầu tư.Năm 2017, nhận thấy tiềm năng của công nghệ blockchain và thị trường tiền điện tử, Minh chuyển hướng sự nghiệp sang lĩnh vực crypto. Từ 2017 đến 2019, anh tham gia nghiên cứu độc lập và làm việc với nhiều dự án blockchain trong khu vực Đông Nam Á. Năm 2019, Minh đạt chứng chỉ Certified Blockchain Professional (CBP) do EC-Council cấp, khẳng định năng lực chuyên môn về công nghệ blockchain và ứng dụng thực tế.Từ năm 2020 đến nay, với vai trò Chuyên gia Phân tích & Biên tập viên trưởng tại CryptoVN.top, Nguyễn Đức Minh chịu trách nhiệm phân tích xu hướng thị trường, đánh giá các dự án blockchain mới, và cung cấp những bài viết chuyên sâu về DeFi, NFT, và Web3. Anh đã xuất bản hơn 500 bài phân tích và hướng dẫn đầu tư crypto, giúp hàng nghìn nhà đầu tư Việt Nam tiếp cận kiến thức bài bản và đưa ra quyết định sáng suốt.Ngoài công việc chính, Minh thường xuyên là diễn giả tại các hội thảo về blockchain và fintech, đồng thời tham gia cố vấn cho một số startup công nghệ trong lĩnh vực thanh toán điện tử và tài chính phi tập trung.
https://cryptovn.top
Bitcoin BTC
https://cryptovn.top
Ethereum ETH
https://cryptovn.top
Tether USDT
https://cryptovn.top
Dogecoin DOGE
https://cryptovn.top
Solana SOL

  • T 2
  • T 3
  • T 4
  • T 5
  • T 6
  • T 7
  • CN

    Bình luận gần đây

    Không có nội dung
    Đồng ý Cookie
    Trang web này sử dụng Cookie để nâng cao trải nghiệm duyệt web của bạn và cung cấp các đề xuất được cá nhân hóa. Bằng cách chấp nhận để sử dụng trang web của chúng tôi