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

ขั้นสูง9/13/2024, 10:17:49 PM
เรียนรู้การอ่านข้อมูลของตัวสำรวจเช่น Etherscan และ Gate ข้อมูลข้ามโครงสร้างข้อมูลสามตัวนี้ และวิธีการค้นหาตารางที่คุณต้องการค้นหา

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

หากคุณเคยทำธุรกรรมใน 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)

ขั้นสูง9/13/2024, 10:17:49 PM
เรียนรู้การอ่านข้อมูลของตัวสำรวจเช่น Etherscan และ Gate ข้อมูลข้ามโครงสร้างข้อมูลสามตัวนี้ และวิธีการค้นหาตารางที่คุณต้องการค้นหา

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

หากคุณเคยทำธุรกรรมใน 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 ห้ามทำสำเนา กระจาย หรือลอกเลียนแบบบทความที่ถูกแปล นอกจากจะได้รับอนุญาต
Lancez-vous
Inscrivez-vous et obtenez un bon de
100$
!