|
|
|
@ -756,12 +756,17 @@ Value sendrawtransaction(const Array& params, bool fHelp)
|
|
|
|
|
if (!fHaveMempool && !fHaveChain) {
|
|
|
|
|
// push to local node and sync with wallets
|
|
|
|
|
CValidationState state;
|
|
|
|
|
if (!AcceptToMemoryPool(mempool, state, tx, false, NULL, !fOverrideFees)) {
|
|
|
|
|
if(state.IsInvalid())
|
|
|
|
|
bool fMissingInputs;
|
|
|
|
|
if (!AcceptToMemoryPool(mempool, state, tx, false, &fMissingInputs, !fOverrideFees)) {
|
|
|
|
|
if (state.IsInvalid()) {
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (fHaveChain) {
|
|
|
|
|
throw JSONRPCError(RPC_TRANSACTION_ALREADY_IN_CHAIN, "transaction already in block chain");
|
|
|
|
|
}
|
|
|
|
|