哪種類型的交易屬於 etherscan 上的內部交易
Etherscan 合約詳情界面顯示內部交易屬於哪類交易。
合約地址託管智能合約,智能合約是儲存在區塊鏈上的一組程式碼,當與相關輸入數據(合約互動)進行交易時執行。來源。
內部交易,儘管名稱(不是黃皮書的一部分;這是人們已經確定的約定)不是實際交易,也不直接包含在區塊鏈中; 它們是通過執行契約啟動的價值轉移。
因此,它們沒有明確地儲存在任何地方:它們是在區塊鏈狀態上執行有問題的交易的影響。像 etherscan 這樣的區塊鏈瀏覽器可以通過執行帶有儀表化 EVM 的修改節點來獲取它們,該 EVM 記錄作為交易執行的一部分發生的所有價值轉移,並將它們分開儲存。有關更多資訊,請查看this、this和this。
要理解這一點,請查看以下範例:
EOA 地址 A 想要向 EOA 地址 C 發送一些 ERC-20 代幣。為此,EOA 地址 A 應該使用以下參數向 ERC-20 合約地址 B 進行轉賬交易:
tx_obj = { 'from' : EOA_address_A, 'to' : ERC_20_Contract_address_B, 'value' : 0, 'data' : data, 'gas' : estimated_gas, 'gasPrice' : web3.eth.gas_price, 'nonce' : web3.eth.get_transaction_count(EOA_address_A), 'chainId' : web3.eth.chain_id }
其中
estimated_gas = self.w3.eth.estimate_gas({ 'from' : EOA_address_A, 'to' : ERC_20_Contract_address_B, 'value' : 0, 'data' : data, 'nonce' : web3.eth.get_transaction_count(EOA_address_A), 'chainId' : web3.eth.chain_id })
和
data = contract_token.encodeABI(fn_name="transfer", args=[EOA_address_C, to_wei(amount, 'ether')])
其中
contract_token = web3.eth.contract(address=ERC_20_Contract_address_B, abi=ERC_20_Contract_address_B_abi)
在此範例中,EVM 將 tx_obj 辨識為交易參數: 0 從 EOA_address_A 到 ERC_20_Contract_address_B 的金額,“數據”作為數據。這稱為交易。
所謂的內部交易就是這種交易的結果。即,在完成此交易後,通過觸發 ERC_20_Contract_address_B 中的轉移函式並傳遞此交易提供的“數據”,將執行 ERC_20_Contract_address_B 的轉移函式並將代幣轉移到 EOA_address_C。
由於執行這個函式不會改變區塊鏈狀態(儘管是主交易),EVM 不會將其辨識為交易,人們通常將其稱為內部交易。然而,像 etherscan 這樣的區塊鏈瀏覽器可以通過執行帶有儀表化 EVM 的修改節點來獲取它們,該 EVM 記錄作為交易執行的一部分發生的所有價值轉移,並將它們分開儲存。