Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

This project is a simple simulation of how messages will propagate in the Bitcoin p2p network.
It was written to check that our assumption that 80 connections listening for addr messages
used in the bitcoinstatus.rowit.co.uk web site was enough.
Below is my analysis of how addr messages are propagated.
This should really be on the wiki.
net.ccp 443
AddAddress(CAddress, int64)
If external address
If new add to mapAddresses and CAddrDB with time penalty
(always 2 hour) reduction in time last seen.
If in map already then if addr is less than 22hrs old
If stored is more that 3 hr older than message then update stored.
else
If stored is more that 26hr older update stored time.
When receive version (main.cpp:1793)
if outbound send our address as addr message and send getaddr message.
when receive addr message (main.cpp:1889)
AddAddress with 2hr penalty.
If addr less than 10 mins old and not from getaddr
Forward the address to 2 random peers. (If receive same address in same 24 hour
period will send to same address. After that period will send to different 2).
When receive getaddr message (main.cpp:2174)
clear list of known address for that peer
add up to 2500 address selected at random that are less than 3 hours old and send back.
Note: this is in effect 1 hour old if from another peer adr message because of 2hr penalty.
Note: if more than 1000 will be split into multiple messages.
in Send Messages (main.cpp:2400) This is called every 100ms or so.
Every 24 hours:
delete from all nodes all known addresses.
Send an Addr message with our address in it.
Every 10 mins if more than 3 nodes:
Delete any addresses from addrdb that are over 2 weeks old if addrdb
has more than 1000 entries. (This stops if it takes more that 20 secs).
To one randomly selected node: (main.cpp:2470)
Send an addr message with all the messages that are queued up in it. In IRC irc.cpp
When new person joins channel call AddAddress with 51min penalty.

About

Simulation of Messages over the Bitcoin p2p network

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors