강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của harang9105
harang9105

câu hỏi đã được viết

Ethereum đang hoạt động! Phát triển Dapp xổ số cho người mới bắt đầu

Kiểm tra chức năng đặt cược xổ số

Lottery Bet 함수 테스트 강의 중 4:36에서 'from' 관련 오류가 발생합니다.

Viết

·

561

1

감사하게도 강좌를 통해 스마트 컨트랙트에 대해서 배우고 있는데요,

 

Bet 테스트 코드 실행 시, 에러가 발생하고 있는데 어디서 문제인지 파악이 안되서 질문글 올려요

 

Error: The send transactions "from" field must be defined!

 

 


Lottery.sol

pragma solidity >=0.4.22 <0.9.0;

contract Lottery {
    struct BetInfo {
        uint256 answerBlockNumber;
        address payable bettor;
        byte challenges; //0xab...
    }

    address public owner;

    uint256 private _tail;
    uint256 private _head;
    mapping (uint256 => BetInfo) private _bets;
    uint256 private _pot;
    
    uint256 constant internal BET_AMOUNT = 5 * 10 ** 15;
    uint256 constant internal BET_BLOCK_INTERVAL = 3;
    uint256 constant internal BLOCK_LIMIT = 256;

    event BET(uint256 index, address bettor, uint256 amount, byte challenges, uint256 answerBlockNumber);

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

    function getPot() public view returns (uint256 pot) {
        return _pot;
    }

    /**
    * @dev 베팅을 한다. 유저는 0.005 ETH를 보내야 하고, 베팅을 1 byte 글자를 보낸다.
    * 큐에 저장된 베팅 정보는 이후 distribute 함수에서 해결된다.
    * @param challenges 유저가 베팅하는 글자
    * @return 함수가 잘 수행되었는지 확인히는 bool 값
    */
    function bet(byte challenges) public payable returns (bool result) {        
        // check the paater ether is sent
        require(msg.value == BET_AMOUNT, "Not enoughf ETH");

        // push bet to the queue
        require(pushBet(challenges), "Fail to add a new Bet Info");

        // emit evnet
        emit BET(_tail - 1, msg.sender, msg.value, challenges, block.number + BET_BLOCK_INTERVAL);

        return true;
    }
        // save ther bet to the queue

    // 결과값 검증
        // check the answer

    function getBetInfo(uint256 index) public view returns (uint256 answerBlockNumber, address bettor, byte challenges) {
        BetInfo memory b = _bets[index];
        answerBlockNumber = b.answerBlockNumber;
        bettor = b.bettor;
        challenges = b.challenges;
    }

    // function pushBet(byte challenges) public returns (bool) {
    function pushBet(byte challenges) internal returns (bool) {
        BetInfo memory b;
        b.bettor = msg.sender;
        b.answerBlockNumber = block.number + BET_BLOCK_INTERVAL;
        b.challenges = challenges;

        _bets[_tail] = b;
        _tail++;

        return true;
    }

    // function popBet(uint256 index) public returns (bool) {
    function popBet(uint256 index) internal returns (bool) {
        delete _bets[index];
        return true;
    }
} 




lottery.test.js





const assertRevert = require("./assertRevert");
const Lottery = artifacts.require("Lottery");

contract('Lottery', function (deployer, user1, user2) {
    let lottery;
    beforeEach(async () => {
        lottery = await Lottery.new();
    })

    //it.only('getPot should return current pot', async () => {
    it('getPot should return current pot', async () => {
        let pot = await lottery.getPot();
        assert.equal(pot, 0);
    })

    describe('Bet', function () {
        console.log(user1);
        it.only('should fail when the bet money is not 0.005 ETH', async () => {
            // Fail transaction
            await assertRevert(lottery.bet('0xab', { from: user1, value: 4000000000000000 }))
            
            // transaction object {chainId, value, to, from, gas, gasPrice}
        })

        it('should put the bet to the bet queue with 1 bet', async () => {
            // bet
            await lottery.bet('0xab', { from: user1, value: 5000000000000000 })
            // check contract balance == 0.005

            // check bet info

            // check log
        })
    })
});

 

 

 

중간에 제가 노트북을 리부트해서 서버의 정보가 날라가서 일까요??

ganache-cli -d -m tutorial

로 다시 구동했는데, user1를 출력해보면 undefined가 나옵니다. ㅠㅠ

dappethereum

Câu trả lời 3

0

아 저도 똑같은 에러가 났는데 덕분에 해결했습니다. 감사합니다. 허허. 따봉 누르고 갑니다.

0

저는 pushBet함수에서 b.bettor = msg.sender; 이 부분 에러가 나던데요,,,ㅜ

0

harang님의 프로필 이미지
harang
Người đặt câu hỏi

아 ㅠㅠㅠ 오타가 있었습니다.

contract('Lottery', function (deployer, user1, user2) {

=> []가 빠져있었네요 ㅠㅠㅠㅠㅠ!!!

contract('Lottery', function ([deployer, user1, user2]) {

 

Hình ảnh hồ sơ của harang9105
harang9105

câu hỏi đã được viết

Đặt câu hỏi