func: function createBitcoinAddressPrefixTask(bytes prefix, uint256 reward, uint256 requestPublicXPoint, uint256 requestPublicYPoint) public isLastestVersion {
          require(prefix.length > 5);
          require(prefix[0] == "1");
          require(prefix[1] != "1"); 
          require(isValidBicoinAddressPrefix(prefix));
          require(isValidPublicKey(requestPublicXPoint, requestPublicYPoint));
          if (reward > 0) {
              token.transferFrom(tx.origin, this, reward);
          }
  
          bytes32 data;
          assembly {
              data := mload(add(prefix, 32))
          }
          
          Task memory task = Task({
              taskType: TaskType.BITCOIN_ADDRESS_PREFIX,
              taskId: nextTaskId,
              creator: tx.origin,
              reward: reward,
              data: data,
              dataLength: prefix.length,
              requestPublicXPoint: requestPublicXPoint,
              requestPublicYPoint: requestPublicYPoint,
              answerPrivateKey: 0
          });
          tasks.push(task);
          indexOfTaskId[nextTaskId] = tasks.length; 
          TaskCreated(nextTaskId);
          nextTaskId++;
      }