Skip to content

Instantly share code, notes, and snippets.

@dionyziz
Created April 23, 2022 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dionyziz/8c85283dd649adb4ed20691889094b6a to your computer and use it in GitHub Desktop.
Save dionyziz/8c85283dd649adb4ed20691889094b6a to your computer and use it in GitHub Desktop.
import random
import matplotlib.pyplot as plt
import numpy as np
MONTE_CARLO_REPEAT = 30
TIME_INTERVAL = 100
def simulate(eta, Delta):
convergence_opportunities = 0
t = 0
prev_interarrival_time = 2 * Delta
while t < TIME_INTERVAL:
interarrival_time = random.expovariate(1/eta)
if interarrival_time > Delta:
convergence_opportunities += 1
t += interarrival_time
prev_interarrival_time = interarrival_time
return convergence_opportunities
def monte_carlo(eta, Delta):
convergence_sum = 0
for i in range(MONTE_CARLO_REPEAT):
convergence_sum += simulate(eta, Delta)
return convergence_sum / MONTE_CARLO_REPEAT
Delta = 1
x = []
y = []
kappa = 256
min_T_exp = 229
max_T_exp = 239
n = 10
q = 3000000
min_eta = 0.01
max_eta = 3.0
eta_step = 0.01
# eta is the expected block interarrival time
for i, eta in enumerate(np.arange(min_eta, max_eta, eta_step)):
T = 1 / (n * q * eta)
x.append(T)
y.append(monte_carlo(eta, Delta))
plt.xscale('log')
plt.xlim((2**(min_T_exp - kappa), 2**(max_T_exp - kappa)))
plt.xticks(
[2**x for x in range(min_T_exp - kappa, max_T_exp + 1 - kappa)],
['$2^{' + str(x) + '}$' for x in range(min_T_exp, max_T_exp + 1)]
)
plt.plot(x, y)
plt.xlabel('Mining target $T$')
plt.ylabel(f'Convergence opportunity frequency in ${TIME_INTERVAL}$ rounds')
plt.title(f'Convergence opportunities when varying the mining target $T$.\n$\Delta = {Delta}, n = {n}, q = 3 \cdot 10^9, \kappa = {kappa}$')
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment