рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

R рдореЗрдВ рдХреЛрдб рдХрд░рдХреЗ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЛ рд╕рдордЭреЗрдВ

R рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдмреНрд▓реЙрдХрдЪреЗрди рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рдХреБрдЫ рдореВрд▓рднреВрдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреНрдпрд╛ рд╣реИрдВ!
┬╖ 10 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдЖрдЬрдХрд▓ рд╣рд░ рдХреЛрдИ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ тАФ рдмрд┐рдЯрдХреЙрдЗрди рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдХрд╛рд░рдгред рдпрд╣ рдЬрд╛рдирдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рд░реЛрдЪрдХ рдХрд┐ рдмрд┐рдЯрдХреЙрдЗрди рдореЗрдВ рдмреБрд▓рдмреБрд▓рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдкреНрд░рд╢реНрди рд╣реИ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХ рдЕрд╕рд▓ рдореЗрдВ рдХрд╛рдо рдХреИрд╕реЗ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдХреНрдпрд╛-рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдмрд┐рдЯрдХреЙрдЗрди рдХреА рдХрд╣рд╛рдиреА 2008 рдХреЗ рдПрдХ рд╢реНрд╡реЗрддрдкрддреНрд░ "Bitcoin: A Peer-to-Peer Electronic Cash System" рд╕реЗ рд╢реБрд░реВ рд╣реБрдИред рдЗрд╕ рдкреЗрдкрд░ рдореЗрдВ рд╕рддреЛрд╢реА рдирд╛рдХрд╛рдореЛрддреЛ (рдЕрдм рднреА рдЗрд╕ рдмрд╛рдд рдкрд░ рдмрд╣рд╕ рдЬрд╛рд░реА рд╣реИ рдХрд┐ рд╕рддреЛрд╢реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреМрди рд╣реИрдВ) рдирд╛рдордХ рд▓реЗрдЦрдХ рдиреЗ рдПрдХ рдирдИ, рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рддрдХрдиреАрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдкреЗрд╢ рдХрд┐рдпрд╛: рдПрдХ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдореБрджреНрд░рд╛ рдЬреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдирд╛рдо рдХреА рдЪреАрдЬрд╝ рдкрд░ рдЪрд▓рддреА рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдпрд╣реАрдВ рд╕реЗ рдлреИрд▓рд╛ рдФрд░ рдЖрдЬ рдЗрд╕реЗ рдХрдИ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдмреНрд▓реЙрдХрдЪреЗрди рд╕реЗ рдкрд░рд┐рдЪрдп рдСрдХреНрд╕рдлрд╝реЛрд░реНрдб рдХреЗ BlockchainSociety рдХреА рдПрдХ рдмреИрдардХ рдореЗрдВ рд╣реБрдЖред рд╡рд╣рд╛рдВ рд╕рднреА рд▓реЛрдЧ рдЗрд╕ рдирдИ рддрдХрдиреАрдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд▓реЗрдХрд░ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рджрд┐рдЦ рд░рд╣реЗ рдереЗред рдФрд░ рд╕рдЪ рдХрд╣реЗрдВ рддреЛ рдпрд╣ рдЖрдХрд░реНрд╖рдХ рд▓рдЧрддрд╛ рд╣реИ: рд▓реЗрдирджреЗрди, рдЕрдиреБрдмрдВрдзреЛрдВ рдпрд╛ рдЖрдкрдХреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реИрдХ-рдкреНрд░реВрдл рд╡реЛрдЯрд┐рдВрдЧ рдорд╢реАрдиреЗрдВ) рдХрд╛ рдПрдХ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд, рдЫреЗрдбрд╝рдЫрд╛рдбрд╝-рд░реЛрдзреА рдбреЗрдЯрд╛рдмреЗрд╕ред рдХреНрд░рд┐рдкреНрдЯреЛ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХрдЪреЗрди рдХрд╛ рд╡рд╛рджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рднрд░реЛрд╕реЗ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрджрд▓ рдХрд░ рдкреВрд░реА рдЙрджреНрдпреЛрдЧреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд▓рд╛ рджреЗрдЧрд╛ тАФ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдмреИрдВрдХреЛрдВ рдпрд╛ рд╡рдХреАрд▓реЛрдВ рдЬреИрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдЬрд░реВрд░рдд рди рд░рд╣реЗ; рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рддреЛ рд╕рд┐рд░реНрдл рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рддрд╛рдХрддред

рдЬрдмрдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рдЪрд╛рд░ рд╕рд╣рдЬ рд╣реИ, рдмреНрд▓реЙрдХрдЪреЗрди рддрдХрдиреАрдХреА рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдордЭрдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдореЗрд░реА рдирдЬрд░ R bloggers рдкрд░ рдПрдХ рд▓реЗрдЦ рдкрд░ рдкрдбрд╝реА, рдЬрд╣рд╛рдВ BigData Doc рдиреЗ рдкреВрд░реЗ рдХрд╛ рдкреВрд░рд╛ рдмреНрд▓реЙрдХрдЪреЗрди R рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИред R рдореЗрдВ рдмрдирд╛ рдмреНрд▓реЙрдХрдЪреЗрди рд╢рд╛рдпрдж рджреБрдирд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рдпрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдореМрдЬреВрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдпрд╣ рдмреЗрд╣рддрд░реАрди рддрд░реАрдХрд╛ рд╣реИред рдореИрдВ рднреА рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ R рдореЗрдВ рдмреНрд▓реЙрдХрдЪреЗрди рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛: "рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЬрд░реВрд░ рд╕рдордЭрддреЗ рд╣реИрдВ"ред

рдмреНрд▓реЙрдХрдЪреЗрди рдХреНрдпрд╛ рд╣реИ?

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХрд╛ рд▓рдХреНрд╖реНрдп рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ тАФ рдЬрд┐рд╕реЗ рдЖрдк рдмреНрд▓реЙрдХ рдХрд╣рддреЗ рд╣реИрдВ тАФ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдмрд┐рдЯрдХреЙрдЗрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрдИ рд╡рд┐рддреНрддреАрдп рд▓реЗрдирджреЗрди рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдирдП рд▓реЗрдирджреЗрди (рдпрд╛ рдирдпрд╛ рдбреЗрдЯрд╛) рдЖрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ тАФ рдмреНрд▓реЙрдХрдЪреЗрди тАФ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдЧрднрдЧ рд╣реИрдХ-рдкреНрд░реВрдл рдХреИрд╕реЗ рдмрдирддреЗ рд╣реИрдВред

1. рдмреНрд▓реЙрдХреНрд╕

    block_example <- list(index = 1,
                     timestamp = "2018-01-05 17.00 MST",
                     data = "some data",
                     previous_hash = 0,
                     proof = 9,
                     new_hash = NULL)

рдмреНрд▓реЙрдХрдЪреЗрди рдмрдирд╛рдирд╛ тАФ рдпрд╛рдиреА рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ тАФ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рджреЛ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛: рд╣реИрд╢рд┐рдВрдЧ рдФрд░ рдкреНрд░реВрдл-рдСрдл-рд╡рд░реНрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред

2. рд╣реИрд╢

рдПрдХ рд╣реИрд╢, рдмреНрд▓реЙрдХ рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдиреНрдп рдмреНрд▓реЙрдХреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЙрд╕рдХреА рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╣реИрд╢ рдлрдВрдХреНрд╢рди рдХрд┐рд╕реА рдЗрдирдкреБрдЯ рдХреЛ рд▓реЗрдХрд░ рдЖрдкрдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдЖрдк рдЕрдкрдиреА рдорд┐рддреНрд░ рдХреЛ рдпрд╣ рдкрд╣реЗрд▓реА рджреЗрддреЗ рд╣реИрдВ тАФ "рдмреЗрд╣рддрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреМрди-рд╕рд╛ рд╣реИ: Stata рдпрд╛ R?" тАФ рдФрд░ рдЖрдк рдЙрд╕реЗ рд╕рд╣реА рдЙрддреНрддрд░ рдХрд╛ рд╣реИрд╢ рджреЗрддреЗ рд╣реИрдВ: "71ec0b920622cf4358bbc21d6a8b41f903584808db53ec07a8aa79119304ce86"ред рдЕрдм рд╡рд╣ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рдЙрддреНрддрд░ рдХреЛ рд╣реИрд╢-рдлрдВрдХреНрд╢рди (рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ SHA256 рдПрд▓реНрдЧреЛрд░рд┐рджрдо) рдореЗрдВ рдбрд╛рд▓рдХрд░ рдЦреБрдж рдЬрд╛рдВрдЪ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВ:

    library("digest")

    digest("Stata" ,"sha256") # first try
    ## [1] "3ac273f00d52dc9caf89cbd71e73e5915229a588117ca3441630089409ddb7bc"
    digest("R", "sha256") # second try
    ## [1] "71ec0b920622cf4358bbc21d6a8b41f903584808db53ec07a8aa79119304ce86"

рдпрд╣ рдЖрдкрдХреА рдХреИрд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╣реИрд╢ рдлрдВрдХреНрд╢рди рдореЗрдВ рдмреНрд▓реЙрдХ рдХреА рдЬрд╛рдирдХрд╛рд░реА (index, timestamp, data) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рднреА рдЗрдирдкреБрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡реИрдз рд╣реИрд╢ рддрднреА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рдкрддрд╛ рд╣реЛ, рдЬреЛ рдЕрдкрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рд╣реИрд╢ рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреНрд░рдо рдРрд╕реЗ рд╣реА рдЪрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдмреНрд▓реЙрдХреЛрдВ рдХреА рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп, рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдХрд┐рд╕реА рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗ рддреЛ рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╣реИрд╢ рджреЛрдмрд╛рд░рд╛ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рд╣реЛрдВрдЧреЗред

    #Function that creates a hashed "block"
    hash_block <- function(block){
      block$new_hash <- digest(c(block$index,
                                 block$timestamp,
                                 block$data,
                                 block$previous_hash), "sha256")
      return(block)
    }


3. рдкреНрд░реВрдл-рдСрдл-рд╡рд░реНрдХ

рдпрджрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬрдиреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕реЗ рдирдП рдмреНрд▓реЙрдХреНрд╕ рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗред рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдирдП рдмреНрд▓реЙрдХреНрд╕ рдмрдиреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рд░ рд╕реЗрдХрдВрдб рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд┐рдХреНрдХреЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХреЗрдВ, рддреЛ рд╕рд┐рдХреНрдХреЛрдВ рдХреА рдХреАрдордд рдШрдЯ рдЬрд╛рдПрдЧреАред

рдЗрд╕реАрд▓рд┐рдП, рд╣рдо рдПрдХ рддрдерд╛рдХрдерд┐рдд "рдкреНрд░реВрдл-рдСрдл-рд╡рд░реНрдХ" (PoW) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдирдпрд╛ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреА рдХрдард┐рдирд╛рдИ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред "рдкреНрд░реВрдл" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдРрд╕рд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрдирд╛рдирд╛ рдХрдард┐рди рд╣реЛ рд▓реЗрдХрд┐рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рдиред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд "рдХрд╛рд░реНрдп" рдХреЛ PoW рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реВрдВрдЧрд╛: рдЕрдЧрд▓рд╛ рдРрд╕рд╛ рд╕рдВрдЦреНрдпрд╛ рдвреВрдВрдвреЗрдВ рдЬреЛ 99 рд╕реЗ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдФрд░ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХреА рдкреНрд░реВрдл-рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛред

    ### Simple Proof of Work Alogrithm
    proof_of_work <- function(last_proof){
      proof <- last_proof + 1

      # Increment the proof number until a number is found that is divisable by 99 and by the proof of the previous block
      while (!(proof %% 99 == 0 & proof %% last_proof == 0 )){
        proof <- proof + 1
      }

      return(proof)
    }

Bitcoin рдпрд╛ Ethereum рдЬреИрд╕реЗ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдирдП рдмреНрд▓реЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рддрдерд╛рдХрдерд┐рдд рдорд╛рдЗрдирд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдмрдирдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдорд╕реНрдпрд╛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдЬреЛ рдорд╛рдЗрдирд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ PoW рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдирдпрд╛ рдмреНрд▓реЙрдХ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдмрд┐рдЯрдХреЙрдЗрди рдореЗрдВ рдЗрдирд╛рдо рдкрд╛рддрд╛ рд╣реИ (рдпрд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирдП рдмрд┐рдЯрдХреЙрдЗрди рдмрдирддреЗ рд╣реИрдВ)ред рд╕рд╣реА рдкреНрд░реВрдл рдЦреЛрдЬрдиреЗ рдХреА рдпрд╣ "рд▓реЙрдЯрд░реА" рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдирдП рдмреНрд▓реЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рд╢рдХреНрддрд┐ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд░рд╣реЗред рдЬрдм рдХреЛрдИ рдирдпрд╛ рдмреНрд▓реЙрдХ рдорд╛рдЗрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рднреА рддрдХ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╣рд░ рдиреЛрдб рдХреЗ рдкрд╛рд╕ рдирд╡реАрдирддрдо рдмреНрд▓реЙрдХрдЪреЗрди рдХреА рдкреНрд░рддрд┐ рд╣реЛред рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕рдмрд╕реЗ рд▓рдВрдмреА рдмреНрд▓реЙрдХрдЪреЗрди (рдЬрд┐рд╕рдореЗрдВ "рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХрд╛рдо рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛") рдХреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдХрд╛ рд╡реИрдз рд╕рдВрд╕реНрдХрд░рдг рдорд╛рдирдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ "рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╕рд░реНрд╡рд╕рдореНрдорддрд┐" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

Bitcoin рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ PoW рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдРрд╕реА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдвреВрдВрдврдиреА рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдЧреНрд░рдгреА рд╢реВрдиреНрдпреЛрдВ рд╡рд╛рд▓реЗ рд╣реИрд╢ рдмрдирд╛рдПрдВ (рдЗрд╕рдХреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореБрдЭреЗ Savjee рдХреЗ рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдорд┐рд▓реА)ред рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЧрддрд┐ рдмрдврд╝рдиреЗ рдФрд░ рдорд╛рдЗрдирд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рдиреЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП PoW рдХреА рдХрдард┐рдирд╛рдИ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдирдпрд╛ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд▓рдЧрднрдЧ рджрд╕ рдорд┐рдирдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реНрдерд┐рд░ рд░рд╣реЗред

4. рдирдП рдмреНрд▓реЙрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛

рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмреНрд▓реЙрдХ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдмреНрд▓реЙрдХреНрд╕ рд╣реИрд╢ рдХреЗ рдЬрд░рд┐рдП рдХреИрд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ PoW рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдП рдмреНрд▓реЙрдХреНрд╕ рдмрдирдиреЗ рдХреА рдЧрддрд┐ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреА рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

    #A function that takes the previous block and normally some data (in our case the data is a string indicating which block in the chain it is)
    gen_new_block <- function(previous_block){

      #Proof-of-Work
      new_proof <- proof_of_work(previous_block$proof)

      #Create new Block
      new_block <- list(index = previous_block$index + 1,
                        timestamp = Sys.time(),
                        data = paste0("this is block ", previous_block$index +1),
                        previous_hash = previous_block$new_hash,
                        proof = new_proof)

      #Hash the new Block
      new_block_hashed <- hash_block(new_block)

      return(new_block_hashed)
    }

рдмреНрд▓реЙрдХрдЪреЗрди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХрд░рдиреА рд╣реЛрддреА рд╣реИред рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдЬреЗрдиреЗрд╕рд┐рд╕ рдмреНрд▓реЙрдХ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рдФрд░ рдкреНрд░реВрдл рддрдерд╛ рдкреНрд░реАрд╡рд┐рдпрд╕ рд╣реИрд╢ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдиреЗ рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдкрд┐рдЫрд▓рд╛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реИ)ред

    # Define Genesis Block (index 1 and arbitrary previous hash)
    block_genesis <-  list(index = 1,
                           timestamp = Sys.time(),
                           data = "Genesis Block",
                           previous_hash = "0",
                           proof = 1)


5. рдмреНрд▓реЙрдХрдЪреЗрди рдмрдирд╛рдирд╛

рдЕрдм рдЖрдк рдмреНрд▓реЙрдХрдЪреЗрди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЬреЗрдиреЗрд╕рд┐рд╕ рдмреНрд▓реЙрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдХ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреБрдЫ рдмреНрд▓реЙрдХреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

    blockchain <- list(block_genesis)
    previous_block <- blockchain[[1]]

      # How many blocks should we add to the chain after the genesis block
      num_of_blocks_to_add <- 5

      # Add blocks to the chain
      for (i in 1: num_of_blocks_to_add){
        block_to_add <- gen_new_block(previous_block) 
        blockchain[i+1] <- list(block_to_add)
        previous_block <- block_to_add

        print(cat(paste0("Block ", block_to_add$index, " has been added", "\n",
                   "\t", "Proof: ", block_to_add$proof, "\n",
                   "\t", "Hash: ", block_to_add$new_hash)))
      }
    ## Block 2 has been added
    ##  Proof: 99
    ##  Hash: 7d3dfbb58b410838769f6080dbc62a44a4c5d411a41048c4e597d26dccd1cd38NULL
    ## Block 3 has been added
    ##  Proof: 198
    ##  Hash: 4f8bdd79d751f9e9829c14c52a737f257285b61e54b29531dd59bf1a530f1097NULL
    ## Block 4 has been added
    ##  Proof: 396
    ##  Hash: 512b877c4ff92605d9fe10ac73ced20f748742964f306c211c4691f15425a26eNULL
    ## Block 5 has been added
    ##  Proof: 792
    ##  Hash: a3baaa025186c5bcb2238a888bc65e705ffe73c17dc5c8f26ee337fd62867993NULL
    ## Block 6 has been added
    ##  Proof: 1584
    ##  Hash: d12c3f54c14f3287a9f31ab542271197ba6a658cee561a9289819dd563fe4991NULL

рдпрджрд┐ рдЖрдк рдФрд░ рдЕрдзрд┐рдХ рдмреНрд▓реЙрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рдордп рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реВрдл рд╕рдВрдЦреНрдпрд╛ рдШрд╛рддреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝рддреА рд╣реИред

blockchain R

Bitcoin рдЬреИрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдирдП рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдХрдореЛрдмреЗрд╢ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (Bitcoin рдореЗрдВ рд▓рдЧрднрдЧ 10 рдорд┐рдирдЯ)ред рдЗрд╕рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЧрддрд┐ рдмрдврд╝рдиреЗ рдФрд░ рдорд╛рдЗрдирд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рдиреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ PoW рдХреА рдХрдард┐рдирд╛рдИ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЕрдВрддрддрдГ, рдЖрдкрдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

    blockchain[[5]]
    ## $index
    ## [1] 5
    ## 
    ## $timestamp
    ## [1] "2018-02-08 12:02:56 GMT"
    ## 
    ## $data
    ## [1] "this is block 5"
    ## 
    ## $previous_hash
    ## [1] "26cdc16a4560df5fa2fd521dbca22670e2475c35d3dd90781872bee98a164eef"
    ## 
    ## $proof
    ## [1] 792
    ## 
    ## $new_hash
    ## [1] "2eef25bf0bc4ee81e8c7cd1dfda65855b4ba32aba218d8c525a03a72b3454d74"


рд╕рдорд╛рдкрди

рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдЖрдкрдиреЗ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдмреНрд▓реЙрдХрдЪреЗрди рдмрдирд╛рдпрд╛ред рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдерд╛ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рдХреБрдЫ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ред рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдмреЗрдЬреЛрдбрд╝ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд▓реЗрдХрд░ рд▓реЛрдЧ рдЗрддрдиреЗ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдХреНрдпреЛрдВ рд╣реИрдВред

рдмреНрд▓реЙрдХрдЪреЗрди рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛: API рд╕реЗрдЯрдЕрдк рдХрд░рдирд╛, рд╡реЙрд▓реЗрдЯ рдмрдирд╛рдирд╛, рдкрдмреНрд▓рд┐рдХ-рдкреНрд░рд╛рдЗрд╡реЗрдЯ-рдХреА-рдкреЗрдпрд░ рдХреЗ рдЬрд░рд┐рдП рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЖрджрд┐ред рдореИрдВрдиреЗ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рднреА рдмрд╕ рд╕рддрд╣реА рддреМрд░ рдкрд░ рдЫреБрдЖ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣реА рдмреНрд▓реЙрдХрдЪреЗрди рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рд╣реГрджрдп рд╣реИред

рдпрд╣ рдЫреЛрдЯрд╛ рдкрд░рд┐рдЪрдп Gerald Nash рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ Python рдореЗрдВ "рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдмреНрд▓реЙрдХрдЪреЗрди" рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ R рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ Daniel van Flymen рдХреЗ PoW рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝рд╛ред

рдмреНрд▓реЙрдХрдЪреЗрди рд╡рд┐рд╖рдп рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рддреЛрд╢реА рдирд╛рдХрд╛рдореЛрддреЛ рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ, рдореМрд▓рд┐рдХ рдмрд┐рдЯрдХреЙрдЗрди рдкрд░ рд╢реНрд╡реЗрддрдкрддреНрд░ рдФрд░ BigData Doc рдХрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╕реБрдЭрд╛рддрд╛/рд╕реБрдЭрд╛рддреА рд╣реВрдВред

рдпрджрд┐ рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдкрд░ рдЖрдкрдХреЗ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрдВ, рддреЛ рдореБрдЭрд╕реЗ Twitter рдкрд░ рдмреЗрдЭрд┐рдЭрдХ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ: рдЖрдк рдореБрдЭреЗ @jj_mllr рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ @CorrelAid рджреЗрдЦреЗрдВ тАФ рдпреБрд╡рд╛ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХрд╛ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдЬреЛ рдЕрдзрд┐рдХ рд╕рдорд╛рд╡реЗрд╢реА, рдПрдХреАрдХреГрдд рдФрд░ рдирд╡рд╛рдЪрд╛рд░реА рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЬрд░рд┐рдпреЗ рджреБрдирд┐рдпрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рд╡рд┐рд╖рдп