ethereum抽奖小游戏二
我们来写一个把奖金池的奖金全都退回去的功能
1.只有管理员可以操作
2.彩民人数大于0时才执行
3.遍历彩民池,对每一个彩民进行转账,每个地址1ether
4.彩民池清零
5.期数加一
function giveback() public onlyManager{
require(players.length !=0)
//遍历彩民池
for(uint i=0; i<players.length; i++){
players[i].transfer(1 ether);
}
delete players;
round++;
}
然后我们再加一个辅助函数
function getPlayersCount public view returns(uint){
return players.length;
}
创建一个react工程
然后我们写下代码
这是compile.js文件
//导入
let fs = require('fs')
let solc = require('solc')
//读取合约
let lotteryInfo = fs.readFileSync('lottery.sol')
console.log(lotteryInfo)
//编译合约
let compileInfo = solc.compile(lotteryInfo.toString,1)
console.log(compileInfo)
//导出
module.exports = compileInfo['contracts'][':Lottery']
然后是deploy.js
//导入
let {bytecode, interface} = require('./compile')
console.log(bytecode);
console.log(interface);
//导入web3
let Web3 = require('web3')
let web3 = new Web3('http://127.0.0.1:7545');
console.log(web3.version);
//账户
let account1 = '0xabcd....'
//部署
let deploy = async() =>{
//实例
let contractInstance = new web3.eth.Contract(JSON.parse(interface))
//部署
let res = await contractInstance.deploy({
data: bytecode,
arguments: [],
}).send(
from: account1,
gas: '100000',
value: 0,
)
console.log(res.options.address)
}
//调用,部署
deploy()
然后获取合约实例
loadInstance.js文件
//abi和address
let abi = '[abcd....]'
let address = '0xabcd....'
//web3
let Web3 = require('web3')
let web3 = new Web3('http://127.0.0.1:7545')
console.log(web3.version)
//获取合约实例
let lotteryInstance = new web3.eth.Contract(JSON.parse(abi),address)
//导出
module.exports = lotteryInstance