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

x33g5p2x  于2022-01-30 转载在 其他  
字(5.7k)|赞(0)|评价(0)|浏览(69)

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

Transaction.getWitness介绍

[英]Get the transaction witness of an input
[中]

代码示例

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

|| coinBase.getWitness(0).getPushCount() != 1
    || coinBase.getWitness(0).getPush(0).length != 32))
  throw new VerificationException("Coinbase witness invalid");
for (int i = 1; i < transactions.size(); i++) {
  final byte[] witnessNonce = coinBase.getWitness(0).getPush(0);
  final byte[] witnessRoot = Sha256Hash.hashTwice(
      witnessMerkle, 0, 32,

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

private void checkWitness(Transaction tx, long index, Coin value, Set<VerifyFlag> verifyFlags) {
  if (verifyFlags.contains(VerifyFlag.SEGWIT) && isWitnessProgram()) {
    TransactionWitness witness = tx.getWitness((int) index);
    Script scriptCode = scriptCode(witness);
    LinkedList<byte[]> witnessStack = witnessStack(witness);
    executeScript(tx, index, scriptCode, witnessStack, value, true, verifyFlags);
    if (witnessStack.isEmpty())
      throw new ScriptException("Witness stack empty at end of script execution.");
    if (!castToBool(witnessStack.pollLast()))
      throw new ScriptException("Witness script execution resulted in a non-true stack: " + witnessStack);
  }
}

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

private void checkWitness(Transaction tx, long index, Coin value, Set<VerifyFlag> verifyFlags) {
  if (verifyFlags.contains(VerifyFlag.SEGWIT) && isWitnessProgram()) {
    TransactionWitness witness = tx.getWitness((int) index);
    Script scriptCode = scriptCode(witness);
    LinkedList<byte[]> witnessStack = witnessStack(witness);
    executeScript(tx, index, scriptCode, witnessStack, value, true, verifyFlags);
    if (witnessStack.isEmpty())
      throw new ScriptException(ScriptError.SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY, "Witness stack empty at end of script execution.");
    if (!castToBool(witnessStack.pollLast()))
      throw new ScriptException(ScriptError.SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH, "Witness script execution resulted in a non-true stack: " + witnessStack);
  }
}

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

private int getWitnessSigOpCount(int index, Script pkScript)
    throws VerificationException
{
  final TransactionInput in = inputs.get(index);
  final Script program;
  if (pkScript.isPayToScriptHash())
    program = Script.getRedeemScript(in.getScriptBytes());
  else
    program = pkScript;
  if (program.isSentToP2WSH()) {
    if (witnesses.size() < index + 1)
      throw new VerificationException("Expected witness not found");
    final TransactionWitness witness = getWitness(index);
    final byte[] scriptBytes = witness.getScriptBytes();
    return Script.getSigOpCount(scriptBytes, true);
  } else {
    return 0;
  }
}

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

protected void bitcoinSerializeToStream(OutputStream stream, int transactionOptions) throws IOException {
  boolean witSupported = (transactionOptions & TransactionOptions.WITNESS) != 0;
  boolean serializeWit = hasWitness() && witSupported;
  uint32ToByteStreamLE(version, stream);
  if (serializeWit) {
    stream.write(new byte[]{0, 1});
  }
  stream.write(new VarInt(inputs.size()).encode());
  for (TransactionInput in : inputs)
    in.bitcoinSerialize(stream);
  stream.write(new VarInt(outputs.size()).encode());
  for (TransactionOutput out : outputs)
    out.bitcoinSerialize(stream);
  if (serializeWit) {
    for (int i = 0; i < inputs.size(); i++) {
      TransactionWitness witness = getWitness(i);
      stream.write(new VarInt(witness.getPushCount()).encode());
      for (int y = 0; y < witness.getPushCount(); y++) {
        byte[] push = witness.getPush(y);
        stream.write(new VarInt(push.length).encode());
        stream.write(push);
      }
    }
  }
  uint32ToByteStreamLE(lockTime, stream);
}

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

protected void bitcoinSerializeToStream(OutputStream stream, int transactionOptions) throws IOException {
  boolean witSupported = (protocolVersion >= NetworkParameters.ProtocolVersion.WITNESS_VERSION.getBitcoinProtocolVersion())
      && (transactionOptions & TransactionOptions.WITNESS) != 0;
  boolean serializeWit = hasWitness() && witSupported;
  uint32ToByteStreamLE(version, stream);
  if (serializeWit) {
    stream.write(new byte[]{0, 1});
  }
  stream.write(new VarInt(inputs.size()).encode());
  for (TransactionInput in : inputs)
    in.bitcoinSerialize(stream);
  stream.write(new VarInt(outputs.size()).encode());
  for (TransactionOutput out : outputs)
    out.bitcoinSerialize(stream);
  if (serializeWit) {
    for (int i = 0; i < inputs.size(); i++) {
      TransactionWitness witness = getWitness(i);
      stream.write(new VarInt(witness.getPushCount()).encode());
      for (int y = 0; y < witness.getPushCount(); y++) {
        byte[] push = witness.getPush(y);
        stream.write(new VarInt(push.length).encode());
        stream.write(push);
      }
    }
  }
  uint32ToByteStreamLE(lockTime, stream);
}

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

/**
 * Create a new version of this transaction that serializes using the pre-SegWit method,
 * excluding witness data.
 */
public Transaction disableWitnessSerialization() {
  if ((transactionOptions & TransactionOptions.WITNESS) == TransactionOptions.WITNESS) {
    final Transaction tx = new Transaction(params);
    tx.transactionOptions = transactionOptions & ~TransactionOptions.WITNESS;
    for (TransactionInput i: getInputs()) {
      tx.addInput(i);
    }
    for (TransactionOutput o: getOutputs()) {
      tx.addOutput(o);
    }
    if (tx.hasWitness())
      for (int i = 0; i < countWitnesses(); i++)
        tx.setWitness(i, getWitness(i));
    return tx;
  } else {
    return this;
  }
}

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

final TransactionWitness witness = tx.hasWitness() ? tx.getWitness(index) : null;
sigOps += in.countSigOps(verifyFlags, prevOut.getScript(), witness);
if (sigOps > Block.MAX_BLOCK_SIGOPS)

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

if (input.getValue() != null)
  inputBuilder.setValue(input.getValue().value);
if (tx.hasWitness() && tx.getWitness(i).getPushCount() > 0) {
  TransactionWitness witness = tx.getWitness(i);
  Protos.ScriptWitness.Builder witnessBuilder = Protos.ScriptWitness.newBuilder();
  for(int j = 0; j < witness.getPushCount(); j++) {

相关文章

微信公众号

最新文章

更多

Transaction类方法