func: function stake(address staker, address whitelistAddress) external returns (bool success) {
      require(whitelist[whitelistAddress].stakerAddress == 0x0);
      require(staker == msg.sender || (msg.sender == address(token) && staker == tx.origin));
  
      whitelist[whitelistAddress].stakerAddress = staker;
      whitelist[whitelistAddress].stakedAmount = requiredStake;
  
      deposit(staker, requiredStake);
      emit Staked(staker);
      return true;
    }