Exemple #1
0
void bitclient_addVarIntFromStream(stream_t* msgStream, uint64 varInt)
{
	if( varInt <= 0xFC )
	{
		stream_writeU8(msgStream, (uint8)varInt);
		return;
	}
	else if( varInt <= 0xFFFF )
	{
		stream_writeU8(msgStream, 0xFD);
		stream_writeU16(msgStream, (uint16)varInt);
		return;
	}
	else if( varInt <= 0xFFFFFFFF )
	{
		stream_writeU8(msgStream, 0xFE);
		stream_writeU32(msgStream, (uint32)varInt);
		return;
	}
	else
	{
		stream_writeU8(msgStream, 0xFF);
		stream_writeData(msgStream, &varInt, 8);
		return;
	}
}
Exemple #2
0
void bitclient_writeTransactionToStream(stream_t* dataStream, bitclientTransaction_t* tx)
{
	stream_writeU32(dataStream, tx->version);
	bitclient_addVarIntFromStream(dataStream, tx->tx_in->objectCount);
	for(uint32 i=0; i<tx->tx_in->objectCount; i++)
	{
		bitclientVIn_t* vin = (bitclientVIn_t*)tx->tx_in->objects[i];
		stream_writeData(dataStream, vin->previous_output.hash, 32);
		stream_writeU32(dataStream, vin->previous_output.index);
		bitclient_addVarIntFromStream(dataStream, vin->scriptSignatureLength);
		stream_writeData(dataStream, vin->scriptSignatureData, vin->scriptSignatureLength);
		stream_writeU32(dataStream, vin->sequence);
	}
	bitclient_addVarIntFromStream(dataStream, tx->tx_out->objectCount);
	for(uint32 i=0; i<tx->tx_out->objectCount; i++)
	{
		bitclientVOut_t* vout = (bitclientVOut_t*)tx->tx_out->objects[i];
		stream_writeData(dataStream, &vout->coinValue, 8);
		bitclient_addVarIntFromStream(dataStream, vout->scriptPkLength);
		stream_writeData(dataStream, vout->scriptPkData, vout->scriptPkLength);
	}
	stream_writeU32(dataStream, 0); // lock time
}