A’ cleachdadh oracle air thuaiream a’ cleachdadh eisimpleir crannchur

Aon mhadainn thàinig mi tarsainn air artaigil mu dheidhinn gineadair àireamh air thuaiream dearbhaidh air àrd-ùrlar Waves blockchain.

Bha an dealbh iomlan soilleir, ach cha robh an dòigh buileachaidh sònraichte. Cuid de chòdan, ainmean-sgrìobhte, dè, càite, carson?

Grunn cho-chomhairlean le ùghdar an oracle, mar thoradh air an sin, bha e comasach an loidsig tarraing a thoirt còmhla (air a chuir an gnìomh ann am PHP) le algairim airson àireamh air thuaiream fhaighinn.

  1. Aig toiseach na farpais / cuairt, bidh sinn ag iarraidh a’ chiad phàirt den chòd (R-code) bhon oracle.

    Aig an àm seo, chan eil fiosrachadh sam bith ann mun àireamh de chluicheadairean, an àireamh de dhuaisean, meud pàighidhean duais, no mar a tha an crannchur san fharsaingeachd. Bidh an oracle, tro ghnothach, a’ toirt a-mach còd air thuaiream pearsanta, nach gabh a chleachdadh ach aon turas agus dìreach leis an fheadhainn a dh’ iarr e. Air an t-slighe, faodar còd-R a “cheannach” (a ’ciallachadh cosgais a’ ghnothaich iarrtas + airgead-dìolaidh don oracle airson a ’ghnothach freagairt, is e seo suim timcheall air $ 0.015 aig an ìre làithreach, tha an còd fhèin air a thoirt seachad an-asgaidh ) grunn thursan ro-làimh, gus nach feitheamh gus an tèid an gnothach freagairt fhaighinn nas fhaide air adhart. Rinn mi bufair beag ùrachadh gu cunbhalach san stòr-dàta.

  2. Mar as trice mairidh an fharpais 60 blocaichean de blockchain àrd-ùrlar Waves, an-dràsta tha e timcheall air 1 uair. Thathas den bheachd gu bheil an fharpais deiseil agus dùinte ma tha co-dhiù dà thiogaid ann às deidh 60 blocaichean, air neo thèid ùine gnìomhachd na farpais a leudachadh airson na h-ath 60 blocaichean.
  3. Dìreach às deidh don fharpais dùnadh, bidh sinn a ’gineadh agus a’ cur a-steach malairt ceann-latha (bidh sinn cuideachd a ’pàigheadh ​​​​coimisean timcheall air $ 0.005 air a shon), ma tha sin riatanach, grunn, anns a bheil a h-uile suidheachadh den dealbh air a chlàradh agus liosta òrdaichte de chluicheadairean (tiogaid) às am feum sinn na buannaichean a thaghadh.
  4. Aig an ìre seo, tha a’ chiad phàirt den chòd (R-code) againn mu thràth agus an ceann-latha malairt ID (TXID). Bidh sinn gan cur airson ainm-sgrìobhte chun oracle ann an cruth concatenation (R-code + TXID), a-rithist bidh sinn a’ pàigheadh ​​​​coimisean + airgead-dìolaidh. Bidh an oracle a’ sgrùdadh an dàta a fhuaireadh airson gun samhail agus buntainneas, agus mar fhreagairt a’ cur thugainn an dàrna pàirt den chòd (S-code) ann an cruth sha256, a tha mar thoiseach tòiseachaidh airson gineadair àireamhan air thuaiream.
  5. Gus àireamh air thuaiream fhaighinn a sheallas àireamh sreath na tiogaid a bhuannaicheas, tionndaidhidh sinn an còd S bhon dàta binary sha256 gu riochdachadh hexadecimal (HEX). An uairsin bhon t-sreath HEX a thig às, gheibh sinn àireamh. Gheibh sinn an còrr de bhith a’ roinneadh na h-àireimh a thig às leis an àireamh thiogaidean (all_tickets) agus cuiridh sinn 1 ris an toradh (gus an àireamh 1 fhaighinn ro all_tickets). Mar thoradh air an sin, gheibh sinn àireamh sreathach an neach a bhuannaicheas.
  6. Ma tha, a rèir cumhaichean an deilbh, gu bheil grunn bhuannaichean ann, bidh sinn ag ath-aithris na h-obraichean a bh ’ann roimhe ann an suim co-ionann ris an àireamh de dhuaisean. Anns a 'chùis seo, gach uair a bheir sinn air falbh bhon liosta tiogaid a tha air buannachadh mar-thà agus lughdaich sinn all_tickets le 1, agus an àite còd S bidh sinn a' comharrachadh an àireamh a fhuair sinn roimhe.

Bheir sinn sùil air fìor eisimpleir sònraichte, farpais Àir. 119:

7 tiogaidean gu h-iomlan (na_tiogaid uile)
Chosg tiogaid 50 buinn (Bet)
Cìs geama 10% (Cìs)

A rèir cumhaichean a’ chrannchuir, bidh 30% a’ dol chun duais airgid, i.e. anns a 'chùis seo, feumaidh 2 thiocaid duais fhaighinn, agus tha am meud air a thomhas a rèir na foirmle (Bet * all_tickets-Fee)/2.

1. Fhuair R-code: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Às deidh an fharpais a dhùnadh, tha liosta de thiocaidean againn ann an cruth chàraidean: àireamh + seòladh (seòladh an wallet às an deach pàigheadh ​​​​airson com-pàirteachadh san fharpais a dhèanamh). Thoir an aire gum faodar seòlaidhean ath-aithris, tha seo a’ ciallachadh gun do cheannaich aon chom-pàirtiche grunn thiogaidean gu aon fharpais; chan eil seo air a thoirmeasg leis na riaghailtean.

Ceann-latha air a chuir a-steach: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. S-còd iarraidh: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV le beachd (còd R + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Còd S a fhuair: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Chaidh na buannaichean a dhearbhadh.

6. Pàighidhean air an cur

Mar thoradh air an sin, tha clàradh ceum air cheum againn den mhodh tarraing duais anns an blockchain leis a’ chomas sgrùdadh a dhèanamh air aig àm sam bith. Tha e cha mhòr do-dhèanta don eagraiche na toraidhean a làimhseachadh; co-dhiù, cha bhith e comasach tuilleadh a dhèanamh gun mhothachadh.

determine the winner № 1

All_tickets:
Index: 1 Ticket:139
Index: 2 Ticket:141
Index: 3 Ticket:143
Index: 4 Ticket:145
Index: 5 Ticket:147
Index: 6 Ticket:149
Index: 7 Ticket:151

1. bin -> hex ( bin2hex(sha256(S-code)) ): Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC -> 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596

2. hex -> gmp number: 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 99037963059744689166154019807924045947962565922868104113173478160267437352342

3. gmp -> modulo (mod=7): 99037963059744689166154019807924045947962565922868104113173478160267437352342 -> 4

4. modulo -> ticket: 4 -> 145

determine the winner № 2

All_tickets:

Index: 1 Ticket:139
Index: 2 Ticket:141
Index: 3 Ticket:143
Index: 4 Ticket:147
Index: 5 Ticket:149
Index: 6 Ticket:151

1. bin -> hex ( bin2hex(sha256(previous hex)) ): daf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0
2. hex -> gmp number: 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0 -> 67565829218838067182838043983962684143266386786567427968312120473742580659360
3. gmp -> modulo (mod=6): 67565829218838067182838043983962684143266386786567427968312120473742580659360 -> 1
4. modulo -> ticket: 1 -> 139

End.

Source: www.habr.com

Cuir beachd ann