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

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

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

Utils.setBitLE介绍

[英]Sets the given bit in data to one, using little endian (not the same as Java native big endian)
[中]使用little endian(与Java原生big endian不同)将数据中的给定位设置为1

代码示例

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

/** Insert the given arbitrary data into the filter */
public synchronized void insert(byte[] object) {
  for (int i = 0; i < hashFuncs; i++)
    Utils.setBitLE(data, murmurHash3(data, nTweak, i, object));
}

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

/** Insert the given arbitrary data into the filter */
public synchronized void insert(byte[] object) {
  for (int i = 0; i < hashFuncs; i++)
    Utils.setBitLE(data, murmurHash3(data, nTweak, i, object));
}

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

/** Insert the given arbitrary data into the filter */
public synchronized void insert(byte[] object) {
  for (int i = 0; i < hashFuncs; i++)
    Utils.setBitLE(data, murmurHash3(data, nTweak, i, object));
}

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

/** Insert the given arbitrary data into the filter */
public synchronized void insert(byte[] object) {
  for (int i = 0; i < hashFuncs; i++)
    Utils.setBitLE(data, murmurHash3(data, nTweak, i, object));
}

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

/**
 * Provide an array of output objects, with nulls indicating that the output was missing. The bitset will
 * be calculated from this.
 */
public UTXOsMessage(NetworkParameters params, List<TransactionOutput> outputs, long[] heights, Sha256Hash chainHead, long height) {
  super(params);
  hits = new byte[(int) Math.ceil(outputs.size() / 8.0)];
  for (int i = 0; i < outputs.size(); i++) {
    if (outputs.get(i) != null)
      Utils.setBitLE(hits, i);
  }
  this.outputs = new ArrayList<>(outputs.size());
  for (TransactionOutput output : outputs) {
    if (output != null) this.outputs.add(output);
  }
  this.chainHead = chainHead;
  this.height = height;
  this.heights = Arrays.copyOf(heights, heights.length);
}

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

/**
 * Provide an array of output objects, with nulls indicating that the output was missing. The bitset will
 * be calculated from this.
 */
public UTXOsMessage(NetworkParameters params, List<TransactionOutput> outputs, long[] heights, Sha256Hash chainHead, long height) {
  super(params);
  hits = new byte[(int) Math.ceil(outputs.size() / 8.0)];
  for (int i = 0; i < outputs.size(); i++) {
    if (outputs.get(i) != null)
      Utils.setBitLE(hits, i);
  }
  this.outputs = new ArrayList<TransactionOutput>(outputs.size());
  for (TransactionOutput output : outputs) {
    if (output != null) this.outputs.add(output);
  }
  this.chainHead = chainHead;
  this.height = height;
  this.heights = Arrays.copyOf(heights, heights.length);
}

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

/**
 * Provide an array of output objects, with nulls indicating that the output was missing. The bitset will
 * be calculated from this.
 */
public UTXOsMessage(NetworkParameters params, List<TransactionOutput> outputs, long[] heights, Sha256Hash chainHead, long height) {
  super(params);
  hits = new byte[(int) Math.ceil(outputs.size() / 8.0)];
  for (int i = 0; i < outputs.size(); i++) {
    if (outputs.get(i) != null)
      Utils.setBitLE(hits, i);
  }
  this.outputs = new ArrayList<>(outputs.size());
  for (TransactionOutput output : outputs) {
    if (output != null) this.outputs.add(output);
  }
  this.chainHead = chainHead;
  this.height = height;
  this.heights = Arrays.copyOf(heights, heights.length);
}

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

/**
 * Provide an array of output objects, with nulls indicating that the output was missing. The bitset will
 * be calculated from this.
 */
public UTXOsMessage(NetworkParameters params, List<TransactionOutput> outputs, long[] heights, Sha256Hash chainHead, long height) {
  super(params);
  hits = new byte[(int) Math.ceil(outputs.size() / 8.0)];
  for (int i = 0; i < outputs.size(); i++) {
    if (outputs.get(i) != null)
      Utils.setBitLE(hits, i);
  }
  this.outputs = new ArrayList<TransactionOutput>(outputs.size());
  for (TransactionOutput output : outputs) {
    if (output != null) this.outputs.add(output);
  }
  this.chainHead = chainHead;
  this.height = height;
  this.heights = Arrays.copyOf(heights, heights.length);
}

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

/**
 * Calculates a PMT given the list of leaf hashes and which leaves need to be included. The relevant interior hashes
 * are calculated and a new PMT returned.
 */
public static PartialMerkleTree buildFromLeaves(NetworkParameters params, byte[] includeBits, List<Sha256Hash> allLeafHashes) {
  // Calculate height of the tree.
  int height = 0;
  while (getTreeWidth(allLeafHashes.size(), height) > 1)
    height++;
  List<Boolean> bitList = new ArrayList<Boolean>();
  List<Sha256Hash> hashes = new ArrayList<Sha256Hash>();
  traverseAndBuild(height, 0, allLeafHashes, includeBits, bitList, hashes);
  byte[] bits = new byte[(int)Math.ceil(bitList.size() / 8.0)];
  for (int i = 0; i < bitList.size(); i++)
    if (bitList.get(i))
      Utils.setBitLE(bits, i);
  return new PartialMerkleTree(params, bits, hashes, allLeafHashes.size());
}

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

/**
 * Calculates a PMT given the list of leaf hashes and which leaves need to be included. The relevant interior hashes
 * are calculated and a new PMT returned.
 */
public static PartialMerkleTree buildFromLeaves(NetworkParameters params, byte[] includeBits, List<Sha256Hash> allLeafHashes) {
  // Calculate height of the tree.
  int height = 0;
  while (getTreeWidth(allLeafHashes.size(), height) > 1)
    height++;
  List<Boolean> bitList = new ArrayList<>();
  List<Sha256Hash> hashes = new ArrayList<>();
  traverseAndBuild(height, 0, allLeafHashes, includeBits, bitList, hashes);
  byte[] bits = new byte[(int)Math.ceil(bitList.size() / 8.0)];
  for (int i = 0; i < bitList.size(); i++)
    if (bitList.get(i))
      Utils.setBitLE(bits, i);
  return new PartialMerkleTree(params, bits, hashes, allLeafHashes.size());
}

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

/**
 * Calculates a PMT given the list of leaf hashes and which leaves need to be included. The relevant interior hashes
 * are calculated and a new PMT returned.
 */
public static PartialMerkleTree buildFromLeaves(NetworkParameters params, byte[] includeBits, List<Sha256Hash> allLeafHashes) {
  // Calculate height of the tree.
  int height = 0;
  while (getTreeWidth(allLeafHashes.size(), height) > 1)
    height++;
  List<Boolean> bitList = new ArrayList<Boolean>();
  List<Sha256Hash> hashes = new ArrayList<Sha256Hash>();
  traverseAndBuild(height, 0, allLeafHashes, includeBits, bitList, hashes);
  byte[] bits = new byte[(int)Math.ceil(bitList.size() / 8.0)];
  for (int i = 0; i < bitList.size(); i++)
    if (bitList.get(i))
      Utils.setBitLE(bits, i);
  return new PartialMerkleTree(params, bits, hashes, allLeafHashes.size());
}

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

/**
 * Calculates a PMT given the list of leaf hashes and which leaves need to be included. The relevant interior hashes
 * are calculated and a new PMT returned.
 */
public static PartialMerkleTree buildFromLeaves(NetworkParameters params, byte[] includeBits, List<Sha256Hash> allLeafHashes) {
  // Calculate height of the tree.
  int height = 0;
  while (getTreeWidth(allLeafHashes.size(), height) > 1)
    height++;
  List<Boolean> bitList = new ArrayList<>();
  List<Sha256Hash> hashes = new ArrayList<>();
  traverseAndBuild(height, 0, allLeafHashes, includeBits, bitList, hashes);
  byte[] bits = new byte[(int)Math.ceil(bitList.size() / 8.0)];
  for (int i = 0; i < bitList.size(); i++)
    if (bitList.get(i))
      Utils.setBitLE(bits, i);
  return new PartialMerkleTree(params, bits, hashes, allLeafHashes.size());
}

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

/**
 * Creates a new FilteredBlock from the given Block, using this filter to select transactions. Matches can cause the
 * filter to be updated with the matched element, this ensures that when a filter is applied to a block, spends of
 * matched transactions are also matched. However it means this filter can be mutated by the operation. The returned
 * filtered block already has the matched transactions associated with it.
 */
public synchronized FilteredBlock applyAndUpdate(Block block) {
  List<Transaction> txns = block.getTransactions();
  List<Sha256Hash> txHashes = new ArrayList<Sha256Hash>(txns.size());
  List<Transaction> matched = Lists.newArrayList();
  byte[] bits = new byte[(int) Math.ceil(txns.size() / 8.0)];
  for (int i = 0; i < txns.size(); i++) {
    Transaction tx = txns.get(i);
    txHashes.add(tx.getHash());
    if (applyAndUpdate(tx)) {
      Utils.setBitLE(bits, i);
      matched.add(tx);
    }
  }
  PartialMerkleTree pmt = PartialMerkleTree.buildFromLeaves(block.getParams(), bits, txHashes);
  FilteredBlock filteredBlock = new FilteredBlock(block.getParams(), block.cloneAsHeader(), pmt);
  for (Transaction transaction : matched)
    filteredBlock.provideTransaction(transaction);
  return filteredBlock;
}

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

/**
 * Creates a new FilteredBlock from the given Block, using this filter to select transactions. Matches can cause the
 * filter to be updated with the matched element, this ensures that when a filter is applied to a block, spends of
 * matched transactions are also matched. However it means this filter can be mutated by the operation. The returned
 * filtered block already has the matched transactions associated with it.
 */
public synchronized FilteredBlock applyAndUpdate(Block block) {
  List<Transaction> txns = block.getTransactions();
  List<Sha256Hash> txHashes = new ArrayList<>(txns.size());
  List<Transaction> matched = Lists.newArrayList();
  byte[] bits = new byte[(int) Math.ceil(txns.size() / 8.0)];
  for (int i = 0; i < txns.size(); i++) {
    Transaction tx = txns.get(i);
    txHashes.add(tx.getHash());
    if (applyAndUpdate(tx)) {
      Utils.setBitLE(bits, i);
      matched.add(tx);
    }
  }
  PartialMerkleTree pmt = PartialMerkleTree.buildFromLeaves(block.getParams(), bits, txHashes);
  FilteredBlock filteredBlock = new FilteredBlock(block.getParams(), block.cloneAsHeader(), pmt);
  for (Transaction transaction : matched)
    filteredBlock.provideTransaction(transaction);
  return filteredBlock;
}

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

/**
 * Creates a new FilteredBlock from the given Block, using this filter to select transactions. Matches can cause the
 * filter to be updated with the matched element, this ensures that when a filter is applied to a block, spends of
 * matched transactions are also matched. However it means this filter can be mutated by the operation. The returned
 * filtered block already has the matched transactions associated with it.
 */
public synchronized FilteredBlock applyAndUpdate(Block block) {
  List<Transaction> txns = block.getTransactions();
  List<Sha256Hash> txHashes = new ArrayList<Sha256Hash>(txns.size());
  List<Transaction> matched = Lists.newArrayList();
  byte[] bits = new byte[(int) Math.ceil(txns.size() / 8.0)];
  for (int i = 0; i < txns.size(); i++) {
    Transaction tx = txns.get(i);
    txHashes.add(tx.getHash());
    if (applyAndUpdate(tx)) {
      Utils.setBitLE(bits, i);
      matched.add(tx);
    }
  }
  PartialMerkleTree pmt = PartialMerkleTree.buildFromLeaves(block.getParams(), bits, txHashes);
  FilteredBlock filteredBlock = new FilteredBlock(block.getParams(), block.cloneAsHeader(), pmt);
  for (Transaction transaction : matched)
    filteredBlock.provideTransaction(transaction);
  return filteredBlock;
}

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

/**
 * Creates a new FilteredBlock from the given Block, using this filter to select transactions. Matches can cause the
 * filter to be updated with the matched element, this ensures that when a filter is applied to a block, spends of
 * matched transactions are also matched. However it means this filter can be mutated by the operation. The returned
 * filtered block already has the matched transactions associated with it.
 */
public synchronized FilteredBlock applyAndUpdate(Block block) {
  List<Transaction> txns = block.getTransactions();
  List<Sha256Hash> txHashes = new ArrayList<>(txns.size());
  List<Transaction> matched = Lists.newArrayList();
  byte[] bits = new byte[(int) Math.ceil(txns.size() / 8.0)];
  for (int i = 0; i < txns.size(); i++) {
    Transaction tx = txns.get(i);
    txHashes.add(tx.getHash());
    if (applyAndUpdate(tx)) {
      Utils.setBitLE(bits, i);
      matched.add(tx);
    }
  }
  PartialMerkleTree pmt = PartialMerkleTree.buildFromLeaves(block.getParams(), bits, txHashes);
  FilteredBlock filteredBlock = new FilteredBlock(block.getParams(), block.cloneAsHeader(), pmt);
  for (Transaction transaction : matched)
    filteredBlock.provideTransaction(transaction);
  return filteredBlock;
}

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

@Test(expected = VerificationException.class)
public void merkleTreeMalleability() throws Exception {
  List<Sha256Hash> hashes = Lists.newArrayList();
  for (byte i = 1; i <= 10; i++) hashes.add(numAsHash(i));
  hashes.add(numAsHash(9));
  hashes.add(numAsHash(10));
  byte[] includeBits = new byte[2];
  Utils.setBitLE(includeBits, 9);
  Utils.setBitLE(includeBits, 10);
  PartialMerkleTree pmt = PartialMerkleTree.buildFromLeaves(PARAMS, includeBits, hashes);
  List<Sha256Hash> matchedHashes = Lists.newArrayList();
  pmt.getTxnHashAndMerkleRoot(matchedHashes);
}

相关文章