RSA рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреНрд▓реЙрдХрдЪреЗрди

рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рдмреНрд▓реЙрдХрдЪреЗрди рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

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



рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдордиреЗ рдмреНрд▓реЙрдХрдЪреЗрди рд╕реЗ рдорд┐рд▓реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛: рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣реЗрд░рд╛рдлреЗрд░реА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИред

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

рдЦрд┐рд▓рд╛рдбрд╝реА рдиреЗ рдПрдХ рд╢рд░реНрдд рд▓рдЧрд╛рдИ, рдФрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдФрд░ "рдирдордХ" рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ред рд╕рд╛рджреЗ рднрд╛рд╖рд╛ рдореЗрдВ, рдЙрд╕рдиреЗ рдХрд╛рд░реНрдб рдкреНрд░рдХрдЯ рдХрд┐рдПред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рд░реНрд╡рд░ рдиреЗ рдирдВрдмрд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреАрддрд╛ рдпрд╛ рд╣рд╛рд░ рдЧрдпрд╛ред

рдпрджрд┐ рд╕рд░реНрд╡рд░ рдиреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдВрдмрд░ рдпрд╛ "рдирдордХ" рдирд╣реАрдВ рднреЗрдЬрд╛, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреАрдд рдЧрдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рддреИрдирд╛рдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЬреАрдд рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд▓рдВрдмрд╛ рдФрд░ рдорд╣рдВрдЧрд╛ рд╣реЛ рдЧрдпрд╛ред рдЙрд╕ рд╕рдордп, рдХреЛрдИ рдЕрдиреНрдп рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдерд╛ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, Tradisys рдЯреАрдо рдиреЗ рд▓рд╣рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ rsaVerify () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд░рдПрд╕рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рд╡реИрдзрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдордиреЗ рддреАрди рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП: рдбрд╛рдЗрд╕ рд░реЛрд▓рд░ , рд╕рд┐рдХреНрдХрд╛ рдлреНрд▓рд┐рдк рдФрд░ рд▓рд╣рд░реЛрдВ рдкрд░ рд╕рд╡рд╛рд░реА ред рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ рд░рд╛рдЗрдб рдСрди рд╡реЗрд╡реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░реИрдВрдбрдо рдирдВрдмрд░ рдЬрдирд░реЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ Decompiled рдЪреБрдиреЗрдВред рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз (рдЙрд░реНрдл рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдХрд╛ рдХреЛрдб рджреЗрдЦреЗрдВред



рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред @Callable рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдордВрдЧрд▓рд╛рдЪрд░рдг рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: рджрд╛рдВрд╡ рдФрд░ рд╡рд╛рдкрд╕реА :

  • func bet (рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреБрд╢)
  • func рдирд┐рдХрд╛рд╕реА (gameId, rsaSign)

1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рджрд╛рдВрд╡ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред



2. рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдмреЗрдЯ-рдлрдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢рд░реНрдд рд╣реЛрдЧреА ("50") ред

3. рдЧреНрд░рд╛рд╣рдХ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдирд╡реЛрдХреЗрд╢рди рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рднреЗрдЬрддрд╛ рд╣реИ (рдЗрдирд╡рд┐рдЯреЗрд╢рдирдЯреИрдХреНрд╕ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдХреЙрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдирджреЗрди рдореЗрдВ рдмреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирд╡реЛрдХреЗрд╢рди рд▓реЗрдирджреЗрди рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкрд░ рд╢рд░реНрдд рдлрд╝рдВрдХреНрд╢рди (рдкрд╕рдВрдж: рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред



4. рд╢рд░реНрдд рд╕рдорд╛рд░реЛрд╣ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

@Callable(i) func bet (playerChoice) = { let newGameNum = IncrementGameNum() let gameId = toBase58String(i.transactionId) let pmt = extract(i.payment) let betNotInWaves = isDefined(pmt.assetId) let feeNotInWaves = isDefined(pmt.assetId) let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice) let txIdUsed = isDefined(getString(this, gameId)) if (betNotInWaves) then throw ("Bet amount must be in Waves") else if (feeNotInWaves) then throw ("Transaction's fee must be in Waves") else if (txIdUsed) then throw ("Passed txId had been used before. Game aborted.") else { let playerPubKey58 = toBase58String(i.callerPublicKey) let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "") ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), cons(DataEntry(GAMESCOUNTERKEY, newGameNum), cons(DataEntry(gameId, gameDataStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil))) } } 

рдлрд╝рдВрдХреНрд╢рди рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЧреЗрдо рд▓рд┐рдЦрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН:

  • рдПрдХ рдирдП рдЧреЗрдо (рдЧреЗрдо рдЖрдИрдбреА) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
  • рдЦреЗрд▓ рд░рд╛рдЬреНрдп = рдЙрдкрдХреГрдд
  • рдЦрд┐рд▓рд╛рдбрд╝реА рдЪрдпрди (рд▓рд╛рдЗрди рд▓рдВрдмрд╛рдИ 50)
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА
  • рд╕рдВрднрд╛рд╡рд┐рдд рдЬреАрдд (рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рджрд╛рдВрд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)



рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ (рдХреА-рд╡реИрд▓реНрдпреВ):

 { "type": "string", "value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229", "key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx" } 

"рдХреА" (рдХреБрдВрдЬреА) - рдирдП рдЧреЗрдо рдХреА рдЧреЗрдо рдЖрдИрдбреА ред рд╢реЗрд╖ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ "рдореВрд▓реНрдп" (рдореВрд▓реНрдп) рдХреА рд▓рд╛рдЗрди рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЗ рдбреЗрдЯрд╛ рдЯреИрдм рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:





5. рд╕рд░реНрд╡рд░ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдкрд░ "рджрд┐рдЦрддрд╛ рд╣реИ" рдФрд░ рдмреНрд▓реЙрдХрдЪреЗрди рдПрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬреЗ рдЧрдП рд▓реЗрдирджреЗрди (рдирдпрд╛ рдЧреЗрдо) рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИред рдирдП рдЧреЗрдо рдХреА рдЧреЗрдо рдЖрдИрдбреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рджрд░реНрдЬ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЕрдм рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ

6. рд╕рд░реНрд╡рд░ рдПрдХ рд╡рд╛рдкрд╕реА рд╕рдорд╛рд░реЛрд╣ (gameId, rsaSign) рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣:

 withdraw ("FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq", "base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr/q0x6Bg==") 

7. рд╕рд░реНрд╡рд░ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдкрд░ рдкреНрд░рд╕рд╛рд░рдг рд▓реЗрдирджреЗрди рднреЗрдЬрддрд╛ рд╣реИ (InvocationTx рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рд▓реЗрди-рджреЗрди рдореЗрдВ рдЙрддреНрдкрдиреНрди рдЖрд╣рд░рдг рдлрд╝рдВрдХреНрд╢рди (gameId, rsaSign) рдореЗрдВ рдПрдХ рдХреЙрд▓ рд╣реЛрддреА рд╣реИ:



рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирдП рдЧреЗрдо рдХреА рдЧреЗрдо рдЖрдИрдбреА рдФрд░ рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдЖрд░рдПрд╕рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред

рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рд╣рдо рд╕рдорд╛рди рдореВрд▓реНрдп (рдЧреЗрдо рдЖрдИрдбреА) рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ рдЖрд░рдПрд╕рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХреИрд╕реЗ RSA рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдВрддрд┐рдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлреЗрд░рдмрджрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЧреЗрдо рдЖрдИрдбреА рдФрд░ рдЖрд░рдПрд╕рдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдирдВрдмрд░ рдХрд╛ рдорд┐рд▓рд╛рди рднреА рд╡реНрдпрд░реНрде рд╣реИред

8. рдмреНрд▓реЙрдХрдЪреЗрди рд▓реЗрдирджреЗрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЪрд▓рд╛рддрд╛ рд╣реИ (gameId, rsaSign)

9. рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреЗ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдЕрдВрджрд░, GenerateRandInt рдлрд╝рдВрдХреНрд╢рди (gameId, rsaSign) рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рд╣реИ


 # @return 1 ... 100 func GenerateRandInt (gameId,rsaSign) = { # verify RSA signature to proof random let rsaSigValid = rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC) if (rsaSigValid) then { let rand = (toInt(sha256(rsaSign)) % 100) if ((0 > rand)) then ((-1 * rand) + 1) else (rand + 1) } else throw ("Invalid RSA signature") } 

рд░реИрдВрдб - рдФрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдирд┐рдЬреА рдХреБрдВрдЬреА ( rsaSign ) рдХреЗ рд╕рд╛рде рдЧреЗрдо рдЖрдИрдбреА рдХреЗ рдЖрд░рдПрд╕рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж SHA-256 (sha256 (rsaSign) ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрд╢реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рдмрд╛рдж рдХреЗ рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рд▓рд┐рдП, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдкреАрдврд╝реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1 рд╕реЗ 100 рддрдХ), toInt рдФрд░% 100 рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдПрдирд╛рд▓реЙрдЧ рд╕реЗ рдореЙрдб )ред

рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдордиреЗ rVVerify () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде RSA рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ GenerateRandInt (gameId, rsaSign) рднрд╛рдЧ рд╣реИ:

 rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC) 

RSAPUBLIC рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдФрд░ rsaSign рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рджреА рдЧрдИ рд╣реИред рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдЪреЗрдХ рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдирдВрдмрд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╕рд┐рд╕реНрдЯрдо рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡реИрдз рдирд╣реАрдВ рд╣реИ (рдЕрдорд╛рдиреНрдп рдЖрд░рдПрд╕рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░)ред

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



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╛ рд░реЛрд▓рд░ рдирд┐рднрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдШрди рдХреЗ 6 рдЪреЗрд╣рд░реЛрдВ рдореЗрдВ рд╕реЗ 2 рдХреЛ рдЪреБрдирд╛, рд╢рд░реНрдд 14 WAVES рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп (2880 рдмреНрд▓реЙрдХ) рдХреЗ рднреАрддрд░ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкрд░ рдПрдХ рд╡реИрдз рдЖрд░рдПрд╕рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ 34.44 WAVES рд▓рдЧреЗрдЧрд╛ред

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

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

Source: https://habr.com/ru/post/hi464357/


All Articles