退还在 solidity 合约中输入的所有地址
Refund all addresses entered on solidity contract
我有一个问题涉及退还在 solidity 合同中输入的用户。我不知道,不知道是否有可能迭代我合同中的所有参与者,并用在某些教程中阅读的所有 balance.I 退还所有参与者,在 solidity 合同中迭代花费大量 gas 取决于数量迭代次数。
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)
电话以便他们检查。
希望这对您有意义并且对您有用。
我有一个问题涉及退还在 solidity 合同中输入的用户。我不知道,不知道是否有可能迭代我合同中的所有参与者,并用在某些教程中阅读的所有 balance.I 退还所有参与者,在 solidity 合同中迭代花费大量 gas 取决于数量迭代次数。
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)
电话以便他们检查。
希望这对您有意义并且对您有用。