message: Throw tx_duplicate on duplicate transaction instead of returning null
diff: @@ -281,7 +281,8 @@ class producer_plugin_impl : public std::enable_shared_from_this<producer_plugin
  chain::controller& chain = app().get_plugin<chain_plugin>().chain();
  auto id = trx->id();
  if( chain.db().find<transaction_object, by_trx_id>(id) ) {
  - return transaction_trace_ptr();
  + EOS_ASSERT( false, tx_duplicate,
  + "duplicate transaction ${id}", ("id", id ) );
  }
  return publish_results_of(trx, _transaction_ack_channel, [&]() -> transaction_trace_ptr {
  