Solidity
為什麼在 Solidity 中沒有呼叫 receive() external paid{this.withdraw Funds();} 中的方法?
我寫了一個智能合約,當收到錢到我的地址時,應該自動將 50% 轉移到第一個錢包地址,25% 到第二個,25% 到第三個。由於某種原因,它不會自動執行。
我正在使用混音 IDE。我在 Solidity Compiler 的左側選項卡中點擊 Compile,然後轉到 Deploy & Run transactions,刪除已部署的合約,在頂部寫入 value 1(選擇 ether 而不是 wei)並將此合約部署到新合約上.
1 ether 從選定的錢包中扣除並轉移到合約賬戶(我發現使用 getBalance 功能),但錢沒有轉移到所需的錢包地址。為了轉賬,你必須點擊下面的withdrawFunds按鈕(即你需要呼叫這個函式)。
我寫了receive() external paid{this.withdrawFunds();},期望因為這條線,契約本身會在收到時轉賬。但由於某種原因,它不起作用。我需要契約來自己轉賬。
契約:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Demo { constructor() payable{} receive() external payable{this.withdrawFunds();} function withdrawFunds() external payable{ address addr1 = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2; address addr2 = 0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db; address addr3 = 0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB; address payable wallet1 = payable(addr1); address payable wallet2 = payable(addr2); address payable wallet3 = payable(addr3); uint _50 = address(this).balance*50/100; //50% of balance of contract uint _25 = address(this).balance*25/100; //25% of balance of contract uint s_25 = address(this).balance*25/100; //25% of balance of contract wallet1.transfer(_50); wallet2.transfer(_25); wallet3.transfer(s_25); } function getBalance() public view returns(uint){ return address(this).balance; } function receiveFunds() external payable {} }
接收回退功能將在普通的乙太幣轉賬中執行
(例如通過 .send() 或 .transfer())。你
receiveFunds()
打電話不會觸發receive()
,這就是為什麼轉移永遠不會發生。