org.bitcoinj.core.Utils.checkBitLE()方法的使用及代码示例

x33g5p2x  于2022-02-01 转载在 其他  
字(9.3k)|赞(0)|评价(0)|浏览(71)

本文整理了Java中org.bitcoinj.core.Utils.checkBitLE()方法的一些代码示例,展示了Utils.checkBitLE()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Utils.checkBitLE()方法的具体详情如下:
包路径:org.bitcoinj.core.Utils
类名称:Utils
方法名:checkBitLE

Utils.checkBitLE介绍

[英]Checks if the given bit is set in data, using little endian (not the same as Java native big endian)
[中]使用little-endian(与Java原生big-endian不同)检查给定位是否在数据中设置

代码示例

代码示例来源:origin: fr.acinq/bitcoinj-core

/**
 * Returns true if the given object matches the filter either because it was inserted, or because we have a
 * false-positive.
 */
public synchronized boolean contains(byte[] object) {
  for (int i = 0; i < hashFuncs; i++) {
    if (!Utils.checkBitLE(data, murmurHash3(data, nTweak, i, object)))
      return false;
  }
  return true;
}

代码示例来源:origin: cash.bitcoinj/bitcoinj-core

/**
 * Returns true if the given object matches the filter either because it was inserted, or because we have a
 * false-positive.
 */
public synchronized boolean contains(byte[] object) {
  for (int i = 0; i < hashFuncs; i++) {
    if (!Utils.checkBitLE(data, murmurHash3(data, nTweak, i, object)))
      return false;
  }
  return true;
}

代码示例来源:origin: greenaddress/GreenBits

/**
 * Returns true if the given object matches the filter either because it was inserted, or because we have a
 * false-positive.
 */
public synchronized boolean contains(byte[] object) {
  for (int i = 0; i < hashFuncs; i++) {
    if (!Utils.checkBitLE(data, murmurHash3(data, nTweak, i, object)))
      return false;
  }
  return true;
}

代码示例来源:origin: HashEngineering/dashj

/**
 * Returns true if the given object matches the filter either because it was inserted, or because we have a
 * false-positive.
 */
public synchronized boolean contains(byte[] object) {
  for (int i = 0; i < hashFuncs; i++) {
    if (!Utils.checkBitLE(data, murmurHash3(data, nTweak, i, object)))
      return false;
  }
  return true;
}

代码示例来源:origin: greenaddress/GreenBits

private static void traverseAndBuild(int height, int pos, List<Sha256Hash> allLeafHashes, byte[] includeBits,
                   List<Boolean> matchedChildBits, List<Sha256Hash> resultHashes) {
  boolean parentOfMatch = false;
  // Is this node a parent of at least one matched hash?
  for (int p = pos << height; p < (pos+1) << height && p < allLeafHashes.size(); p++) {
    if (Utils.checkBitLE(includeBits, p)) {
      parentOfMatch = true;
      break;
    }
  }
  // Store as a flag bit.
  matchedChildBits.add(parentOfMatch);
  if (height == 0 || !parentOfMatch) {
    // If at height 0, or nothing interesting below, store hash and stop.
    resultHashes.add(calcHash(height, pos, allLeafHashes));
  } else {
    // Otherwise descend into the subtrees.
    int h = height - 1;
    int p = pos * 2;
    traverseAndBuild(h, p, allLeafHashes, includeBits, matchedChildBits, resultHashes);
    if (p + 1 < getTreeWidth(allLeafHashes.size(), h))
      traverseAndBuild(h, p + 1, allLeafHashes, includeBits, matchedChildBits, resultHashes);
  }
}

代码示例来源:origin: cash.bitcoinj/bitcoinj-core

private static void traverseAndBuild(int height, int pos, List<Sha256Hash> allLeafHashes, byte[] includeBits,
                   List<Boolean> matchedChildBits, List<Sha256Hash> resultHashes) {
  boolean parentOfMatch = false;
  // Is this node a parent of at least one matched hash?
  for (int p = pos << height; p < (pos+1) << height && p < allLeafHashes.size(); p++) {
    if (Utils.checkBitLE(includeBits, p)) {
      parentOfMatch = true;
      break;
    }
  }
  // Store as a flag bit.
  matchedChildBits.add(parentOfMatch);
  if (height == 0 || !parentOfMatch) {
    // If at height 0, or nothing interesting below, store hash and stop.
    resultHashes.add(calcHash(height, pos, allLeafHashes));
  } else {
    // Otherwise descend into the subtrees.
    int h = height - 1;
    int p = pos * 2;
    traverseAndBuild(h, p, allLeafHashes, includeBits, matchedChildBits, resultHashes);
    if (p + 1 < getTreeWidth(allLeafHashes.size(), h))
      traverseAndBuild(h, p + 1, allLeafHashes, includeBits, matchedChildBits, resultHashes);
  }
}

代码示例来源:origin: HashEngineering/dashj

private static void traverseAndBuild(int height, int pos, List<Sha256Hash> allLeafHashes, byte[] includeBits,
                   List<Boolean> matchedChildBits, List<Sha256Hash> resultHashes) {
  boolean parentOfMatch = false;
  // Is this node a parent of at least one matched hash?
  for (int p = pos << height; p < (pos+1) << height && p < allLeafHashes.size(); p++) {
    if (Utils.checkBitLE(includeBits, p)) {
      parentOfMatch = true;
      break;
    }
  }
  // Store as a flag bit.
  matchedChildBits.add(parentOfMatch);
  if (height == 0 || !parentOfMatch) {
    // If at height 0, or nothing interesting below, store hash and stop.
    resultHashes.add(calcHash(height, pos, allLeafHashes));
  } else {
    // Otherwise descend into the subtrees.
    int h = height - 1;
    int p = pos * 2;
    traverseAndBuild(h, p, allLeafHashes, includeBits, matchedChildBits, resultHashes);
    if (p + 1 < getTreeWidth(allLeafHashes.size(), h))
      traverseAndBuild(h, p + 1, allLeafHashes, includeBits, matchedChildBits, resultHashes);
  }
}

代码示例来源:origin: fr.acinq/bitcoinj-core

private static void traverseAndBuild(int height, int pos, List<Sha256Hash> allLeafHashes, byte[] includeBits,
                   List<Boolean> matchedChildBits, List<Sha256Hash> resultHashes) {
  boolean parentOfMatch = false;
  // Is this node a parent of at least one matched hash?
  for (int p = pos << height; p < (pos+1) << height && p < allLeafHashes.size(); p++) {
    if (Utils.checkBitLE(includeBits, p)) {
      parentOfMatch = true;
      break;
    }
  }
  // Store as a flag bit.
  matchedChildBits.add(parentOfMatch);
  if (height == 0 || !parentOfMatch) {
    // If at height 0, or nothing interesting below, store hash and stop.
    resultHashes.add(calcHash(height, pos, allLeafHashes));
  } else {
    // Otherwise descend into the subtrees.
    int h = height - 1;
    int p = pos * 2;
    traverseAndBuild(h, p, allLeafHashes, includeBits, matchedChildBits, resultHashes);
    if (p + 1 < getTreeWidth(allLeafHashes.size(), h))
      traverseAndBuild(h, p + 1, allLeafHashes, includeBits, matchedChildBits, resultHashes);
  }
}

代码示例来源:origin: fr.acinq/bitcoinj-core

boolean parentOfMatch = checkBitLE(matchedChildBits, used.bitsUsed++);
if (height == 0 || !parentOfMatch) {

代码示例来源:origin: greenaddress/GreenBits

private Sha256Hash recursiveExtractHashes(int height, int pos, ValuesUsed used, List<Sha256Hash> matchedHashes) throws VerificationException {
  if (used.bitsUsed >= matchedChildBits.length*8) {
    // overflowed the bits array - failure
    throw new VerificationException("PartialMerkleTree overflowed its bits array");
  }
  boolean parentOfMatch = checkBitLE(matchedChildBits, used.bitsUsed++);
  if (height == 0 || !parentOfMatch) {
    // if at height 0, or nothing interesting below, use stored hash and do not descend
    if (used.hashesUsed >= hashes.size()) {
      // overflowed the hash array - failure
      throw new VerificationException("PartialMerkleTree overflowed its hash array");
    }
    Sha256Hash hash = hashes.get(used.hashesUsed++);
    if (height == 0 && parentOfMatch) // in case of height 0, we have a matched txid
      matchedHashes.add(hash);
    return hash;
  } else {
    // otherwise, descend into the subtrees to extract matched txids and hashes
    byte[] left = recursiveExtractHashes(height - 1, pos * 2, used, matchedHashes).getBytes(), right;
    if (pos * 2 + 1 < getTreeWidth(transactionCount, height-1)) {
      right = recursiveExtractHashes(height - 1, pos * 2 + 1, used, matchedHashes).getBytes();
      if (Arrays.equals(right, left))
        throw new VerificationException("Invalid merkle tree with duplicated left/right branches");
    } else {
      right = left;
    }
    // and combine them before returning
    return combineLeftRight(left, right);
  }
}

代码示例来源:origin: cash.bitcoinj/bitcoinj-core

private Sha256Hash recursiveExtractHashes(int height, int pos, ValuesUsed used, List<Sha256Hash> matchedHashes) throws VerificationException {
  if (used.bitsUsed >= matchedChildBits.length*8) {
    // overflowed the bits array - failure
    throw new VerificationException("PartialMerkleTree overflowed its bits array");
  }
  boolean parentOfMatch = checkBitLE(matchedChildBits, used.bitsUsed++);
  if (height == 0 || !parentOfMatch) {
    // if at height 0, or nothing interesting below, use stored hash and do not descend
    if (used.hashesUsed >= hashes.size()) {
      // overflowed the hash array - failure
      throw new VerificationException("PartialMerkleTree overflowed its hash array");
    }
    Sha256Hash hash = hashes.get(used.hashesUsed++);
    if (height == 0 && parentOfMatch) // in case of height 0, we have a matched txid
      matchedHashes.add(hash);
    return hash;
  } else {
    // otherwise, descend into the subtrees to extract matched txids and hashes
    byte[] left = recursiveExtractHashes(height - 1, pos * 2, used, matchedHashes).getBytes(), right;
    if (pos * 2 + 1 < getTreeWidth(transactionCount, height-1)) {
      right = recursiveExtractHashes(height - 1, pos * 2 + 1, used, matchedHashes).getBytes();
      if (Arrays.equals(right, left))
        throw new VerificationException("Invalid merkle tree with duplicated left/right branches");
    } else {
      right = left;
    }
    // and combine them before returning
    return combineLeftRight(left, right);
  }
}

代码示例来源:origin: HashEngineering/dashj

private Sha256Hash recursiveExtractHashes(int height, int pos, ValuesUsed used, List<Sha256Hash> matchedHashes) throws VerificationException {
  if (used.bitsUsed >= matchedChildBits.length*8) {
    // overflowed the bits array - failure
    throw new VerificationException("PartialMerkleTree overflowed its bits array");
  }
  boolean parentOfMatch = checkBitLE(matchedChildBits, used.bitsUsed++);
  if (height == 0 || !parentOfMatch) {
    // if at height 0, or nothing interesting below, use stored hash and do not descend
    if (used.hashesUsed >= hashes.size()) {
      // overflowed the hash array - failure
      throw new VerificationException("PartialMerkleTree overflowed its hash array");
    }
    Sha256Hash hash = hashes.get(used.hashesUsed++);
    if (height == 0 && parentOfMatch) // in case of height 0, we have a matched txid
      matchedHashes.add(hash);
    return hash;
  } else {
    // otherwise, descend into the subtrees to extract matched txids and hashes
    byte[] left = recursiveExtractHashes(height - 1, pos * 2, used, matchedHashes).getBytes(), right;
    if (pos * 2 + 1 < getTreeWidth(transactionCount, height-1)) {
      right = recursiveExtractHashes(height - 1, pos * 2 + 1, used, matchedHashes).getBytes();
      if (Arrays.equals(right, left))
        throw new VerificationException("Invalid merkle tree with duplicated left/right branches");
    } else {
      right = left;
    }
    // and combine them before returning
    return combineLeftRight(left, right);
  }
}

相关文章