ดึง transaction ของ contract ลง Google Sheet แบบง่าย ๆ ใคร ๆ ก็ทำได้ ไม่ต้องโค้ดเอง

Blockchain & Cryptocurrency Aug 18, 2023

เรื่องของเรื่อง คือ มีคนลองดึง transaction มา analyze ข้อมูลต่อ แต่ว่าต้องกด export เป็น csv ออกมาทุกครั้งที่อัพเดตข้อมูล แล้วทำยังไงดีให้เราไม่ต้องเหนื่อยทำแบบนี้ซํ้า ๆ

ตอนนี้ก็จบกันไปแล้ว สำหรับกิจกรรม Lucky Box รอบแรกของทาง Tripster ที่เราสามารถซื้อกล่องเพิ่มเติมได้บนเชน Optimism และ Arbitrum

แล้วหนุ่ม ๆ ทีม contribute ลองดึง transaction data มาดู ซึ่งต้อง download csv มา analyze data แบบ manual บน Excel แถมมีการเอาไปใช้กับ Power BI ด้วย ทางเราก็เลยหาวิธีทำแบบ auto เอา จะได้ไม่ต้องกด export ออกมาบ๊อยบ่อย

ตอนแรกก็คิดเวย์แบบดึง API แล้ว plug ใส่ไหม พออ่าน document แล้วรู้สึกมีวิธีที่ง่ายกว่านั้นมาก แค่เข้าใจการทำงานนิดหน่อยก็ทำได้เลย แล้วทำยังไงล่ะ ไปดู

ขั้นตอน

  • สมัคร account ของเชนต่าง ๆ ที่เราต้องการ ในที่นี้ Optimism และ Arbitrum คือคนละเชนกัน ดังนั้นสมัครทั้งสองเว็บเลย สามารถอ่านได้ที่นี่เลย
Creating an Account - Optimism
https://docs.optimism.etherscan.io/getting-started/creating-an-account
Creating an Account - Arbiscan
https://docs.arbiscan.io/getting-started/creating-an-account
  • create API key เพื่อเอามาเรียกใช้ในการดึงข้อมูลต่าง ๆ จาก API วิธีการสร้าง ดูจากอันนี้
Getting an API key - Optimism
https://docs.optimism.etherscan.io/getting-started/viewing-api-usage-statistics
Getting an API key - Arbiscan
https://docs.arbiscan.io/getting-started/viewing-api-usage-statistics
  • สร้าง Google Sheet และใส่โค้ดตามตัวอย่างใน document
  • เรียก API เส้นที่เราต้องการ

ปล. document ของ Optimism และ Arbitrum คือแทบจะเหมือนกันเลยนะ มีต่างกันแค่ url endpoint เท่านั้น

สร้าง Google Sheet ขึ้นมา

วิธีการเราสรุปจาก document จะประมาณนี้

  • สร้าง Google Sheet มาอันนึง
  • ไปที่ ExtensionsApps Script
  • เพิ่มไฟล์ใหม่ copy code importJSON.gs มา กดเซฟ
  • เพิ่มอีกไฟล์นึง copy code AutoRefresh.gs แล้วกดเซฟ
  • สร้าง trigger ขึ้นมา เรียกใช้ function importJSON ให้มัน refresh ทุกนาที ซึ่งเจ้า function นี้เราจะใช้ใน Google Sheet ต่อไป

สำหรับ document ดูได้ที่นี่

Integrating Google Sheets - Optimism
https://docs.optimism.etherscan.io/tutorials/integrating-google-sheets
Integrating Google Sheets - Arbiscan
https://docs.arbiscan.io/tutorials/integrating-google-sheets

เรียกใช้ API ที่เราต้องการ บน Google Sheet

วิธีการทำ

  • สร้างชีทขึ้นมาใหม่
  • ใส่คำสั่ง =importJSON โดยเปลี่ยนเป็นเส้น API ที่เราต้องการใน parameter แรก ของคำสั่งนี้

ในที่นี้เราจะดึง transaction ของ contract ที่กดซื้อ Lucky Box ขึ้นมา อ้างอิงจากอันนี้ ซึ่งของ OP และ ARB ต่างกันแค่ API route เท่านั้น ที่เหลือเหมือนเดิม

Accounts - Optimism
https://docs.optimism.etherscan.io/api-endpoints/accounts#get-a-list-of-normal-transactions-by-address
Accounts - Arbiscan
https://docs.arbiscan.io/api-endpoints/accounts#get-a-list-of-normal-transactions-by-address

อันนี้ตัว endpoint url ของอันนี้

https://api-optimistic.etherscan.io/api
   ?module=account
   &action=txlist
   &address=0x2479B47559f85B79894553f776529847E5bB389A
   &startblock=0
   &endblock=99999999
   &page=1
   &offset=10
   &sort=asc
   &apikey=YourApiKeyToken

แล้ว parameter แต่ละตัว คืออะไร

  • address: ในที่นี้คือ address ของ smart contract ที่เราต้องการ ค่าในที่นี้คือ 0x1966d22d2906FD61e8C2C5A9819f5b6d3CfB86dc
  • startBlock: เราจะดึงข้อมูล transaction เริ่มจาก block ไหน
  • endBlock: เราอยากจะจบที่ block ไหน / ซึ่งในที่นี้เราไม่ใส่สองอันนี้ เพราะตอนแรกที่ทำไม่รู้ว่าจบที่ block ไหน
  • offset: จะ return ข้อมูล max ที่ 10,000 นะ เราใส่เอาว่าอยากได้เท่าไหร่
  • sort: การเรียงข้อมูล ค่าที่ใส่ได้จะมี asc เก่าสุดอยู่บน desc ใหม่สุดอยู่บน
  • apiKey: ค่า YourApiKeyToken อันนี้ก็ใส่ API key ที่เราสร้างไว้ตอนแรกลงไป

ดังนั้น cell แรกของชีทใหม่ เราเอาเส้น API มาใส่ใน parameter ช่องแรก แบบนี้

=ImportJSON("https://api-optimistic.etherscan.io/api?module=account&action=txlist&address=0x1966d22d2906FD61e8C2C5A9819f5b6d3CfB86dc&page=1&offset=5000&sort=desc&apikey=YourApiKeyToken", "/result", "allHeaders", AutoRefresh!$A$1)

สามารถเอาข้อมูล transaction ที่ได้ มา analyze ด้วย Pivot Table

พอเราได้ข้อมูลที่เกือบจะ real-time มาแล้วนั้น เราจะต้องลอง analyze ข้อมูลที่เราต้องการคร่าว ๆ ว่า แต่ละเชนมีคนกดทั้งหมดกี่ transaction ใครกดเยอะสุด กดกันเท่าไหร่ แต่เรายังไม่ได้คำนวณค่าใช้จ่ายในการกดกล่องของแต่ละคน และ แต่ละคนได้ไปทั้งหมดกี่กล่อง แหะ ๆ

ตัวตารางเราใช้ Pivot Table มาลองสรุปดูแหละ ว่าแต่มีคนเข้าร่วมเท่าไหร่ กด transaction กันไปกี่ครั้ง โดยให้ Row เป็น From คือมาจาก address ไหน และ Value เรานับ count ของ timestamp เป็นจำนวน และเปอร์เซ็นต์ เป็น grand total ทั้งหมด

และก็สรุปเป็นกราฟออกมาแบบนี้แหละ ใครมีวิธีดี ๆ ก็มาบอกกันได้เนอะ

ส่วนจำนวนการเข้าร่วม Lucky Box รอบแรกของ Tripster เป็นดังนี้

  • Optimism: 4246 transaction, 194 address
  • Arbitrum: 247 transaction, 101 address

ทั้งหมดก็จะประมาณนี้เนอะ ที่ลองทำ

ไฟล์ Google Sheet สามารถดูได้ที่นี่เลย

Tripster Lucky Box
OP Blocknumber,Timestamp,Hash,Nonce,Blockhash,Transactionindex,From,To,Value,Gas,Gasprice,Iserror,Txreceipt Status,Input,Contractaddress,Cumulativegasused,Gasused,Confirmations,Methodid,Functionname108302711,1692204199,0x0617c61e15df66249effd0dddfa05b8fdb05f9433053c7eed08af2f5e5f1dce9,16,0x59b6...
https://docs.google.com/spreadsheets/d/1DjN4788JmLKh2uaZx31ijH-ORPjWNBd_a6WvaBJ9F7w/edit#gid=0

สามารถกด report ที่ทวิตนี้ได้เลย แนะนำให้ติดตาม เพื่อไม่พลาดเนื้อหาดี ๆ ก่อนใคร


ติดตามข่าวสารตามช่องทางต่าง ๆ และทุกช่องทางโดเนทกันไว้ที่นี่เลย

ติดตามข่าวสารแบบไว ๆ มาที่ Twitter เลย บางอย่างไม่มีในบล็อก และหน้าเพจนะ

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.