|
|
@ -756,12 +756,17 @@ Value sendrawtransaction(const Array& params, bool fHelp) |
|
|
|
if (!fHaveMempool && !fHaveChain) { |
|
|
|
if (!fHaveMempool && !fHaveChain) { |
|
|
|
// push to local node and sync with wallets
|
|
|
|
// push to local node and sync with wallets
|
|
|
|
CValidationState state; |
|
|
|
CValidationState state; |
|
|
|
if (!AcceptToMemoryPool(mempool, state, tx, false, NULL, !fOverrideFees)) { |
|
|
|
bool fMissingInputs; |
|
|
|
if(state.IsInvalid()) |
|
|
|
if (!AcceptToMemoryPool(mempool, state, tx, false, &fMissingInputs, !fOverrideFees)) { |
|
|
|
|
|
|
|
if (state.IsInvalid()) { |
|
|
|
throw JSONRPCError(RPC_TRANSACTION_REJECTED, strprintf("%i: %s", state.GetRejectCode(), state.GetRejectReason())); |
|
|
|
throw JSONRPCError(RPC_TRANSACTION_REJECTED, strprintf("%i: %s", state.GetRejectCode(), state.GetRejectReason())); |
|
|
|
else |
|
|
|
} else { |
|
|
|
|
|
|
|
if (fMissingInputs) { |
|
|
|
|
|
|
|
throw JSONRPCError(RPC_TRANSACTION_ERROR, "Missing inputs"); |
|
|
|
|
|
|
|
} |
|
|
|
throw JSONRPCError(RPC_TRANSACTION_ERROR, state.GetRejectReason()); |
|
|
|
throw JSONRPCError(RPC_TRANSACTION_ERROR, state.GetRejectReason()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} else if (fHaveChain) { |
|
|
|
} else if (fHaveChain) { |
|
|
|
throw JSONRPCError(RPC_TRANSACTION_ALREADY_IN_CHAIN, "transaction already in block chain"); |
|
|
|
throw JSONRPCError(RPC_TRANSACTION_ALREADY_IN_CHAIN, "transaction already in block chain"); |
|
|
|
} |
|
|
|
} |
|
|
|