Home > Net >  SOLIDITY: Trying to get working Mapping/Struct for giving a "player" multiple "ticket
SOLIDITY: Trying to get working Mapping/Struct for giving a "player" multiple "ticket

Time:09-24

Thanks in advance for getting here and trying to see my bad code.

So, I have some trouble on trying to "sell" tickets to people and give them the possibility to buy >=1.

Now, the problem, is that i can't associate an array of 6 numbers to the ticket.

What is wrong? Thanks!

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";

contract Lottery is Ownable {
    
   uint256 constant ticketprice = 1 ether;
   address  pool = addresshere;
   uint ID = 0;
   uint256 startinglottery;
   
   struct Picket { 
   uint ID;
   uint[6] ticket;
   }
   
   mapping (address => Picket) hope;
   address[] players;
   
    constructor() {
    startinglottery = 0;
    }
    
    
    function StartLottery() public onlyOwner {
    startinglottery = 1;  
    }
    
    function EndLottery() public onlyOwner {
        
    startinglottery = 0;
    }
    
    function BuyTicket(address _address) public payable {
        //check
        require(msg.value >= ticketprice, "not enought money!");
        require(startinglottery == 1, "lottery isn't started.");
        //pay
        payable(pool).transfer(msg.value);
        //do stuff
        Picket memory picket = hope[_address];
        picket.ID = ID;
        picket.ticket = [1,2,3,4,5]; //should be random with chainlink, but trying to understand the basic one.
        players.push(_address);
        ID  ;
        
    }
    
    function getTicket(address _address) public view returns(uint, uint[6] memory) {
        return (hope[_address].ID, hope[_address].ticket);
    }

    
}

CodePudding user response:

picket.ticket = [1,2,3,4,5];

Here you're trying to assign an array of 5 items to an array of 6 items. You need to explicitly define the 6th value - which is the default value of 0.

Also, since you're passing hardcoded low values, the compiler incorrectly marks them as uint8. You need to cast at least the first one to uint256 (or its alias uint) for the compiler to recognize the correct datatype.

picket.ticket = [uint256(1), 2, 3, 4, 5, 0];
  • Related