深入了解區塊鏈(四) - 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
33會員
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
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
以太坊是一种公开的区块链网络,因此在默认情况下,其交易和账户信息是公开可见的,然而,为了提供更好的隐私保护,一些解决方案已经被开发出来,很多投资者都想要知道这个以太坊隐私解决方案是什么?下面就让小编来为大家详细介绍一下 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Thumbnail
區塊鏈有什麼特色? 所有交易(操作資訊)紀錄會儲存在各個節點,因此具有公開性 每個節點遵守一套共識機制,基於這套機制來信任讀取的數據 透過密碼學演算法確保交易紀錄無法被串改 不會有資料中心遭受攻擊導致系統癱瘓問題 可能會對使用者喪失隱私 區塊鏈如何運作的? 節點主要可以被區分為兩種類型
Thumbnail
■什麼是區塊鏈技術? 區塊鏈是透過點對點(P2P)運行的網路,這個網路由分散式節點組成,可以把它想成是共享的數據庫,也就是分散式帳本(DLT),分散式帳本技術是一種去中心化的帳本,儲存著網路上進行的所有交易。 中心化帳本:也稱為集中式帳本,由一個中心化的機構去做驗證、記帳、訂立規則。
Thumbnail
Eigenlayer是基於ETH質押市場的再質押協議,文章介紹了Eigenlayer的概況、竄完資訊、風險提示等,旨在幫助讀者瞭解Eigenlayer的運作和參與空投的流程,為讀者提供了一個包含多種LRT協議的指南。
Thumbnail
區塊鏈原理 什麼是區塊鏈? 區塊鏈(Blockchain)是一種分散式帳本技術,它基於加密學和分散式計算的原理,通過將數據以區塊的形式連接在一起,形成鏈條。每個區塊包含一定時間內的多筆交易記錄,並使用密碼學哈希函數與前一個區塊相連,這種連接保證了數據的不可篡改性。 2. 區塊鏈的基本結構 2
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
以太坊是一种公开的区块链网络,因此在默认情况下,其交易和账户信息是公开可见的,然而,为了提供更好的隐私保护,一些解决方案已经被开发出来,很多投资者都想要知道这个以太坊隐私解决方案是什么?下面就让小编来为大家详细介绍一下 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Thumbnail
區塊鏈有什麼特色? 所有交易(操作資訊)紀錄會儲存在各個節點,因此具有公開性 每個節點遵守一套共識機制,基於這套機制來信任讀取的數據 透過密碼學演算法確保交易紀錄無法被串改 不會有資料中心遭受攻擊導致系統癱瘓問題 可能會對使用者喪失隱私 區塊鏈如何運作的? 節點主要可以被區分為兩種類型
Thumbnail
■什麼是區塊鏈技術? 區塊鏈是透過點對點(P2P)運行的網路,這個網路由分散式節點組成,可以把它想成是共享的數據庫,也就是分散式帳本(DLT),分散式帳本技術是一種去中心化的帳本,儲存著網路上進行的所有交易。 中心化帳本:也稱為集中式帳本,由一個中心化的機構去做驗證、記帳、訂立規則。
Thumbnail
Eigenlayer是基於ETH質押市場的再質押協議,文章介紹了Eigenlayer的概況、竄完資訊、風險提示等,旨在幫助讀者瞭解Eigenlayer的運作和參與空投的流程,為讀者提供了一個包含多種LRT協議的指南。
Thumbnail
區塊鏈原理 什麼是區塊鏈? 區塊鏈(Blockchain)是一種分散式帳本技術,它基於加密學和分散式計算的原理,通過將數據以區塊的形式連接在一起,形成鏈條。每個區塊包含一定時間內的多筆交易記錄,並使用密碼學哈希函數與前一個區塊相連,這種連接保證了數據的不可篡改性。 2. 區塊鏈的基本結構 2