Ⅰ Solidity之地址(address)
在以太坊(Ethereum, ETH)的世界中,地址扮演著至關重要的角色,它們是唯一且與公鑰或合約綁定的。在交易過程中,地址就如同銀行賬戶,是預期收款的標識。
ETH地址主要由兩部分構成:通過keccak-256哈希函數生成的20位元組值,這些值以16進製表示,通常以0x開頭。地址的生成原理是將公鑰或合約的哈希值截取最後20個位元組。在Solidity編程中,只需在變數前加上"address"關鍵字即可定義地址變數。
在Solidity 0.5版本之前,合約地址與可支付地址(payable address)無明顯區分,但0.5.0以後,合約地址類型獨立,只有帶有payable關鍵字的地址才能接受和發送代幣。盡管地址可以進行交易,但推薦使用非推薦方法1和2時需謹慎,如1.address.transfer()和address.send(),而更常用的方法是獲取余額,如address.balance,或者執行智能合約調用,如address.call(bytes memory)等。
創建合約時,零地址(zero-address)是一個特殊的地址,用於合約部署。它是個空的20位元組值,僅包含0x0,交易時在接收者欄位填入零地址,EVM會識別為合約創建請求。
總的來說,以太坊地址是基於公鑰或合約生成的唯一標識,用於交易和智能合約交互,並且地址類型、零地址等概念在 Solidity 中具有特定的用法和規則。