add inverse conversions.
This commit is contained in:
parent
4fb20d1409
commit
810b9aa9c7
@ -881,6 +881,11 @@ exports.bitcoind = bitcoin;
|
|||||||
exports.native = bitcoindjs;
|
exports.native = bitcoindjs;
|
||||||
exports.bitcoindjs = bitcoindjs;
|
exports.bitcoindjs = bitcoindjs;
|
||||||
|
|
||||||
|
bitcoindjs.Block = Block;
|
||||||
|
bitcoindjs.Transaction = Transaction;
|
||||||
|
bitcoindjs.blockToHex = Block.toHex;
|
||||||
|
bitcoindjs.txToHex = Transaction.toHex;
|
||||||
|
|
||||||
exports.Block = Block;
|
exports.Block = Block;
|
||||||
exports.block = Block;
|
exports.block = Block;
|
||||||
|
|
||||||
|
|||||||
@ -124,6 +124,8 @@ extern CWallet *pwalletMain;
|
|||||||
using namespace node;
|
using namespace node;
|
||||||
using namespace v8;
|
using namespace v8;
|
||||||
|
|
||||||
|
Handle<Object> bitcoindjs_obj;
|
||||||
|
|
||||||
NAN_METHOD(StartBitcoind);
|
NAN_METHOD(StartBitcoind);
|
||||||
NAN_METHOD(IsStopping);
|
NAN_METHOD(IsStopping);
|
||||||
NAN_METHOD(IsStopped);
|
NAN_METHOD(IsStopped);
|
||||||
@ -217,10 +219,16 @@ static void
|
|||||||
async_wallet_sendfrom_after(uv_work_t *req);
|
async_wallet_sendfrom_after(uv_work_t *req);
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
ctx_to_js(const CTransaction& tx, uint256 hashBlock, Local<Object> entry);
|
ctx_to_jstx(const CTransaction& tx, uint256 hashBlock, Local<Object> entry);
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
cblock_to_js(const CBlock& block, const CBlockIndex* blockindex, Local<Object> obj);
|
cblock_to_jsblock(const CBlock& block, const CBlockIndex* blockindex, Local<Object> obj);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
jsblock_to_cblock(Local<Object> jsblock, CBlock& cblock);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
jstx_to_ctx(Local<Object> jstx, CTransaction& ctx);
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
init(Handle<Object>);
|
init(Handle<Object>);
|
||||||
@ -659,7 +667,7 @@ async_get_block_after(uv_work_t *req) {
|
|||||||
const CBlockIndex* blockindex = data->result_blockindex;
|
const CBlockIndex* blockindex = data->result_blockindex;
|
||||||
|
|
||||||
Local<Object> obj = NanNew<Object>();
|
Local<Object> obj = NanNew<Object>();
|
||||||
cblock_to_js(block, blockindex, obj);
|
cblock_to_jsblock(block, blockindex, obj);
|
||||||
|
|
||||||
const unsigned argc = 2;
|
const unsigned argc = 2;
|
||||||
Local<Value> argv[argc] = {
|
Local<Value> argv[argc] = {
|
||||||
@ -778,7 +786,7 @@ async_get_tx_after(uv_work_t *req) {
|
|||||||
|
|
||||||
Local<Object> entry = NanNew<Object>();
|
Local<Object> entry = NanNew<Object>();
|
||||||
entry->Set(NanNew<String>("hex"), NanNew<String>(strHex));
|
entry->Set(NanNew<String>("hex"), NanNew<String>(strHex));
|
||||||
ctx_to_js(tx, hashBlock, entry);
|
ctx_to_jstx(tx, hashBlock, entry);
|
||||||
|
|
||||||
const unsigned argc = 2;
|
const unsigned argc = 2;
|
||||||
Local<Value> argv[argc] = {
|
Local<Value> argv[argc] = {
|
||||||
@ -875,7 +883,7 @@ async_poll_blocks_after(uv_work_t *req) {
|
|||||||
CBlock block;
|
CBlock block;
|
||||||
if (ReadBlockFromDisk(block, pindex)) {
|
if (ReadBlockFromDisk(block, pindex)) {
|
||||||
Local<Object> obj = NanNew<Object>();
|
Local<Object> obj = NanNew<Object>();
|
||||||
cblock_to_js(block, pindex, obj);
|
cblock_to_jsblock(block, pindex, obj);
|
||||||
blocks->Set(j, obj);
|
blocks->Set(j, obj);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
@ -963,7 +971,7 @@ async_poll_mempool_after(uv_work_t *req) {
|
|||||||
for (; it != mempool.mapTx.end(); it++) {
|
for (; it != mempool.mapTx.end(); it++) {
|
||||||
const CTransaction& tx = it->second.GetTx();
|
const CTransaction& tx = it->second.GetTx();
|
||||||
Local<Object> entry = NanNew<Object>();
|
Local<Object> entry = NanNew<Object>();
|
||||||
ctx_to_js(tx, 0, entry);
|
ctx_to_jstx(tx, 0, entry);
|
||||||
txs->Set(ti, entry);
|
txs->Set(ti, entry);
|
||||||
ti++;
|
ti++;
|
||||||
}
|
}
|
||||||
@ -974,7 +982,7 @@ async_poll_mempool_after(uv_work_t *req) {
|
|||||||
for (; it != mempool.mapNextTx.end(); it++) {
|
for (; it != mempool.mapNextTx.end(); it++) {
|
||||||
const CTransaction tx = *it->second.ptx;
|
const CTransaction tx = *it->second.ptx;
|
||||||
Local<Object> entry = NanNew<Object>();
|
Local<Object> entry = NanNew<Object>();
|
||||||
ctx_to_js(tx, 0, entry);
|
ctx_to_jstx(tx, 0, entry);
|
||||||
txs->Set(ti, entry);
|
txs->Set(ti, entry);
|
||||||
ti++;
|
ti++;
|
||||||
}
|
}
|
||||||
@ -1058,6 +1066,8 @@ async_broadcast_tx(uv_work_t *req) {
|
|||||||
fOwnOnly = true;
|
fOwnOnly = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// jstx_to_ctx(jstx, ctx);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ssData >> tx;
|
ssData >> tx;
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
@ -1110,11 +1120,12 @@ async_broadcast_tx_after(uv_work_t *req) {
|
|||||||
node::FatalException(try_catch);
|
node::FatalException(try_catch);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// jstx_to_ctx(jstx, ctx);
|
||||||
CDataStream ssData(ParseHex(data->tx_hex), SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream ssData(ParseHex(data->tx_hex), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
CTransaction tx;
|
CTransaction tx;
|
||||||
ssData >> tx;
|
ssData >> tx;
|
||||||
Local<Object> entry = NanNew<Object>();
|
Local<Object> entry = NanNew<Object>();
|
||||||
ctx_to_js(tx, 0, entry);
|
ctx_to_jstx(tx, 0, entry);
|
||||||
|
|
||||||
const unsigned argc = 3;
|
const unsigned argc = 3;
|
||||||
Local<Value> argv[argc] = {
|
Local<Value> argv[argc] = {
|
||||||
@ -1152,6 +1163,7 @@ NAN_METHOD(VerifyBlock) {
|
|||||||
String::Utf8Value block_hex_(js_block->Get(NanNew<String>("hex"))->ToString());
|
String::Utf8Value block_hex_(js_block->Get(NanNew<String>("hex"))->ToString());
|
||||||
std::string block_hex = std::string(*block_hex_);
|
std::string block_hex = std::string(*block_hex_);
|
||||||
|
|
||||||
|
// jsblock_to_cblock(jsblock, cblock);
|
||||||
CBlock block;
|
CBlock block;
|
||||||
CDataStream ssData(ParseHex(block_hex), SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream ssData(ParseHex(block_hex), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
ssData >> block;
|
ssData >> block;
|
||||||
@ -1179,6 +1191,7 @@ NAN_METHOD(VerifyTransaction) {
|
|||||||
String::Utf8Value tx_hex_(js_tx->Get(NanNew<String>("hex"))->ToString());
|
String::Utf8Value tx_hex_(js_tx->Get(NanNew<String>("hex"))->ToString());
|
||||||
std::string tx_hex = std::string(*tx_hex_);
|
std::string tx_hex = std::string(*tx_hex_);
|
||||||
|
|
||||||
|
// jstx_to_ctx(jstx, ctx);
|
||||||
CTransaction tx;
|
CTransaction tx;
|
||||||
CDataStream ssData(ParseHex(tx_hex), SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream ssData(ParseHex(tx_hex), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
ssData >> tx;
|
ssData >> tx;
|
||||||
@ -1847,7 +1860,7 @@ NAN_METHOD(WalletSetTxFee) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
cblock_to_js(const CBlock& block, const CBlockIndex* blockindex, Local<Object> obj) {
|
cblock_to_jsblock(const CBlock& block, const CBlockIndex* blockindex, Local<Object> obj) {
|
||||||
obj->Set(NanNew<String>("hash"), NanNew<String>(block.GetHash().GetHex().c_str()));
|
obj->Set(NanNew<String>("hash"), NanNew<String>(block.GetHash().GetHex().c_str()));
|
||||||
CMerkleTx txGen(block.vtx[0]);
|
CMerkleTx txGen(block.vtx[0]);
|
||||||
txGen.SetMerkleBranch(&block);
|
txGen.SetMerkleBranch(&block);
|
||||||
@ -1970,7 +1983,7 @@ cblock_to_js(const CBlock& block, const CBlockIndex* blockindex, Local<Object> o
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
ctx_to_js(const CTransaction& tx, uint256 hashBlock, Local<Object> entry) {
|
ctx_to_jstx(const CTransaction& tx, uint256 hashBlock, Local<Object> entry) {
|
||||||
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
ssTx << tx;
|
ssTx << tx;
|
||||||
std::string strHex = HexStr(ssTx.begin(), ssTx.end());
|
std::string strHex = HexStr(ssTx.begin(), ssTx.end());
|
||||||
@ -2057,6 +2070,44 @@ ctx_to_js(const CTransaction& tx, uint256 hashBlock, Local<Object> entry) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
jsblock_to_cblock(Local<Object> jsblock, CBlock& cblock) {
|
||||||
|
const unsigned argc = 1;
|
||||||
|
Local<Value> argv[argc] = {
|
||||||
|
Local<Value>::New(jsblock)
|
||||||
|
};
|
||||||
|
Local<String> block_hex__ = bitcoindjs_obj->Get("blockToHex")->Call(Context::GetCurrent()->Global(), argc, argv);
|
||||||
|
|
||||||
|
String::Utf8Value block_hex_(block_hex__->ToString());
|
||||||
|
std::string block_hex = std::string(*block_hex_);
|
||||||
|
|
||||||
|
CDataStream ssData(ParseHex(block_hex), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
try {
|
||||||
|
ssData >> cblock;
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
return NanThrowError("Block decode failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
jstx_to_ctx(Local<Object> jstx, CTransaction& ctx) {
|
||||||
|
const unsigned argc = 1;
|
||||||
|
Local<Value> argv[argc] = {
|
||||||
|
Local<Value>::New(jstx)
|
||||||
|
};
|
||||||
|
Local<String> tx_hex__ = bitcoindjs_obj->Get("txToHex")->Call(Context::GetCurrent()->Global(), argc, argv);
|
||||||
|
|
||||||
|
String::Utf8Value tx_hex_(tx_hex__->ToString());
|
||||||
|
std::string tx_hex = std::string(*tx_hex_);
|
||||||
|
|
||||||
|
CDataStream ssData(ParseHex(tx_hex), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
try {
|
||||||
|
ssData >> ctx;
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
return NanThrowError("TX decode failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init
|
* Init
|
||||||
*/
|
*/
|
||||||
@ -2064,6 +2115,9 @@ ctx_to_js(const CTransaction& tx, uint256 hashBlock, Local<Object> entry) {
|
|||||||
extern "C" void
|
extern "C" void
|
||||||
init(Handle<Object> target) {
|
init(Handle<Object> target) {
|
||||||
NanScope();
|
NanScope();
|
||||||
|
|
||||||
|
bitcoindjs_obj = target;
|
||||||
|
|
||||||
NODE_SET_METHOD(target, "start", StartBitcoind);
|
NODE_SET_METHOD(target, "start", StartBitcoind);
|
||||||
NODE_SET_METHOD(target, "stop", StopBitcoind);
|
NODE_SET_METHOD(target, "stop", StopBitcoind);
|
||||||
NODE_SET_METHOD(target, "stopping", IsStopping);
|
NODE_SET_METHOD(target, "stopping", IsStopping);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user