All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.bitcoin.core.TransactionOutputChanges Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2012 Matt Corallo.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.bitcoin.core;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.LinkedList;
import java.util.List;

/**
 * 

TransactionOutputChanges represents a delta to the set of unspent outputs. It used as a return value for * {@link AbstractBlockChain#connectTransactions(int, Block)}. It contains the full list of transaction outputs created * and spent in a block. It DOES contain outputs created that were spent later in the block, as those are needed for * BIP30 (no duplicate txid creation if the previous one was not fully spent prior to this block) verification.

*/ public class TransactionOutputChanges { public final List txOutsCreated; public final List txOutsSpent; public TransactionOutputChanges(List txOutsCreated, List txOutsSpent) { this.txOutsCreated = txOutsCreated; this.txOutsSpent = txOutsSpent; } public TransactionOutputChanges(InputStream in) throws IOException { int numOutsCreated = ((in.read() & 0xFF) << 0) | ((in.read() & 0xFF) << 8) | ((in.read() & 0xFF) << 16) | ((in.read() & 0xFF) << 24); txOutsCreated = new LinkedList(); for (int i = 0; i < numOutsCreated; i++) txOutsCreated.add(new StoredTransactionOutput(in)); int numOutsSpent = ((in.read() & 0xFF) << 0) | ((in.read() & 0xFF) << 8) | ((in.read() & 0xFF) << 16) | ((in.read() & 0xFF) << 24); txOutsSpent = new LinkedList(); for (int i = 0; i < numOutsSpent; i++) txOutsSpent.add(new StoredTransactionOutput(in)); } public void serializeToStream(OutputStream bos) throws IOException { int numOutsCreated = txOutsCreated.size(); bos.write(0xFF & (numOutsCreated >> 0)); bos.write(0xFF & (numOutsCreated >> 8)); bos.write(0xFF & (numOutsCreated >> 16)); bos.write(0xFF & (numOutsCreated >> 24)); for (StoredTransactionOutput output : txOutsCreated) { output.serializeToStream(bos); } int numOutsSpent = txOutsSpent.size(); bos.write(0xFF & (numOutsSpent >> 0)); bos.write(0xFF & (numOutsSpent >> 8)); bos.write(0xFF & (numOutsSpent >> 16)); bos.write(0xFF & (numOutsSpent >> 24)); for (StoredTransactionOutput output : txOutsSpent) { output.serializeToStream(bos); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy