本文整理了Java中org.bitcoinj.core.Transaction.getWitness()
方法的一些代码示例,展示了Transaction.getWitness()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Transaction.getWitness()
方法的具体详情如下:
包路径:org.bitcoinj.core.Transaction
类名称: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++) {
内容来源于网络,如有侵权,请联系作者删除!