269-ethereum抽奖小游戏三











ethereum抽奖小游戏三








然后在App.js导入一下
let lotteryInstance = require(../loadInstance)

然后在class App里面
//生命周期函数
componentWillMount(){
	let manager = await lotteryInstance.methods.manager().call()
	console.log(manager)
}

//react状态变量,可以负责类内的数据共享
state = {
	manager: ''
}

然后
this.setState({
	manager : manager,
})

然后读取出来
<p>manager: {this.state.manager}</p>






然后我们看一下这段完整代码
尝试把manager显示出来

import React, {Component} from 'react';

let lotteryInstance = require('./loadInstance')

class App extends Component {

    //react状态变量,可以负责类内的
    state = {
        manager: ''
    }

    //生命周期函数
    async componentWillMount() {
        let manager = await lotteryInstance.methods.manager().call()
        console.log(manager)

        //给状态变量赋值
        this.setState({
            manager: manager
        })
    }

    //render渲染
    render() {
        return (
            <div>
                <p>hello world</p>
                <p>manager: {this.state.manager}</p>
            </div>
        );
    }
}

export default App;








现在我们重新把显示manager的逻辑和代码整理一次

第一步.写合约


pragma solidity ^0.4.24;

contract Lottery{

    address public manager;
    address [] public players;
    address  public winner;
    uint public round;

    constructor() public{
        manager=msg.sender;
    }

    function play() public payable{

        //限定每次只能投注1个eth
        require(msg.value == 1 ether);

        //记录彩民
        players.push(msg.sender);

    }

    function getPlayers() public view returns (address [] memory){
	    return players;
    }

    function getBalance() public view returns(uint){
	    return address(this).balance;
    }

    modifier onlyManager{
        require(msg.sender==manager);
        _;
    }

    function draw() public onlyManager{
    	//获取时间戳,玩家个数,区块链难度
    	bytes memory infos = abi.encodePacked(block.timestamp,players.length,block.difficulty);

    	//生成hash
    	bytes32 hash = keccak256(infos);

    	//求余数
    	uint winnerIndex = uint(hash) % players.length;

    	//赢家
    	winner = players[winnerIndex];

    	//转账
    	winner.transfer(address(this).balance);

    	//清空彩民池
    	delete players;

    	//期数加1
    	round++;
    }

}





第二步.编译合约
let fs = require('fs');
let solc = require('solc');

let contractInfo = fs.readFileSync('./lottery.sol');
let compileInfo = solc.compile(contractInfo.toString(), 1);

module.exports = compileInfo['contracts'][':Lottery'];





第三步.启动ganache-cli服务
ganache-cli -h 127.0.0.1 -p 7545 -m "scout same ..."

这里给定了地址127.0.0.1:7545
然后给定了账户,这个账户是指定的付款账户




第四步.部署合约
启动服务之后就可以部署合约了

let {bytecode, interface} = require('./compile')

//导入web3
let Web3 = require('web3')
let web3 = new Web3('http://127.0.0.1:7545');

let account1 = '0xd595指定付款账户'

//部署
let deploy = async() =>{
    //实例
    let contractInstance = new web3.eth.Contract(JSON.parse(interface))

    //部署
    let res = await contractInstance.deploy({
        data: bytecode,
        arguments: [],
    }).send({
        from: account1,
        gas: '1000000',
        value: 0,
    })

    //获取ABI和合约地址
    console.log(interface)
    console.log(res.options.address)

}

//调用,部署
deploy()







第五步.获取合约实例
//abi和address
let abi = '部署时获取的ABI'
let address = '0x0fe50部署时获取的合约地址'

//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








第六步.显示
import React, {Component} from 'react';

let lotteryInstance = require('./loadInstance')

class App extends Component {

    //react状态变量,可以负责类内的
    state = {
        manager: '',
    }

    //生命周期函数
    async componentWillMount() {
        let manager = await lotteryInstance.methods.manager().call()
        console.log(manager)

        //给状态变量赋值
        this.setState({
            manager: manager,
        })

    }

    //render渲染
    render() {
        return (
            <div>
                <p>hello world</p>
                <p>你好 世界</p>
                <p>manager: {this.state.manager}</p>
            </div>
        );
    }
}

export default App;







 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值