Simulace VSEcoin

From Simulace.info
Revision as of 22:45, 22 June 2021 by Petr Hoza (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Název: Bezpečnost vs. náročnost těžby VSEcoinu

Autor: Petr Hoza

Modelovací nástroj: NetLogo

S rostoucí oblibou blockchainových technologií se objevují i některá z jejich úskalí. Zvýšená bezpečnost se neobjeví “jen tak” a je třeba ji nějakým způsobem zajistit. Jedním ze způsobů je tzv. koncept Proof of Work, kde je bezpečnost zajištěna komputací výkonnostně náročných operací. Tento výkon je provázen energetickou náročností. V rámci této simulace bychom chtěli vytvořit síť, která by simulovala těžaře těžící virtuální měnu VSEcoin (neparametrické hodnoty simulace budou vycházet z implementace Bitcoinu) a umožňovala nastavení volných parametrů: cena, náročnost.


Metoda

K simulaci byl použit nástroj NetLogo 6.2

Model

Model vycházel z obecně známých informací o implementaci blockchainu. Speciálně ve formě Bitcoin. Hodnoty bylo brány z věřejně dostupných dat (https://www.blockchain.com/explorer) a upravovány nebo škálovány ve stejné míře, aby došlo k co nejmenšímu odklonu od reality. Nedostupná data byla nastavena v simulaci jako parametry a cílem simulace bylo jejich zkoušení

Agenti

  • Nody
    • sousedé (noda je napojena na sousedy v radiusu, který je volitelný (Connectivity))
    • každá noda drží hodnoty posledního řetězce
    • poctivost/podvodnost (true/false)
  • Těžící nody
    • noda má 90% šanci být těžící nodou

(**každá těžící noda patří do clusteru (střední hodnota velikosti clusteru je 100))


Další parametry

  • Cena
    • měnitelný parametr
  • Náročnost
    • měnitelný parametr
  • Failure rate
    • defaultní hodnota (Cena/Náročnost)
    • je to agregovaná hodnota (složená součtem, pro jednoduchost se stejným poměrem) z pravděpodobností
      • koluze - pravděpodobnost vzniku podvodného nodu
      • nedočkavost - pravděpodobnost emise náhodné chyby (odeslání neplatného řetězce)
      • DoS - pravděpodobnost blokace nodu (žádná komunikace se sousedy v iteraci, pokud je poctivá)


Pravidla

Noda s méně než jedním sousedem vždy zaniká. Noda obklopená jen podvodnými sousedy se automaticky stává podvodná. Když noda obdrží řetězec s větší délkou, než již má, přebírá jej a distribuuje jej všem svým sousedům. Pokud poctivá noda distribuuje neplatný řetězec, aplikuje se opět pravděpodobnost koluze.

Pokud dostane řetězec stejné délky, jako už má, pak záleží, zda je poctivá:

  • Poctivá
    • pokud má neplatný řetězec (přišel jako nejdelší) a dostane platný řetězec stejné délky, pak vyměňuje a vždy si nechá platný (a distribuuje sousedům)
    • pokud dostane neplatný řetězec stejné délky jako už má, odebírá si nodu ze sousedů
  • Podvodná
    • Nechává si neplatný.


Selhání sítě - Simulace s nižší konektivitou

Hoza sim1.png

Hoza sim2.png

Hoza sim3.png

Hoza sim4.png

Hoza sim5.gif

Stabilní síť Síť je velice stabilní pro hodnoty selhání pod 1% a pro velkou konektivitu

Hoza sim2 1.png

Hoza sim2 2.png

Závěr

Ukázálo se, že nejdůležitějším parametrem je connectivita. Při nízké propojenosti nodů (a to už při relativně vysoké hustotě proti očekávání) začne síť ztrácet informace. Propagace nejnovějších (nejdelších) bloků se rapidně zhoršuje, většina bloků pracuje s neaktualními bloky a propagace chyb je přesto přítomná.

Druhé zjištění (hlavní účel simulace) je, že síť je velice stabilní při nižších hodnotách chybovosti, ale při jisté zlomové hodnotě (např. pro konektivitu 30 je to někde okolo 5% sít v dlouhodobém horizontu vždy zkolabuje.)

(V reálných případech například Bitcoinu se zdá, že je agregovaná chybovost v řádu promilí.)

Bohužel se opravdu ukázalo, že parametry jako "chybovost" a "konektivita" jsou v reálném světě extrémě těžce měřitelné a proto nění možné udělat transformaci zjištěných hodnot do hodnot reálného světa. Hrubě ale můžeme tvrdit, že chybovost i konektivita jsou proti kritickým hodnotám ze simulace minimálně o jednen řád lepší.

Kód

Media:Hoza_simulace.nlogo

Reference

  1. Blockchain