Blockchain تي RSA بي ترتيب

ھڪڙو مسئلو آھي - ھڪڙو غير معياري نيٽ ورڪ ۾ بي ترتيب نمبر پيدا ڪرڻ ڏکيو آھي. تقريبن سڀئي بلاڪچين اڳ ۾ ئي هن کي منهن ڏئي چڪا آهن. درحقيقت، نيٽ ورڪن ۾ جتي صارفين جي وچ ۾ ڪو به اعتماد نه آهي، هڪ ناقابل اعتبار بي ترتيب نمبر ٺاهي ڪيترن ئي مسئلن کي حل ڪري ٿو.

هن آرٽيڪل ۾ اسان توهان کي ٻڌايو ته ڪيئن اسان هڪ مثال طور راندين کي استعمال ڪندي مسئلو حل ڪيو. انهن مان پهريون هو موج ڪرسمس وڻ. ترقيءَ لاءِ، اسان کي بي ترتيب نمبر جنريٽر جي ضرورت ھئي.

Blockchain تي RSA بي ترتيب

شروعات ۾، اسان Blockchain کان معلومات جي بنياد تي هڪ نمبر پيدا ڪرڻ جو منصوبو ٺاهيو. بهرحال، پوء اهو واضح ٿي ويو: انگ کي هٿي وٺائي سگهجي ٿي، جنهن جو مطلب آهي ته حل مناسب ناهي.

اسان هڪ حل سان گڏ آيا آهيون: ڪمٽ-وڌايو اسڪيم استعمال ڪريو. سرور 1 کان 5 تائين هڪ نمبر جو اندازو لڳايو، ان ۾ هڪ لوڻ شامل ڪيو، ۽ پوء نتيجو کي هٽائي ڇڏيو ڪيڪڪ افعال. سرور اڳ ۾ ئي محفوظ ٿيل نمبر سان سمارٽ معاهدي کي ترتيب ڏنو. اهو ظاهر ٿئي ٿو ته راند استعمال ڪندڙ کي ڇڪي ٿو جيڪو هيش طرفان لڪيل نمبر جو اندازو لڳائي ٿو.

پليئر هڪ شرط رکي، ۽ سرور لڪايو نمبر ۽ "نمڪ" سمارٽ معاهدي ڏانهن موڪليو. سادي اصطلاحن ۾، هن ڪارڊ ظاهر ڪيو. ان کان پوء، سرور نمبر چيڪ ڪيو ۽ فيصلو ڪيو ته صارف کٽيو يا وڃائي ڇڏيو.

جيڪڏهن سرور تصديق لاءِ نمبر يا ”نمڪ“ نه موڪليو، صارف کٽيو. انهي صورت ۾، هر راند لاء ضروري هو ته اڳ ۾ هڪ سمارٽ معاهدو ترتيب ڏيو ۽ ان ۾ امڪاني کٽڻ شامل ڪريو. اهو ثابت ٿيو ته اهو مشڪل، وقت سازي ۽ قيمتي آهي. ان وقت ٻيو ڪو به محفوظ حل نه هو.

حالانڪه، Tradisys ٽيم تجويز ڪيو هڪ فنڪشن شامل ڪرڻ لاء Waves پروٽوڪول rsaVerify(). اهو چيڪ ڪري ٿو RSA دستخط جي صحيحيت جي بنياد تي عوامي ۽ خانگي چيڪ. نتيجي طور، خاصيت شامل ڪئي وئي.

اسان ٽي رانديون ٺاهيا آهن: ڊائيس رولر, پئين فلپ и موج تي سوار. هر هڪ بي ترتيب نمبر ٽيڪنالاجي لاڳو ڪري ٿو. اچو ته سمجهون ته اهو ڪيئن ڪم ڪري ٿو.

Blockchain تي RSA بي ترتيب

اچو ته مثال طور Ride on Waves استعمال ڪندي بي ترتيب نمبر ٺاهي ڏسو. سمارٽ معاهدو ڳولي سگهجي ٿو هتي.

ٽيب ڏانھن وڃو رسم الخط ۽ چونڊيو ٺهرايل. توھان ڏسندا سمارٽ ڪانٽريڪٽ ڪوڊ (اڪا اسڪرپٽ).

Blockchain تي RSA بي ترتيب

سمارٽ ڪانٽريڪٽ ڪوڊ ۾ افعال جو هڪ سيٽ شامل آهي. جن کي @Callable طور نشان لڳايو ويو آھي استعمال ڪري شروع ڪري سگھجي ٿو دعوتي ٽرانزيڪشن. اسان ٻن ڪمن ۾ دلچسپي رکون ٿا: شرط لڳي и واپس وٺڻ:

  • func شرط (پليئر چوائس)
  • func ڪڍڻ (gameId،rsaSign)

1. استعمال ڪندڙ ڀاڱي جي ڊيگهه ۽ شرط جي سائيز کي چونڊيندو آهي.

Blockchain تي RSA بي ترتيب

2. ڪلائنٽ هڪ شرط فنڪشن ٺاهي ٿو. مٿي ڏنل تصوير لاء اهو هوندو شرط ("50").

3. ڪلائنٽ سمارٽ ڪانٽريڪٽ ايڊريس تي انوڪيشن ٽرانزيڪشن موڪلي ٿو (براڊ ڪاسٽ InvocationTx). ٽرانزيڪشن ۾ بيٽ فنڪشن شامل آهي ڪال پيٽرولر جي طور تي. ان جو مطلب اهو آهي ته انوڪيشن ٽرانزيڪشن سمارٽ معاهدي تي بيٽ فنڪشن (چونڊ: اسٽرنگ) جي عمل کي شروع ڪري ٿو.

Blockchain تي RSA بي ترتيب

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)
  • عوامي چاٻي
  • ممڪن فتح (انحصار ڪندڙ رانديگر جي شرط تي)

Blockchain تي RSA بي ترتيب

هي اهو آهي جيڪو بلاڪچين ۾ ڊيٽا رڪارڊ وانگر ڏسڻ ۾ اچي ٿو (ڪي-قيمت):

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

"ڪي" (ڪي) - راند جي سڃاڻپ نئين راند. باقي ڊيٽا "قدر" فيلڊ جي قطار ۾ موجود آهي. اهي داخلائون ٽئب ۾ محفوظ ٿيل آهن ڊيٽا سمارٽ معاهدو:

Blockchain تي RSA بي ترتيب

Blockchain تي RSA بي ترتيب

5. سرور سمارٽ ڪانٽريڪٽ تي ”نظر اچي ٿو“ ۽ ڳولهي ٿو موڪليل ٽرانزيڪشن (نئين راند) بلاڪچين ايپ استعمال ڪندي. نئين راند جي راند جي سڃاڻپ اڳ ۾ ئي بلاڪچين ۾ رڪارڊ ٿيل آهي، جنهن جو مطلب آهي ته اهو هاڻي تبديل يا متاثر نه ٿي سگهي.

6. سرور هڪ واپسي فنڪشن ٺاهي ٿو (gameId، rsaSign). مثال طور، هن طرح:

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

7. سرور سمارٽ ڪانٽريڪٽ (براڊڪاسٽ InvocationTx) ڏانهن هڪ انوڪيشن ٽرانزيڪشن موڪلي ٿو. ٽرانزيڪشن ۾ ٺهيل واپسي جي فنڪشن کي ڪال شامل آهي (gameId، rsaSign):

Blockchain تي RSA بي ترتيب

فنڪشن تي مشتمل آهي راند جي سڃاڻپ نئين راند ۽ RSA جو نتيجو هڪ پرائيويٽ چيڪ سان هڪ منفرد سڃاڻپ ڪندڙ جي دستخط. دستخط جو نتيجو اڻڄاتل آهي.

هي ڇا مطلب آهي؟

اسان ساڳيو قدر وٺون ٿا (راند جي سڃاڻپ) ۽ لاڳو ڪريو RSA دستخط جو طريقو ان تي. اسان هميشه اهو ئي نتيجو حاصل ڪنداسين. اهو ڪيئن آهي RSA الگورتھم ڪم ڪري ٿو. آخري نمبر هٿرادو نه ٿو ڪري سگھجي، ڇو ته راند جي سڃاڻپ ۽ RSA لاڳو ڪرڻ جو نتيجو معلوم نه آهي. هڪ نمبر چونڊڻ پڻ بيڪار آهي.

8. Blockchain ٽرانزيڪشن کي قبول ڪري ٿو. اهو واپسي جي فنڪشن کي هلائي ٿو (gameId، rsaSign)

9. واپسي جي فنڪشن جي اندر، واپسي ٿيندي آهي رينڊ انٽ افعال پيدا ڪريو (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")
    }

rand - ۽ ھڪڙو بي ترتيب نمبر آھي.

پهريون، اسٽرنگ ورتو وڃي ٿو، جيڪو RSA جي دستخط جو نتيجو آهي راند جي سڃاڻپ نجي چاٻي (rsaSign). پوءِ SHA-256 (sha256 (rsaSign)).

اسان اڳڪٿي نٿا ڪري سگھون ته دستخط جي نتيجي ۽ بعد ۾ ڇڪڻ. تنهن ڪري، بي ترتيب نمبر جي نسل تي اثر انداز ڪرڻ ناممڪن آهي. هڪ خاص حد ۾ نمبر حاصل ڪرڻ لاءِ (مثال طور، 1 کان 100 تائين)، استعمال ڪريو toInt conversion function ۽ %100 (ساڳي Mod).

مضمون جي شروعات ۾ اسان فنڪشن جو ذڪر ڪيو rsaVerify(), جيڪو توهان کي اجازت ڏئي ٿو RSA دستخط جي صحيحيت کي چيڪ ڪرڻ لاءِ استعمال ڪندي هڪ خانگي چيڪ کي عوامي هڪ جي خلاف. هتي آهي GenerateRandInt (gameId،rsaSign) حصو:

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

عوامي ڪي RSAPUBLIC ۽ rsaSign اسٽرنگ ان پٽ ڏانهن گذري ويا آهن. دستخط جي صحيحيت جي جانچ ڪئي وئي آهي. نمبر ٺاھيو ويندو آھي جيڪڏھن چيڪ ڪامياب آھي. ٻي صورت ۾، سسٽم سمجهي ٿو ته دستخط صحيح نه آهي (غلط RSA دستخط).

سرور کي لازمي طور تي راند جي سڃاڻپ کي پرائيويٽ ڪيئي سان سائن ڪرڻ گھرجي ۽ 2880 بلاڪن جي اندر صحيح Rsa دستخط موڪلڻ گھرجي. سمارٽ معاهدي کي ترتيب ڏيڻ وقت پيٽرولر ترتيب ڏنل آهي. جيڪڏهن مقرر ڪيل وقت اندر ڪجھ به نه ٿئي، صارف کٽي ٿو. انهي صورت ۾، انعام توهان جي ايڊريس تي پاڻ ڏانهن موڪليو وڃي. اهو ظاهر ٿئي ٿو ته اهو آهي "سرور کي دوکي ڏيڻ لاء فائدي وارو ناهي"، ڇاڪاڻ ته اهو نقصان جي ڪري ٿو. هيٺ هڪ مثال آهي.

Blockchain تي RSA بي ترتيب

استعمال ڪندڙ راند ڪري رهيو آهي ڊائيس رولر. مون ڪعب جي 2 پاسن مان 6 کي چونڊيو، شرط 14 ويز آهي. جيڪڏهن سرور مخصوص وقت (2880 بلاڪ) اندر سمارٽ معاهدي تي صحيح RSA دستخط نه موڪليندو آهي، صارف 34.44 WAVES وٺندو.

راندين ۾ نمبر پيدا ڪرڻ لاءِ، اسان استعمال ڪريون ٿا هڪ اوريڪل - هڪ خارجي، غير بلاڪچين سسٽم. سرور انجام ڏئي ٿو RSA دستخط راند جي id جي. سمارٽ معاهدو دستخط جي صحيحيت جي جانچ ڪري ٿو ۽ فاتح کي طئي ڪري ٿو. جيڪڏهن سرور ڪجھ به نه موڪلي، پوء صارف خودڪار طريقي سان کٽي ٿو.

هي هڪ ايماندار نسل جو طريقو آهي، ڇاڪاڻ ته هٿرادو ٽيڪنالاجي طور ناممڪن آهي. سڀ Tradisys رانديون بيان ڪيل الگورتھم جي بنياد تي ڪم ڪن ٿيون. اهو ڪيئن ڪم ڪري ٿو blockchain رانديون. هر شي شفاف ۽ تصديق ٿيل آهي. ڪنهن به ٻئي بلاڪچين ۾ اهڙي سسٽم جو ڪو به اينالاگ نه آهي. هي هڪ مناسب بي ترتيب آهي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو