Cishe uzwile ukuthi iTelegram
Ithimba leSerokell, elinolwazi olunzulu lokuthuthukisa amaphrojekthi amakhulu we-blockchain, alikwazanga ukuma eceleni. Sithumele abasebenzi abahlanu emqhudelwaneni, kwathi emasontweni amabili kamuva bathatha indawo yokuqala kuwo ngaphansi kwesiteketiso (se) esingahleliwe esingahleliwe se-Sexy Chameleon. Kulesi sihloko ngizokhuluma ngokuthi bakwenze kanjani. Sithemba ukuthi emizuzwini eyishumi ezayo okungenani uzofunda indaba ethokozisayo, futhi okungenani uzothola okuthile okuwusizo kuyo ongakusebenzisa emsebenzini wakho.
Kodwa ake siqale ngomongo omncane.
Ukuncintisana nemibandela yawo
Ngakho-ke, imisebenzi eyinhloko yabahlanganyeli kwakuwukuqaliswa kwenkontileka eyodwa noma ngaphezulu yenkontileka ehlakaniphile ehlongozwayo, kanye nokwenza iziphakamiso zokuthuthukisa i-TON ecosystem. Umncintiswano waqala kusukela ngoSepthemba 24 kuya ku-Okthoba 15, futhi imiphumela imenyezelwe ngoNovemba 15 kuphela. Isikhathi eside impela, uma kucatshangelwa ukuthi ngalesi sikhathi iTelegram yakwazi ukubamba futhi yamemezela imiphumela yemincintiswano ekwakhiweni nasekuthuthukisweni kwezinhlelo zokusebenza ku-C++ zokuhlola nokuhlola ikhwalithi yezingcingo ze-VoIP kuTelegramu.
Sikhethe izinkontileka ezimbili ezihlakaniphile ohlwini oluhlongozwe abahleli. Komunye wabo, sasebenzisa amathuluzi asakazwa nge-TON, kanti eyesibili yasetshenziswa ngolimi olusha olwakhiwe onjiniyela bethu ngokukhethekile i-TON futhi bakhelwa ku-Haskell.
Ukukhethwa kolimi lokuhlela olusebenzayo akukona ngephutha. Kwethu
Kungani size sinqume ukuhlanganyela?
Ngamafuphi, ngoba ubuchwepheshe bethu bungamaphrojekthi angajwayelekile futhi ayinkimbinkimbi adinga amakhono akhethekile futhi avame ukubaluleka kwesayensi emphakathini we-IT. Sisekela ngokuqinile ukuthuthukiswa komthombo ovulekile futhi sihileleke ekudumeni kwayo, futhi sibambisana namanyuvesi ahamba phambili aseRussia emkhakheni wesayensi yekhompyutha nezibalo.
Imisebenzi ethokozisayo yomncintiswano nokubamba iqhaza kuphrojekthi yethu esiyithandayo yeTelegramu ngokwayo bekuyisisusa esihle kakhulu, kepha isikhwama semiklomelo saba isikhuthazo esengeziwe. π
Ucwaningo lwe-TON blockchain
Siqapha ngokucophelela intuthuko entsha ku-blockchain, ubuhlakani bokwenziwa nokufunda komshini futhi sizame ukungaphuthelwa ukukhishwa okukodwa okubalulekile endaweni ngayinye esisebenza kuyo. Ngakho-ke, ngesikhathi kuqala umncintiswano, ithimba lethu lase lijwayele imibono evela
Ngesikhathi umncintiswano uqala, ikhodi yayisivele ishicilelwe, ngakho-ke ukuze songe isikhathi, sinqume ukufuna umhlahlandlela noma isifinyezo esibhalwe ngu. ngabasebenzisi. Ngeshwa, lokhu akuzange kunikeze noma yimiphi imiphumela - ngaphandle kwemiyalelo yokuhlanganisa inkundla ku-Ubuntu, asitholanga ezinye izinto.
Amadokhumenti ngokwawo ayecwaningwe kahle, kodwa kwakunzima ukufundeka kwezinye izindawo. Ngokuvamile kwakudingeka sibuyele emaphuzwini athile futhi sishintshe sisuke ezincazelweni eziphezulu zemibono engaqondakali siye emininingwaneni yokusetshenziswa kwezinga eliphansi.
Kungaba lula uma ukucaciswa kungafaki incazelo enemininingwane yokuqaliswa nhlobo. Ulwazi olumayelana nendlela umshini we-virtual osimelela ngayo isitaki sawo kungenzeka kakhulu luphazamise onjiniyela abakha izinkontileka ezihlakaniphile zenkundla ye-TON kunokubasiza.
Nix: ukuhlanganisa iphrojekthi
KwaSerokell singabalandeli abakhulu
Ngakho saqala 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 ukuthi awudingi ukufaka noma yikuphi ukuncika. I-Nix izokwenzela yonke into ngomlingo, noma ngabe usebenzisa i-NixOS, Ubuntu, noma i-macOS.
Ukuhlelela i-TON
Ikhodi yenkontileka ehlakaniphile ku-TON Network isebenza ku-TON Virtual Machine (TVM). I-TVM iyinkimbinkimbi kakhulu kuneminye imishini eminingi ebonakalayo, futhi inomsebenzi othakazelisayo kakhulu, isibonelo, ingasebenza nayo ukuqhubeka ΠΈ izixhumanisi zedatha.
Ngaphezu kwalokho, abafana abavela ku-TON badale izilimi ezintathu zokuhlela ezintsha:
Ezinhlanu iwulimi lokuhlela isitaki oluvamile olufana
I-FunC iwulimi lohlelo lwenkontileka oluhlakaniphile olufana ne
I-Assembler Yesihlanu - Umtapo wolwazi wesihlanu wokukhiqiza ikhodi esebenzisekayo kanambambili ye-TVM. I-Fifth Assembler ayinayo i-comiler. Lokhu
Umncintiswano wethu uyasebenza
Okokugcina, sekuyisikhathi sokubheka imiphumela yemizamo yethu.
Isiteshi sokukhokha esivumelanayo
Isiteshi sokukhokha siyinkontileka ehlakaniphile evumela abasebenzisi ababili ukuthi bathumele izinkokhelo ngaphandle kwe-blockchain. Ngenxa yalokho, awulondolozi imali kuphela (ayikho ikhomishana), kodwa futhi isikhathi (akudingeki ulinde ukuthi ibhulokhi elandelayo icutshungulwe). Izinkokhelo zingaba zincane ngendlela ofisa ngayo futhi kaningi njengoba kudingeka. Kulokhu, abathintekayo akudingeki bathembane, ngoba ukulunga kwesivumelwano sokugcina kuqinisekiswa yinkontileka ehlakaniphile.
Sithole isixazululo esilula kakhulu senkinga. Izinhlangothi ezimbili zingashintshana ngemilayezo esayiniwe, ngayinye iqukethe izinombolo ezimbiliβinani eliphelele elikhokhwa iqembu ngalinye. Lezi zinombolo ezimbili zisebenza njenge
Eqinisweni, inombolo eyodwa yanele ukusebenzisa lo mbono, kodwa sizishiye zombili ngoba ngale ndlela singenza isikhombimsebenzisi esisebenziseka kalula. Ngaphezu kwalokho, sinqume ukufaka inani lenkokhelo kumlayezo ngamunye. Ngaphandle kwayo, uma umlayezo ulahlekile ngesizathu esithile, khona-ke, nakuba wonke amanani kanye nokubala kokugcina kuzoba okulungile, umsebenzisi angase angaboni ukulahlekelwa.
Ukuze sihlole umbono wethu, sibheke izibonelo zokusebenzisa umthetho olandelwayo wesiteshi sokukhokha esilula nesimfishane. Ngokumangalisayo, sithole ezimbili kuphela:
Incazelo indlela efanayo, kuphela esimweni sesiteshi esisodwa.Okokufundisa , echaza umqondo ofanayo nowethu, kodwa ngaphandle kokuchaza imininingwane eminingi ebalulekile, njengokunemba okuvamile nezinqubo zokuxazulula izingxabano.
Kwaba sobala ukuthi kunengqondo ukuchaza inqubo yethu ngokuningiliziwe, sinake ngokukhethekile ukulunga kwayo. Ngemva kokuphindaphinda izikhathi ezimbalwa, ukucaciswa kwase kulungile, futhi manje nawe ungakwenza.
Senze inkontileka ku-FunC, futhi sabhala insiza yomugqa womyalo ukuze sihlanganyele nenkontileka yethu ngokuphelele ku-Fift, njengoba kunconywe abahleli. Besingakhetha noma yiluphi olunye ulimi lwe-CLI yethu, kodwa besinentshisekelo yokuzama i-Fit ukuze sibone ukuthi isebenza kanjani ekusebenzeni.
Uma sikhuluma iqiniso, ngemva kokusebenza no-Fift, asizange sibone izizathu ezizwakalayo zokukhetha lolu limi kunezilimi ezidumile nezisetshenziswa ngenkuthalo ngamathuluzi athuthukisiwe nemitapo yolwazi. Ukuhlela ngolimi olusekelwe kusitaki akujabulisi neze, ngoba kufanele uhlale ugcina ekhanda lakho okuku-stack, futhi umhlanganisi akasizi ngalokhu.
Ngakho-ke, ngokombono wethu, okuwukuphela kwesizathu sokuba khona kwe-Fift indima yayo njengolimi lokusingatha i-Fift Assembler. Kodwa bekungeke yini kube ngcono ukushumeka isihlanganisi se-TVM olimini oluthile olukhona, kunokusungula olusha lwale njongo kuphela?
I-TVM Haskell eDSL
Manje sekuyisikhathi sokukhuluma ngenkontileka yethu yesibili ehlakaniphile. Sinqume ukwakha isikhwama semali esisayinwe kaningi, kodwa ukubhala enye inkontileka ehlakaniphile ku-FunC kungaba yisicefe kakhulu. Besifuna ukwengeza ukunambitheka okuthile, futhi lokho bekuwulimi lwethu lomhlangano we-TVM.
Njengo-Fift Assembler, ulimi lwethu olusha lushumekiwe, kodwa sikhethe u-Haskell njengomsingathi esikhundleni se-Fift, esivumela ukuthi sisebenzise ngokugcwele uhlelo lwayo lohlobo oluthuthukisiwe. Lapho usebenza nezinkontileka ezihlakaniphile, lapho izindleko zephutha elincane zingaba phezulu kakhulu, ukuthayipha okumile, ngokombono wethu, kuyinzuzo enkulu.
Ukukhombisa ukuthi i-TVM assembler ibukeka kanjani ishumekwe ku-Haskell, sisebenzise isikhwama semali esijwayelekile kuso. Nazi izinto ezimbalwa okufanele uzinake:
- Le nkontileka inomsebenzi owodwa, kodwa ungasebenzisa eziningi ngokuthanda kwakho. Uma uchaza umsebenzi omusha ngolimi lomsingathi (okungukuthi, i-Haskell), i-eDSL yethu ikuvumela ukuthi ukhethe ukuthi uyafuna yini ukuthi ibe umzila ohlukile ku-TVM noma imane ifakwe emgqeni lapho kushaya ucingo.
- NjengoHaskell, imisebenzi inezinhlobo ezihlolwa ngesikhathi sokuhlanganisa. Ku-eDSL yethu, uhlobo lokufakwayo lomsebenzi wuhlobo lwesitaki olulindelwe umsebenzi, futhi uhlobo lomphumela wuhlobo lwesitaki esizokhiqizwa ngemva kocingo.
- Ikhodi inezichasiselo
stacktype
, echaza uhlobo lwesitaki olulindelekile endaweni yokufona. Kunkontileka yesikhwama sokuqala lawa bekungamazwana nje, kodwa ku-eDSL yethu empeleni ayingxenye yekhodi futhi ayahlolwa ngesikhathi sokuhlanganiswa. Zingasebenza njengamadokhumenti noma izitatimende ezisiza unjiniyela athole inkinga uma ikhodi ishintsha kanye nohlobo lwesitaki lushintsha. Impela, izichasiselo ezinjalo azithinti ukusebenza kwesikhathi sokusebenza, njengoba kungekho khodi ye-TVM eyakhelwe zona. - Lesi kusewumfanekiso obhalwe emasontweni amabili, ngakho usemkhulu umsebenzi okufanele wenziwe kulo msebenzi. Isibonelo, zonke izimo zamakilasi ozibona kukhodi engezansi kufanele zenziwe ngokuzenzakalelayo.
Yilokhu ukuqaliswa kwe-multisig wallet kubukeka ku-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
Ikhodi egcwele yomthombo ye-eDSL yethu kanye nenkontileka yesikhwama esinezisiginesha eziningi ingatholakala kokuthi
Iziphetho mayelana nomncintiswano kanye ne-TON
Sekukonke, umsebenzi wethu uthathe amahora angu-380 (okuhlanganisa ukujwayelana nemibhalo, imihlangano kanye nentuthuko yangempela). Abathuthukisi abahlanu babambe iqhaza kuphrojekthi yokuncintisana: i-CTO, umholi weqembu, ochwepheshe bepulatifomu ye-blockchain kanye nabathuthukisi be-software ye-Haskell.
Sithole izinsiza zokubamba iqhaza emqhudelwaneni ngaphandle kobunzima, njengoba umoya we-hackathon, ukusebenzisana ngokubambisana, nesidingo sokucwilisa ngokushesha ezintweni zobuchwepheshe obusha kuhlala kujabulisa. Ubusuku obuningana bokuqwasha ukuze kuzuzwe imiphumela ephezulu ezimeni zezinsiza ezilinganiselwe bunxeshezelwa ngolwazi oluyigugu nezinkumbulo ezinhle kakhulu. Ngaphezu kwalokho, ukusebenza emisebenzini enjalo kuhlale kuwuvivinyo oluhle lwezinqubo zenkampani, ngoba kunzima kakhulu ukuzuza imiphumela ehloniphekile ngaphandle kokusebenzelana kwangaphakathi okusebenzayo.
Izingoma eceleni: sihlabeke umxhwele ngomsebenzi omningi owenziwe yiqembu le-TON. Bakwazile ukwakha uhlelo oluyinkimbinkimbi, oluhle, futhi okubaluleke kakhulu, uhlelo lokusebenza. I-TON izibonakalise iyinkundla enamandla amakhulu. Kodwa-ke, ukuze lesi simiso semvelo sithuthuke, kuningi okudingeka kwenziwe, kokubili mayelana nokusetshenziswa kwayo kumaphrojekthi we-blockchain kanye nokuthuthukisa amathuluzi okuthuthukisa. Siyaziqhenya ngokuba yingxenye yalolu hlelo.
Uma ngemva kokufunda lesi sihloko usenemibuzo noma unemibono yokuthi ungasebenzisa kanjani i-TON ukuxazulula izinkinga zakho,
Source: www.habr.com