繁体   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