簡體   English   中英

退還所有在 Solidity 合同中輸入的地址

[英]Refund all addresses entered on solidity contract

我有一個與退還在 Solidity 合同中輸入的用戶有關的問題。 我不知道,是否有可能迭代我合同中的所有玩家並用所有余額退還所有玩家。 .

    contract Lottery{
address payable public manager;
string public name;   // short name (up to 32 bytes)
address [] players;
uint256 nTickets;
address winner;
bool enable;
uint256 minimunContribution;
mapping(address => uint) public balances;

constructor (string memory LotteryName, uint minimun, address payable creator) public  {
    manager = creator;
    name = LotteryName;
    winner = address(0);
    enable = true;
    minimunContribution = minimun;
}

modifier restricted() {
require(msg.sender == manager, "Access forbidden");
_;
}

function enterInToLottery() public payable {
    require(msg.value > minimunContribution && enable == true, "Insufficient funds to allow transfer");
    players.push(msg.sender);
    balances[msg.sender] += msg.value;
    nTickets++;
}

//this function refund
function paybackEther(bool newfinished) public restricted {
    enable = !newfinished; 


    selfdestruct(msg.sender);
}}

在此先感謝大家。

是的,這可能會有問題,因為它會使用大量的氣體,甚至可能會達到限制。 為了解決這個問題,最好讓用戶自己提取余額,這樣他們就可以支付 gas。 或者實際上您可以允許任何人撥打該電話。 因此,您可以提供電話refund(account:uint256) ,將余額(如果有)轉移到給定帳戶。 請注意,這不會使用msg.sender ,因此任何人(包括管理員)都可以進行此傳輸。

請記住,他們需要知道他們有平衡,因此請確保您正在發出事件或類似事件。 還提供一個balanceOf(address)調用,以便他們可以檢查。

希望這對您有意義並適合您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM