Mhlawumbi uyivile loo Telegram
Iqela leSerokell, elinamava amaninzi ekuphuhliseni iiprojekthi ezinkulu ze-blockchain, alikwazanga ukuma eceleni. Sanikezela abasebenzi abahlanu kukhuphiswano, kwaye emva kweeveki ezimbini bathatha indawo yokuqala kulo phantsi kwegama lesidlaliso esingakhethiyo (i-Sexy Chameleon). Kweli nqaku ndiza kuthetha ngendlela abayenze ngayo. Siyathemba ukuba kwimizuzu elishumi ilandelayo uya kufunda ubuncinane ibali elinomdla, kwaye ubukhulu becala uya kufumana into eluncedo kuyo onokuyisebenzisa emsebenzini wakho.
Kodwa masiqale ngomxholo omncinci.
Ukhuphiswano kunye nemiqathango yalo
Ngoko ke, imisebenzi ephambili yabathathi-nxaxheba yayikukuphunyezwa kwesinye okanye ngaphezulu kweekontraki ezicetywayo ezicetywayo, kunye nokwenza izindululo zokuphucula i-TON ecosystem. Olu khuphiswano lwaqala nge-24 kaSeptemba ukuya kwi-15 ka-Okthobha, kwaye iziphumo zabhengezwa kuphela nge-15 kaNovemba. Ixesha elide kakhulu, ngokuqwalasela ukuba ngeli xesha iTelegram ikwazile ukubamba kwaye ibhengeze iziphumo zemincintiswano ekuyilweni nasekuphuhlisweni kwezicelo kwi-C ++ yokuvavanya nokuvavanya umgangatho weefowuni zeVoIP kwiTelegram.
Sikhethe iikhontrakthi ezimbini ezihlakaniphile kuluhlu olucetywe ngabaququzeleli. Ngomnye wabo, sasebenzisa izixhobo ezisasazwa nge-TON, kwaye okwesibini kwaphunyezwa ngolwimi olutsha oluphuhliswe ziinjineli zethu ngokukodwa kwi-TON kwaye zakhiwe kwi-Haskell.
Ukhetho lolwimi lwenkqubo olusebenzayo alukho ngengozi. Kwethu
Kwakutheni ukuze senze isigqibo sokuthatha inxaxheba?
Ngamafutshane, ngenxa yokuba ubuchule bethu buyinto engekho-standard kunye neeprojekthi eziyinkimbinkimbi ezifuna izakhono ezizodwa kwaye zihlala zinexabiso lezesayensi kuluntu lwe-IT. Sixhasa ngamandla uphuhliso lomthombo ovulekileyo kwaye sithatha inxaxheba kulwazi lwalo, kwaye sikwasebenzisana neeyunivesithi eziphambili zaseRussia kwinkalo yesayensi yekhompyuter kunye nemathematika.
Imisebenzi enomdla yokhuphiswano kunye nokubandakanyeka kwiprojekthi yethu ethandekayo yeTelegram ngokwayo yayiyinkuthazo ebalaseleyo, kodwa ingxowa-mali yebhaso yaba yinkuthazo eyongezelelweyo. π
Uphando lwe-TON blockchain
Sibeka iliso ngononophelo uphuhliso olutsha kwi-blockchain, ubukrelekrele bokwenziwa kunye nokufunda koomatshini kwaye sizame ukungaphoswa yinto enye ebalulekileyo kwindawo nganye esisebenza kuyo. Ke ngoko, ngelixa ukhuphiswano luqala, iqela lethu lalisele liqhelene nemibono evela
Ngethuba ukhuphiswano luqala, ikhowudi yayisele ishicilelwe, ngoko ukugcina ixesha, sagqiba ekubeni sikhangele isikhokelo okanye isishwankathelo esibhalwe ngu. ngabasebenzisi. Ngelishwa, oku akunikanga ziphumo - ngaphandle kwemiyalelo yokuhlanganisa iqonga ku-Ubuntu, asifumananga naziphi na ezinye izixhobo.
Amaxwebhu ngokwawo ayephandwe kakuhle, kodwa kwakunzima ukufundeka kwezinye iindawo. Ngokuqhelekileyo kuye kwafuneka sibuyele kumanqaku athile kwaye sitshintshe ukusuka kwiinkcazo eziphakamileyo zeengcamango ezingabonakaliyo kwiinkcukacha zokuphunyezwa eziphantsi.
Kuya kuba lula ukuba inkcazo ayifaki inkcazo ecacileyo yokuphunyezwa konke konke. Ulwazi malunga nendlela umatshini obonakalayo omele ngayo i-stack yawo kunokwenzeka ukuba uphazamise abaphuhlisi abenza izivumelwano ezihlakaniphile zeqonga le-TON kunokubanceda.
Nix: ukudibanisa iprojekthi
ESerokell singabalandeli abakhulu
Ngoko siqale ngokudala
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && make
Qaphela ukuba awudingi ukufaka nayiphi na into exhomekeke kuyo. UNix uya kukwenzela yonke into ngomlingo, nokuba usebenzisa iNixOS, Ubuntu, okanye iMacOS.
Ukulungiselela iTON
Ikhowudi yekhontrakthi ehlakaniphile kwi-TON Network isebenza kwi-TON Virtual Machine (TVM). I-TVM inzima ngakumbi kunabanye oomatshini abaninzi, kwaye inomsebenzi onomdla kakhulu, umzekelo, inokusebenza nayo ukuqhubekeka ΠΈ amakhonkco data.
Ngapha koko, abafana abavela kwi-TON benze iilwimi ezintathu zokucwangcisa:
Isihlanu lulwimi lwenkqubo lwestack jikelele olufana
I-FunC lulwimi lwenkqubo lwekhontrakthi elumkileyo efana ne
Umhlanganisi wesihlanu -Ithala leencwadi lesihlanu lokuvelisa ikhowudi esebenzayo yeTVM. I-Assembler yesihlanu ayinaye umqokeleli. Oku
Ukhuphiswano lwethu luyasebenza
Okokugqibela, lixesha lokuba sijonge iziphumo zemigudu yethu.
Umjelo wokuhlawula ohambelanayo
Itshaneli yokuhlawula yinkontileka ehlakaniphile evumela abasebenzisi ababini ukuba bathumele iintlawulo ngaphandle kwe-blockchain. Ngenxa yoko, awugcini nje imali (akukho khomishini), kodwa kunye nexesha (akufuneki ulinde ibhloko elandelayo ukuba iqhutywe). Iintlawulo zinokuba zincinci njengoko zifunwa kwaye rhoqo njengoko kufuneka. Kule meko, amaqela akufuneki athembane, ekubeni ukulunga kokuhlaliswa kokugqibela kuqinisekiswa yinkontileka ehlakaniphile.
Sifumene isisombululo esilula kwingxaki. Amaqela amabini anokwabelana ngemiyalezo esayiniweyo, ngalinye linamanani amabiniβimali epheleleyo ehlawulwe liqela ngalinye. La manani mabini asebenza njenge
Enyanisweni, inani elinye lanele ukuphumeza le ngcamango, kodwa sishiye zombini kuba ngale ndlela sinokwenza ujongano lomsebenzisi olulula ngakumbi. Ukongeza, sigqibe kwelokuba sifake imali yentlawulo kumyalezo ngamnye. Ngaphandle kwayo, ukuba umyalezo ulahlekile ngenxa yesizathu esithile, ngoko ke, nangona zonke iimali kunye nokubala kokugqibela kuya kuchaneka, umsebenzisi akanakuqaphela ilahleko.
Ukuvavanya umbono wethu, sijonge imizekelo yokusebenzisa indlela elula nemfutshane yendlela yokuhlawula yesitishi. Okumangalisayo kukuba, sifumene ezimbini kuphela:
inkcazelo indlela efanayo, kuphela kwimeko yomjelo ongaqhelekanga.Isifundo , echaza ingcamango efanayo neyethu, kodwa ngaphandle kokuchaza iinkcukacha ezininzi ezibalulekileyo, ezifana nokuchaneka ngokubanzi kunye neenkqubo zokusombulula iingxabano.
Kwacaca ukuba kunengqiqo ukuchaza iprotocol yethu ngokweenkcukacha, sinikele ingqalelo ekhethekileyo ekuchanekeni kwayo. Emva kokuphindaphinda kaninzi, iinkcukacha zazilungile, kwaye ngoku unako.
Siphumeze ikhontrakthi kwi-FunC, kwaye sabhala usetyenziso lomgca womyalelo wokusebenzisana nekhontrakthi yethu ngokupheleleyo kwi-Fift, njengoko kucetyiswa ngabaququzeleli. Ngesikhethe naluphi na olunye ulwimi kwi-CLI yethu, kodwa besinomdla wokuzama i-Fit ukubona ukuba iqhuba njani xa isenziwa.
Ukunyaniseka, emva kokusebenza noFift, asibonanga zizathu zinyanzelisayo zokukhetha olu lwimi kwiilwimi ezidumileyo nezisetyenziswa ngokusebenzayo kunye nezixhobo eziphuhlisiweyo kunye namathala eencwadi. Ukucwangcisa ngolwimi olusekwe kwi-stack akuthandeki, kuba kufuneka uhlale ugcina entlokweni yakho into ekwi-stack, kwaye umqambi akancedi kule nto.
Ke ngoko, ngokoluvo lwethu, ekuphela kwesizathu sokubakho kweFift yindima yayo njengolwimi olubamba iFift Assembler. Kodwa ngaba bekungayi kuba ngcono ukubethelela isihlanganisi seTVM kulwimi olukhoyo, endaweni yokuyila entsha ngale njongo yodwa?
TVM Haskell eDSL
Ngoku lixesha lokuba sithethe ngesivumelwano sethu sesibini esikrelekrele. Sigqibe ekubeni siphuhlise isipaji esineesignesha ezininzi, kodwa ukubhala enye ikhontrakthi ekrelekrele kwiFunC kuya kuba yindinisa kakhulu. Sasifuna ukongeza incasa, kwaye yayilulwimi lwethu lwendibano yeTVM.
NjengoFift Assembler, ulwimi lwethu olutsha lufakwe ngaphakathi, kodwa sikhethe uHaskell njengomamkeli endaweni yeFift, esivumela ukuba sithathe ithuba elipheleleyo lenkqubo yalo yodidi oluphezulu. Xa usebenza kunye neekontraki ezihlakaniphile, apho iindleko zempazamo encinci ingaba phezulu kakhulu, ukuchwetheza okumileyo, ngokombono wethu, kuyinzuzo enkulu.
Ukubonisa ukuba i-TVM assembler ibonakala ngathi ifakwe kwi-Haskell, siphumeze i-wallet eqhelekileyo kuyo. Nazi izinto ezimbalwa ekufuneka uziqwalasele:
- Le khontrakthi iquka umsebenzi omnye, kodwa ungasebenzisa ezininzi njengoko uthanda. Xa uchaza umsebenzi omtsha kulwimi lokusingatha (okt. Haskell), i-eDSL yethu ikuvumela ukuba ukhethe ukuba uyafuna ukuba ibe yinkqubo eyahlukileyo kwi-TVM okanye ifakwe ngokulula kwindawo yokufowuna.
- NjengoHaskell, imisebenzi ineentlobo ezijongwayo ngexesha lokuqokelela. Kwi-eDSL yethu, uhlobo lwegalelo lomsebenzi luhlobo lwesitaki esilindelwe ngumsebenzi, kwaye uhlobo lwesiphumo luhlobo lwestaki oluya kuveliswa emva kokufowuna.
- Ikhowudi inezihlomelo
stacktype
, ichaza uhlobo lwesitaki olulindelekileyo kwindawo yokufowuna. Kwikhontrakthi ye-wallet yasekuqaleni ezi yayizizimvo nje, kodwa kwi-eDSL yethu ngokwenene ziyinxalenye yekhowudi kwaye zitshekishwa ngexesha lokuqokelela. Bangasebenza njengamaxwebhu okanye iingxelo ezinceda umphuhlisi afumane ingxaki ukuba ikhowudi iyatshintsha kunye nohlobo lwesitaki luyatshintsha. Ngokuqinisekileyo, izichasiselo ezinjalo azichaphazeli ukusebenza kwexesha lokusebenza, kuba akukho khowudi ye-TVM eyenzelwa yona. - Lo iseyiprototype ebhalwe kwiiveki ezimbini, ngoko ke usemninzi umsebenzi ekufuneka wenziwe kule projekthi. Umzekelo, zonke iimeko zeeklasi ozibonayo kwikhowudi engezantsi kufuneka zenziwe ngokuzenzekelayo.
Nantsi indlela ukuphunyezwa kwesipaji semultisig kujongeka ngayo kwi-edSL yethu:
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 @Word32
Ikhowudi yomthombo opheleleyo we-eDSL yethu kunye nekhontrakthi ye-wallet yesignesha emininzi inokufumaneka
Izigqibo malunga nokhuphiswano kunye neTON
Lilonke, umsebenzi wethu uthathe iiyure ezingama-380 (kubandakanywa ukuqhelanisa namaxwebhu, iintlanganiso kunye nophuhliso lwangempela). Abaphuhlisi abahlanu bathathe inxaxheba kwiprojekthi yokhuphiswano: i-CTO, iqela elikhokelayo, iingcali zeqonga le-blockchain kunye nabaphuhlisi be-software ye-Haskell.
Sifumene izixhobo zokuthatha inxaxheba kukhuphiswano ngaphandle kobunzima, kuba umoya we-hackathon, ukusebenza ngokubambisana, kunye nesidingo sokuntywila ngokukhawuleza kwimiba yetekhnoloji entsha ihlala imnandi. Ubusuku obuninzi bokungalali ukuze kufumaneke iziphumo eziphezulu kwiimeko zobuncwane obunqongopheleyo bubuyekezwa ngamava axabisekileyo kunye neenkumbulo ezibalaseleyo. Ukongeza, ukusebenza kwimisebenzi enjalo kuhlala kuluvavanyo olulungileyo lweenkqubo zenkampani, kuba kunzima kakhulu ukufikelela kwiziphumo ezindilisekileyo ngaphandle kokusebenza kakuhle kwangaphakathi.
Iingoma ecaleni: siye sachukumiseka ngumsebenzi omninzi owenziwe liqela leTON. Bakwazile ukwakha inkqubo entsonkothileyo, entle, kwaye okona kubaluleke kakhulu, inkqubo yokusebenza. I-TON izibonakalise njengeqonga elinamandla amakhulu. Nangona kunjalo, ukwenzela ukuba le ecosystem iphuhlise, kuninzi okufuneka kwenziwe, ngokumalunga nokusetyenziswa kwayo kwiiprojekthi ze-blockchain kunye nokuphucula izixhobo zophuhliso. Siyazingca ngokuba yinxalenye yale nkqubo.
Ukuba emva kokufunda eli nqaku usenayo nayiphi na imibuzo okanye unemibono malunga nendlela yokusebenzisa i-TON ukusombulula iingxaki zakho,
umthombo: www.habr.com