func: function stakeWithSignature(
          bytes32 _proposalId,
          uint _vote,
          uint _amount,
          uint _nonce,
          uint _signatureType,
          bytes _signature
          )
          external
          returns(bool)
          {
          require(stakeSignatures[_signature] == false);
          
          bytes32 delegationDigest;
          if (_signatureType == 2) {
              delegationDigest = keccak256(
                  abi.encodePacked(
                      DELEGATION_HASH_EIP712, keccak256(
                          abi.encodePacked(
                             address(this),
                            _proposalId,
                            _vote,
                            _amount,
                            _nonce)))
              );
          } else {
              delegationDigest = keccak256(
                  abi.encodePacked(
                      ETH_SIGN_PREFIX, keccak256(
                          abi.encodePacked(
                              address(this),
                             _proposalId,
                             _vote,
                             _amount,
                             _nonce)))
              );
          }
          address staker = delegationDigest.recover(_signature);
          
          require(staker!=address(0));
          stakeSignatures[_signature] = true;
          return _stake(_proposalId,_vote,_amount,staker);
      }