func: function revokeHashPreSigned(
          bytes _signature,
          bytes32 _hashToRevoke,
          uint256 _gasPrice)
        public
      returns (bool)
      {
          uint256 gas = gasleft();
          address from = recoverRevokeHash(_signature, _hashToRevoke, _gasPrice);
          require(from != address(0), "Invalid signature provided.");
          
          bytes32 txHash = getRevokeHash(_hashToRevoke, _gasPrice);
          require(!invalidHashes[from][txHash], "Transaction has already been executed.");
          invalidHashes[from][txHash] = true;
          nonces[from]++;
          
          invalidHashes[from][_hashToRevoke] = true;
          
          if (_gasPrice > 0) {
              gas = 35000 + gas.sub(gasleft());
              require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
          }
          
          emit HashRedeemed(txHash, from);
          return true;
      }