Solidity
我怎樣才能獲得應付功能將正確的金額發送到所有者地址?
function () public payable { uint tokens; /// this math isnt safe tokens = msg.value * 10; /// this didnt give us the address we needed address tokenOwner; balances[msg.sender] = safeAdd(balances[msg.sender], tokens); _totalSupply = safeAdd(_totalSupply, tokens); emit Transfer(address(0), msg.sender, tokens); tokenOwner.transfer(msg.value); }
我試圖了解如何編寫一個函式,其中合約獲取 ETH 並將代幣返還給 ETH 的發送者並將 ETH 發送給合約所有者。
我有問題
- 它發送了錯誤的金額——我向合約發送了 0.1 ETH,它發送給我 10,000,000,000,000 個硬幣之類的東西。
- tokenOwner 從來沒有收到過 .1 ETH 的發送——合約也沒有。
有什麼想法我哪裡出錯了嗎?
你不應該像這樣調整比例。
msg.value
已經正確縮放。tokens = msg.value * 10;
這是沒用的。映射
balances
通常用於跟踪合約對其他使用者的負債。但是您會立即轉發資金,因此您不需要這樣做。balances[msg.sender] = safeAdd(balances[msg.sender], tokens);
不清楚是
tokenOwner
從哪裡來的。tokenOwner.transfer(msg.value);
嘗試
contract Thing { address payable owner; function forwarder() public payable { owner.transfer(msg.value); } }
更新
所有者是
0x0...
因為我們沒有將其設置為任何內容。您可以發瘋並導入可轉讓所有權並使所有者成為目的地。import "@openzeppelin/contracts/access/Ownable.sol"; contract Thing is Ownable { function forwarder() public payable { payable(owner()).transfer(msg.value); // Ownable sets it in the constructor and presents an owner() function } }
希望能幫助到你。