Blockchain 退还在solidity合同中输入的所有地址
我有一个问题是关于退还用户在solidity合同中输入的费用。我不知道是否有可能迭代我合同中的所有玩家,并将所有余额退还给他们。我在一些教程中读到,在solidity合同中迭代的成本很大,这取决于迭代次数Blockchain 退还在solidity合同中输入的所有地址,blockchain,ethereum,solidity,Blockchain,Ethereum,Solidity,我有一个问题是关于退还用户在solidity合同中输入的费用。我不知道是否有可能迭代我合同中的所有玩家,并将所有余额退还给他们。我在一些教程中读到,在solidity合同中迭代的成本很大,这取决于迭代次数 contract Lottery{ address payable public manager; string public name; // short name (up to 32 bytes) address [] players; uint256 nTickets; ad
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);
}}
提前感谢大家。是的,这可能会有问题,因为它会使用大量的气体,甚至可能达到极限。为了解决这个问题,最好允许用户自己提取余额,这样他们就可以支付煤气费。或者事实上你可以允许任何人打那个电话。因此,您可以致电
退款(账户:uint256)
,将余额(如有)转移到给定账户。请注意,这不会使用msg.sender
,因此任何人(包括管理员)都可以进行此传输
记住,他们需要知道他们有一个平衡点,所以确保你正在发射一个事件或类似事件。同时提供balanceOf(address)
呼叫,以便他们进行检查
希望这是有意义的,对你有用