地址類型的成員

2022-05-12 17:02 更新
<address>.balanceuint256)

地址余額

<address>.code( )bytes memory

地址處的代碼(可以為空)

<address>.codehashbytes32)

地址的代碼哈希

<address payable>.transfer(uint256 amount)

將給定數(shù)量的 Wei 發(fā)送到Address,失敗時(shí)恢復(fù),轉(zhuǎn)發(fā) 2300 gas 津貼,不可調(diào)整

<address payable>.send(uint256 amount) returns (bool)

發(fā)送給定數(shù)量的 Wei 到地址false,失敗返回,轉(zhuǎn)發(fā) 2300 gas 津貼,不可調(diào)整

<address>.call(bytes memory) returns (bool, bytes memory)

使用給定的有效載荷發(fā)出低級(jí)CALL,返回成功條件和返回?cái)?shù)據(jù),轉(zhuǎn)發(fā)所有可用的氣體,可調(diào)

<address>.delegatecall(bytes memory) returns (bool, bytes memory)

使用給定的有效載荷發(fā)出低級(jí)DELEGATECALL,返回成功條件和返回?cái)?shù)據(jù),轉(zhuǎn)發(fā)所有可用的氣體,可調(diào)

<address>.staticcall(bytes memory) returns (bool, bytes memory)

使用給定的有效載荷發(fā)出低級(jí)STATICCALL,返回成功條件和返回?cái)?shù)據(jù),轉(zhuǎn)發(fā)所有可用的氣體,可調(diào)

有關(guān)詳細(xì)信息,請(qǐng)參閱地址部分。

警告

在執(zhí)行另一個(gè)合約函數(shù)時(shí)應(yīng)盡可能避免使用.call(),因?yàn)樗鼤?huì)繞過(guò)類型檢查、函數(shù)存在檢查和參數(shù)打包。

警告

使用 有一些危險(xiǎn)send:如果調(diào)用堆棧深度為 1024,則傳輸失?。ㄟ@總是由調(diào)用者強(qiáng)制執(zhí)行的),如果接收者用完 gas,它也會(huì)失敗。因此,為了進(jìn)行安全的 Ether 轉(zhuǎn)賬,請(qǐng)始終檢查 的返回值send,使用transfer甚至更好:使用收款人取款的模式。

警告

由于 EVM 認(rèn)為對(duì)不存在的合約的調(diào)用總是成功的,Solidity 包括extcodesize在執(zhí)行外部調(diào)用時(shí)使用操作碼的額外檢查。這確保了即將被調(diào)用的合約要么實(shí)際存在(它包含代碼),要么引發(fā)異常。

.call()對(duì)地址而不是合約實(shí)例(即、 .delegatecall()、.staticcall()和).send()進(jìn)行操作的低級(jí)調(diào)用不包括此檢查,這使得它們?cè)?gas 方面更便宜,但也不太安全。.transfer()

筆記

在 0.5.0 版本之前,Solidity 允許合約實(shí)例訪問(wèn)地址成員,例如this.balance. 現(xiàn)在這是禁止的,必須明確轉(zhuǎn)換為地址:address(this).balance.

筆記

如果通過(guò)低級(jí)委托調(diào)用訪問(wèn)狀態(tài)變量,則兩個(gè)合約的存儲(chǔ)布局必須對(duì)齊,以便被調(diào)用合約能夠按名稱正確訪問(wèn)調(diào)用合約的存儲(chǔ)變量。如果存儲(chǔ)指針作為函數(shù)參數(shù)傳遞,就像高級(jí)庫(kù)的情況一樣,情況當(dāng)然不是這樣。

筆記

在 0.5.0 版本之前,,.call只返回成功條件,不返回?cái)?shù)據(jù)。.delegatecall.staticcall

筆記

在 0.5.0 版本之前,有一個(gè)成員調(diào)用callcode,其語(yǔ)義與delegatecall.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)