Bitcoin Forum
June 14, 2024, 06:40:27 PM *
News: Voting for pizza day contest
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: How to calculate the probability of an attacker to double spend using C code  (Read 111 times)
Accardo (OP)
Hero Member
*****
Offline Offline

Activity: 1120
Merit: 512


Leading Crypto Sports Betting & Casino Platform


View Profile
March 11, 2022, 12:42:57 AM
 #1

In this thread, we are considering how possible it is for an attacker to generate an alternate chain faster than the honest chain. And the possible means of the attacker to get back the funds they sent on the chain.

the possibility that an attacker catches up with the honest chain is calculated as follows.

p= probability an honest node finds the next block
q= probability the attacker finds the next block
qz= probability the attacker will ever catch up from z block behind.

The mathematical equation can be seen on https://bitcoin.org/bitcoin.pdf

Using C code

#include <math.h>
double AttackerSuccessProbability(double q, int z)
{
       double p = 1.0 - q;
       double lambda = z * (q / p);
       double sum = 1.0;
       int i, k;
       for (k = 0; K <= z; K++)
       {
            double poisson = exp(-lambda);
            for (i = 1; i <= k; i++)
                 poison * = lambda / i;
            sum -= poisson * (1 - pow(q / p, z - k) );
       }
       return sum;
}

The results can be found on the link posted above. Note: I found this source code from reading the PDF and thought it will be of use to some members too. What are your thoughts on solving for the possibility of double spending when it's almost impossible for the honest chain to accept a block with an invalid transaction.

Bottom line, the Binomial Random Walk success event is the honest chain being extended by one block increasing its lead by +1 and the failure event is the attacker's chain being extended by one block, reducing the gap by -1.

Goodluck!

..Stake.com..   ▄████████████████████████████████████▄
   ██ ▄▄▄▄▄▄▄▄▄▄            ▄▄▄▄▄▄▄▄▄▄ ██  ▄████▄
   ██ ▀▀▀▀▀▀▀▀▀▀ ██████████ ▀▀▀▀▀▀▀▀▀▀ ██  ██████
   ██ ██████████ ██      ██ ██████████ ██   ▀██▀
   ██ ██      ██ ██████  ██ ██      ██ ██    ██
   ██ ██████  ██ █████  ███ ██████  ██ ████▄ ██
   ██ █████  ███ ████  ████ █████  ███ ████████
   ██ ████  ████ ██████████ ████  ████ ████▀
   ██ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██
   ██            ▀▀▀▀▀▀▀▀▀▀            ██ 
   ▀█████████▀ ▄████████████▄ ▀█████████▀
  ▄▄▄▄▄▄▄▄▄▄▄▄███  ██  ██  ███▄▄▄▄▄▄▄▄▄▄▄▄
 ██████████████████████████████████████████
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
█  ▄▀▄             █▀▀█▀▄▄
█  █▀█             █  ▐  ▐▌
█       ▄██▄       █  ▌  █
█     ▄██████▄     █  ▌ ▐▌
█    ██████████    █ ▐  █
█   ▐██████████▌   █ ▐ ▐▌
█    ▀▀██████▀▀    █ ▌ █
█     ▄▄▄██▄▄▄     █ ▌▐▌
█                  █▐ █
█                  █▐▐▌
█                  █▐█
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀█
▄▄█████████▄▄
▄██▀▀▀▀█████▀▀▀▀██▄
▄█▀       ▐█▌       ▀█▄
██         ▐█▌         ██
████▄     ▄█████▄     ▄████
████████▄███████████▄████████
███▀    █████████████    ▀███
██       ███████████       ██
▀█▄       █████████       ▄█▀
▀█▄    ▄██▀▀▀▀▀▀▀██▄  ▄▄▄█▀
▀███████         ███████▀
▀█████▄       ▄█████▀
▀▀▀███▄▄▄███▀▀▀
..PLAY NOW..
nullama
Hero Member
*****
Offline Offline

Activity: 1022
Merit: 961



View Profile
March 14, 2022, 01:12:17 AM
Merited by ABCbits (1)
 #2

Fixed a couple of typos in the code, and made it available online so that anyone can play around with it:

https://www.online-cpp.com/sNGDFBVjMC

Tried a couple of values for q and z, and they seem to match the paper

███████████████████████████████
███████████████████████████████
█████████
▀▀▀▀▀█▀█▀▀▀▀▀█████████
███
▄▀▀▀   ▄▄▄▄   ▄▄▄▄   ▀▀▀▄███
███████
▀▀▀████▌ ▐████▀▀▀███████
█████
███▀█▀██▌ ▐██▀█▀████████
████
███▀▄▀▄███▌ ▐███▄▀▄▀███████
█████
██▄██▄██   ██▄██▄███████
███████
▄▄▄████   ████▄▄▄███████
██████████
▀▀▀▀   ▀▀▀▀██████████
██████████
▄▄▄▄▄▄▄▄▄▄▄██████████
███████████████████████████████
███████████████████████████████
█▀▀▀











█▄▄▄
#1 RATED CRYPTO
CASINO IN THE WORLD
██ ██ ██ ██ █Trustpilot
▀▀▀█











▄▄▄█
▄█████████████████████████████
██████████████████▀▀█████▀▀████
█████████████████▀█████████▀███
██████████████████████████████
███████████████████████████▄███
█████████████████████████▄▄████
███████████████████████████████
█████████████░░░███████████████
███████████░░░█████████████████
█████████░░████████████████████
█████░░░██████████████████████
███░░█████████████████████████
▀░░░█████████████████████████▀
.
SIGN UP & INSTANTLY
RECEIVE BONUS

[ NO DEPOSIT REQUIRED ]
█▀▀▀











█▄▄▄
▀▀▀█











▄▄▄█
BlackHatCoiner
Legendary
*
Offline Offline

Activity: 1554
Merit: 7546


Protocols over bureaucrats


View Profile
March 19, 2022, 11:09:25 AM
 #3

[...]
This has already been implemented in here.

What are your thoughts on solving for the possibility of double spending when it's almost impossible for the honest chain to accept a block with an invalid transaction.
It's not possible to accept an invalid transaction. Period. What's possible is to reverse a previously confirmed and, therefore, valid transaction. The odds of successfully reversing a block, so you can reverse a transaction, with a given portion of the hashrate can be seen in the above link.

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
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!