Payable
如何將乙太幣從智能合約地址發送到另一個地址?
我有一份合約,我可以使用一個
fallback
函式來存入乙太幣。問題是,我想將這個智能合約中的乙太幣發送到另一個隨機地址。我不是要求將乙太幣從一個地址發送到另一個地址。我要求將本契約中的乙太幣發送到另一個地址。或者換句話說,同樣的問題:我如何將這個智能合約中的乙太幣發送到我想要的任何地址(不使用selfdestruct
)。函式 foo 正在將乙太幣從函式呼叫者地址發送到目標地址 (
_to
)。那不是我想要的。我想將這個合約中的乙太幣發送到目標地址(_to
)。你知道怎麼做嗎?//SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.7; contract TestCall { fallback() external payable{} function foo(address payable _to) external payable{ (bool success, ) = _to.call{value: msg.value}(""); require(success, "transaction failed"); } function getBalance() external view returns(uint){ return address(this).balance; } }
看起來不錯的 IMO,但我會這樣做:
//SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.7; contract TestCall { fallback() external payable{} function foo(address payable _to, uint256 amount) external payable{ (bool success, ) = _to.call{value: amount}(""); require(success, "transaction failed"); } function getBalance() external view returns(uint){ return address(this).balance; } }
使用 msg.value,您需要在發送到合約的交易中包含一個值,然後該值將發送到您設置的地址。這不是你想要做的。
這是將全部合約餘額提取到任何地址的通用功能。
function withDraw(address payable to) public payable OnlyOwner { uint Balance = address(this).balance; require(Balance > 0 wei, "Error! No Balance to withdraw"); to.transfer(Balance); }