Bitcoin Forum
April 26, 2024, 10:56:40 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Deep understanding for Bitcoin  (Read 606 times)
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
May 12, 2022, 03:05:47 PM
Merited by Welsh (12), NotATether (10), ABCbits (6), o_e_l_e_o (4), BlackHatCoiner (4), bitmover (3), d5000 (2), n0nce (2), Quickseller (1), DdmrDdmr (1), tadamichi (1), Kiara Sessyoin (1)
 #1

Hi to all i'm new here and i'm tring to learn how Bitcoin and other cryptocurrecies works. I started to understand the base of how it work by searching on Google. After that i decided to go more deep for learn how the code work (i'm a developer) and i downloaded the current version of Bitcoin. It was incomprehensible for me beacuse it's written in C++ and i don't know that language but with after a little bit i started to understand how it work, the communication, the mining, the math behind ecc...
Now i think i have a pretty good base but the things to remember started to be a lot. So i decided to write them in a scheme for visualize it and have all the pieces togheter. After a little bit of work i made a Chart with all the informations that i know, the things that i need to go a little bit more deep and the things that i don't understand well.
So i decided to come here for get help to complete it and maybe this could be helpful for new people that want to understand how cryptos works.

The chart is this:
(This is the code generated by draw.io, you just need to copy it, put it in a .XML file, open draw.io and import it. Unfortunetly i can't attach file to this post. I think i can create a file and share it here for work all on the same file. I will try)

SOMETIMES I WILL POST HERE THE NEW CODE WITH THE NEW UPDATES

Be free to edit it as you want.

My legenda:
Red = Things that i need to understand better
Orange = Notes
Yellow = Todo things (study better, find more things online)
() = Example, now is a really simple example but i want to put some working informations for check if what i understand it's right, so it's a try with real values)

Thanks to all for your help


Code:
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2022-05-12T14:55:43.701Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" etag="6UIRw_U5Pu0viv0x1a0o" version="18.0.3" type="device">
  <diagram id="4KwzXGMXcMT0csuQZ-j6" name="Page-1">
    <mxGraphModel dx="237" dy="122" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="jJR8IX2gqd7flar8r1S0-62" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry y="40" width="2480" height="3500" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="jJR8IX2gqd7flar8r1S0-45" target="jJR8IX2gqd7flar8r1S0-22" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="260" y="2000" />
              <mxPoint x="939" y="2000" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-58" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="320" y="390" width="2120" height="860" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-17" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry width="2119.9999999999995" height="859.9999999999998" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-5" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="103.41999999999999" y="177.05882352941174" width="976.5799999999999" height="632.3529411764705" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-6" value="Block (blk000.dat)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="436.5854975310489" y="202.35294117647055" width="310.24390243902434" height="50.58823529411764" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-7" value="Previous Block Hash (0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="103.41999999999999" y="278.235294117647" width="976.5799999999999" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-9" value="Creation DateTime (2022.05.12 8:00:00)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="103.41999999999999" y="379.41176470588226" width="976.5799999999999" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-10" value="Current Block Hash (1)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="103.41999999999999" y="480.58823529411757" width="976.5799999999999" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-11" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1344.390243902439" y="177.05882352941174" width="723.9024390243902" height="632.3529411764705" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-12" value="Previous Block Hash (1)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1344.390243902439" y="278.235294117647" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="jJR8IX2gqd7flar8r1S0-58" source="jJR8IX2gqd7flar8r1S0-10" target="jJR8IX2gqd7flar8r1S0-12" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-13" value="Creation DateTime (2022.05.12 8:10:0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1344.390243902439" y="379.41176470588226" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-14" value="Current Block Hash (2)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1344.390243902439" y="480.58823529411757" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-15" value="Block (blk001.dat)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1525.3658536585365" y="202.35294117647055" width="361.9512195121951" height="50.58823529411764" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-19" value="&lt;font style=&quot;font-size: 18px&quot;&gt;BlockChain&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1099.993170731707" y="12.64705882352941" width="258.53658536585357" height="88.52941176470587" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-41" value="Merkle tree Tx (Transactions : 0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="103.41999999999999" y="682.9411764705882" width="976.5799999999999" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-43" value="Nonce (1234)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="103.41999999999999" y="581.7647058823528" width="976.5799999999999" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-66" value="Merkle tree Tx (Transactions : 4)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1344.390243902439" y="682.9411764705882" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-67" value="Nonce (9876)" style="rounded=1;whiteSpace=wrap;html=1;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1344.390243902439" y="581.7647058823528" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-20" value="This is stored in HDD as single files" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry x="99.99999999999999" y="101.17647058823528" width="419.9999999999999" height="75.88235294117645" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-64" value="This is the first Block so is the genesis block" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry x="519.9999999999999" y="101.17647058823528" width="419.9999999999999" height="75.88235294117645" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-79" value="How the mining difficulty is calculted? I know it&#39;s by an algoritm but which?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry x="1480" width="307" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-80" value="How the mining difficulty is calculted? I know it&#39;s by an algoritm but which?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry x="1787" width="333" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-86" value="How the hash of the block is calculated? (In my code sample i just created a long string like:&amp;nbsp;&lt;br&gt;PrevousBlockHash CreationDateTime TransactionHash Nonce&lt;br&gt;How Bitcoin put this information togheter?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry x="1480" y="60" width="640" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-59" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="680" y="1300" width="1760" height="830" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-67" value="" style="group" vertex="1" connectable="0" parent="jJR8IX2gqd7flar8r1S0-59">
          <mxGeometry width="1760" height="830.0000000000001" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-20" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry width="1760" height="830.0000000000001" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-21" value="Merkle Tree Transactions" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="640.5882352941176" y="41.5" width="478.82352941176464" height="41.5" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-22" value="TX1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="103.52941176470587" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-23" value="TX2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="517.6470588235293" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-24" value="TX3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="931.7647058823528" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-25" value="TX3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="1345.8823529411761" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-26" value="HASH_TX1TX2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="310.5882352941176" y="415.00000000000006" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-22" target="jJR8IX2gqd7flar8r1S0-26" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-23" target="jJR8IX2gqd7flar8r1S0-26" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-32" value="HASH_TX1TX2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="1138.8235294117646" y="415.00000000000006" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-24" target="jJR8IX2gqd7flar8r1S0-32" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-25" target="jJR8IX2gqd7flar8r1S0-32" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-36" value="HASH_TX1TX2TX3TX4" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="621.1764705882352" y="166" width="517.6470588235293" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-26" target="jJR8IX2gqd7flar8r1S0-36" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-32" target="jJR8IX2gqd7flar8r1S0-36" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-19" value="How i&amp;nbsp; can get the wallet balance from here?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-67">
          <mxGeometry width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-78" value="How they are hashed togheter?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-67">
          <mxGeometry x="365.88" y="580" width="200" height="40" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-63" value="&lt;font style=&quot;font-size: 24px&quot;&gt;Peer Machine (Local)&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="397.5" y="60" width="285" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="20" y="110" width="770" height="110" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-2" value="Wallet" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="100" y="110" width="40" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-3" value="Private Key (Sha???)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="20" y="130" width="200" height="90" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-4" value="Public Key (Sha???)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="220" y="130" width="200" height="90" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-68" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="2850" y="40" width="1080" height="2620" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-69" value="&lt;font style=&quot;font-size: 24px&quot;&gt;Peer Machine (Remote)&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="3295" y="60" width="284" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-72" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" parent="1" vertex="1">
          <mxGeometry x="2889" y="90" width="1001" height="840" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-84" value="&lt;font style=&quot;font-size: 18px&quot;&gt;BlockChain&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="3249" y="110" width="100" height="35" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-70" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=-0.001;entryY=0.565;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;startSize=6;strokeColor=default;width=20;startWidth=20;" parent="1" source="jJR8IX2gqd7flar8r1S0-14" target="jJR8IX2gqd7flar8r1S0-72" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="730" y="160" as="sourcePoint" />
            <mxPoint x="1240" y="160" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-90" value="Send New Block (using IRC or RPC)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="jJR8IX2gqd7flar8r1S0-70" vertex="1" connectable="0">
          <mxGeometry x="0.1036" y="2" relative="1" as="geometry">
            <mxPoint x="52" y="3" as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-15" value="When this will be added and how it choice which from the unconfirmed transaction list?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
          <mxGeometry x="80" y="2020" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-21" value="This is a folder that contains all the Blocks and managed using a Database" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="790" y="360" width="427.5" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-22" value="I think this have a lot more informations" style="text;html=1;strokeColor=#d6b656;fillColor=#fff2cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="20" y="80" width="200" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="w7sy7rOh6mnJ606th1zS-23" target="jJR8IX2gqd7flar8r1S0-51">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1960" y="2210" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="w7sy7rOh6mnJ606th1zS-25" target="jJR8IX2gqd7flar8r1S0-55">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1069" y="2350" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-41" value="I need to get every transaction to me and use it here or not?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
          <mxGeometry x="1780" y="2610" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-42" value="This 2 are generated using the ECDSA algorithm starting from a random unique value" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="20" y="220" width="410" height="80" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-65" value="How this peer will remove the transaction in the received block from his UTXO list?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
          <mxGeometry x="2690" y="470" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-66" value="How this peer will confirm the received block?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
          <mxGeometry x="2690" y="410" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-71" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="80" y="2080" width="360" height="460" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-44" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-71" vertex="1">
          <mxGeometry width="360" height="460" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-69" value="" style="group" vertex="1" connectable="0" parent="w7sy7rOh6mnJ606th1zS-71">
          <mxGeometry width="360" height="460" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-45" value="Transaction" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-69" vertex="1">
          <mxGeometry x="145" y="5" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-49" value="Input1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-69" vertex="1">
          <mxGeometry y="90" width="120" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-50" value="Input2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-69" vertex="1">
          <mxGeometry x="120" y="90" width="120" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-51" value="Input3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-69" vertex="1">
          <mxGeometry x="240" y="90" width="120" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-54" value="OutPut1 (Payment)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-69" vertex="1">
          <mxGeometry y="230" width="180" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-55" value="OutPut2 (Return)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-69" vertex="1">
          <mxGeometry x="180" y="230" width="180" height="80" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-8" value="Input Count" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-69">
          <mxGeometry y="30" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-9" value="Output Count" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-69">
          <mxGeometry y="170" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-12" value="Version" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-69">
          <mxGeometry y="310" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-13" value="Locktime" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-69">
          <mxGeometry y="350" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-14" value="Source:&amp;nbsp;&lt;br&gt;https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch05.html" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-69">
          <mxGeometry y="400" width="360" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-72" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="827" y="2793" width="237.5" height="260" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-25" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-72">
          <mxGeometry width="237.5" height="260" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-26" value="TxOutput" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-72">
          <mxGeometry x="90" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-29" value="Amount" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-72">
          <mxGeometry y="31" width="237.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-31" value="Locking-Script" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-72">
          <mxGeometry y="131" width="237.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-32" value="Locking-Script size" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-72">
          <mxGeometry y="80" width="237.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-39" value="Source:&amp;nbsp;&lt;br&gt;https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch05.html" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-72">
          <mxGeometry y="190" width="237.5" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-73" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="1840" y="2670" width="240" height="365" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-23" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry width="240" height="365" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-24" value="TxInput" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry x="90" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-34" value="Transaction Hash" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry y="30" width="240" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-35" value="Output Index" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry y="80" width="240" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-36" value="Unlocking-Script Size" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry y="130" width="240" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-37" value="Unlocking-Script" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry y="180" width="240" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-38" value="Sequence number" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry y="230" width="240" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-40" value="Source:&amp;nbsp;&lt;br&gt;https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch05.html" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="w7sy7rOh6mnJ606th1zS-73">
          <mxGeometry y="295" width="240" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-76" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="2929" y="160" width="681" height="570" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-73" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry width="681" height="570" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-74" value="Block (blk000.dat)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry x="194.57142857142858" y="22.799999999999997" width="291.85714285714283" height="45.599999999999994" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-75" value="Previous Block Hash (0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="91.19999999999999" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-76" value="Creation DateTime (2022.05.12 8:0:0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="182.39999999999998" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-77" value="Current Block Hash (1)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="273.59999999999997" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-85" value="Merkle tree Tx (Transactions : 0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="455.99999999999994" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-86" value="Nonce (1234)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="364.79999999999995" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="30" y="520" width="200" height="400" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-84" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="w7sy7rOh6mnJ606th1zS-2">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="80" y="2101.6666666666665" as="targetPoint" />
            <Array as="points">
              <mxPoint x="20" y="580" />
              <mxPoint x="20" y="2102" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-2" value="Unconfirmed Transactions List" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="30" y="550" width="200" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-3" value="Miner" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="110" y="520" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-83" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="jJR8IX2gqd7flar8r1S0-20" target="jJR8IX2gqd7flar8r1S0-66">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-87" value="This is used with an algorithm (i think ECDSA) for generate Addresses that will be used on the transactions&amp;nbsp;" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="423" y="220" width="227" height="80" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-88" value="How i can know if a transaction is mine or from another peer? is the Address convertible to pubKey?" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="650" y="220" width="140" height="80" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
1714129000
Hero Member
*
Offline Offline

Posts: 1714129000

View Profile Personal Message (Offline)

Ignore
1714129000
Reply with quote  #2

1714129000
Report to moderator
1714129000
Hero Member
*
Offline Offline

Posts: 1714129000

View Profile Personal Message (Offline)

Ignore
1714129000
Reply with quote  #2

1714129000
Report to moderator
Unlike traditional banking where clients have only a few account numbers, with Bitcoin people can create an unlimited number of accounts (addresses). This can be used to easily track payments, and it improves anonymity.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714129000
Hero Member
*
Offline Offline

Posts: 1714129000

View Profile Personal Message (Offline)

Ignore
1714129000
Reply with quote  #2

1714129000
Report to moderator
1714129000
Hero Member
*
Offline Offline

Posts: 1714129000

View Profile Personal Message (Offline)

Ignore
1714129000
Reply with quote  #2

1714129000
Report to moderator
1714129000
Hero Member
*
Offline Offline

Posts: 1714129000

View Profile Personal Message (Offline)

Ignore
1714129000
Reply with quote  #2

1714129000
Report to moderator
n0nce
Hero Member
*****
Offline Offline

Activity: 882
Merit: 5814


not your keys, not your coins!


View Profile WWW
May 13, 2022, 02:39:51 AM
Merited by Welsh (6), ABCbits (4), o_e_l_e_o (4), marti99 (3), BlackHatCoiner (2), DdmrDdmr (1)
 #2

Flow charts are nice! A few clarifications that you can add:
  • Today, most wallets are so-called HD Wallets, so there is a single 64-byte secret ('seed') which is then often encoded in 12 or 24 words to back it up. From this seed you derive as many private keys as needed using HMAC and the corresponding public.
  • For addresses, there are different types as described here, but the P2PKH locking script uses a hash160 (SHA256 + RIPEMD160). So you can go from public key to address but not the other way round; that's a security feature.
  • A blkxxx.dat file doesn't only include a single block but multiples.
  • In the merkle tree, as we can read here, two nodes are just concatenated and then the hash of this is computed to go one step up towards the root.
  • Transactions are chosen by miners depending on the fees (usually - this is the most logical thing); so the ones with the highest fee are mined first. But the miner could also select differently if he wants.
  • For transaction inputs, you don't need to add all of them, just enough to satisfy the 'output amount' (or a little more). You'll then get the change back.
  • The difficulty algorithm is basically every 2 weeks. But it's counted in blocks; 2016 to be exact. https://learnmeabitcoin.com/beginners/difficulty
  • The difficulty formula: difficulty = difficulty * (20160 / time_elapsed_for_last_2016_blocks)
  • To hash a block, you just concatenate all fields (bytes, not as strings) and hash the whole packet.

Other than the https://learnmeabitcoin.com website I linked, I recommend https://en.bitcoin.it/wiki/Main_Page and https://github.com/bitcoinbook/bitcoinbook/.

For very implementation-specific stuff you can also refer directly to the source: https://github.com/bitcoin/bitcoin

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
NotATether
Legendary
*
Offline Offline

Activity: 1582
Merit: 6682


bitcoincleanup.com / bitmixlist.org


View Profile WWW
May 13, 2022, 03:56:59 AM
Merited by Welsh (4), o_e_l_e_o (4), ABCbits (3), n0nce (1)
 #3

Hi to all i'm new here and i'm tring to learn how Bitcoin and other cryptocurrecies works. I started to understand the base of how it work by searching on Google. After that i decided to go more deep for learn how the code work (i'm a developer) and i downloaded the current version of Bitcoin. It was incomprehensible for me beacuse it's written in C++ and i don't know that language but with after a little bit i started to understand how it work, the communication, the mining, the math behind ecc...

As you learn more C++ and discover the dependencies of the Bitcoin Software, you will also find that there are some auxillary libraries that take care fo important BTC functions, for eample:

- ZeroMQ is used for sending messages between peer nodes
- Libevent implements the RPC calls
- Libsecp256k1 is a highly efficient custom curve library used to generate public keys and the like
- Bitcoin Core has it's own internal locking system (that even has a debug mode so that you can detect double locks and stuff like that). It's useful for ripping out and putting in other software. Ditto for the argument parser and config file parser, which is actually implemented as one module.

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
May 16, 2022, 10:52:30 AM
Last edit: May 16, 2022, 11:05:40 AM by marti99
Merited by Welsh (2)
 #4

Thank you all for your response and for your help

I've updated the chart with your help and other new informations that i've found online
Now it looks like this

UPDATE

THIS IS SPLITTED BECAUSE THERE IS A LIMIT OF CHARACTERS FOR ONE POST

PART 1

Code:
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2022-05-16T10:49:18.128Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" etag="UiKRFq1jw_-Pbi9YDmV2" version="18.0.3" type="device">
  <diagram id="4KwzXGMXcMT0csuQZ-j6" name="Page-1">
    <mxGraphModel dx="5380" dy="3073" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="jJR8IX2gqd7flar8r1S0-62" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry y="40" width="2480" height="3500" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="jJR8IX2gqd7flar8r1S0-45" target="jJR8IX2gqd7flar8r1S0-22" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="560" y="2540" />
              <mxPoint x="929" y="2540" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-58" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="320" y="390" width="2120" height="860" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-17" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry width="2119.9999999999995" height="859.9999999999998" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="jJR8IX2gqd7flar8r1S0-58" source="jJR8IX2gqd7flar8r1S0-10" target="jJR8IX2gqd7flar8r1S0-12" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-19" value="&lt;font style=&quot;font-size: 18px&quot;&gt;BlockChain&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="1099.993170731707" y="12.64705882352941" width="258.53658536585357" height="88.52941176470587" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-64" value="This is the first Block so is the genesis block" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="470" y="118.18" width="356.58" height="75.88" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-80" value="The Difficulty of the blockchain is calculated every 2016 blocks = 14 days. &lt;br&gt;The formula is: &lt;br&gt;difficulty = difficulty * ((2016 * 10) / time_elapsed_for_last_2016_bloks&lt;br&gt;Where 2016 * 10 is the target time in minutes for mine 2016 blocks (14 days)&lt;br&gt;In this way if in the 2 weeks the miners power as been increased a lot i will get a higer difficulty (more 0 at the start), otherwise i will get the exact opposite. This value have a limit for the max change. The max the difficulty adjustment is +300% and -75% (otherwise at the start with a small increase of the mining power the value will be a lot higher)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="20" y="72.65" width="440" height="147.35" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-86" value="The hash is calculated by concatenate the bytes" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="20" y="12.65" width="440" height="60" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-9" value="This is a file saved in the HDD of the machine&amp;nbsp;" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1">
          <mxGeometry x="826.5799999999999" y="117" width="360" height="77.06" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-35" value="" style="group" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1" connectable="0">
          <mxGeometry x="1350.0002439024388" y="177.05882352941174" width="723.9024390243901" height="632.3529411764705" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-11" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry width="723.9024390243902" height="632.3529411764705" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-12" value="Previous Block Hash (1)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry y="101.17647058823528" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-13" value="Creation DateTime (2022.05.12 8:10:0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry y="202.35294117647052" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-14" value="Current Block Hash (2)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry y="303.52941176470586" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-15" value="Block (blk000.dat)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry x="180.97560975609758" y="25.294117647058812" width="361.9512195121951" height="50.58823529411764" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-66" value="Merkle tree Tx (Transactions : 4)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry y="505.88235294117646" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-67" value="Nonce (9876)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-35" vertex="1">
          <mxGeometry y="404.7058823529411" width="723.9024390243902" height="101.17647058823528" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-36" value="" style="group" parent="jJR8IX2gqd7flar8r1S0-58" vertex="1" connectable="0">
          <mxGeometry x="470" y="190" width="716.58" height="632.3500000000001" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-5" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry width="716.58" height="632.35" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-6" value="Block (blk000.dat)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry x="216.57549753104882" y="25.29294117647055" width="310.24390243902434" height="50.58823529411764" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-7" value="Previous Block Hash (0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry y="101.18" width="716.58" height="101.18" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-9" value="Creation DateTime (2022.05.12 8:00:00)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry y="202.35000000000002" width="716.58" height="101.18" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-10" value="Current Block Hash (1)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry y="303.53" width="716.58" height="101.18" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-41" value="Merkle tree Tx (Transactions : 0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry y="505.88000000000005" width="716.58" height="101.18" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-43" value="Nonce (1234)" style="rounded=1;whiteSpace=wrap;html=1;" parent="VVx6t-EbCjM2e1m0rHJF-36" vertex="1">
          <mxGeometry y="404.7" width="716.58" height="101.18" as="geometry" />
        </mxCell>
        <mxCell id="Pmx16UZQ2IfWyX8dlkZB-3" value="Difficulty (number of 0)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry y="450" width="240" height="60" as="geometry" />
        </mxCell>
        <mxCell id="Pmx16UZQ2IfWyX8dlkZB-4" value="Mining Reward" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry y="390" width="240" height="60" as="geometry" />
        </mxCell>
        <mxCell id="Pmx16UZQ2IfWyX8dlkZB-5" value="Mining reward is calculated by a start of 50 BTC/Block and every 210 000 blocks the reward is cut in half" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="jJR8IX2gqd7flar8r1S0-58">
          <mxGeometry x="240" y="392" width="200" height="58" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-59" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="670" y="1730" width="1760" height="830" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-67" value="" style="group" parent="jJR8IX2gqd7flar8r1S0-59" vertex="1" connectable="0">
          <mxGeometry width="1760" height="830.0000000000001" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-20" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry width="1760" height="830.0000000000001" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-21" value="Merkle Tree Transactions" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="640.5882352941176" y="41.5" width="478.82352941176464" height="41.5" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-22" value="TX1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="103.52941176470587" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-23" value="TX2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="517.6470588235293" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-24" value="TX3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="931.7647058823528" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-25" value="TX3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="1345.8823529411761" y="664" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-26" value="HASH_TX1TX2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="310.5882352941176" y="415.00000000000006" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-22" target="jJR8IX2gqd7flar8r1S0-26" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-23" target="jJR8IX2gqd7flar8r1S0-26" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-32" value="HASH_TX1TX2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="1138.8235294117646" y="415.00000000000006" width="310.5882352941176" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-24" target="jJR8IX2gqd7flar8r1S0-32" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-25" target="jJR8IX2gqd7flar8r1S0-32" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-36" value="HASH_TX1TX2TX3TX4" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="621.1764705882352" y="166" width="517.6470588235293" height="83" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-26" target="jJR8IX2gqd7flar8r1S0-36" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="466" y="330" />
              <mxPoint x="880" y="330" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="w7sy7rOh6mnJ606th1zS-67" source="jJR8IX2gqd7flar8r1S0-32" target="jJR8IX2gqd7flar8r1S0-36" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1294" y="330" />
              <mxPoint x="880" y="330" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-19" value="How i&amp;nbsp; can get the wallet balance from here?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-78" value="They are hashed togheter using 2 times the SHA256 algorithm" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="365.88" y="580" width="200" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-32" value="I can check if a choosen transaction is in this tree" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="160" width="180" height="60" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-34" value="How??" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="160" y="60" width="180" height="30" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-41" value="Source:&lt;br&gt;https://learnmeabitcoin.com/technical/merkle-root" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-67" vertex="1">
          <mxGeometry x="328.88" y="620" width="274" height="30" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-63" value="&lt;font style=&quot;font-size: 24px&quot;&gt;Peer Machine (Local)&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="397.5" y="60" width="285" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="20" y="110" width="1960" height="110" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-2" value="Wallet" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="520" y="110" width="40" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-3" value="Private Key" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="20" y="130" width="300" height="90" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="jJR8IX2gqd7flar8r1S0-4" target="VVx6t-EbCjM2e1m0rHJF-6" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="340" y="270" />
              <mxPoint x="300" y="270" />
              <mxPoint x="300" y="960" />
              <mxPoint x="155" y="960" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-4" value="Public Key" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="320" y="130" width="340" height="90" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-68" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="2850" y="40" width="1080" height="2620" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-69" value="&lt;font style=&quot;font-size: 24px&quot;&gt;Peer Machine (Remote)&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="3295" y="60" width="284" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-72" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" parent="1" vertex="1">
          <mxGeometry x="2889" y="90" width="1001" height="840" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-84" value="&lt;font style=&quot;font-size: 18px&quot;&gt;BlockChain&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="3249" y="110" width="100" height="35" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-70" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=-0.001;entryY=0.565;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;startSize=6;strokeColor=default;width=20;startWidth=20;" parent="1" source="jJR8IX2gqd7flar8r1S0-14" target="jJR8IX2gqd7flar8r1S0-72" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="730" y="160" as="sourcePoint" />
            <mxPoint x="1240" y="160" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-90" value="Send New Block (using IRC or RPC)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="jJR8IX2gqd7flar8r1S0-70" vertex="1" connectable="0">
          <mxGeometry x="0.1036" y="2" relative="1" as="geometry">
            <mxPoint x="52" y="3" as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-15" value="The Transaction will be choosen by the miners by the transaction fee that the transaction have" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
          <mxGeometry x="380" y="2650" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-21" value="This is a folder that contains all the Blocks and managed using a Database" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="790" y="360" width="427.5" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="w7sy7rOh6mnJ606th1zS-24" target="jJR8IX2gqd7flar8r1S0-51" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1840" y="2860" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="w7sy7rOh6mnJ606th1zS-25" target="jJR8IX2gqd7flar8r1S0-55" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1089" y="3055" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-41" value="Here i choose only the needed transaction to satisfy the output" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
          <mxGeometry x="1880" y="2830" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-42" value="The private key is generated by a random unique value. An example could be: MAC Address + current Datetime + IP Address. After that the value will be encode using the SHA256 algorithm" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="50" y="220" width="220" height="100" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-65" value="How this peer will remove the transaction in the received block from his UTXO list?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
          <mxGeometry x="2690" y="470" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-66" value="How this peer will confirm the received block?" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
          <mxGeometry x="2690" y="410" width="160" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-72" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="970" y="3210" width="237.5" height="260" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-25" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-72" vertex="1">
          <mxGeometry width="237.5" height="260" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-26" value="TxOutput" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-72" vertex="1">
          <mxGeometry x="90" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-29" value="Value" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-72" vertex="1">
          <mxGeometry y="31" width="237.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-31" value="TxOutput Script" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-72" vertex="1">
          <mxGeometry y="131" width="237.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-32" value="TxOutput script Length" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-72" vertex="1">
          <mxGeometry y="80" width="237.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-39" value="Source:&lt;br&gt;https://en.bitcoin.it/wiki/Transaction" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-72" vertex="1">
          <mxGeometry y="200" width="237.5" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-76" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="2929" y="160" width="681" height="570" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-73" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry width="681" height="570" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-74" value="Block (blk000.dat)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry x="194.57142857142858" y="22.799999999999997" width="291.85714285714283" height="45.599999999999994" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-75" value="Previous Block Hash (0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="91.19999999999999" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-76" value="Creation DateTime (2022.05.12 8:0:0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="182.39999999999998" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-77" value="Current Block Hash (1)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="273.59999999999997" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-85" value="Merkle tree Tx (Transactions : 0)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="455.99999999999994" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-86" value="Nonce (1234)" style="rounded=1;whiteSpace=wrap;html=1;" parent="w7sy7rOh6mnJ606th1zS-76" vertex="1">
          <mxGeometry y="364.79999999999995" width="681" height="91.19999999999999" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="30" y="520" width="200" height="150" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-84" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.001;entryY=0.031;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="w7sy7rOh6mnJ606th1zS-2" target="jJR8IX2gqd7flar8r1S0-44" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="190" y="2710" as="targetPoint" />
            <Array as="points">
              <mxPoint x="20" y="580" />
              <mxPoint x="20" y="2730" />
            </Array>
          </mxGeometry>
        </mxCell>
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
May 16, 2022, 11:00:55 AM
Merited by Welsh (2)
 #5

UPDATE

THIS IS SPLITTED BECAUSE THERE IS A LIMIT OF CHARACTERS FOR ONE POST

PART 2

Code:
<mxCell id="w7sy7rOh6mnJ606th1zS-2" value="Unconfirmed Transactions List" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="30" y="550" width="200" height="60" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-3" value="Miner" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="110" y="520" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-83" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="jJR8IX2gqd7flar8r1S0-20" target="jJR8IX2gqd7flar8r1S0-66" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-87" value="Starting from the private key the public key will be created with a one way algorithm called ECDSA secp256k1 that uses an elliptic curve for get the result (in BTC this is included in openssl library)" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="355" y="220" width="270" height="100" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-88" value="How i can know if a transaction is mine or from another peer? is the Address convertible to pubKey?" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="245" y="1440" width="170" height="80" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-1" value="Source:&amp;nbsp;https://www.oreilly.com/library/view/mastering-bitcoin-2nd/9781491954379/ch04.html" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1690" y="110" width="290" height="110" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-2" value="Seed &lt;br&gt;(person flower sun river beach phone ananas water network box cable music)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="660" y="130" width="360" height="90" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-4" value="The seed is a generated list of words that can be used with some algorithm (Which??) to recover the private key and have get back the wallet. This is a list of 12 to 24 words because is more easy to remember insted of a hash with number and letters" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="680" y="220" width="320" height="100" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="VVx6t-EbCjM2e1m0rHJF-6" target="w7sy7rOh6mnJ606th1zS-37" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="155" y="1980" />
              <mxPoint x="590" y="1980" />
              <mxPoint x="590" y="2610" />
              <mxPoint x="1260" y="2610" />
              <mxPoint x="1260" y="3165" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-6" value="Address" style="rhombus;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="65" y="1577.5" width="180" height="190" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-8" value="The address is a generated value that is created from the public key using 3 hash algorithms (RIPEDM160 and SHA256 for create the public key hash from the public key and the Base58 algorithm for create a fixed length and easy to understand hash)&lt;br&gt;&lt;br&gt;It can be write as: &lt;br&gt;PKHash = RIPEDM160(SHA256(PubKey)). &lt;br&gt;&lt;br&gt;It is also called &quot;Double hash&quot; or Hash160.&lt;br&gt;After i create the readable result with Base58 algorithm.&lt;br&gt;&lt;br&gt;A = BASE58(PKHash)&lt;br&gt;&lt;br&gt;This is used for keep the system more private because every time i create a new transaction the address will be different and since is a one way method is not reversible" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="245" y="1520" width="260" height="305" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-44" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="380" y="2710" width="360" height="630" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-45" value="Transaction" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="525" y="2715" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-49" value="Input1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="380" y="2780" width="120" height="160" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-50" value="Input2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="500" y="2780" width="120" height="160" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-51" value="Input3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="620" y="2780" width="120" height="160" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-54" value="OutPut1 (Payment)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="380" y="2980" width="180" height="150" as="geometry" />
        </mxCell>
        <mxCell id="jJR8IX2gqd7flar8r1S0-55" value="OutPut2 (Return)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=default;gradientColor=none;" parent="1" vertex="1">
          <mxGeometry x="560" y="2980" width="180" height="150" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-8" value="Input Count" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="380" y="2740" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-9" value="Output Count" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="380" y="2940" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-12" value="Version" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="380" y="3130" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-13" value="Locktime" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="380" y="3170" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-14" value="Source:&amp;nbsp;&lt;br&gt;https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch05.html&lt;br&gt;&lt;br&gt;https://en.bitcoin.it/wiki/Transaction" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="380" y="3260" width="360" height="80" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-10" value="Flag" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="380" y="3210" width="360" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-11" value="This is a 4 bytes value that contains the version" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="120" y="3130" width="260" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-12" value="OPTIONAL 2 bytes used for indicate the presence of witness data" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="120" y="3210" width="260" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-13" value="This is a 1-9 bytes value that indicate the number of Inputs" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="190" y="2740" width="190" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-14" value="This is the list of Inputs for the transaction" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="190" y="2780" width="190" height="160" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-15" value="Example:&amp;nbsp;https://www.researchgate.net/figure/Bitcoin-transaction-example-four-input-addresses-and-two-output-addresses-data-from_fig1_281773799" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="380" y="3341" width="360" height="79" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-16" value="This is a 1-9 bytes value that indicate the number of Outputs" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="190" y="2940" width="190" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-17" value="This is the list of Outputs transactions" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="190" y="2980" width="190" height="150" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-18" value="Why is a list?? It could be just 1 for the payment and one for the change right??&lt;br&gt;Example:&lt;br&gt;Mark send 1 BTC to Jack using 2 BTC&lt;br&gt;Change = 1 BTC (return to Mark)&lt;br&gt;Payment = 1 BTC (to Jack)&lt;br&gt;" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="10" y="2980" width="180" height="150" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-20" value="How this are choosen?? &lt;br&gt;Does it scan the UTXO list until is engough??&lt;br&gt;If i have 0 BTC it scan all the list??&lt;br&gt;If are translated how it know if a transaction was sended to me??" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="10" y="2780" width="180" height="160" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-23" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="2890" width="240" height="450" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-24" value="TxInput" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1810" y="2890" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-34" value="Previous transaction Hash" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="2920" width="240" height="70" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-35" value="Previous transaction output index" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="2990" width="240" height="70" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-36" value="TxInput Script Length" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="3060" width="240" height="70" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-37" value="TxInput Script ScriptSig" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="3130" width="240" height="70" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-38" value="Sequence number" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="3200" width="240" height="70" as="geometry" />
        </mxCell>
        <mxCell id="w7sy7rOh6mnJ606th1zS-40" value="Source:&lt;br&gt;https://en.bitcoin.it/wiki/Transaction" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="1720" y="3280" width="240" height="60" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-21" value="This is a 32 bytes of a previous to-be-used transaction. This is a value used for indicate from which TxOutput take the info" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1960" y="2920" width="250" height="70" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-22" value="This is a 4 bytes value used for indicate the index of the choosen output transaction" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1960" y="2990" width="250" height="70" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-23" value="This is a 1-9 bytes vale for indicate the script length" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1960" y="3060" width="250" height="70" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-24" value="This is a script that contains the input informations&amp;nbsp;" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1960" y="3130" width="250" height="70" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-25" value="This is a 4 bytes value for ????" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1960" y="3200" width="250" height="70" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-26" value="This is a 8 bytes vale that contain the amount of Satoshi to transfer" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1208" y="3241" width="272" height="49" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-27" value="This is a 1-9 bytes value that contains the length of the script" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1207.5" y="3290" width="272.5" height="50" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-28" value="This is a script that contains the output informations" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1208" y="3340" width="272" height="50" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-29" value="Example ?? Which informations??" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1480" y="3341" width="140" height="49" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-30" value="Example ?? Which informations??" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="2210" y="3130" width="140" height="70" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-38" value="The transaction fee is calculated by Bytes/BTC so the user always try to choose less number of transaction for pay low fees&lt;br&gt;(Default fees is 0.0001BTC/Kb)" style="text;html=1;strokeColor=#d79b00;fillColor=#ffe6cc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="1880" y="2710" width="160" height="119" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-42" value="Will the miner check if a transaction received is valid right? How?" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="30" y="670" width="200" height="40" as="geometry" />
        </mxCell>
        <mxCell id="VVx6t-EbCjM2e1m0rHJF-43" value="How it solve the double spending problem?? Does he check the balance before the transaction??" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="30" y="710" width="200" height="60" as="geometry" />
        </mxCell>
        <mxCell id="Pmx16UZQ2IfWyX8dlkZB-2" value="How this are generated?" style="text;html=1;strokeColor=#b85450;fillColor=#f8cecc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="680" y="320" width="320" height="30" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
odolvlobo
Legendary
*
Offline Offline

Activity: 4298
Merit: 3209



View Profile
May 20, 2022, 10:21:33 PM
Merited by BlackHatCoiner (2), n0nce (2), marti99 (2)
 #6

Please pardon my pedantic pickiness. Some minor corrections...
  • Today, most wallets are so-called HD Wallets, so there is a single 64-byte secret ('seed') which is then often encoded in 12 or 24 words to back it up. From this seed you derive as many private keys as needed using HMAC and the corresponding public.

The "seed" is generated from the seed/recovery/mnemonic phrase, and not the other way around. It's a common minor misconception. The phrase is generated by "encoding" entropy, but the entropy is then discarded.

  • The difficulty formula: difficulty = difficulty * (20160 / time_elapsed_for_last_2016_blocks)

The actual formula is new_difficulty = old_difficulty * (20160 / time_elapsed_for_last_2015_blocks). 2015 blocks is a bug that will probably never be fixed.

Join an anti-signature campaign: Click ignore on the members of signature campaigns.
PGP Fingerprint: 6B6BC26599EC24EF7E29A405EAF050539D0B2925 Signing address: 13GAVJo8YaAuenj6keiEykwxWUZ7jMoSLt
odolvlobo
Legendary
*
Offline Offline

Activity: 4298
Merit: 3209



View Profile
May 20, 2022, 11:20:29 PM
Last edit: May 23, 2022, 09:21:43 PM by odolvlobo
Merited by ABCbits (11), Welsh (6), marti99 (5), o_e_l_e_o (4), BlackHatCoiner (2), DdmrDdmr (1)
 #7

Thank you all for your response and for your help

I've updated the chart with your help and other new informations that i've found online
Now it looks like this ...

Private key: the example generation of the private key is inappropriate. I would remove it or replace it with an actual method - random generation or deterministic generation using BIP-32.

Seed: I would label this "Seed Phrase" to be more accurate. The seed phrase is used to generate a wallets private keys using BIP-32. Note that a wallet using a seed phrase can have an unlimited number of private keys, and a wallet typically does not have a single private key. A seed phrase can be used to restore a wallet because the seed phrase always generates the same private keys.

Mining reward: The mining reward (aka "block reward") consists of the subsidy, which starts at 50 BTC and is halved every 210000 blocks, plus transaction fees. Eventually the subsidy will be 0 due to the halvings and miners will only get transaction fees.

Block: What you have listed as a block is really just the block "header" that contains information about the block. The block also contains the transactions.

How is this [seed phrase] generated? The seed phrase is an encoding of 128 or 256 random bits. See BIP-39.

Will the miner check if a transaction received is valid right? How? Miners validate all transactions before placing them in a block. Nodes validate transactions and blocks when they are received and only propagate the valid ones.

How it solve the double spending problem?? Does he check the balance before the transaction?? A transaction that spends a previously spent output is considered to be invalid and will be rejected by nodes and miners and will not be placed in a block. Note: balances are not tracked except by a wallet.

How this peer will confirm the received block? A peer receiving a block or transaction does not confirm its validity with the sender. It simply discards invalid blocks and transactions. A receiver may disconnect from a sender that sends too many invalid blocks and transactions.

How this peer will remove the transaction in the received block from his UTXO list? The node simply scans the block and removes the spent UTXOs from its UTXO list and adds the new UTXOs to its UTXO list. It also removes transactions in the block from its mempool.

How i can know if a transaction is mine or from another peer? The wallet keeps track of its own transactions.

is the Address convertible to pubKey? No, but spending a UTXO requires a signature that contains the pubkey.

How i  can get the wallet balance from here? The wallet keeps track of all transactions involving the addresses (and private keys) that it controls. That's how it maintains the balance.

How this are choosen?? ... The wallet keeps track of all the UTXOs associated with the addresses it controls. It decides which are the best to spend from.

Why is a list?? It could be just 1 for the payment and one for the change right??  With a list, a transaction can send to any number of addresses all at once. That's more effective than one transaction for each address.

Examples?? You can find transaction details and examples here: https://developer.bitcoin.org/reference/transactions.html

This might also clear up some confusion: https://bitcointalk.org/index.php?topic=5163864.0

Join an anti-signature campaign: Click ignore on the members of signature campaigns.
PGP Fingerprint: 6B6BC26599EC24EF7E29A405EAF050539D0B2925 Signing address: 13GAVJo8YaAuenj6keiEykwxWUZ7jMoSLt
j2002ba2
Full Member
***
Offline Offline

Activity: 204
Merit: 437


View Profile
May 22, 2022, 07:23:18 AM
 #8

The actual formula is new_difficulty = old_difficulty * (20160 / time_elapsed_for_last_2015_blocks). 2015 blocks is a bug that will probably never be fixed.
Additionally the new difficulty is constrained to be between [1/4, 4] times the old one. And cannot be less than 1.
new_difficulty = max(1, old_difficulty * min(4, max(1/4, (20160 / time_elapsed_for_last_2015_blocks))))

In the source actually the new target is calculated, which might give slightly different result than above formula due to rounding.
NotATether
Legendary
*
Offline Offline

Activity: 1582
Merit: 6682


bitcoincleanup.com / bitmixlist.org


View Profile WWW
May 22, 2022, 08:41:11 AM
 #9

Additionally the new difficulty is constrained to be between [1/4, 4] times the old one. And cannot be less than 1.
new_difficulty = max(1, old_difficulty * min(4, max(1/4, (20160 / time_elapsed_for_last_2015_blocks))))

In the source actually the new target is calculated, which might give slightly different result than above formula due to rounding.

And that's done with 256-bit integers, or with proper doubles?

The rounding error shouldn't be that large if the difficulty is stored as an int with 256 bits, as the effect that the lowest bits of the difficulty have on the total hashrate at any given time is negligible.

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
j2002ba2
Full Member
***
Offline Offline

Activity: 204
Merit: 437


View Profile
May 22, 2022, 11:19:53 AM
 #10

Additionally the new difficulty is constrained to be between [1/4, 4] times the old one. And cannot be less than 1.
new_difficulty = max(1, old_difficulty * min(4, max(1/4, (20160 / time_elapsed_for_last_2015_blocks))))

In the source actually the new target is calculated, which might give slightly different result than above formula due to rounding.

And that's done with 256-bit integers, or with proper doubles?

The rounding error shouldn't be that large if the difficulty is stored as an int with 256 bits, as the effect that the lowest bits of the difficulty have on the total hashrate at any given time is negligible.


Looked again and remembered, that the target is always represented as a "compact" number (32 bits, similar to float), so double should have enough bits. Possibly double arithmetic should be done in specific rounding modes though.

Then again - compact representation has only 23 significant bits, plus 8 bits exponent (and one sign bit). Instead of being power of 2, the exponent is power of 256. So things still might differ. Even more than I expected.
bitmover
Legendary
*
Offline Offline

Activity: 2282
Merit: 5887


bitcoindata.science


View Profile WWW
May 24, 2022, 12:18:46 PM
Merited by marti99 (3), Welsh (2)
 #11


I created an online link of your work. Anyone can see it here:

Link

I also pasted the image here. If you zoom in you can see it here in the forum.


.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
May 30, 2022, 10:42:32 AM
Last edit: May 30, 2022, 10:54:23 AM by marti99
 #12

UPDATE
Hi to all and thanks for the replies!!
We are becoming numerous!
This is the link with the new update. I've a lot of information thanks to the link https://learnmeabitcoin.com/
I think i'm at a pretty good point of understand how the bitcoin works.
Now i need to understand better what's in the bitcoin folder files

I GET SUSPICIOUS LINK ERROR, HOW I CAN SOLVE THIS?

https[Suspicious link removed]ehN6BmgIMpVkAZ4NWMjTLttPZSOgaQJkk1JfDJxzFVpTE%2B6vmK8s8l9ezj3Tk9hn43Q6hrhgFgHNTX%2BhhjCmNcDWb10xki5uje3BLi52d1Q8E7EA%2BGuziYgyFeNaL%2BCOe9RHyfyCRiNocougUKpPfMI5BNQ8e7UoDJWyCTbASC4S1lGKoBAeLw55d2XaKH8AjSfB94hLMcjqr2RCScNUlmf0m%2F9D6DlWuhGycACHX1mRPHsPXTzX1yvA6FPC0NDBYFqrZMpSaUwPCVy4Lu8Qvm4%2Fgdb43QZVu6rFY6qKCGXtk8z5IIfBzKwqii6Apj6pcpcgrncrlY0G5M4SRJk4p8Eq4aXn8aZqzcN17S3b%2F8e5kUGOnkI4qWBbvmJkumzGCY53Sgdx4hOk27yCe0PBifKTp1JuTmKSFASrEpPT9NJkVICQp%2FwvKILiSltHKT3BFlo5yhIpliGeyGcyLJskm5qHnh2PuN7axRApoF7AEcTrNQg1M%2FTS%2FDDVtep20hVLg1VHwDRoUagnqhqAiAFKL9okINNb0m6215vF%2BEzKr7rNaRWkAxhGZ5D4YbU3V7%2FMIN2zogQ3W%2FuAE605MVzzPElJqXiBYH6hO4X7So7gPGMstJSpDyYjnGh%2Bql9osa1V3xUqVZp3lqYD03bix1p%2FmCipKkr1unQC%2Fmq%2Fv3JKhyRmcYgGfQ30HL7uRDUpKWfeo9Wer3mpvy3PBd7vohj26qunW1I9SvA6aw3Tu8bgjodOpbbQ%2FUOSFbbLhevaqY%2FtWrdzMmO8MDDMMPVMEBReaMPtqkwJgEnNC%2FMLkJk4HKkwFUdA7i0tK1HmbYwNhU%2FYis4E5IT1KEflKGVV7OkjUyfCRF5lNWvsNGB2xzyZH15%2B%2BbNoB6LbB81lRJIxhMXgPdyX5x%2BRY5qvpmTIJMPhwmVdeb1JW3kusWpdEa%2BY%2FJHcrvbvMJFDdYcXmdpIPJgMBwpQB4n60TGdZWl7APZXLNrvp08f3Nnxfsw7vTy3c0oqfXvnh6vzCOSZeh%2BiC9Nbvk7X%2F%2FPP3w5e3n9%2Bd%2FsQNn796e%2FX75%2Fj%2FqWi7R30vEIg%2FZcj4hNPjS5Vcnl8zyLTUhEJRfhghp90%2F2qpvzlwDbRoC5m1EJaymDodJWbdXXrAR71GRtra%2Favk6q2XKiRfkcf5mIi%2BVPKZF05%2FOwpORwHucR%2FpekSJTaPH4UHewzTaJ3OrA7YYsxVPm811oLYNjrFcHCS0PN2O7oGFjUqUbhXkNKQFH6B3SNst35Zj%2BNVoZHiQ04%2BPaLEtVKf98kzr4UvHTH2IOsYg7VRAxGDDC06rFi7Jg1DUCMuc8txtQykqtZkl3XI6Nj8g%2Bt4QJ1yJfKUwDe9sxTQKuvR%2FLUXtNL9sBT1nPzlOpH%2Bu8SlXCL%2BxfDMQBW9swxqlPosRyz10q4PXCM%2Ftwcs7IFnl6S1O4XyzQAYvbLNKIeoAemOWp%2Fn8o0danMczGNozoHzlm1H3flvVi2gVCzZ7ZRvQPHkPu7B66xn5trVCfBZ0SqJ2jF2C3YePXF8A2AnD3zjeopoOlzmqb92nLGpvHczKN6C4Se1jQRIA1jWJOXx2Dtp%2BElAFd75iXAQ0DrZCdk0t6q%2BnJWSvvuzRtWKj6hAeiMVouF9JnLEhWluKy%2BYLqkP9JbR7MwyUj%2FIPY4gj1yGi3AnYW3ay6q1xSR8r24OSXLY1SSW36dPdTrEStg66qad2P3ElXyrANRyR5cUqoQoc%2BmpVE4ZSFR0lrjQdwH%2F50nGV0Hu3ucTKdJtEyrpokSflZGa%2BZC6aq7hL0YOT7DqKa3LnPpOZl0Nump3LpkUZCiVvLLfJGXZTKhWh11x0GPe4QX9ZiDQabemZLhAYEHsEOx8YjG%2B%2FhrQWapNr%2F9B7%2Fk7CMmSHLG%2Fwc%3D
ABCbits
Legendary
*
Offline Offline

Activity: 2856
Merit: 7406


Crypto Swap Exchange


View Profile
May 30, 2022, 12:09:41 PM
Merited by marti99 (3)
 #13

I also pasted the image here. If you zoom in you can see it here in the forum.

I had poor experience by zooming in forum page, i'd recommend to open the image on new tab instead.

I GET SUSPICIOUS LINK ERROR, HOW I CAN SOLVE THIS?

You could try using different website or evade forum system such as replacing . with [dot]. An example,

Code:
viewer[dot]diagrams[dot]net

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
May 30, 2022, 03:18:37 PM
 #14

I can't resolve the error and now i don't have time. i will upload it in the future.
In the meaning time can someone help me to undestand how files are stored in the bitcoin folder?
From this link https://github.com/bitcoin/bitcoin/blob/master/doc/files.md it seems like the blk files store blocks informations and indexes/txindex/ stores the transactions index so with of the 2 have the full transaction informations?? Using this method are some informations duplicated??
ABCbits
Legendary
*
Offline Offline

Activity: 2856
Merit: 7406


Crypto Swap Exchange


View Profile
May 31, 2022, 11:42:55 AM
Merited by marti99 (3)
 #15

From this link https://github.com/bitcoin/bitcoin/blob/master/doc/files.md it seems like the blk files store blocks informations and indexes/txindex/ stores the transactions index so with of the 2 have the full transaction informations?? Using this method are some informations duplicated??

There's no duplicate. Currently blocks folder is about 434GB while txindex folder only about 35.3GB. txindex utilize LevelDB (which is key/value database) to store these information.

't' + 32-byte transaction hash -> transaction index record. These are optional and only exist if 'txindex' is enabled (see above). Each record stores:

    Which block file number the transaction is stored in.
    Which offset into that file the block the transaction is part of is stored at.
    The offset from the start of that block to the position where that transaction itself is stored.

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
June 01, 2022, 12:17:08 AM
Last edit: June 01, 2022, 01:06:09 AM by marti99
Merited by ABCbits (1)
 #16

Thanks guys for your help!!

Unfortunately i can't post links because i'm a newbie. It doesn't matter i will post the source code.

't' + 32-byte transaction hash -> transaction index record. These are optional and only exist if 'txindex' is enabled (see above). Each record stores:

    Which block file number the transaction is stored in.
    Which offset into that file the block the transaction is part of is stored at.
    The offset from the start of that block to the position where that transaction itself is stored.

Thanks you very much! This link helped me a lot!

The only thing i didn't understand is how this values are stored in a file.

Is the file structure like that??

Code:
'b' + 32-byte block hash -> block index record. Each record stores:
The block header.
The height.
The number of transactions.
To what extent this block is validated.
In which file, and where in that file, the block data is stored.
In which file, and where in that file, the undo data is stored.

Example:
Key: b <32 bytes block hash>
Value: <blockHeader> <height> <TransactionCount> <Blk file> <Blk fileLocation> <Rev file> <Rev fileLocation>

So the result will be something like that:
b ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
1 ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb 1234 1234 1234 1 1 blk00001.dat 0 rev00001.dat 0

Struct:
b: Indicate the value type
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb: block hash

(Block Header part)
1: version
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb: previous block hash
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb: merkle root hash
1234: unix epoch time
1234: nBits
1234: nonce

1: height
1: transaction count
blk00001.dat: block file
0: offset of the block inside the file
rev00001.dat: rev file
0: offset of the block rev inside the file

So if i want to find a block informations i need to scan this file until i find the block hash i'm looking for and read it from the blk files???
Why keep the index a lot big instead of a lite version for keep it always in memory?
Why store a lot of informations for a block?? If i understand well the block header is a value that contains the block hash, previous block hash, merkle tree root hash ecc... Those informations are not stored inside the blk file?

So my probably wrong idea is to have a file blkIndex that stores only basic informations like :
- block hash
- blk file name where the informations are stored
- the location inside the file

Read it at the startup and load all the blocks headers from the blk files like Satoshi says
A block header with no transactions would be about 80 bytes. If we suppose blocks are
generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems
typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of
1.2GB per year, storage should not be a problem even if the block headers must be kept in
memory

and when i need a more deep information like a transaction i will search it in the index file.
Why create a single index file instead of multiple index files for transactions, blocks, ecc.. (i know using offset will solve the problem of big file to read)?? In this way is confusing to read no??

Thank you all for helping me understand how BTC works. I'm learning a lot!!

I'm asking all those questions because while updating the chart i'm tring to recreate a simple cryptocurrency using C# just for learning. I've already created the wallet part and the script for sign the transactions. In another project i've already created a simple blockchain so i only need to put the pieces togheter. If someone is insterested i can post it here (i'm trying to add a lot of comments for keep it simple to understand)

UPDATE

Code:
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2022-06-01T00:16:38.985Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36" etag="yrPgFuYjnJxNFXGHWWRY" version="18.0.6" type="device"><diagram id="4KwzXGMXcMT0csuQZ-j6" name="Page-1">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</diagram></mxfile>
n0nce
Hero Member
*****
Offline Offline

Activity: 882
Merit: 5814


not your keys, not your coins!


View Profile WWW
June 01, 2022, 08:02:21 PM
 #17

I'm asking all those questions because while updating the chart i'm tring to recreate a simple cryptocurrency using C# just for learning. I've already created the wallet part and the script for sign the transactions. In another project i've already created a simple blockchain so i only need to put the pieces togheter. If someone is insterested i can post it here (i'm trying to add a lot of comments for keep it simple to understand)
That's a really nice goal! Honestly, if you do it just for learning, you don't have to copy the way Bitcoin does it. You could use a different DBMS, maybe something you already know how to use and manage and which is potentially newer / more state-of-the-art than LevelDB. After all, Bitcoin is 14 years old, and many of the options we have today didn't exist yet.

Anyhow, here's a pretty good explanation about the blk.dat and block structure in Bitcoin:
https://learnmeabitcoin.com/technical/blkdat

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
June 30, 2022, 11:15:27 AM
Last edit: June 30, 2022, 12:37:03 PM by marti99
 #18

Hi all, in the next days i will update the chart with the new informations that i've found

I those days i've parsed the blk, rev and LevelDB files and now i'm tring to understand how the wallet.dat file work and what's inside.

Right now i know there are private keys, public keys, addresses and all the transactions like this site says:
It contains:

- keypairs for each of your addresses
- transactions done from/to your addresses
- user preferences
- default key (obsolete, no longer used by Bitcoin Core except by parsing them to detect key/value and wallet corruption)
- reserve keys
- accounts
- a version number
- Key pool
- Since 0.3.21: information about the current best chain, to be able to rescan automatically when restoring from a backup.

So i started look inside it and i've found a lot of keywords that are in the Bitcoin source code, inside src -> wallet -> walletdb.cpp:
Code:
namespace DBKeys {
const std::string ACENTRY{"acentry"};
const std::string ACTIVEEXTERNALSPK{"activeexternalspk"};
const std::string ACTIVEINTERNALSPK{"activeinternalspk"};
const std::string BESTBLOCK_NOMERKLE{"bestblock_nomerkle"};
const std::string BESTBLOCK{"bestblock"};
const std::string CRYPTED_KEY{"ckey"};
const std::string CSCRIPT{"cscript"};
const std::string DEFAULTKEY{"defaultkey"};
const std::string DESTDATA{"destdata"};
const std::string FLAGS{"flags"};
const std::string HDCHAIN{"hdchain"};
const std::string KEYMETA{"keymeta"};
const std::string KEY{"key"};
const std::string LOCKED_UTXO{"lockedutxo"};
const std::string MASTER_KEY{"mkey"};
const std::string MINVERSION{"minversion"};
const std::string NAME{"name"};
const std::string OLD_KEY{"wkey"};
const std::string ORDERPOSNEXT{"orderposnext"};
const std::string POOL{"pool"};
const std::string PURPOSE{"purpose"};
const std::string SETTINGS{"settings"};
const std::string TX{"tx"};
const std::string VERSION{"version"};
const std::string WALLETDESCRIPTOR{"walletdescriptor"};
const std::string WALLETDESCRIPTORCACHE{"walletdescriptorcache"};
const std::string WALLETDESCRIPTORLHCACHE{"walletdescriptorlhcache"};
const std::string WALLETDESCRIPTORCKEY{"walletdescriptorckey"};
const std::string WALLETDESCRIPTORKEY{"walletdescriptorkey"};
const std::string WATCHMETA{"watchmeta"};
const std::string WATCHS{"watchs"};
} // namespace DBKeys

So i've tried parsing it alone by checking the source code of BTC and the wallet.dat file but it was really hard so i decided to start search online and i've found a github project called pywallet.

After edit it i got the wallet.dat info in a text file for have them in a more readable way and i've found that there are 2000 keys and 2000 pools records. Why?? What are those??
Here an example of the file:
Code:
{
   "keymeta":"unsupported",
   "bestblock_nomerkle":"unsupported",
   "tx":[
      
   ],
   "keys":[
      {
         "addr":"<20 bytes>",
     "private":"<a long hex value>",
         "secret":"<33 bytes value>",
         "sec":"Ky2EXQFjBS927tJnjWgApYQAP2vegJEKjkQYNAj5zbfvp9Kc51xM",
         "compressed":true,
         "hexsec":"<32 bytes value>",
         "pubkey":"<32 bytes>",
         "reserve":1
      }
(THERE ARE 2000 OF THIS RECORD, ALWAYS WITH DIFFERENT VALUES)
"bestblock":"unsupported",
   "version":220000,
   "ckey":[
      
   ],
   "pool":[
      {
         "nVersion":220000,
         "public_key_hex":"<32 bytes>",
         "nTime":1656333643,
         "addr":"<20 bytes string>",
         "n":256
      }
(THERE ARE 2000 OF THIS RECORD, ALWAYS WITH DIFFERENT VALUES)
"hdchain":"unsupported",
   "flags":"unsupported",
   "minversion":169900,
   "mkey":{
      
   },
   "names":{
      
   }


marti99 (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 52


View Profile
July 05, 2022, 10:46:42 AM
 #19

I've updated the Chart, i hope i put all the informations, i will double check and continue to try to understand the wallet.dat file

Code:
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2022-07-05T10:47:13.928Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" etag="xjQwXBw5WwGBU02PWuNq" version="20.0.4" type="device"><diagram id="4KwzXGMXcMT0csuQZ-j6" name="Page-1">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</diagram></mxfile>
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!