วิธีอ่าน Block Explorers และเข้าใจธุรกรรม การติดตามและบันทึกบน Ethereum (EVM)

ขั้นสูงSep 13, 2024
เรียนรู้การอ่านข้อมูลของตัวสำรวจเช่น Etherscan และ Gate ข้อมูลข้ามโครงสร้างข้อมูลสามตัวนี้ และวิธีการค้นหาตารางที่คุณต้องการค้นหา
วิธีอ่าน Block Explorers และเข้าใจธุรกรรม การติดตามและบันทึกบน Ethereum (EVM)

มีอะไรอยู่ในธุรกรรมหนึ่งรายการ?

หากคุณเคยทำธุรกรรมใน Ethereum (หรือในบล็อกเชนที่เปิดใช้งานสมาร์ทคอนแทร็กต่างๆ) คุณอาจเคยค้นหาข้อมูลบนตัวสำรวจบล็อกเชน เช่น etherscan.io และเห็นข้อมูลมากมายเหล่านี้:

แท็บภาพรวมการทำธุรกรรม

และหากคุณพยายามดูที่บันทึกหรือร่องรอย (ธุรกรรมภายใน) คุณอาจจะเห็นหน้าเพจที่ทำให้สับสนเหล่านี้:

แท็บบันทึก (คุณโชคดีถ้ามันถูกถอดรหัสอย่างดีเช่นนี้)

แท็บรอย (ใช่ดูเหมือนกับจะเป็นสิ่งที่แตกต่างกัน)

การเรียนรู้การอ่านรายละเอียดของธุรกรรมบนตัวสำรวจบล็อกจะเป็นพื้นฐานสำหรับการวิเคราะห์ข้อมูลและความรู้ของ Ethereum ของคุณทั้งหมด เรามาพิจารณาชิ้นส่วนทั้งหมดและวิธีการทำงานกับพวกเขาใน SQL กัน

ฉันจะอธิบายเฉพาะระดับสูงเกี่ยวกับวิธีการเข้าใจแนวคิดเหล่านี้เท่านั้น หากคุณต้องการเรียนรู้วิธีการถอดรหัสเหล่านี้ด้วยตนเอง คุณจะต้องเข้าใจวิธีการทำงานอย่างละเอียดอ่อนข้อมูลถูกเข้ารหัส (มันเหมือนกันสำหรับธุรกรรม / ติดตาม / บันทึก) และวิธีการใช้งาน ฟังก์ชัน bytearray/hex ของ Duneไประหว่างประเภทที่แตกต่างกัน

โดยท้ายของคู่มือนี้ คุณจะสามารถเข้าใจและนำทางตารางข้อมูลสำหรับสัญญาใด ๆ โดยใช้คิวรี่ค้นหาตารางธุรกรรมนี้:

ลิงก์คิวรี่(เสียบใน tx hash ใด ๆ, chain, และหมายเลขบล็อก)

หลังจากที่คุณได้เรียนรู้แนวคิดในคู่มือนี้แล้ว คุณควรเรียนรู้การใช้ของฉันด้วยแดชบอร์ดเริ่มต้นอย่างรวดเร็วของ EVMเพื่อเริ่มต้นการวิเคราะห์สัญญาใด ๆ

วิธีการวิเคราะห์โปรโตคอลหรือผลิตภัณฑ์ Ethereum ใด ๆ ในเวลาห้านาที

แอนดรูว์ ฮง

·

30 ธันวาคม 2022

อ่านเรื่องเต็ม

ธุรกรรม

ธุรกรรมเป็นเพียงปลายฟาร์มข้อมูล ทั้งหมดและบันทึกทั้งหมดถูกเรียกใช้หลังจากข้อมูลนำเข้าเริ่มต้นการทำงานระดับบน ขอให้เราตั้งชื่อฟิลด์ทั้งหมดที่คุณจะเห็นในหน้าธุรกรรมของตัวสำรวจบล็อกก่อน

นี่คือฟิลด์เดียวกันที่คุณจะเห็นเมื่อคุณสอบถาม "ethereum.transactions" บน Dune กุญแจหลักในการเรียนรู้ในการระบุที่นี่คือว่า "ถึง" เป็นสัญญาหรือไม่ โดยปกติ สัญญาจะถูกแสดงอย่างชัดเจน ถ้าเป็นสัญญา ควรมี "ข้อมูลนำเข้า" ซึ่งประกอบด้วยการเรียกใช้ฟังก์ชัน

ลิงก์ธุรกรรม

จากแนวคิดเหล่านี้ อย่างที่สำคัญคือต้องเรียนรู้ EOA กับที่อยู่สัญญาดี สัญญาถูกติดตั้งโดย EOA และสามารถเรียกใช้ในฟิลด์ "to" ของธุรกรรมได้ หากคุณคลิกที่ที่อยู่ ตัวสำรวจจะแสดงบนด้านบนซ้ายว่าเป็นสัญญาหรือบัญชี บน dune คุณสามารถเข้าร่วมกับตาราง ethereum.creation_traces เพื่อตรวจสอบว่ามันเป็นสัญญาหรือไม่ โปรดทราบว่าเฉพาะ EOA เท่านั้นที่สามารถเป็นผู้เซ็นสัญญาณ tx "from" ได้

สำคัญที่จะเรียนรู้ว่าข้อมูลที่มาจาก onchain โดยตรงกับข้อมูลที่ explorer/frontends ได้เพิ่มเติมบนด้านบน ทุกอย่างในบล็อกเชนถูกแทนที่เป็นเลขฐานสิบหก (บางครั้งเรียกว่าไบนารีหรือไบต์) ดังนั้นการเรียกสว๊อปของ 1inch จะมีสตริงข้อมูลนำเข้านี้:

ตัวอย่างธุรกรรม

4 ไบต์แรก (8 ตัวอักษร) คือ "ฟังก์ชันซิกเนเจอร์" ซึ่งเป็นแฮชเครื่องมือ keccakของชื่อฟังก์ชันและประเภทการป้อนข้อมูล Etherscan มีปุ่ม "ถอดรหัส" ที่ดีสำหรับบางสัญญา ซึ่งให้คุณได้รูปแบบที่อ่านง่ายนี้:

ตัวอย่างธุรกรรม

เห็นได้ว่ามีตัวแปรหลายตัวถูกบรรจุเข้าด้วยกันเป็นสตริงฮีกซ์ที่ยาวหนึ่งตัวจากก่อนหน้านี้ วิธีการเข้ารหัสของตัวแปรเหล่านั้นเป็นตามระบบสเปค ABI (Application Binary Interface) ของสมาร์ทคอนแทร็ก

ABI เหมือนเอกสาร API สำหรับสมาร์ทคอนแทร็ก (เช่น OpenAPI specs) คุณสามารถอ่านเพิ่มเติมได้ที่รายละเอียดทางเทคนิคที่นี่. ส่วนใหญ่นักพัฒนาจะทำการยืนยัน ABI ของตัวเองให้ตรงกับสัญญาและอัปโหลด ABI เพื่อให้ผู้อื่นสามารถอ้างอิงในกระบวนการถอดรหัส สัญญาหลายรายการอาจเกี่ยวข้องกับ MEV/trading ที่นักพัฒนาต้องการเก็บเป็นแหล่งข้อมูลปิดและเป็นความลับ - เราจึงไม่ได้รับการถอดรหัสใด ๆ จากพวกเขา

ใน Dune เราได้ถอดรหัสตารางโดยอิงจาก contract ABIs ที่ส่งมอบเพื่อให้รู้ว่าฟังก์ชั่นและเหตุการณ์จะถูกแปลงเป็นลายเซ็นต์ไบต์ (ethereum.signatures) ซึ่งจะถูกจับคู่กับการติดตามและบันทึกเพื่อให้ได้แผนภูมิที่ถอดรหัสเช่น uniswap_v2_ethereum.Pair_evt_Swap ซึ่งเก็บการแลกเปลี่ยนทั้งหมดสำหรับสัญญาคู่ที่สร้างโดย Uniswap v2 pair factory คุณสามารถกรองการแลกเปลี่ยนสำหรับคู่หนึ่งๆ โดยดูที่ตาราง contract_address สำหรับเหตุการณ์

ใน Dune, คุณต้องการสอบถามตารางนี้สำหรับการเรียกใช้ฟังก์ชันนี้ oneinch_ethereum.AggregationRouterV6_call_swap คุณจะเห็นชื่อตารางนี้อยู่ที่ด้านบนของผลลัพธ์การสอบถามในตัวค้นหาตารางที่ตั้งต้นของคู่มือ

สำหรับส่วนถัดไปเกี่ยวกับการติดตามและบันทึกข้อมูล เราจะใช้ธุรกรรมสลับที่เชื่อมต่อ 1inch aggregator เดียวกัน. นี่เป็นตัวอย่างที่ดีเพราะเราเลือกหลายโครงสร้าง DEX ซึ่งเราจะได้รับความหลากหลายของระเบียบและบันทึกที่ดีที่จะสอบสวน

บันทึก

พูดถึงบันทึกเหตุการณ์ต่อไป บันทึกสามารถถูกส่งออกได้ที่จุดใดก็ได้ในการเรียกใช้ฟังก์ชัน นักพัฒนาทั่วไปจะส่งออกบันทึกที่สิ้นสุดของฟังก์ชันหลังจากที่การโอน/ตรรกะทั้งหมดเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด มาดูกันว่าเหตุการณ์สลับ uniswap v3 ที่ถูกส่งออกจากธุรกรรมก่อนหน้านี้:

ธุรกรรมตัวอย่าง

คุณจะเห็นว่ามีเขตข้อมูล topic0, topic1, topic2 และ data topic0 คล้ายกับลายเซ็นฟังก์ชัน ยกเว้น 32 ไบต์แทนที่จะเป็นเพียง 4 ไบต์ (ยังคงแฮชในลักษณะเดียวกัน) เหตุการณ์สามารถมีฟิลด์ "จัดทําดัชนี" เพื่อการกรองข้อมูลที่เร็วขึ้น ซึ่งสามารถปรากฏในหัวข้อที่ 1, หัวข้อที่ 2 หรือหัวข้อ 3 ฟิลด์อื่นๆ ทั้งหมดจะถูกเข้ารหัสเข้าด้วยกันในวัตถุ "ข้อมูล" อีกครั้งพวกเขาปฏิบัติตามกฎการเข้ารหัสเดียวกันกับธุรกรรมและร่องรอย "28" เป็นดัชนีของเหตุการณ์ในบล็อกทั้งหมด บางครั้งอาจเป็นประโยชน์ในการเข้าร่วมเมื่อคุณต้องการการแลกเปลี่ยนหรือโอนครั้งแรกใน tx

หากต้องการค้นหาตรรกะเบื้องหลังเหตุการณ์นี้ถูกปล่อยออกมาที่ไหนและอย่างไรฉันจะต้องดําดิ่งลงไปในรหัสความแข็งแกร่ง ฉันจะคลิกที่อยู่ที่เชื่อมโยงของเหตุการณ์ไปที่แท็บสัญญาและค้นหา "emit swap" เพราะฉันรู้ว่าเหตุการณ์ทั้งหมดมี "ปล่อย" ก่อนที่จะถูกเรียกในรหัส

นี่คือสัญญา uniswapv3poolที่สร้างโรงงานสำหรับแต่ละคู่

ฉันเห็นว่าสิ่งนี้ถูกส่งออกในบรรทัด 786 ของสัญญา เป็นส่วนหนึ่งของฟังก์ชัน “swap”

การสามารถนำทางฟังก์ชันและเหตุการณ์ลูกสายข้ามสัญญาจะเป็นทักษะสำคัญที่คุณจะต้องเรียนรู้เพื่อเข้าใจลำดับของข้อมูลที่คุณกำลังตรวจสอบอย่างถูกต้อง คุณไม่จำเป็นต้องเรียนรู้ solidity อย่างละเอียดเพื่อนำทางไฟล์เหล่านี้ แค่รู้วิธีการเข้าใจอินเทอร์เฟซของสัญญาและเมื่อฟังก์ชัน / อีเวนต์ถูกเรียก (function และ emit เป็นคำหลักของคุณ).

สำหรับตัวอย่างละเอียดในการสืบค้นรหัสสำหรับฟังก์ชันและเหตุการณ์,ตรวจสอบการแยกประเภทของสัญญา Sudoswap และข้อมูล.

จากการค้นหาตารางด้วยตัวค้นหาตารางก่อนหน้านี้ ฉันสามารถเห็นว่าตารางที่ฉันควรค้นหาสำหรับการสลับเหรียญรายนี้คือ uniswap_v3_ethereum.Pair_evt_Swap และมันถูกส่งออกหลังจากฟังก์ชัน swap() ถูกเรียก

แสดงรายการ (ethereum.traces)

การติดตามสามารถกลายเป็นเรื่องยากมากที่จะนำทาง เนื่องจากว่าการเรียกใช้ที่ซ้อนกันระหว่างสัญญาที่แตกต่างกันมีอยู่ ให้เราเข้าใจประเภทของการติดตามก่อน

  • CREATE: นี่คือรายการติดตามที่ถูกส่งออกเมื่อเราติดตั้งสัญญาใหม่ คุณสามารถติดตั้งสัญญาโดยตรงที่ด้านบนของธุรกรรม ซึ่งจะหมายความว่าจะไม่มีที่อยู่ "ถึง" ในข้อมูลธุรกรรม คุณยังสามารถติดตั้งสัญญาภายในการเรียกใช้ฟังก์ชันได้เช่นกัน ดังนั้นจึงมีอยู่แหล่งผลิตสัญญา โปรดตรวจสอบตาราง ethereum.creation_traces สำหรับมุมมองที่เรียบง่ายของเหล่านี้
  • DELEGateCALL: นี่คือสิ่งหนึ่งที่ควรละเลยเมื่อมองไปที่ธุรกรรม คิดเกี่ยวกับการส่งต่อคำขอจากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์โดยไม่เปลี่ยนแปลงตรรกะใด ๆ นั้นเกี่ยวข้องกับพร็อกซี่และการจัดเก็บข้อมูล@bansaltushar014/deleGatecall-in-solidity-4138b121cbe">ดูรายละเอียดเพิ่มเติมที่นี่
  • CALL: นี่คือการติดตามที่ทั่วไปและทั่วไปที่สุด การโทรอาจเป็นเพียงการโอนค่า ETH โดยไม่มีสัญญาเกี่ยวข้อง มัน cŝnก็อาจเป็นการเรียกใช้ฟังก์ชันใด ๆ บนสัญญาใด ๆ
  • STATICCALL: นี่คือการเรียกฟังก์ชันที่ไม่ปรับเปลี่ยนสถานะใด ๆ และใช้สําหรับการคํานวณอย่างหมดจด สิ่งต่างๆเช่นฟีดราคา oracle, การคํานวณราคา AMM, การตรวจสอบอัตราส่วนการชําระบัญชี, การตรวจสอบยอดคงเหลือ ฯลฯ ทั้งหมดเกิดขึ้นใน staticcalls พบเห็นได้ทั่วไปในความเป็นปึกแผ่นว่าเป็นประเภทฟังก์ชัน "มุมมอง" หรือ "บริสุทธิ์"

คุณยังต้องเข้าใจคอลัมน์/ดัชนีของ trace_address ด้วย นี่คือรูปแบบ [0,1,1,1,1] ที่คุณเห็นบ่อย ๆ จินตนาการว่าเป็นเหมือนจุดทำเครื่องหมายลูกเล่น โดยที่จำนวนของตัวเลขในอาร์เรย์บ่งบอกความลึกและลำดับของการเรียกใช้ฟังก์ชัน

A (null) —the transaction first input has a trace_address of []

CALLs B (0)

CALLs C (0,0)

CALLs D (1)

โทร (1,0) CALLs F (1,0,0)CALLs G (1,1)

CALLs H (2)

จากภาพสกรีนช็อตธุรกรรมภายใน (ติดตาม) ที่แสดงให้เห็นได้เช่นเดียวกับ etherscan ไม่ใช่สถานที่ที่เป็นมิตรสำหรับการดูติดตาม ฉันชอบใช้ phalcon blocksec แทนที่จะเปิดซองธุรกรรมเช่นนั้น:

ลิงก์ไปยัง Explorer

นี่อาจดูซับซ้อน แต่มันก็คือวิธีที่ง่ายมากที่จะสำรวจฟังก์ชันทั้งหมด เหตุการณ์ และอาร์กิวเมนต์ในการทำธุรกรรม พอคุณเข้าใจแล้ว คุณก็สามารถบอกได้ว่าคุณเข้าใจข้อมูลทั้งหมดในการทำธุรกรรมคิวรีการค้นหาตารางเป็นการสำเนาเกือบเหมือนกับเค้าโครงนี้ ผมได้รับแรงบันดาลใจมากที่สุดจากพวกเขา!

โปรดทราบว่าใน Dune เราถอดรหัสการเรียกฟังก์ชันและการติดตามของฟังก์ชันเดียวกันไปยังตารางเดียวกันโดยอัตโนมัติ คุณอาจสงสัยว่าคุณสามารถรวมกิจกรรมและการติดตาม/ธุรกรรมได้อย่างง่ายดายตามลำดับที่ดีที่แสดงใน phalcon บน Dune คุณสามารถรวมกันตามการเชื่อมโยงของแฮชธุรกรรมเพื่อผูกข้อมูลรวมกันโดยทั่วไป แต่คุณไม่สามารถรวมกันด้วยดัชนีใด ๆ เพื่อสร้างลำดับการโต้ตอบที่แม่นยำเหมือนเดิม นั่นเป็นข้อจำกัดที่น่าเสียดายในขณะนี้ที่ต้องใช้ดัชนีเฉพาะ

ต่อไป, ลึกลงไปในป่ามืดของคริปโต

หากคุณเข้าใจแนวความคิดที่ฉันได้นำเสนอในคู่มือนี้แล้ว คุณก็พร้อมที่จะขุดลึกลงไปและเขียนคำถามที่ซับซ้อนมากขึ้นได้ เรียกดูข้อมูลทั้งหมดในธุรกรรมโดยใช้เครื่องมือที่แตกต่างกันจะเป็นหนึ่งในทักษะสำคัญที่สุดที่คุณต้องการประสบความสำเร็จในพื้นที่นี้

ฉันคงใช้ explorer ที่แตกต่างกันไปประมาณ 10 ตัว ในแต่ละสัปดาห์ และจำนวนเครื่องมือก็มากถึง 10 เท่าของจำนวนนั้น ฉันเขียนคู่มือประจำปีเพื่ออธิบายถึงการเปลี่ยนแปลงของชุดเครื่องมือสำหรับข้อมูลและว่าคุณควรใช้เครื่องมือแต่ละตัวสำหรับอะไร

ลิงค์แนะนํา

ข้อความประกาศ:

  1. บทความนี้ถูกพิมพ์โดย [ cryptodatabytes] ลิขสิทธิ์ทั้งหมดเป็นของผู้เขียนต้นฉบับ [แอนดรู ฮง]. หากมีการคัดค้านการพิมพ์ซ้ํานี้โปรดติดต่อ เกต์ เรียนทีม และพวกเขาจะดำเนินการโดยเร็ว
  2. คำประกาศความรับผิดชอบ: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงเพียงของผู้เขียนเท่านั้นและไม่เป็นการให้คำแนะนำในการลงทุนใด ๆ
  3. การแปลบทความเป็นภาษาอื่นๆ ทำโดยทีมงาน Gate Learn ห้ามทำสำเนา กระจาย หรือลอกเลียนแบบบทความที่ถูกแปล นอกจากจะได้รับอนุญาต

วิธีอ่าน Block Explorers และเข้าใจธุรกรรม การติดตามและบันทึกบน Ethereum (EVM)

ขั้นสูงSep 13, 2024
เรียนรู้การอ่านข้อมูลของตัวสำรวจเช่น Etherscan และ Gate ข้อมูลข้ามโครงสร้างข้อมูลสามตัวนี้ และวิธีการค้นหาตารางที่คุณต้องการค้นหา
วิธีอ่าน Block Explorers และเข้าใจธุรกรรม การติดตามและบันทึกบน Ethereum (EVM)

มีอะไรอยู่ในธุรกรรมหนึ่งรายการ?

หากคุณเคยทำธุรกรรมใน Ethereum (หรือในบล็อกเชนที่เปิดใช้งานสมาร์ทคอนแทร็กต่างๆ) คุณอาจเคยค้นหาข้อมูลบนตัวสำรวจบล็อกเชน เช่น etherscan.io และเห็นข้อมูลมากมายเหล่านี้:

แท็บภาพรวมการทำธุรกรรม

และหากคุณพยายามดูที่บันทึกหรือร่องรอย (ธุรกรรมภายใน) คุณอาจจะเห็นหน้าเพจที่ทำให้สับสนเหล่านี้:

แท็บบันทึก (คุณโชคดีถ้ามันถูกถอดรหัสอย่างดีเช่นนี้)

แท็บรอย (ใช่ดูเหมือนกับจะเป็นสิ่งที่แตกต่างกัน)

การเรียนรู้การอ่านรายละเอียดของธุรกรรมบนตัวสำรวจบล็อกจะเป็นพื้นฐานสำหรับการวิเคราะห์ข้อมูลและความรู้ของ Ethereum ของคุณทั้งหมด เรามาพิจารณาชิ้นส่วนทั้งหมดและวิธีการทำงานกับพวกเขาใน SQL กัน

ฉันจะอธิบายเฉพาะระดับสูงเกี่ยวกับวิธีการเข้าใจแนวคิดเหล่านี้เท่านั้น หากคุณต้องการเรียนรู้วิธีการถอดรหัสเหล่านี้ด้วยตนเอง คุณจะต้องเข้าใจวิธีการทำงานอย่างละเอียดอ่อนข้อมูลถูกเข้ารหัส (มันเหมือนกันสำหรับธุรกรรม / ติดตาม / บันทึก) และวิธีการใช้งาน ฟังก์ชัน bytearray/hex ของ Duneไประหว่างประเภทที่แตกต่างกัน

โดยท้ายของคู่มือนี้ คุณจะสามารถเข้าใจและนำทางตารางข้อมูลสำหรับสัญญาใด ๆ โดยใช้คิวรี่ค้นหาตารางธุรกรรมนี้:

ลิงก์คิวรี่(เสียบใน tx hash ใด ๆ, chain, และหมายเลขบล็อก)

หลังจากที่คุณได้เรียนรู้แนวคิดในคู่มือนี้แล้ว คุณควรเรียนรู้การใช้ของฉันด้วยแดชบอร์ดเริ่มต้นอย่างรวดเร็วของ EVMเพื่อเริ่มต้นการวิเคราะห์สัญญาใด ๆ

วิธีการวิเคราะห์โปรโตคอลหรือผลิตภัณฑ์ Ethereum ใด ๆ ในเวลาห้านาที

แอนดรูว์ ฮง

·

30 ธันวาคม 2022

อ่านเรื่องเต็ม

ธุรกรรม

ธุรกรรมเป็นเพียงปลายฟาร์มข้อมูล ทั้งหมดและบันทึกทั้งหมดถูกเรียกใช้หลังจากข้อมูลนำเข้าเริ่มต้นการทำงานระดับบน ขอให้เราตั้งชื่อฟิลด์ทั้งหมดที่คุณจะเห็นในหน้าธุรกรรมของตัวสำรวจบล็อกก่อน

นี่คือฟิลด์เดียวกันที่คุณจะเห็นเมื่อคุณสอบถาม "ethereum.transactions" บน Dune กุญแจหลักในการเรียนรู้ในการระบุที่นี่คือว่า "ถึง" เป็นสัญญาหรือไม่ โดยปกติ สัญญาจะถูกแสดงอย่างชัดเจน ถ้าเป็นสัญญา ควรมี "ข้อมูลนำเข้า" ซึ่งประกอบด้วยการเรียกใช้ฟังก์ชัน

ลิงก์ธุรกรรม

จากแนวคิดเหล่านี้ อย่างที่สำคัญคือต้องเรียนรู้ EOA กับที่อยู่สัญญาดี สัญญาถูกติดตั้งโดย EOA และสามารถเรียกใช้ในฟิลด์ "to" ของธุรกรรมได้ หากคุณคลิกที่ที่อยู่ ตัวสำรวจจะแสดงบนด้านบนซ้ายว่าเป็นสัญญาหรือบัญชี บน dune คุณสามารถเข้าร่วมกับตาราง ethereum.creation_traces เพื่อตรวจสอบว่ามันเป็นสัญญาหรือไม่ โปรดทราบว่าเฉพาะ EOA เท่านั้นที่สามารถเป็นผู้เซ็นสัญญาณ tx "from" ได้

สำคัญที่จะเรียนรู้ว่าข้อมูลที่มาจาก onchain โดยตรงกับข้อมูลที่ explorer/frontends ได้เพิ่มเติมบนด้านบน ทุกอย่างในบล็อกเชนถูกแทนที่เป็นเลขฐานสิบหก (บางครั้งเรียกว่าไบนารีหรือไบต์) ดังนั้นการเรียกสว๊อปของ 1inch จะมีสตริงข้อมูลนำเข้านี้:

ตัวอย่างธุรกรรม

4 ไบต์แรก (8 ตัวอักษร) คือ "ฟังก์ชันซิกเนเจอร์" ซึ่งเป็นแฮชเครื่องมือ keccakของชื่อฟังก์ชันและประเภทการป้อนข้อมูล Etherscan มีปุ่ม "ถอดรหัส" ที่ดีสำหรับบางสัญญา ซึ่งให้คุณได้รูปแบบที่อ่านง่ายนี้:

ตัวอย่างธุรกรรม

เห็นได้ว่ามีตัวแปรหลายตัวถูกบรรจุเข้าด้วยกันเป็นสตริงฮีกซ์ที่ยาวหนึ่งตัวจากก่อนหน้านี้ วิธีการเข้ารหัสของตัวแปรเหล่านั้นเป็นตามระบบสเปค ABI (Application Binary Interface) ของสมาร์ทคอนแทร็ก

ABI เหมือนเอกสาร API สำหรับสมาร์ทคอนแทร็ก (เช่น OpenAPI specs) คุณสามารถอ่านเพิ่มเติมได้ที่รายละเอียดทางเทคนิคที่นี่. ส่วนใหญ่นักพัฒนาจะทำการยืนยัน ABI ของตัวเองให้ตรงกับสัญญาและอัปโหลด ABI เพื่อให้ผู้อื่นสามารถอ้างอิงในกระบวนการถอดรหัส สัญญาหลายรายการอาจเกี่ยวข้องกับ MEV/trading ที่นักพัฒนาต้องการเก็บเป็นแหล่งข้อมูลปิดและเป็นความลับ - เราจึงไม่ได้รับการถอดรหัสใด ๆ จากพวกเขา

ใน Dune เราได้ถอดรหัสตารางโดยอิงจาก contract ABIs ที่ส่งมอบเพื่อให้รู้ว่าฟังก์ชั่นและเหตุการณ์จะถูกแปลงเป็นลายเซ็นต์ไบต์ (ethereum.signatures) ซึ่งจะถูกจับคู่กับการติดตามและบันทึกเพื่อให้ได้แผนภูมิที่ถอดรหัสเช่น uniswap_v2_ethereum.Pair_evt_Swap ซึ่งเก็บการแลกเปลี่ยนทั้งหมดสำหรับสัญญาคู่ที่สร้างโดย Uniswap v2 pair factory คุณสามารถกรองการแลกเปลี่ยนสำหรับคู่หนึ่งๆ โดยดูที่ตาราง contract_address สำหรับเหตุการณ์

ใน Dune, คุณต้องการสอบถามตารางนี้สำหรับการเรียกใช้ฟังก์ชันนี้ oneinch_ethereum.AggregationRouterV6_call_swap คุณจะเห็นชื่อตารางนี้อยู่ที่ด้านบนของผลลัพธ์การสอบถามในตัวค้นหาตารางที่ตั้งต้นของคู่มือ

สำหรับส่วนถัดไปเกี่ยวกับการติดตามและบันทึกข้อมูล เราจะใช้ธุรกรรมสลับที่เชื่อมต่อ 1inch aggregator เดียวกัน. นี่เป็นตัวอย่างที่ดีเพราะเราเลือกหลายโครงสร้าง DEX ซึ่งเราจะได้รับความหลากหลายของระเบียบและบันทึกที่ดีที่จะสอบสวน

บันทึก

พูดถึงบันทึกเหตุการณ์ต่อไป บันทึกสามารถถูกส่งออกได้ที่จุดใดก็ได้ในการเรียกใช้ฟังก์ชัน นักพัฒนาทั่วไปจะส่งออกบันทึกที่สิ้นสุดของฟังก์ชันหลังจากที่การโอน/ตรรกะทั้งหมดเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด มาดูกันว่าเหตุการณ์สลับ uniswap v3 ที่ถูกส่งออกจากธุรกรรมก่อนหน้านี้:

ธุรกรรมตัวอย่าง

คุณจะเห็นว่ามีเขตข้อมูล topic0, topic1, topic2 และ data topic0 คล้ายกับลายเซ็นฟังก์ชัน ยกเว้น 32 ไบต์แทนที่จะเป็นเพียง 4 ไบต์ (ยังคงแฮชในลักษณะเดียวกัน) เหตุการณ์สามารถมีฟิลด์ "จัดทําดัชนี" เพื่อการกรองข้อมูลที่เร็วขึ้น ซึ่งสามารถปรากฏในหัวข้อที่ 1, หัวข้อที่ 2 หรือหัวข้อ 3 ฟิลด์อื่นๆ ทั้งหมดจะถูกเข้ารหัสเข้าด้วยกันในวัตถุ "ข้อมูล" อีกครั้งพวกเขาปฏิบัติตามกฎการเข้ารหัสเดียวกันกับธุรกรรมและร่องรอย "28" เป็นดัชนีของเหตุการณ์ในบล็อกทั้งหมด บางครั้งอาจเป็นประโยชน์ในการเข้าร่วมเมื่อคุณต้องการการแลกเปลี่ยนหรือโอนครั้งแรกใน tx

หากต้องการค้นหาตรรกะเบื้องหลังเหตุการณ์นี้ถูกปล่อยออกมาที่ไหนและอย่างไรฉันจะต้องดําดิ่งลงไปในรหัสความแข็งแกร่ง ฉันจะคลิกที่อยู่ที่เชื่อมโยงของเหตุการณ์ไปที่แท็บสัญญาและค้นหา "emit swap" เพราะฉันรู้ว่าเหตุการณ์ทั้งหมดมี "ปล่อย" ก่อนที่จะถูกเรียกในรหัส

นี่คือสัญญา uniswapv3poolที่สร้างโรงงานสำหรับแต่ละคู่

ฉันเห็นว่าสิ่งนี้ถูกส่งออกในบรรทัด 786 ของสัญญา เป็นส่วนหนึ่งของฟังก์ชัน “swap”

การสามารถนำทางฟังก์ชันและเหตุการณ์ลูกสายข้ามสัญญาจะเป็นทักษะสำคัญที่คุณจะต้องเรียนรู้เพื่อเข้าใจลำดับของข้อมูลที่คุณกำลังตรวจสอบอย่างถูกต้อง คุณไม่จำเป็นต้องเรียนรู้ solidity อย่างละเอียดเพื่อนำทางไฟล์เหล่านี้ แค่รู้วิธีการเข้าใจอินเทอร์เฟซของสัญญาและเมื่อฟังก์ชัน / อีเวนต์ถูกเรียก (function และ emit เป็นคำหลักของคุณ).

สำหรับตัวอย่างละเอียดในการสืบค้นรหัสสำหรับฟังก์ชันและเหตุการณ์,ตรวจสอบการแยกประเภทของสัญญา Sudoswap และข้อมูล.

จากการค้นหาตารางด้วยตัวค้นหาตารางก่อนหน้านี้ ฉันสามารถเห็นว่าตารางที่ฉันควรค้นหาสำหรับการสลับเหรียญรายนี้คือ uniswap_v3_ethereum.Pair_evt_Swap และมันถูกส่งออกหลังจากฟังก์ชัน swap() ถูกเรียก

แสดงรายการ (ethereum.traces)

การติดตามสามารถกลายเป็นเรื่องยากมากที่จะนำทาง เนื่องจากว่าการเรียกใช้ที่ซ้อนกันระหว่างสัญญาที่แตกต่างกันมีอยู่ ให้เราเข้าใจประเภทของการติดตามก่อน

  • CREATE: นี่คือรายการติดตามที่ถูกส่งออกเมื่อเราติดตั้งสัญญาใหม่ คุณสามารถติดตั้งสัญญาโดยตรงที่ด้านบนของธุรกรรม ซึ่งจะหมายความว่าจะไม่มีที่อยู่ "ถึง" ในข้อมูลธุรกรรม คุณยังสามารถติดตั้งสัญญาภายในการเรียกใช้ฟังก์ชันได้เช่นกัน ดังนั้นจึงมีอยู่แหล่งผลิตสัญญา โปรดตรวจสอบตาราง ethereum.creation_traces สำหรับมุมมองที่เรียบง่ายของเหล่านี้
  • DELEGateCALL: นี่คือสิ่งหนึ่งที่ควรละเลยเมื่อมองไปที่ธุรกรรม คิดเกี่ยวกับการส่งต่อคำขอจากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์โดยไม่เปลี่ยนแปลงตรรกะใด ๆ นั้นเกี่ยวข้องกับพร็อกซี่และการจัดเก็บข้อมูล@bansaltushar014/deleGatecall-in-solidity-4138b121cbe">ดูรายละเอียดเพิ่มเติมที่นี่
  • CALL: นี่คือการติดตามที่ทั่วไปและทั่วไปที่สุด การโทรอาจเป็นเพียงการโอนค่า ETH โดยไม่มีสัญญาเกี่ยวข้อง มัน cŝnก็อาจเป็นการเรียกใช้ฟังก์ชันใด ๆ บนสัญญาใด ๆ
  • STATICCALL: นี่คือการเรียกฟังก์ชันที่ไม่ปรับเปลี่ยนสถานะใด ๆ และใช้สําหรับการคํานวณอย่างหมดจด สิ่งต่างๆเช่นฟีดราคา oracle, การคํานวณราคา AMM, การตรวจสอบอัตราส่วนการชําระบัญชี, การตรวจสอบยอดคงเหลือ ฯลฯ ทั้งหมดเกิดขึ้นใน staticcalls พบเห็นได้ทั่วไปในความเป็นปึกแผ่นว่าเป็นประเภทฟังก์ชัน "มุมมอง" หรือ "บริสุทธิ์"

คุณยังต้องเข้าใจคอลัมน์/ดัชนีของ trace_address ด้วย นี่คือรูปแบบ [0,1,1,1,1] ที่คุณเห็นบ่อย ๆ จินตนาการว่าเป็นเหมือนจุดทำเครื่องหมายลูกเล่น โดยที่จำนวนของตัวเลขในอาร์เรย์บ่งบอกความลึกและลำดับของการเรียกใช้ฟังก์ชัน

A (null) —the transaction first input has a trace_address of []

CALLs B (0)

CALLs C (0,0)

CALLs D (1)

โทร (1,0) CALLs F (1,0,0)CALLs G (1,1)

CALLs H (2)

จากภาพสกรีนช็อตธุรกรรมภายใน (ติดตาม) ที่แสดงให้เห็นได้เช่นเดียวกับ etherscan ไม่ใช่สถานที่ที่เป็นมิตรสำหรับการดูติดตาม ฉันชอบใช้ phalcon blocksec แทนที่จะเปิดซองธุรกรรมเช่นนั้น:

ลิงก์ไปยัง Explorer

นี่อาจดูซับซ้อน แต่มันก็คือวิธีที่ง่ายมากที่จะสำรวจฟังก์ชันทั้งหมด เหตุการณ์ และอาร์กิวเมนต์ในการทำธุรกรรม พอคุณเข้าใจแล้ว คุณก็สามารถบอกได้ว่าคุณเข้าใจข้อมูลทั้งหมดในการทำธุรกรรมคิวรีการค้นหาตารางเป็นการสำเนาเกือบเหมือนกับเค้าโครงนี้ ผมได้รับแรงบันดาลใจมากที่สุดจากพวกเขา!

โปรดทราบว่าใน Dune เราถอดรหัสการเรียกฟังก์ชันและการติดตามของฟังก์ชันเดียวกันไปยังตารางเดียวกันโดยอัตโนมัติ คุณอาจสงสัยว่าคุณสามารถรวมกิจกรรมและการติดตาม/ธุรกรรมได้อย่างง่ายดายตามลำดับที่ดีที่แสดงใน phalcon บน Dune คุณสามารถรวมกันตามการเชื่อมโยงของแฮชธุรกรรมเพื่อผูกข้อมูลรวมกันโดยทั่วไป แต่คุณไม่สามารถรวมกันด้วยดัชนีใด ๆ เพื่อสร้างลำดับการโต้ตอบที่แม่นยำเหมือนเดิม นั่นเป็นข้อจำกัดที่น่าเสียดายในขณะนี้ที่ต้องใช้ดัชนีเฉพาะ

ต่อไป, ลึกลงไปในป่ามืดของคริปโต

หากคุณเข้าใจแนวความคิดที่ฉันได้นำเสนอในคู่มือนี้แล้ว คุณก็พร้อมที่จะขุดลึกลงไปและเขียนคำถามที่ซับซ้อนมากขึ้นได้ เรียกดูข้อมูลทั้งหมดในธุรกรรมโดยใช้เครื่องมือที่แตกต่างกันจะเป็นหนึ่งในทักษะสำคัญที่สุดที่คุณต้องการประสบความสำเร็จในพื้นที่นี้

ฉันคงใช้ explorer ที่แตกต่างกันไปประมาณ 10 ตัว ในแต่ละสัปดาห์ และจำนวนเครื่องมือก็มากถึง 10 เท่าของจำนวนนั้น ฉันเขียนคู่มือประจำปีเพื่ออธิบายถึงการเปลี่ยนแปลงของชุดเครื่องมือสำหรับข้อมูลและว่าคุณควรใช้เครื่องมือแต่ละตัวสำหรับอะไร

ลิงค์แนะนํา

ข้อความประกาศ:

  1. บทความนี้ถูกพิมพ์โดย [ cryptodatabytes] ลิขสิทธิ์ทั้งหมดเป็นของผู้เขียนต้นฉบับ [แอนดรู ฮง]. หากมีการคัดค้านการพิมพ์ซ้ํานี้โปรดติดต่อ เกต์ เรียนทีม และพวกเขาจะดำเนินการโดยเร็ว
  2. คำประกาศความรับผิดชอบ: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงเพียงของผู้เขียนเท่านั้นและไม่เป็นการให้คำแนะนำในการลงทุนใด ๆ
  3. การแปลบทความเป็นภาษาอื่นๆ ทำโดยทีมงาน Gate Learn ห้ามทำสำเนา กระจาย หรือลอกเลียนแบบบทความที่ถูกแปล นอกจากจะได้รับอนุญาต
เริ่มตอนนี้
สมัครและรับรางวัล
$100