深入了解區塊鏈(四) - Internal Txns? 真的有筆交易紀錄存在?

閱讀時間約 8 分鐘

前言

很高興能再次與您見面,再次感謝您一直以來對這系列文章的支持。今天我們會開始深入探討到EVM(以太坊虛擬機)上的一點點基礎知識。
若您是一個常常在etherscan.io上追蹤交易的朋友,一定對上面提到的各項資訊並不陌生。但我們觀察一筆交易時會發現,etherscan.io又額外提供了Internal Txns這項資訊。內部交易?這是什麼意思?它有被記錄在區塊鏈上嗎?今天的議題就會來看看它的真面目是什麼。
etherscan.io上的Internal Txns

Internal Txns

首先,Internal Txns並不是一筆真正的交易紀錄,它並不會被記錄在區塊鏈上。所以您無法用一般的RPC方法去向節點詢問到這項資訊。
事實上Internal Txns指的是一筆交易在EVM當中執行時,合約之間互相呼叫的紀錄。例如這筆交易發送給了A合約,但A合約中使用了B合約中的function,B合約又使用了C合約中的function,這樣您在etherscan.io中應會看到類似於下面的這種紀錄存在:
call: from A → to B
call: from B → to C
但這種紀錄不會被記錄在區塊鏈上,etherscan.io又要如何得知這種EVM的內部呼叫呢?

回放一筆交易 (Replay)

區塊鏈上記錄了所有的交易紀錄,因此我們也可以回放任何一筆交易來驗證其正確性。在以太坊節點的JSON-RPC標準中,有個名為debug_traceTransaction的API,它實現了交易回放與記錄的功能。除了回放交易外,它還會將EVM中執行的每一個步驟和運算結果都記錄下來,非常詳盡。目前Geth和Ganache都有實現該API的功能,因此我們也可以用Ganache來試看看。
  • Ganache的功能和啟動方式就不多贅述了
ganache --fork.network mainnet \
--chain.networkId 1 \
--accounts 10 \
--wallet.seed 1337 \
--port 8545
  • 另外我們也一樣透過Metamask使用Uniswap來交易1000 USDT,執行步驟和我們先前的文章相同
深入了解區塊鏈(一) - 如何使用Ganache來模擬一個真實的以太坊
  • 交易成功後,請將該筆交易的交易ID從Metamask記錄下來
選取交易紀錄中,剛剛兌換的那筆交易
可以點選複製交易ID來取得
  • 我們可以透過該ID向Ganache呼叫debug_traceTransaction方法,由於web3.py不支援該方法的呼叫,因此我們需要自行透過requests套件來呼叫
import requests
#將您剛剛複製的交易ID取代下面的tx_token字串
tx_token = '您的交易ID'
payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "debug_traceTransaction",
    "params": [tx_token]
}
r = requests.post('http://127.0.0.1:8545', headers={'Content-Type': 'application/json'}, json=payload)
#可將內容存為文字檔來觀察,不建議直接把這內容印出到Notebook(內容很長)
with open('txn_trace.log', 'w') as fw:
    fw.write(r.text)
  • 若將txn_trace.log文字檔打開,並以JSON格式pretty-print後,可以看到類似的以下內容
Log中記錄了非常詳盡的EVM執行過程
這些內容記錄了這筆交易於EVM中所執行的每個指令(OP),以及各種儲存體(stack/memory/storage)的變化狀態,本篇暫先不詳盡說明這些細節,未來有機會再和各位介紹。
  • 這次我們想要關注的重點是合約間的互相呼叫(Internal Txns),因此我們需要關注的幾個OP為:
  1. CALL
  2. STATICCALL
  3. CALLCODE
  4. DELEGATECALL
  • 我們觀察一下這些OP相關的資料...
經過一個Call後的變化
可以發現到經過一個CALL呼叫後,depth變成了2,而且所有的儲存體狀態都消失了。這代表著現在已經跳到了另一個合約的作用域當中。細節就待未來的篇章再行說明。
另外可以發現到進行CALL這個呼叫時,Stack的第二個參數(由下往上數)就是跳轉的目標合約地址。CALL這個OP的參數意義可以參考這裡
  • 透過這些發現,我們可以寫一段簡單的Python Code來將所有的內部呼叫印出來
#列出合約地址間呼叫的關聯性
logs = r.json()['result']['structLogs']
history = [UNI_ROUTER_ADDR]
storage = {}
for idx in range(1, len(logs)):
    if logs[idx-1]['depth'] < logs[idx]['depth']:
        op = logs[idx-1]['op']
        if op in ['CALL', 'STATICCALL', 'CALLCODE', 'DELEGATECALL']:
            addr = logs[idx-1]['stack'][-2][-40:]
            history.append('({}) 0x{}'.format(op, addr))
            storage[addr] = logs[idx-1]['storage']
            print(' -> '.join(history))
    elif logs[idx-1]['depth'] > logs[idx]['depth']:
        history.pop()
印出來的結果如下:
各合約間的呼叫關係
  • 把他們畫成圖後,可以更了解這些合約間的關係
經由Uniswap Router交換Token時會呼叫到的相關合約
Uniswap Router會先到WETH合約將ETH封裝成ERC20標準的WETH,之後會呼叫Uniswap的USDT池中將USDT轉給您,並將您的WETH轉到USDT池中

後記

從本篇已開始從底層來認識這些交易,也稍微摸到了EVM的一點點基礎,未來若有機會再來和各位探討一下更為底層的技術。再次感謝您閱讀完這篇文章,期待下一次再見。

作者Steve目前任職於趨勢科技區塊鏈安全研究小組,專注於區塊鏈合約安全與與相關技術,如果喜歡我的文章,或是想獲得更多區塊鏈詐騙事件懶人包,歡迎關注我的帳號
另外,我已經加入由趨勢科技防詐達人所成立的方格子專題-《區塊鏈生存守則》,在那裡我會跟其他優質的創作者一起帶大家深入瞭解區塊鏈,並隨時向大家更新區塊鏈資安事件
> 追蹤《區塊鏈生存守則》學習如何在區塊鏈的世界保護自己
> 關注防詐達人獲得其他最新詐騙情報
avatar-img
32會員
176內容數
我們整理了web3相關的熱門資安問題,包含加密貨幣投資詐騙、盜版NFT、空投釣魚和區塊鏈重大資安事件懶人包等等,並提供最完整的辨識方法教學,讓大家從0到1學習如何保護自己
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
防詐達人的沙龍 的其他內容
近年來隨著元宇宙Metaverse的聲浪,NFT與虛擬貨幣變成人人嚮往的新投資商機,NFT遊戲也以邊玩邊賺錢「Play to earn」模式吸引眾多玩家。然而,近期開始出現一些「假NFT遊戲」,打著元宇宙的旗幟實行真投資詐騙,企圖欺騙想踏入幣圈的新手
在前幾篇的文章中。有和各位分享了使用Ganache來模擬一個以太坊主網進行交易,也嘗試使用了web3.py來開發區塊鏈互動程式。相信對您而言,一定有更深入探索區塊鏈交易的需求。本篇想和各位介紹一個Ganache的神奇功能:解鎖任意帳號
在上一篇文章中,有和您分享了使用Ganache模擬了一個以太坊主網。想必您已經迫不及待的想對它進行更深入的了解了。本篇預計會使用Python來和您建立好的模擬網路進行互動。在開發套件的細節上我們並不會很深入的地為您進行解釋,而會透過一些簡單的例子來引導一個學習的方向。
詐騙加密貨幣交易平台BitVex利用Deepfake影片,在YouTube冒用馬斯克、幣安執行長趙長鵬以及方舟投資執行長Cathie Wood製造假影片宣傳BitVex,並宣稱可以獲得11%的獲利,事實上BitVex根本是加密貨幣釣魚網站,企圖詐騙民眾金錢、個人隱私資料及帳號密碼
所以礦工的挖礦能力和以太坊區塊難度的增減就造成生成區塊的時間跟預期結果不一樣的狀況,不過很少有人會去理會這種狀況,偶爾有幾個區塊就是會延遲發生,本文想知道他延遲發生的分配如何?
近期藝人、網紅們和幣圈資深玩家的虛擬貨幣錢包被盜,裡面的NFT或虛擬貨幣被轉走的案件頻傳,動輒損失幾千萬,擔心自己成為下一個受害者?趕快跟著防詐達人了解MetaMask小狐狸錢包是什麼?它如何運作?以及詐騙集團是用什麼手法把你的錢包騙到手的?看完這個MetaMask懶人包再也不擔心錢包被盜
近年來隨著元宇宙Metaverse的聲浪,NFT與虛擬貨幣變成人人嚮往的新投資商機,NFT遊戲也以邊玩邊賺錢「Play to earn」模式吸引眾多玩家。然而,近期開始出現一些「假NFT遊戲」,打著元宇宙的旗幟實行真投資詐騙,企圖欺騙想踏入幣圈的新手
在前幾篇的文章中。有和各位分享了使用Ganache來模擬一個以太坊主網進行交易,也嘗試使用了web3.py來開發區塊鏈互動程式。相信對您而言,一定有更深入探索區塊鏈交易的需求。本篇想和各位介紹一個Ganache的神奇功能:解鎖任意帳號
在上一篇文章中,有和您分享了使用Ganache模擬了一個以太坊主網。想必您已經迫不及待的想對它進行更深入的了解了。本篇預計會使用Python來和您建立好的模擬網路進行互動。在開發套件的細節上我們並不會很深入的地為您進行解釋,而會透過一些簡單的例子來引導一個學習的方向。
詐騙加密貨幣交易平台BitVex利用Deepfake影片,在YouTube冒用馬斯克、幣安執行長趙長鵬以及方舟投資執行長Cathie Wood製造假影片宣傳BitVex,並宣稱可以獲得11%的獲利,事實上BitVex根本是加密貨幣釣魚網站,企圖詐騙民眾金錢、個人隱私資料及帳號密碼
所以礦工的挖礦能力和以太坊區塊難度的增減就造成生成區塊的時間跟預期結果不一樣的狀況,不過很少有人會去理會這種狀況,偶爾有幾個區塊就是會延遲發生,本文想知道他延遲發生的分配如何?
近期藝人、網紅們和幣圈資深玩家的虛擬貨幣錢包被盜,裡面的NFT或虛擬貨幣被轉走的案件頻傳,動輒損失幾千萬,擔心自己成為下一個受害者?趕快跟著防詐達人了解MetaMask小狐狸錢包是什麼?它如何運作?以及詐騙集團是用什麼手法把你的錢包騙到手的?看完這個MetaMask懶人包再也不擔心錢包被盜
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在現今充斥著智慧型手機的世界裡,孩子對手機成癮的風險正在增加。一項臺灣大型研究指出,有近40%的高中生具有手機成癮風險,此問題同樣發生在國中和國小生當中。此外,該研究也發現青少年和兒童成癮者有些共同特徵,當學生出現這些特徵時,家長和教師就要留心了!
Thumbnail
「空白」的伊斯蘭史?真正空白的是我們貧乏的腦袋 本書講伊斯蘭發展史,是從創始者穆罕莫德的崛起談起,經歷了麥加、麥地那的戰鬥,與歷代哈里發(伊斯蘭的宗教及世俗的最高統治者)的擴張與轉型,打敗了拜占庭帝國和薩珊波斯帝國之後,取得了敘利亞、伊拉克、埃及、北非、伊比利半島,最後成為定都巴格達的伊斯蘭帝國…
Thumbnail
生成式AI(Generative AI)是近年來人工智慧領域中備受矚目的技術之一。它以機器學習為基礎,通過學習大量數據中的模式和關係,能夠生成各種新的內容,涵蓋文字、圖像、音訊等多個領域。本文將深入探討生成式AI的原理、優缺點以及應用範疇。
Thumbnail
什麼是慶餘年代儲? 在當今充滿刺激的手機遊戲世界中,慶餘年已經成為了眾多玩家的心頭好。然而,遊戲充值和購買虛擬貨幣等遊戲內物品有時可能讓玩家感到煩惱。為了讓遊戲變得更有趣且輕鬆,石頭手遊代儲網提供了慶餘年代儲服務。 為什麼選擇慶餘年代儲? 現在,您可能會想知道為什麼要選擇慶餘年代儲服務。以下是
Thumbnail
黃金作為投資資產的重要地位 黃金作為投資資產在金融市場中佔有重要地位,被廣泛用來達到多種投資目標,黃金具有以下的特性: 避險資產: 黃金被認為是一種避險資產,當其他市場(如股票、債券)波動性增加時,投資者可能轉向黃金以保值和分散風險。在經濟不穩定時期,投資者傾向於尋求相對較安全的投資選擇。 通
Thumbnail
歡迎來到Midjourney,一個致力於開創創新與實用性相結合的先進AI技術平台。Midjourney的目標是為用戶提供一個獨特且高效的創作空間,讓大家能透過AI技術實現其內心的創作靈感。 在這裡,我們要特別強調Midjourney的會員計劃。這些計劃不僅提供了更多的創作空間和更快的處理速度,還包括
Thumbnail
讓我們來聊聊驅動行為的三大本能 §自保本能的一型人 §社會本能的一型人 §性本能的一型人 §總括來說
Thumbnail
當你覺察到自己有某項側翼的特質,你應當開心, 因為,與世界連結的方式又增加了另一種可能性。 § 側翼 § 具有四型側翼的五型人 § 具有六型側翼的五型人
Thumbnail
當你覺察到自己有某項側翼的特質,你應當開心, 因為,與世界連結的方式又增加了另一種可能性。 § 側翼 § 具有三型側翼的四型人 § 具有五型側翼的四型人
Thumbnail
當你覺察到自己有某項側翼的特質,你應當開心, 因為,與世界連結的方式又增加了另一種可能性。 § 側翼 § 具有二型側翼的三型人 § 具有四型側翼的三型人
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在現今充斥著智慧型手機的世界裡,孩子對手機成癮的風險正在增加。一項臺灣大型研究指出,有近40%的高中生具有手機成癮風險,此問題同樣發生在國中和國小生當中。此外,該研究也發現青少年和兒童成癮者有些共同特徵,當學生出現這些特徵時,家長和教師就要留心了!
Thumbnail
「空白」的伊斯蘭史?真正空白的是我們貧乏的腦袋 本書講伊斯蘭發展史,是從創始者穆罕莫德的崛起談起,經歷了麥加、麥地那的戰鬥,與歷代哈里發(伊斯蘭的宗教及世俗的最高統治者)的擴張與轉型,打敗了拜占庭帝國和薩珊波斯帝國之後,取得了敘利亞、伊拉克、埃及、北非、伊比利半島,最後成為定都巴格達的伊斯蘭帝國…
Thumbnail
生成式AI(Generative AI)是近年來人工智慧領域中備受矚目的技術之一。它以機器學習為基礎,通過學習大量數據中的模式和關係,能夠生成各種新的內容,涵蓋文字、圖像、音訊等多個領域。本文將深入探討生成式AI的原理、優缺點以及應用範疇。
Thumbnail
什麼是慶餘年代儲? 在當今充滿刺激的手機遊戲世界中,慶餘年已經成為了眾多玩家的心頭好。然而,遊戲充值和購買虛擬貨幣等遊戲內物品有時可能讓玩家感到煩惱。為了讓遊戲變得更有趣且輕鬆,石頭手遊代儲網提供了慶餘年代儲服務。 為什麼選擇慶餘年代儲? 現在,您可能會想知道為什麼要選擇慶餘年代儲服務。以下是
Thumbnail
黃金作為投資資產的重要地位 黃金作為投資資產在金融市場中佔有重要地位,被廣泛用來達到多種投資目標,黃金具有以下的特性: 避險資產: 黃金被認為是一種避險資產,當其他市場(如股票、債券)波動性增加時,投資者可能轉向黃金以保值和分散風險。在經濟不穩定時期,投資者傾向於尋求相對較安全的投資選擇。 通
Thumbnail
歡迎來到Midjourney,一個致力於開創創新與實用性相結合的先進AI技術平台。Midjourney的目標是為用戶提供一個獨特且高效的創作空間,讓大家能透過AI技術實現其內心的創作靈感。 在這裡,我們要特別強調Midjourney的會員計劃。這些計劃不僅提供了更多的創作空間和更快的處理速度,還包括
Thumbnail
讓我們來聊聊驅動行為的三大本能 §自保本能的一型人 §社會本能的一型人 §性本能的一型人 §總括來說
Thumbnail
當你覺察到自己有某項側翼的特質,你應當開心, 因為,與世界連結的方式又增加了另一種可能性。 § 側翼 § 具有四型側翼的五型人 § 具有六型側翼的五型人
Thumbnail
當你覺察到自己有某項側翼的特質,你應當開心, 因為,與世界連結的方式又增加了另一種可能性。 § 側翼 § 具有三型側翼的四型人 § 具有五型側翼的四型人
Thumbnail
當你覺察到自己有某項側翼的特質,你應當開心, 因為,與世界連結的方式又增加了另一種可能性。 § 側翼 § 具有二型側翼的三型人 § 具有四型側翼的三型人