Address.transfer

應付地址類型錯誤

  • October 12, 2021

剛剛將鬆露升級到版本 5,並且對這種新address payable類型有問題。

contract Test {
 ERC721Full public tokenAddress;

 constructor(address _address) public {
   tokenAddress = ERC721Full (_address);
 }

 function sendToOwner(...) public payable {
   address payable owner = tokenAddress.ownerOf(_tokenId);
   owner.transfer(msg.value);
 }
}

所以我正在嘗試將乙太幣發送到所有者帳戶,但我得到了

TypeError:類型地址不能隱式轉換為預期的應付類型地址。

如何解決這個問題?

tokenAddress.ownerOf()可能返回一個address,不是address payable。請參閱此執行緒以獲取執行此操作的方法:將契約轉換為應付地址

這個問題可能很舊,答案已經得到批准。

但我偶然發現了這個問題,尋找答案並沒有找到我想要的東西,所以對於未來(0.8.0 之後)來到這裡的窺視者,

您正在尋找的答案是:

改變這個

owner.transfer(msg.value);

對此:

payable(owner).transfer(msg.value);

所以基本上預設地址不能更改為應付地址,但可以在需要時將它們包裝起來payable(address)以具有該功能:D

希望這個答案有幫助

引用自:https://ethereum.stackexchange.com/questions/73770