Solidity

如何將乙太幣從合約轉移到另一個特定地址?

  • March 24, 2022

我想寫一個智能合約,當收到錢時,將 50% 轉移到第一個錢包的特定地址(0x583031D1113aD414F02576BD6afaBfb302140225)

並將 25% 轉移到第二個錢包的特定地址(0xdD870fA1b7C4700F2BD7f44238821C26f7392148)。

我像這樣寫的,但它不起作用,Remix IDE 對這些行發誓:

address payable addr1 = address(0x583031D1113aD414F02576BD6afaBfb302140225);
address payable addr2 = address(0xdD870fA1b7C4700F2BD7f44238821C26f7392148);

Remix IDE 寫道:類型地址不可隱式轉換

PS 我在 YouTube 上看過教程,其中作者談到創建一個功能,您需要在 Remix IDE 菜單中輸入交易的錢包地址。例子: 在此處輸入圖像描述

它不適合我。

我希望將 50% 發送到第一個錢包,將 25% 發送到第二個錢包。

智能合約:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Demo {
       constructor() payable{}
       receive() external payable{}

       uint _50 = address(this).balance/100*50; //50% of balance of contract
       uint _25 = address(this).balance/100*25; //25% of balance of contract

       address payable addr1 = address(0x583031D1113aD414F02576BD6afaBfb302140225);
       address payable addr2 = address(0xdD870fA1b7C4700F2BD7f44238821C26f7392148);

       function withdrawFunds() external {
           //address target = payable(_to);
           addr1.transfer(_50);
           addr2.transfer(_25);
       }

       function receiveFunds() external payable {}

       function getBalance() public view returns(uint){
           return address(this).balance;
       }
}

您需要將address類型轉換為address payable類型。它有一個快捷方式(https://docs.soliditylang.org/en/v0.6.0/types.html#address):address payable addr1 = payable(0x583031D1113aD414F02576BD6afaBfb302140225);

所以只需將address鑄件更改為payable鑄件,它應該可以工作。

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