使用Solidity ^ 0.5.0,我实际上是在尝试实现在^ 0.4.17中使用的旧代码,但它在Remix上引发了错误.我检查了语法和一切,但只是无法捕捉到什么是错的.任何帮助高度赞赏.
pragma solidity ^0.5.0;
contract Lottery{
address public manager;
address[] public players;
constructor() public {
manager = msg.sender;
}
function participate() public payable {
require(msg.value > .01 ether);
players.push(msg.sender);
}
function pseudoRandom() private view returns(uint){
return uint(keccak256(abi.encodePacked(block.difficulty, now, players)));
}
function pickWinner() public {
uint index = pseudoRandom() % players.length;
players[index].transfer(address(this).balance);
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
browser/Lottery.sol:22:8:TypeError:在地址中依赖于参数的查找后,未找到或未显示成员"transfer".
玩家[指数] .transfer(地址(msg.sender).balance);
^ ^ ---------------------
我正在尝试编译我的合同,但出现此错误:
AssertionError [ERR_ASSERTION]: Invalid callback specified.
Run Code Online (Sandbox Code Playgroud)
一种答案是更改编译器的版本,但我的版本是最新的(0.5.0)。我实际上正在尝试使用旧代码(0.4.17)并升级它。尝试了2天,一直失败。
这是我的合同:
pragma solidity ^0.5.0;
contract Lottery{
address public manager;
address payable [] public players;
modifier restricted {
require(msg.sender == manager);
_;
}
constructor() public {
manager = msg.sender;
}
function participate() public payable {
require(msg.value > .01 ether);
players.push(msg.sender);
}
function pseudoRandom() private view returns(uint){
return uint(keccak256(abi.encodePacked(block.difficulty, now, players)));
}
function pickWinner() public restricted {
require(msg.sender == manager);
uint index = pseudoRandom() % players.length;
address(players[index]).transfer(address(this).balance);
(players) = new address payable[](0);
}
function getPlayers() …Run Code Online (Sandbox Code Playgroud)