我正试图为Lottary应用程序创建一份合同,但是我遇到了错误,因为
browser/test.sol:103:9: TypeError:成员“传输”在与参数相关的地址查找后未找到或不可见。users.transfer(地址(此).balance);
我试图让address[]用户成为地址可支付的[]用户;在https://stackoverflow.com/questions/53499997/solidity-member-transfer-not-found-or-not-visible-after-argument-dependent中提到过,然后它会产生不同的错误。
pragma solidity ^0.4.24;
/*
Lottery is safe under the assumption that miners do not interfere,
no smart contract can hack me (If You can prove me otherwise :D )
*/
contract LotteryFor10{
address[] users;
mapping(address => bool) participated;
uint256 public constant WAIT_BLOCKS_LIMIT = 3 ;
uint256 public registeredCount ;
uint256 public _registeredLimit ;
uint256 constant REGISTERING_PARTICIPANTS = 1;
uint256 constant REGISTERING_FINISHED = 2;
uint256 constant WAITING_FOR_RANDOMNESS = 3;
uint256 constant SOLVING_LOTERRY = 4;
uint256 constant LOTTERY_SOLVED = 5;
uint256 public waitingStartBlockNumber;
bool public lotterySolved;
constructor(uint256 _limit) public{
waitingStartBlockNumber = 0;
registeredCount = 0;//good habit not to rely on defaults if You do
not have to
_registeredLimit = _limit;
}
function () public payable{
if(getStage(block.number)==REGISTERING_PARTICIPANTS){
processAddingUser(msg.sender);
}
else{ // this else is crutial so we never enter two stages in same
call
if(getStage(block.number)==REGISTERING_FINISHED){
require(msg.value == 0,"no additional stake allowed");
waitingStartBlockNumber = block.number;
emit ClosingList(waitingStartBlockNumber);
}
else{
if(getStage(block.number)==WAITING_FOR_RANDOMNESS){
require(msg.value == 0,"no additional stake
allowed");
revert("To little time passed, wait at least
WAIT_BLOCKS_LIMIT ");
}
else{
if(getStage(block.number)==SOLVING_LOTERRY){
require(msg.value == 0,"no additional stake
allowed");
processSolvingLottery(block.number);
}
else{
revert("Lottery Closed ");
}
}
}
}
}
function getStage(uint256 blockNum) private view returns(uint256) {
if(registeredCount<_registeredLimit){
return REGISTERING_PARTICIPANTS;
}
else{
if(waitingStartBlockNumber==0 //start waiting block has been
never set
|| blockNum-waitingStartBlockNumber>=256 //start waiting
block has been set long time ago
){
return REGISTERING_FINISHED;
}
else
{
if(blockNum-waitingStartBlockNumber发布于 2021-06-04 06:48:15
替换
users[luckyNumber].transfer(address(this).balance);使用
payable(users[luckyNumber]).transfer(address(this).balance);https://ethereum.stackexchange.com/questions/66169
复制相似问题