Web3 & DApp Development Fundamentals · บทเรียน

พารามิเตอร์ที่จัดทำดัชนี

หัวข้อที่กรองได้

บทเรียน 2 จาก 413 ขั้นตอน

พารามิเตอร์ที่จัดทำดัชนี เป็นบทเรียน Web3 & DApp Development Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Web3 & DApp Development Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Filtering Logs

Once a contract emits many events, off-chain apps need a way to filter them efficiently, for example to find every Transfer to a specific address.

Solidity supports this with indexed event parameters, which become searchable topics.

The indexed Keyword

Mark a parameter indexed to store it as a log topic rather than in the data section. Topics can be filtered quickly by Ethereum nodes.

<code>event Transfer(
    address indexed from,
    address indexed to,
    uint256 amount
);</code>

Topics vs Data

Each log has up to 4 topics and an arbitrary data blob:

  • Topic 0 is the event signature hash (automatic for non-anonymous events)
  • Each indexed parameter takes one more topic slot
  • Non-indexed parameters go into the data section

The Three-Indexed Limit

A non-anonymous event can have at most three indexed parameters, because topic 0 is reserved for the signature hash.

Adding a fourth indexed parameter is a compile error.

<code>// OK: 3 indexed params
event Trade(
    address indexed maker,
    address indexed taker,
    uint256 indexed orderId,
    uint256 price // not indexed
);</code>

Choosing What to Index

Index the fields you will search by: addresses, ids, categories. Keep large or descriptive values (amounts, strings) non-indexed so they stay readable in the data section.

<code>event ItemSold(
    uint256 indexed itemId,
    address indexed buyer,
    uint256 price
);</code>

Indexing Strings and Bytes

When you index a dynamic type like string or bytes, the topic stores the keccak256 hash of the value, not the value itself.

You can still filter by hashing the search term, but you cannot recover the original text from the topic.

<code>event Tagged(string indexed label, uint256 value);
// topic = keccak256(label), original text not in log</code>

Filtering on the Client

Client libraries use indexed topics to build filters. For example, fetching all transfers received by one address becomes a fast topic match.

<code>// ethers.js (off-chain)
// const filter = token.filters.Transfer(null, myAddress);
// const logs = await token.queryFilter(filter);</code>

The Standard Transfer Event

ERC-20 and ERC-721 define a Transfer event with indexed addresses. This is why wallets can show your incoming and outgoing transfers so quickly.

<code>// ERC-20
event Transfer(address indexed from, address indexed to, uint256 value);
// ERC-721
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);</code>

Gas Considerations

Indexed parameters cost slightly more gas than non-indexed ones because they occupy dedicated topic slots. Index only what you genuinely need to filter on.

Anonymous Events

An anonymous event omits the signature hash from topic 0, freeing a fourth indexed slot. They are rare and harder to decode, so use them only for advanced low-level cases.

<code>event LowLevel(uint256 indexed a, uint256 indexed b,
               uint256 indexed c, uint256 indexed d) anonymous;</code>

Mixing Indexed and Data

A practical event indexes the searchable keys and leaves descriptive payload in data, balancing filterability and readability.

<code>event Deposit(
    address indexed account, // searchable
    uint256 amount,          // readable in data
    uint256 timestamp
);</code>

Quick Check

Test your understanding of indexed parameters.

Recap

You learned about indexed event parameters:

  • indexed turns a parameter into a filterable topic
  • Max 3 indexed params (topic 0 = signature hash)
  • Indexed dynamic types store a keccak256 hash, not the value
  • Index searchable keys; keep descriptive payload in the data section

Good indexing makes off-chain queries fast and cheap.

เริ่มต้นได้ฟรี

เรียนรู้ Web3 & DApp Development Fundamentals ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
29
บทเรียน
105

คำถามที่พบบ่อย

บทเรียน “พารามิเตอร์ที่จัดทำดัชนี” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พารามิเตอร์ที่จัดทำดัชนี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Web3 & DApp Development Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พารามิเตอร์ที่จัดทำดัชนี”

หัวข้อที่กรองได้ คุณปฏิบัติ Web3 & DApp Development Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Web3 & DApp Development Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Web3 & DApp Development Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “พารามิเตอร์ที่จัดทำดัชนี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Web3 & DApp Development Fundamentals นี้ได้ไหม

ได้ บทเรียน Web3 & DApp Development Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การประกาศเหตุการณ์
  2. พารามิเตอร์ที่จัดทำดัชนี
  3. การรับฟังเหตุการณ์
  4. เหตุการณ์เทียบกับพื้นที่จัดเก็บ
← กลับไปที่ Web3 & DApp Development Fundamentals