# xWin MasterChef

### xWinDefi

#### UserInfo

```solidity
struct UserInfo {
  uint256 amount;
  uint256 blockstart;
}
```

#### PoolInfo

```solidity
struct PoolInfo {
  address lpToken;
  uint256 rewardperblock;
  uint256 multiplier;
}
```

#### DepositFarm

```solidity
function DepositFarm(uint256 _pid, uint256 _amount) public
```

#### pendingXwin

```solidity
function pendingXwin(uint256 _pid, address _user) public view returns (uint256)
```

#### WithdrawFarm

```solidity
function WithdrawFarm(uint256 _pid, uint256 _amount) public
```

#### userInfo

```solidity
mapping(uint256 => mapping(address => struct xWinDefi.UserInfo)) userInfo
```

#### poolInfo

```solidity
struct xWinDefi.PoolInfo[] poolInfo
```

### xWinMasterChef

#### UserInfo

```solidity
struct UserInfo {
  uint256 amount;
  uint256 rewardDebt;
}
```

#### PoolInfo

```solidity
struct PoolInfo {
  contract IERC20Upgradeable lpToken;
  uint256 endPeriod;
  uint256 allocPoint;
  uint256 lastRewardBlock;
  uint256 accCakePerShare;
  uint256 totalDeposit;
}
```

#### xWinPriceMaster

```solidity
contract IxWinPriceMaster xWinPriceMaster
```

#### rewardsToken

```solidity
contract IERC20Upgradeable rewardsToken
```

#### usdtToken

```solidity
address usdtToken
```

#### burnAddress

```solidity
address burnAddress
```

#### \_xwinDefi

```solidity
contract xWinDefi _xwinDefi
```

#### poolInfo

```solidity
struct xWinMasterChef.PoolInfo[] poolInfo
```

#### burnFee

```solidity
uint256 burnFee
```

#### xwinPerBlock

```solidity
uint256 xwinPerBlock
```

#### totalAllocPoint

```solidity
uint256 totalAllocPoint
```

#### startBlock

```solidity
uint256 startBlock
```

#### BONUS\_MULTIPLIER

```solidity
uint256 BONUS_MULTIPLIER
```

#### xwinpid

```solidity
uint256 xwinpid
```

#### blocksPerDay

```solidity
uint256 blocksPerDay
```

#### userInfo

```solidity
mapping(uint256 => mapping(address => struct xWinMasterChef.UserInfo)) userInfo
```

mapping of a nft token to its current properties

#### Deposit

```solidity
event Deposit(address user, uint256 pid, uint256 amount)
```

#### Withdraw

```solidity
event Withdraw(address user, uint256 pid, uint256 amount)
```

#### EmergencyWithdraw

```solidity
event EmergencyWithdraw(address user, uint256 pid, uint256 amount)
```

#### Received

```solidity
event Received(address, uint256)
```

#### initialize

```solidity
function initialize(string name, string symbol, address _usdtToken, uint256 _blocksPerDay) external
```

#### farmTokenByAdmin

```solidity
function farmTokenByAdmin() external
```

#### unFarmTokenByAdmin

```solidity
function unFarmTokenByAdmin() external
```

#### updateProperties

```solidity
function updateProperties(contract IERC20Upgradeable _rewardsToken, uint256 _xwinpid, uint256 _xwinPerBlock) public
```

#### poolLength

```solidity
function poolLength() external view returns (uint256)
```

#### updateSmartContract

```solidity
function updateSmartContract(address _xwinDefiaddr, address _xWinPriceMaster) external
```

#### stopPool

```solidity
function stopPool(uint256 _pid) external
```

#### \_stopPool

```solidity
function _stopPool(uint256 _pid) internal
```

#### add

```solidity
function add(uint256 _allocPoint, contract IERC20Upgradeable _lpToken, uint256 _duration) external
```

#### set

```solidity
function set(uint256 _pid, uint256 _allocPoint, uint256 _newDuration) external
```

#### pendingRewards

```solidity
function pendingRewards(uint256 _pid, address _user) public view returns (uint256)
```

#### getMultiplier

```solidity
function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256)
```

#### massUpdatePools

```solidity
function massUpdatePools() public
```

#### updatePool

```solidity
function updatePool(uint256 _pid) public
```

#### harvestAll

```solidity
function harvestAll() external
```

#### deposit

```solidity
function deposit(uint256 _pid, uint256 _amount) external returns (uint256)
```

#### \_deposit

```solidity
function _deposit(uint256 _pid, uint256 _amount) internal returns (uint256 rewardAmount)
```

#### withdraw

```solidity
function withdraw(uint256 _pid, uint256 _amount) external returns (uint256 rewardAmount)
```

#### safexWINTransfer

```solidity
function safexWINTransfer(address _to, uint256 _amount) internal returns (uint256)
```

#### harvest

```solidity
function harvest(uint256 _pid) external returns (uint256)
```

#### emergencyWithdraw

```solidity
function emergencyWithdraw(uint256 _pid) external
```

#### setBurnFee

```solidity
function setBurnFee(uint256 _burnFee) external
```

#### setBonusMultiplier

```solidity
function setBonusMultiplier(uint256 _bonusMultiplier) external
```

#### setBlockPerDay

```solidity
function setBlockPerDay(uint256 _blocksPerDay) external
```

#### setUSDToken

```solidity
function setUSDToken(address _newUSDToken) external
```

#### getAPR

```solidity
function getAPR(uint256 _pid) external view returns (uint256 apr)
```

Returns the APR for a given pool

#### getPoolUserRewardPerBlock

```solidity
function getPoolUserRewardPerBlock(uint256 _pid, address _user) external view returns (uint256)
```

View the reward per block for a given pool and user
