Bitcoin Forum
May 12, 2024, 06:42:53 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Broadcast transaction through my own nodes  (Read 253 times)
Atrax (OP)
Member
**
Offline Offline

Activity: 133
Merit: 33


View Profile
March 14, 2019, 11:14:21 PM
Merited by LoyceV (2), ABCbits (1)
 #1

Hi all,
is it basically possible to make sure that a transaction is broadcasted through my own group of nodes I'm running?

Thanks.
I HATE TABLES I HATE TABLES I HA(╯°□°)╯︵ ┻━┻ TABLES I HATE TABLES I HATE TABLES
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1715496173
Hero Member
*
Offline Offline

Posts: 1715496173

View Profile Personal Message (Offline)

Ignore
1715496173
Reply with quote  #2

1715496173
Report to moderator
StackGambler
Full Member
***
Offline Offline

Activity: 434
Merit: 101

YouTuber, gambler, and scam-buster.


View Profile
March 14, 2019, 11:42:21 PM
Merited by LoyceV (1), ABCbits (1), nc50lc (1), Heisenberg_Hunter (1)
 #2

When you broadcast a transaction on the bitcoin network (basically, when you hit the send button), it propagates through the various nodes, starting from the closest and eventually reaching the farthest. If you have a cluster of bitcoin nodes in a central location and you send a transaction using one, then all of the other nodes will be the first nodes to pick up the transaction in their respective memory pools.

I like gambling. Probably currently trying to figure out how to pay next month's rent.
nc50lc
Legendary
*
Online Online

Activity: 2408
Merit: 5597


Self-proclaimed Genius


View Profile
March 15, 2019, 01:55:52 AM
Merited by bones261 (2), LoyceV (1), ABCbits (1)
 #3

I just want you to know that the statement above happens in a blink of an eye so it's pretty pointless to search your own node's mempool for the particular transaction since almost all nodes already included it to their's within a minute.

If you want to check if it was included to your mempool, use this command (and find that specific tx id):
Code:
getrawmempool

But it's the same as searching from online blockexplorers.

.
.HUGE.
▄██████████▄▄
▄█████████████████▄
▄█████████████████████▄
▄███████████████████████▄
▄█████████████████████████▄
███████▌██▌▐██▐██▐████▄███
████▐██▐████▌██▌██▌██▌██
█████▀███▀███▀▐██▐██▐█████

▀█████████████████████████▀

▀███████████████████████▀

▀█████████████████████▀

▀█████████████████▀

▀██████████▀▀
█▀▀▀▀











█▄▄▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.
CASINSPORTSBOOK
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀▀█











▄▄▄▄█
HCP
Legendary
*
Offline Offline

Activity: 2086
Merit: 4316

<insert witty quote here>


View Profile
March 15, 2019, 10:01:28 AM
Merited by LoyceV (1), ABCbits (1)
 #4

is it basically possible to make sure that a transaction is broadcasted through my own group of nodes I'm running?
Even if there is some sort of propagation issue stopping the transfer of your transaction across the network... You can 100% guarantee that each of your personal nodes knows about any given transaction by simply using the sendrawtransaction on each node (via bitcoin-cli or console in GUI) passing in the "raw hex" of the transaction.

This will guarantee that the transaction is added to the local node's mempool, assuming it is a valid transaction Tongue

█████████████████████████
████▐██▄█████████████████
████▐██████▄▄▄███████████
████▐████▄█████▄▄████████
████▐█████▀▀▀▀▀███▄██████
████▐███▀████████████████
████▐█████████▄█████▌████
████▐██▌█████▀██████▌████
████▐██████████▀████▌████
█████▀███▄█████▄███▀█████
███████▀█████████▀███████
██████████▀███▀██████████
█████████████████████████
.
BC.GAME
▄▄░░░▄▀▀▄████████
▄▄▄
██████████████
█████░░▄▄▄▄████████
▄▄▄▄▄▄▄▄▄██▄██████▄▄▄▄████
▄███▄█▄▄██████████▄████▄████
███████████████████████████▀███
▀████▄██▄██▄░░░░▄████████████
▀▀▀█████▄▄▄███████████▀██
███████████████████▀██
███████████████████▄██
▄███████████████████▄██
█████████████████████▀██
██████████████████████▄
.
..CASINO....SPORTS....RACING..
█░░░░░░█░░░░░░█
▀███▀░░▀███▀░░▀███▀
▀░▀░░░░▀░▀░░░░▀░▀
░░░░░░░░░░░░
▀██████████
░░░░░███░░░░
░░█░░░███▄█░░░
░░██▌░░███░▀░░██▌
░█░██░░███░░░█░██
░█▀▀▀█▌░███░░█▀▀▀█▌
▄█▄░░░██▄███▄█▄░░▄██▄
▄███▄
░░░░▀██▄▀


▄▄████▄▄
▄███▀▀███▄
██████████
▀███▄░▄██▀
▄▄████▄▄░▀█▀▄██▀▄▄████▄▄
▄███▀▀▀████▄▄██▀▄███▀▀███▄
███████▄▄▀▀████▄▄▀▀███████
▀███▄▄███▀░░░▀▀████▄▄▄███▀
▀▀████▀▀████████▀▀████▀▀
buwaytress
Legendary
*
Offline Offline

Activity: 2800
Merit: 3446


Join the world-leading crypto sportsbook NOW!


View Profile
March 16, 2019, 08:03:22 AM
 #5

This will guarantee that the transaction is added to the local node's mempool, assuming it is a valid transaction Tongue

Quickie here.

 And if it is possible for you to configure your node to accept a transaction as valid, for example, a 0 fee tx, what happens then? I mean, other nodes will still reject it (min relay fee not met), right? And that would cause your node to be marked as "bad"? Or is blacklisting manual. In fact, how do nodes get rated if at all?

██
██
██
██
██
██
██
██
██
██
██
██
██
... LIVECASINO.io    Play Live Games with up to 20% cashback!...██
██
██
██
██
██
██
██
██
██
██
██
██
Heisenberg_Hunter
Legendary
*
Offline Offline

Activity: 1583
Merit: 1276


Heisenberg Design Services


View Profile WWW
March 19, 2019, 05:36:56 AM
Merited by bones261 (2)
 #6

And if it is possible for you to configure your node to accept a transaction as valid, for example, a 0 fee tx, what happens then? I mean, other nodes will still reject it (min relay fee not met), right?

We need to understand that there is no such global mempool or as such. Each node contains its own mempool and they store the recent transactions which they have listened from other peers. As far i have understood, we can configure our own node to accept certain set of transactions, but if you are a miner this will put you into trouble since you are mining those invalid transactions. Full node operators don't follow rules of the network to store the transactions in the mempool. Since each of the node contains their own mempool, they can configure as they wish to contain any such transactions if they are not accepted as valid in the consensus rules.

Let us consider a situation that you are a miner here. Your node accepts invalid transactions, includes that in a block and broadcast them to the network. Once the other nodes listens to the new block found, they will validate that block along with the transactions present inside them. If the block is valid, they will be added to the chain and simultaneously all other valid transactions that has been mined are removed from the mempool of the node. OTOH, if the block is invalid the node doesn't add them to the chain and further blacklists the node which has broadcasted the new invalid block.

And that would cause your node to be marked as "bad"? Or is blacklisting manual. In fact, how do nodes get rated if at all?

Whenever you start your node, you see that the wallet loads the 'Banlist' actually. The Banlist consists of certain nodes which has incurred certain amount of Banscore over the period of time. Banscores are coded in the source code of the bitcoin, and if a particular node reaches certain score they are updated in the Banlist probably.

In basic terms, when a node finds a reason the banscore increases and they are added to the Misbehaving function present in the net_processing.cpp#L943

Code:
void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
{
    if (howmuch == 0)
        return;

    CNodeState *state = State(pnode);
    if (state == nullptr)
        return;

    state->nMisbehavior += howmuch;
    int banscore = gArgs.GetArg("-banscore", DEFAULT_BANSCORE_THRESHOLD);
    std::string message_prefixed = message.empty() ? "" : (": " + message);
    if (state->nMisbehavior >= banscore && state->nMisbehavior - howmuch < banscore)
    {
        LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d) BAN THRESHOLD EXCEEDED%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed);
        state->fShouldBan = true;
    } else
        LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d)%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed);
}

You can find such reasons in the same code base by searching for 'Misbehaving' keyword.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!