Is dócha gur chuala tú an Telegram sin . Ach b'fhéidir gur chaill tú an nuacht nach fada ó shin Telegram chun conradh cliste amháin nó níos mó a chur i bhfeidhm don ardán seo.
Níorbh fhéidir le foireann Serokell, a bhfuil taithí fhairsing acu ar thionscadail mhóra blockchain a fhorbairt, seasamh ar leataobh. Rinneamar cúigear fostaithe a tharmligean chuig an gcomórtas, agus dhá sheachtain ina dhiaidh sin bhain siad an chéad áit amach faoin leasainm randamach measartha (i) Sexy Chameleon. San Airteagal seo beidh mé ag caint faoi conas a rinne siad é. Tá súil againn go léifidh tú scéal suimiúil sna deich nóiméad atá romhainn ar a laghad, agus ar a mhéad go bhfaighidh tú rud éigin úsáideach ann is féidir leat a chur i bhfeidhm i do chuid oibre.
Ach déanaimis tosú le comhthéacs beag.
Comórtas agus a coinníollacha
Mar sin, ba iad príomhchúraimí na rannpháirtithe ceann amháin nó níos mó de na conarthaí cliste atá beartaithe a chur i bhfeidhm, chomh maith le moltaí a dhéanamh chun éiceachóras TON a fheabhsú. Bhí an comórtas ar siúl ó 24 Meán Fómhair go 15 Deireadh Fómhair, agus níor fógraíodh na torthaí ach ar 15 Samhain. Le fada an lá, ag cur san áireamh gur éirigh le Telegram le linn an ama seo torthaí na gcomórtas a thionól agus a fhógairt ar dhearadh agus ar fhorbairt feidhmchlár i C++ chun cáilíocht na nglaonna VoIP in Telegram a thástáil agus a mheasúnú.
Roghnaíomar dhá chonradh cliste ón liosta a mhol na heagraithe. I gcás ceann amháin acu, d'úsáideamar uirlisí a dáileadh le TON, agus cuireadh an dara ceann i bhfeidhm i dteanga nua a d'fhorbair ár n-innealtóirí go sonrach le haghaidh TON agus a tógadh isteach i Haskell.
Ní thaisme an rogha teanga feidhmiúil ríomhchlárúcháin. In ár Is minic a labhraímid faoi cén fáth a gceapann muid gur áibhéil mhór í castacht na dteangacha feidhmiúla agus cén fáth gur fearr linn go ginearálta iad ná cinn atá dírithe ar oibiachtaí. Dála an scéil, tá sé freisin .
Cén fáth ar shocraigh muid fiú a bheith rannpháirteach?
I mbeagán focal, toisc go bhfuil ár speisialtóireacht tionscadail neamh-chaighdeánach agus casta a éilíonn scileanna speisialta agus go minic go bhfuil luach eolaíoch don phobal TF. Tacaímid go láidir le forbairt foinse oscailte agus táimid gafa lena tóir, agus comhoibrímid freisin le hollscoileanna is mó le rá sa Rúis i réimse na ríomheolaíochta agus na matamaitice.
Ba spreagadh iontach iad tascanna suimiúla an chomórtais agus rannpháirtíocht inár dtionscadal Telegram beloved, ach tháinig dreasacht bhreise chun an duaischiste. 🙂
Taighde blockchain TON
Déanaimid dlúthmhonatóireacht ar fhorbairtí nua i blockchain, intleacht shaorga agus foghlaim meaisín agus déanaimid iarracht gan scaoileadh suntasach amháin a chailleann i ngach ceann de na réimsí ina n-oibrímid. Mar sin, faoin am a thosaigh an comórtas, bhí ár bhfoireann eolach cheana féin ar smaointe ó . Mar sin féin, sular thosaigh muid ag obair le TON, níor rinneamar anailís ar dhoiciméadú teicniúil agus ar chód foinse iarbhír an ardáin, agus mar sin bhí an chéad chéim soiléir go leor - staidéar críochnúil ar an doiciméadú oifigiúil ar agus .
Faoin am ar cuireadh tús leis an gcomórtas, bhí an cód foilsithe cheana féin, mar sin chun am a shábháil, bheartaíomar treoir nó achoimre a lorg scríofa ag ag úsáideoirí. Ar an drochuair, níor thug sé seo torthaí ar bith - seachas treoracha maidir leis an ardán a chur le chéile ar Ubuntu, níor aimsigh muid aon ábhair eile.
Rinneadh taighde maith ar an gcáipéisíocht féin, ach bhí sé deacair é a léamh i réimsí áirithe. Go minic bhí orainn filleadh ar phointí áirithe agus athrú ó chur síos ardleibhéil ar smaointe teibí go sonraí feidhmiúcháin ar leibhéal íseal.
Bheadh sé níos éasca mura mbeadh cur síos mionsonraithe ar an gcur chun feidhme san áireamh sa tsonraíocht. Is mó an seans go gcuirfidh faisnéis faoin gcaoi a léiríonn meaisín fíorúil a chruach d’fhorbróirí a chruthaíonn conarthaí cliste don ardán TON ná cuidiú leo.
Nix: an tionscadal a chur le chéile
Ag Serokell tá lucht leanúna mór againn . Bailímid ár dtionscadail leis agus imscaraimid iad ag baint úsáide as , agus suiteáilte ar ár freastalaithe go léir . A bhuí leis seo, tá ár gcuid tógála go léir in-atáirgthe agus oibríonn siad ar aon chóras oibriúcháin ar féidir Nix a shuiteáil.
Mar sin, thosaigh muid ag cruthú . Le cabhair uaidh, tá sé chomh simplí agus is féidir TON a thiomsú:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeTabhair faoi deara nach gá duit aon spleáchais a shuiteáil. Déanfaidh Nix gach rud duit go draíochta, cibé an bhfuil tú ag baint úsáide as NixOS, Ubuntu, nó macOS.
Cláir do TON
Ritheann an cód conartha cliste sa Líonra TON ar an Meaisín Fíorúil TON (TVM). Tá TVM níos casta ná an chuid is mó de mheaisíní fíorúla eile, agus tá feidhmiúlacht an-suimiúil aige, mar shampla, is féidir leis oibriú leis leanúnachas и naisc le sonraí.
Ina theannta sin, chruthaigh na guys ó TON trí theanga ríomhchlárúcháin nua:
Cúigear is teanga ríomhchláraithe cruachta uilíoch atá cosúil . Is é an cumas sármhaith atá aige ná an cumas idirghníomhú le TVM.
SpraoiC is teanga cláir chliste chonartha í atá cosúil le agus cuirtear le chéile é i dteanga eile - Fift Assembler.
An Cúigiú Cóimeálaí — Cúig leabharlann chun cód inrite dénártha a ghiniúint do TVM. Níl tiomsaitheoir ag Fifth Assembler. seo .
Oibríonn ár gcomórtas
Ar deireadh, tá sé in am breathnú ar thorthaí ár n-iarrachtaí.
Cainéal íocaíochta asincrónach
Is conradh cliste é cainéal íocaíochta a ligeann do dhá úsáideoir íocaíochtaí a sheoladh lasmuigh den blockchain. Mar thoradh air sin, ní hamháin go sábhálann tú airgead (níl aon choimisiún ann), ach freisin am (ní gá duit fanacht leis an gcéad bhloc eile a phróiseáil). Is féidir le híocaíochtaí a bheith chomh beag agus a theastaíonn agus chomh minic agus is gá. Sa chás seo, ní gá do na páirtithe muinín a chéile, ós rud é go bhfuil cothroime an tsocraithe deiridh ráthaithe ag an gconradh cliste.
Fuaireamar réiteach simplí go leor ar an bhfadhb. Is féidir le dhá pháirtí teachtaireachtaí sínithe a mhalartú, agus dhá uimhir i ngach ceann acu - an méid iomlán a d'íoc gach páirtí. Oibríonn an dá uimhir seo mar i gcórais dháilte traidisiúnta agus socraigh an t-ordú "a tharla roimh" ar idirbhearta. Agus na sonraí seo á n-úsáid agat, beidh an conradh in ann aon choinbhleacht a d’fhéadfadh a bheith ann a réiteach.
Go deimhin, is leor uimhir amháin chun an smaoineamh seo a chur i bhfeidhm, ach d'fhág muid araon mar gheall ar an mbealach seo d'fhéadfaimis comhéadan úsáideora níos áisiúla a dhéanamh. Ina theannta sin, shocraigh muid an méid íocaíochta a chur san áireamh i ngach teachtaireacht. Gan é, má chailltear an teachtaireacht ar chúis éigin, ansin, cé go mbeidh na méideanna go léir agus an ríomh deiridh ceart, ní fhéadfaidh an t-úsáideoir an caillteanas a thabhairt faoi deara.
Chun ár smaoineamh a thástáil, d'fhéachamar le haghaidh samplaí d'úsáid a bhaint as prótacal cainéal íocaíochta simplí agus gonta. Ionadh, ní bhfuaireamar ach dhá cheann:
- cur chuige comhchosúil, i gcás cainéal aontreoch amháin.
- , a chuireann síos ar an smaoineamh céanna mar atá againne, ach gan míniú a thabhairt ar go leor sonraí tábhachtacha, mar shampla cruinneas ginearálta agus nósanna imeachta um réiteach coinbhleachta.
Ba léir go ndéanann sé ciall cur síos mion a dhéanamh ar ár bprótacal, ag tabhairt aird ar leith ar a cheart. Tar éis roinnt atriallta, bhí an tsonraíocht réidh, agus anois is féidir leat freisin. .
Chuireamar an conradh i bhfeidhm in FunC, agus scríobhamar fóntais na n-orduithe chun idirghníomhú lenár gconradh go hiomlán in Fift, mar a mhol na heagraithe. D'fhéadfaimis aon teanga eile a roghnú dár CLI, ach bhí suim againn iarracht a dhéanamh ar Fit féachaint conas a d'fheidhmigh sé go praiticiúil.
Le bheith ionraic, tar éis dúinn oibriú le Fift, ní fhacamar aon chúiseanna láidre le rogha a dhéanamh ar an teanga seo ná teangacha a bhfuil tóir orthu agus a mbaintear úsáid ghníomhach astu le huirlisí agus leabharlanna forbartha. Tá ríomhchlárú i dteanga atá bunaithe ar chruach sách míthaitneamhach, ós rud é go gcaithfidh tú a bhfuil ar an gcruach a choinneáil i gcónaí i do cheann, agus ní chabhraíonn an tiomsaitheoir leis seo.
Dá bhrí sin, is é ár dtuairim gurb é an t-aon fhírinniú atá le Fift a bheith ann ná a ról mar theanga ósta do Fift Assembler. Ach nach mbeadh sé níos fearr an cóimeálaí TVM a leabú i dteanga éigin atá ann cheana féin, seachas ceann nua a chumadh chun na críche sin amháin?
TVM Haskell eDSL
Anois tá sé in am labhairt faoin dara conradh cliste atá againn. Shocraigh muid sparán ilshínithe a fhorbairt, ach bheadh sé ró-leadránach conradh cliste eile a scríobh i FunC. Theastaigh uainn blas éigin a chur leis, agus ba í sin ár dteanga tionóil féin do TVM.
Cosúil le Fift Assembler, tá ár dteanga nua fite fuaite, ach roghnaigh muid Haskell mar óstach in ionad Fift, rud a ligeann dúinn leas iomlán a bhaint as a chóras ardchineálacha. Nuair a bhíonn tú ag obair le conarthaí cliste, nuair is féidir costas fiú earráid bheag a bheith an-ard, is buntáiste mór é clóscríobh statach, inár dtuairim.
Chun a léiriú cén chuma atá ar chóimeálaí TVM leabaithe i Haskell, chuireamar sparán caighdeánach i bhfeidhm air. Seo roinnt rudaí le aird a thabhairt orthu:
- Feidhm amháin atá sa chonradh seo, ach is féidir leat an oiread agus is mian leat a úsáid. Nuair a shainíonn tú feidhm nua sa teanga ósta (i.e. Haskell), ceadaíonn ár eDSL duit rogha a dhéanamh cé acu an bhfuil tú ag iarraidh a bheith ina ghnáthamh ar leith in TVM nó díreach claonta ag an bpointe glao.
- Cosúil le Haskell, tá cineálacha ag feidhmeanna a dhéantar a sheiceáil ag am tiomsaithe. In ár eDSL, is é an cineál ionchuir feidhme an cineál stack a bhfuil an fheidhm ag súil leis, agus is é an cineál toraidh an cineál cruachta a tháirgtear tar éis an ghlao.
- Tá nótaí sa chód
stacktype, ag cur síos ar an gcineál stack ionchais ag an bpointe glaonna. Sa chonradh bunaidh sparán ní raibh iontu seo ach tráchtanna, ach inár eDSL is cuid den chód iad i ndáiríre agus déantar iad a sheiceáil ag am tiomsaithe. Féadfaidh siad feidhmiú mar dhoiciméadú nó ráitis a chuidíonn leis an bhforbróir an fhadhb a aimsiú má athraíonn an cód agus má athraíonn an cineál cruachta. Ar ndóigh, ní chuireann nótaí den sórt sin isteach ar fheidhmíocht am rite, mar ní ghintear aon chód TVM dóibh. - Is fréamhshamhail é seo fós scríofa i gceann coicíse, agus mar sin tá go leor oibre fós le déanamh ar an tionscadal. Mar shampla, ba cheart gach cás de na ranganna a fheiceann tú sa chód thíos a ghiniúint go huathoibríoch.
Seo an chuma atá ar chur i bhfeidhm sparán multisig ar ár eDSL:
main :: IO ()
main = putText $ pretty $ declProgram procedures methods
where
procedures =
[ ("recv_external", decl recvExternal)
, ("recv_internal", decl recvInternal)
]
methods =
[ ("seqno", declMethod getSeqno)
]
data Storage = Storage
{ sCnt :: Word32
, sPubKey :: PublicKey
}
instance DecodeSlice Storage where
type DecodeSliceFields Storage = [PublicKey, Word32]
decodeFromSliceImpl = do
decodeFromSliceImpl @Word32
decodeFromSliceImpl @PublicKey
instance EncodeBuilder Storage where
encodeToBuilder = do
encodeToBuilder @Word32
encodeToBuilder @PublicKey
data WalletError
= SeqNoMismatch
| SignatureMismatch
deriving (Eq, Ord, Show, Generic)
instance Exception WalletError
instance Enum WalletError where
toEnum 33 = SeqNoMismatch
toEnum 34 = SignatureMismatch
toEnum _ = error "Uknown MultiSigError id"
fromEnum SeqNoMismatch = 33
fromEnum SignatureMismatch = 34
recvInternal :: '[Slice] :-> '[]
recvInternal = drop
recvExternal :: '[Slice] :-> '[]
recvExternal = do
decodeFromSlice @Signature
dup
preloadFromSlice @Word32
stacktype @[Word32, Slice, Signature]
-- cnt cs sign
pushRoot
decodeFromCell @Storage
stacktype @[PublicKey, Word32, Word32, Slice, Signature]
-- pk cnt' cnt cs sign
xcpu @1 @2
stacktype @[Word32, Word32, PublicKey, Word32, Slice, Signature]
-- cnt cnt' pk cnt cs sign
equalInt >> throwIfNot SeqNoMismatch
push @2
sliceHash
stacktype @[Hash Slice, PublicKey, Word32, Slice, Signature]
-- hash pk cnt cs sign
xc2pu @0 @4 @4
stacktype @[PublicKey, Signature, Hash Slice, Word32, Slice, PublicKey]
-- pubk sign hash cnt cs pubk
chkSignU
stacktype @[Bool, Word32, Slice, PublicKey]
-- ? cnt cs pubk
throwIfNot SignatureMismatch
accept
swap
decodeFromSlice @Word32
nip
dup
srefs @Word8
pushInt 0
if IsEq
then ignore
else do
decodeFromSlice @Word8
decodeFromSlice @(Cell MessageObject)
stacktype @[Slice, Cell MessageObject, Word8, Word32, PublicKey]
xchg @2
sendRawMsg
stacktype @[Slice, Word32, PublicKey]
endS
inc
encodeToCell @Storage
popRoot
getSeqno :: '[] :-> '[Word32]
getSeqno = do
pushRoot
cToS
preloadFromSlice @Word32Is féidir cód foinse iomlán ár gconradh sparán eDSL agus ilshínithe a fháil ag Agus eile faoi theangacha ionsuite, ár gcomhghleacaí Georgy Agapov.
Conclúidí faoin gcomórtas agus TON
San iomlán, thóg ár gcuid oibre 380 uair an chloig (lena n-áirítear eolas ar dhoiciméadú, cruinnithe agus forbairt iarbhír). Ghlac cúig fhorbróir páirt sa tionscadal comórtais: CTO, ceannaire foirne, speisialtóirí ardán blockchain agus forbróirí bogearraí Haskell.
Fuair muid acmhainní chun páirt a ghlacadh sa chomórtas gan deacracht, ós rud é go bhfuil spiorad hacathon, obair foirne dlúth, agus an gá le muid féin a thumadh go tapa i ngnéithe de theicneolaíochtaí nua spreagúil i gcónaí. Cúitítear roinnt oícheanta gan chodladh chun na torthaí is fearr a bhaint amach i gcoinníollacha acmhainní teoranta trí thaithí luachmhar agus cuimhní cinn den scoth. Ina theannta sin, tá oibriú ar thascanna den sórt sin i gcónaí ina thástáil mhaith ar phróisis na cuideachta, ós rud é go bhfuil sé thar a bheith deacair torthaí fíor-mhaith a bhaint amach gan cumarsáid inmheánach atá ag feidhmiú go maith.
Lyrics go leataobh: bhí an méid oibre a chuir foireann TON i bhfeidhm orainn. D'éirigh leo córas oibre casta, álainn, agus is tábhachtaí, a thógáil. Tá sé cruthaithe gur ardán é TON a bhfuil acmhainneacht mhór aige. Mar sin féin, chun an t-éiceachóras seo a fhorbairt, ní mór go leor eile a dhéanamh, i dtéarmaí a úsáid i dtionscadail blockchain agus i dtéarmaí uirlisí forbartha a fheabhsú. Táimid bródúil as a bheith mar chuid den phróiseas seo anois.
Má tá aon cheist agat fós tar éis duit an t-alt seo a léamh nó má tá smaointe agat maidir le conas TON a úsáid chun do chuid fadhbanna a réiteach, — beidh áthas orainn ár dtaithí a roinnt.
Foinse: will.com
