code: function verifyData(packet) {
      try {
          //取出公钥
          let key = Buffer.from(packet.data.pubkey, 'hex'); 
          //验证公钥是否是一个合理构造
          const pub = secp256k1.keyPair({ pub: key }); 
          if(!pub.validate()) {
              return false;
          }
          //至此，证明了公钥是合理的结构
  
          //取待校验数据，注意序列化时使用了属性名自然排序，因此要求签名时也必须使用属性名自然排序
          let src = Buffer.from(stringify(packet.data));
  
          //利用公钥校验数据
          if(secp256k1.verify(
              hash256(src),                       //将待校验的数据对象规整为32字节哈希
              Buffer.from(packet.sig, 'hex'),     //取签名信息
              key,                                //公钥
          )) {
              //至此，证明了数据签名确实是使用和公钥匹配的私钥加密而来的
              if(decode(packet.data.addr).hash.toString('hex') == hash160(key).toString('hex')) {
                  //至此，证明了数据中的地址和公钥是匹配的，持此令牌的用户对该地址拥有支配权
                  return true;  //校验成功
              }
          }
      } catch (e) {
  
      }
  
      return false;
  }
docs: 验证持令牌者，拥有对令牌中地址的支配权
  @param {Object} packet
  {
  data:               //等待校验的数据
  {
  pubkey,         //用于签名校验的公钥
  ...             //其他字段
  },
  sig                 //数据的签名
  }