mirror of https://github.com/GOSTSec/poolserver
Intel
11 years ago
7 changed files with 200 additions and 13 deletions
@ -0,0 +1,72 @@ |
|||||||
|
#include "VarInt.h" |
||||||
|
#include "Script.h" |
||||||
|
#include "Transaction.h" |
||||||
|
|
||||||
|
using namespace Bitcoin; |
||||||
|
|
||||||
|
ByteBuffer& Bitcoin::operator<<(ByteBuffer& a, VarInt& b) |
||||||
|
{ |
||||||
|
if (b.value < 0xfd) { |
||||||
|
a.Append(b.value, 1); |
||||||
|
} else if (b.value <= 0xffff) { |
||||||
|
a.Append(0xfd, 1); |
||||||
|
a.Append(b.value, 2); |
||||||
|
} else if (b.value <= 0xffffffff) { |
||||||
|
a.Append(0xfe, 1); |
||||||
|
a.Append(b.value, 4); |
||||||
|
} else { |
||||||
|
a.Append(0xff, 1); |
||||||
|
a.Append(b.value, 8); |
||||||
|
} |
||||||
|
return a; |
||||||
|
} |
||||||
|
|
||||||
|
ByteBuffer& Bitcoin::operator<<(ByteBuffer& a, Script& b) |
||||||
|
{ |
||||||
|
VarInt size(b.script.size()); |
||||||
|
a << size; |
||||||
|
a << b.script; |
||||||
|
return a; |
||||||
|
} |
||||||
|
|
||||||
|
ByteBuffer& Bitcoin::operator<<(ByteBuffer& a, OutPoint& b) |
||||||
|
{ |
||||||
|
a << b.hash; |
||||||
|
a << b.n; |
||||||
|
return a; |
||||||
|
} |
||||||
|
|
||||||
|
ByteBuffer& Bitcoin::operator<<(ByteBuffer& a, TxIn& b) |
||||||
|
{ |
||||||
|
a << b.prevout; |
||||||
|
a << b.script; |
||||||
|
a << b.n; |
||||||
|
return a; |
||||||
|
} |
||||||
|
|
||||||
|
ByteBuffer& Bitcoin::operator<<(ByteBuffer& a, TxOut& b) |
||||||
|
{ |
||||||
|
a << b.value; |
||||||
|
a << b.scriptPubKey; |
||||||
|
return a; |
||||||
|
} |
||||||
|
|
||||||
|
ByteBuffer& Bitcoin::operator<<(ByteBuffer& a, Transaction& b) |
||||||
|
{ |
||||||
|
a << b.version; |
||||||
|
|
||||||
|
// Inputs
|
||||||
|
VarInt insize(b.in.size()); |
||||||
|
a << insize; |
||||||
|
for (uint32 i = 0; i < b.in.size(); ++i) |
||||||
|
a << b.in[i]; |
||||||
|
|
||||||
|
// Outputs
|
||||||
|
VarInt outsize(b.out.size()); |
||||||
|
a << outsize; |
||||||
|
for (uint32 i = 0; i < b.out.size(); ++i) |
||||||
|
a << b.out[i]; |
||||||
|
|
||||||
|
a << b.lockTime; |
||||||
|
return a; |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
#ifndef BITCOIN_VARINT_H_ |
||||||
|
#define BITCOIN_VARINT_H_ |
||||||
|
|
||||||
|
#include "Common.h" |
||||||
|
#include "ByteBuffer.h" |
||||||
|
|
||||||
|
namespace Bitcoin |
||||||
|
{ |
||||||
|
class VarInt |
||||||
|
{ |
||||||
|
public: |
||||||
|
VarInt(uint64 data) : value(data) {} |
||||||
|
uint64 value; |
||||||
|
|
||||||
|
friend ByteBuffer& operator<<(ByteBuffer& a, VarInt& b); |
||||||
|
}; |
||||||
|
|
||||||
|
ByteBuffer& operator<<(ByteBuffer& a, VarInt& b); |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,75 @@ |
|||||||
|
#ifndef BYTEBUFFER_H_ |
||||||
|
#define BYTEBUFFER_H_ |
||||||
|
|
||||||
|
#include "Common.h" |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
class ByteBuffer |
||||||
|
{ |
||||||
|
public: |
||||||
|
ByteBuffer& operator<<(ByteBuffer& b) |
||||||
|
{ |
||||||
|
Append(b.vec); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(std::vector<byte>& b) |
||||||
|
{ |
||||||
|
Append(b); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(uint8& b) |
||||||
|
{ |
||||||
|
Append(b, 1); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(uint16& b) |
||||||
|
{ |
||||||
|
Append(b, 2); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(uint32& b) |
||||||
|
{ |
||||||
|
Append(b, 4); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(uint64& b) |
||||||
|
{ |
||||||
|
Append(b, 8); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(int8& b) |
||||||
|
{ |
||||||
|
Append(b, 1); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(int16& b) |
||||||
|
{ |
||||||
|
Append(b, 2); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(int32& b) |
||||||
|
{ |
||||||
|
Append(b, 4); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
ByteBuffer& operator<<(int64& b) |
||||||
|
{ |
||||||
|
Append(b, 8); |
||||||
|
return *this; |
||||||
|
} |
||||||
|
|
||||||
|
void Append(uint64 data, size_t size) |
||||||
|
{ |
||||||
|
for (int i = 0; i < size; i++) |
||||||
|
vec.push_back(data >> (i * 8)); |
||||||
|
} |
||||||
|
|
||||||
|
void Append(std::vector<byte> data) |
||||||
|
{ |
||||||
|
vec.insert(vec.end(), data.begin(), data.end()); |
||||||
|
} |
||||||
|
|
||||||
|
std::vector<byte> vec; |
||||||
|
}; |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue