Mohlomong u utloile Telegram eo . Empa u ka 'na ua hloloheloa litaba tse seng kae tse fetileng Telegram bakeng sa ho kenya tshebetsong konteraka e le nngwe kapa tse ngata tse bohlale bakeng sa sethala sena.
Sehlopha sa Serokell, se nang le phihlelo e kholo ea ho hlahisa merero e meholo ea blockchain, se ne se sitoa ho ema ka thōko. Re ile ra abela basebetsi ba bahlano tlholisanong, 'me libeke tse peli hamorao ba ile ba nka sebaka sa pele ho eona tlasa lebitso la bosoasoi la (ka) Sexy Chameleon. Sehloohong sena ke tla bua ka hore na ba e entse joang. Re tšepa hore metsotsong e leshome e tlang bonyane u tla bala pale e thahasellisang, 'me haholo-holo u tla fumana ntho e molemo ho eona eo u ka e sebelisang mosebetsing oa hau.
Empa ha re qaleng ka moelelo o fokolang.
Tlholisano le maemo a eona
Kahoo, mesebetsi ea mantlha ea barupeluoa e ne e le ts'ebetsong ea likonteraka tse bohlale tse reriloeng, hammoho le ho etsa litlhahiso tsa ho ntlafatsa tikoloho ea TON. Tlholisano e ile ea qala ka la 24 Loetse ho fihlela la 15 Mphalane, 'me liphetho li phatlalalitsoe feela ka la 15 Pulungoana. Nako e telele haholo, ho nahanoa hore nakong ena Telegraph e khonne ho tšoara le ho phatlalatsa liphetho tsa litlholisano mabapi le moralo le nts'etsopele ea lits'ebetso ho C++ bakeng sa tlhahlobo le ho lekola boleng ba mehala ea VoIP ho Telegraph.
Re khethile likonteraka tse peli tse bohlale ho tsoa lethathamong le hlahisitsoeng ke bahlophisi. Bakeng sa e 'ngoe ea tsona, re sebelisitse lisebelisoa tse abuoang le TON,' me ea bobeli e ile ea kenngoa ts'ebetsong ka puo e ncha e entsoeng ke baenjiniere ba rona ka ho khetheha bakeng sa TON 'me e hahiloe Haskell.
Khetho ea puo e sebetsang ea lenaneo ha e etsahale ka phoso. Ka tsa rona Re atisa ho bua ka hore na ke hobane'ng ha re nahana hore ho rarahana ha lipuo tse sebetsang ke pheteletso e kholo le hore na ke hobane'ng ha ka kakaretso re li khetha ho e-na le tse hanyetsanang le tsona. Ka tsela, e boetse e na le .
Ke hobane’ng ha re ile ra ba ra etsa qeto ea ho kopanela?
Ka bokhutšoanyane, hobane tsebo ea rona ke merero e sa tloaelehang le e rarahaneng e hlokang tsebo e khethehileng 'me hangata e na le bohlokoa ba saense ho sechaba sa IT. Re tšehetsa ka matla ntshetsopele e bulehileng-mohloding 'me ba kopanela ka popularization lona,' me hape sebelisana 'moho le isang diyunivesithi Serussia tšimong ea saense ea k'homphieutha le lipalo.
Mesebetsi e khahlisang ea tlholisano le ho kenya letsoho morerong oa rona o ratoang oa Telegraph e ne e le khothatso e ntle haholo, empa letlole la moputso le ile la fetoha khothatso e eketsehileng. 🙂
TON blockchain lipatlisiso
Re lekola ka hloko lintlafatso tse ncha ho blockchain, bohlale ba maiketsetso le thuto ea mochini mme re leka ho se fetoe tokollo e le 'ngoe ea bohlokoa sebakeng se seng le se seng seo re sebetsang ho sona. Ka hona, ha tlholisano e qala, sehlopha sa rona se ne se se se tloaelane le mehopolo e tsoang ho . Leha ho le joalo, pele re qala mosebetsi le TON, ha rea ka ra sekaseka litokomane tsa tekheniki le khoutu ea mohloli oa sethala, kahoo mohato oa pele o ne o hlakile - thuto e phethahetseng ea litokomane tsa molao tse mabapi le le ho .
Nakong eo tlhōlisano e qalang, khoutu e ne e se e hatisitsoe, kahoo ho boloka nako, re ile ra etsa qeto ea ho batla tataiso kapa kakaretso e ngotsoeng ke basebelisi. Ka bomalimabe, sena ha sea ka sa fana ka liphetho - ntle le litaelo tsa ho bokella sethala ho Ubuntu, ha rea ka ra fumana lisebelisoa tse ling.
Litokomane ka boeona li ne li batlisisitsoe hantle, empa ho ne ho le thata ho li bala libakeng tse ling. Hangata re ne re tlameha ho khutlela lintlheng tse itseng ebe re tloha ho litlhaloso tsa maemo a holimo tsa mehopolo e sa utloahaleng ho ea ho lintlha tse tlase tsa ts'ebetsong.
Ho ne ho tla ba bonolo haeba tlhaloso e sa kenyeletse tlhaloso e qaqileng ea ts'ebetsong ho hang. Tlhahisoleseding e mabapi le hore na mochine oa sebele o emela stack ea oona joang ho ka etsahala hore e sitise baetsi ba ho theha likonteraka tse bohlale bakeng sa sethala sa TON ho feta ho ba thusa.
Nix: ho kopanya morero
Serokell re barati ba kholo . Re bokella merero ea rona ka eona ebe re e sebelisa , mme e kentsoe ho li-server tsohle tsa rona . Ka lebaka la sena, meaho eohle ea rona e ka hlahisoa hape 'me e sebetsa ho sistimi efe kapa efe ea ts'ebetso eo Nix e ka kengoang ho eona.
Kahoo re ile ra qala ka ho bopa . Ka thuso ea eona, ho bokella TON ho bonolo kamoo ho ka khonehang:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeHlokomela hore ha ho hlokahale hore u kenye li- dependencies leha e le life. Nix e tla u etsetsa ntho e 'ngoe le e' ngoe ka bohlanya, ekaba u sebelisa NixOS, Ubuntu, kapa macOS.
Lenaneo la TON
Khoutu e bohlale ea konteraka ho TON Network e sebetsa ho TON Virtual Machine (TVM). TVM e rarahane ho feta mechine e meng e mengata ea sebele, 'me e na le ts'ebetso e thahasellisang haholo, mohlala, e ka sebetsa le eona tsoelopele и lihokelo tsa data.
Ho feta moo, bashanyana ba TON ba thehile lipuo tse tharo tse ncha tsa lenaneo:
Ea bohlano ke ea bokahohleng stack mananeo a puo e tšoanang . Bokhoni ba hae bo phahameng ke bokhoni ba ho sebelisana le TVM.
FunC ke puo e bohlale ea lenaneo la konteraka e tšoanang le mme e hlophisitswe ka puo e nngwe - Fift Assembler.
Mokopanyi wa Bohlano - Laeborari ea bohlano bakeng sa ho hlahisa khoutu e sebetsang ea binary bakeng sa TVM. Fifth Assembler ha e na moqapi. Sena .
Tlholisano ea rona ea sebetsa
Qetellong, ke nako ea ho sheba litholoana tsa boiteko ba rona.
Seteishene sa ho lefa sa Asynchronous
Seteishene sa tefo ke konteraka e bohlale e lumellang basebelisi ba babeli ho romella litefo ka ntle ho blockchain. Ka lebaka leo, ha u boloke chelete feela (ha ho na komisi), empa hape le nako (ha ho hlokahale hore u emele hore thibela e latelang e sebetsanoe). Litefiso li ka ba nyane joalo ka ha u lakatseha le hangata kamoo ho hlokahalang. Tabeng ena, lihlopha ha lia lokela ho tšepana, kaha toka ea ho qetela ea ho qetela e tiisitsoe ke konteraka e bohlale.
Re fumane tharollo e bonolo ea bothata. Mekha e ’meli e ka fapanyetsana melaetsa e saennoeng, e ’ngoe le e ’ngoe e na le linomoro tse peli—chelete e felletseng e lefuoang ke mokha ka mong. Linomoro tsena tse peli li sebetsa joalo ka ka mekhoa e tloaelehileng e ajoang le ho beha taelo ea "etsahetse pele" mabapi le litšebelisano. Ka ho sebelisa lintlha tsena, konteraka e tla khona ho rarolla likhohlano leha e le life tse ka bang teng.
Ebile, nomoro e le 'ngoe e lekane ho kenya ts'ebetsong mohopolo ona, empa re tlohetse ka bobeli hobane ka tsela ena re ka etsa sebopeho se bonolo sa mosebelisi. Ho feta moo, re ile ra etsa qeto ea ho kenyelletsa chelete ea tefo molaetsang ka mong. Ntle le eona, haeba molaetsa o lahlehile ka lebaka le itseng, joale, le hoja chelete eohle le palo ea ho qetela e tla nepahala, mosebedisi a ka 'na a se ke a hlokomela tahlehelo.
Ho leka mohopolo oa rona, re ile ra batla mehlala ea ho sebelisa protocol e bonolo le e khuts'oane ea litefo. Ho makatsang ke hore re fumane tse peli feela:
- mokhoa o ts'oanang, feela tabeng ea mocha o le mong.
- , e hlalosang maikutlo a tšoanang le a rona, empa ntle le ho hlalosa lintlha tse ngata tsa bohlokoa, tse kang ho nepahala ka kakaretso le mekhoa ea ho rarolla likhohlano.
Ho ile ha hlaka hore hoa utloahala ho hlalosa protocol ea rona ka botlalo, ho ela hloko ka ho khetheha ho nepahala ha eona. Ka mor'a ho pheta-pheta ka makhetlo a 'maloa, litlhaloso li ne li lokile,' me le uena u ka khona. .
Re sebelisitse konteraka ho FunC, 'me re ngotse taelo ea taelo ea ho sebelisana le konteraka ea rona ka ho feletseng ho Fift, joalokaha bahlophisi ba khothalelitsoe. Re ka be re khethile puo efe kapa efe e 'ngoe bakeng sa CLI ea rona, empa re ne re thahasella ho leka Fit ho bona hore na e sebetsa joang.
Ho bua 'nete, kamora ho sebetsa le Fift, ha rea ka ra bona mabaka a tlamang a ho khetha puo ena ho feta lipuo tse tsebahalang le tse sebelisoang ka mafolofolo tse nang le lisebelisoa le lilaeborari tse ntlafalitsoeng. Ho hlophisa ka puo e thehiloeng ho stack ha ho monate, kaha u tlameha ho lula u boloka hlooho ea hau e le ka har'a stack, 'me moqapi ha a thuse ka sena.
Ka hona, ho ea ka maikutlo a rona, lebaka le le leng feela la ho ba teng ha Fift ke karolo ea eona e le puo e amohelang Fift Assembler. Empa na ho ne ho ke ke ha e-ba molemo ho kenya pokello ea TVM puong e seng e ntse e le teng, ho e-na le ho qapa e ncha bakeng sa morero ona o le mong?
TVM Haskell eDSL
Joale ke nako ea ho bua ka konteraka ea rona ea bobeli e bohlale. Re nkile qeto ea ho theha sepache sa mesaeno e mengata, empa ho ngola konteraka e 'ngoe e bohlale ho FunC ho tla tena haholo. Re ne re batla ho eketsa tatso, 'me eo e ne e le puo ea rona ea kopano bakeng sa TVM.
Joalo ka Fift Assembler, puo ea rona e ncha e kentsoe, empa re khethile Haskell joalo ka moamoheli sebakeng sa Fift, e re lumellang ho nka monyetla ka botlalo ba sistimi ea eona ea mofuta o tsoetseng pele. Ha u sebetsa ka likonteraka tse bohlale, moo litšenyehelo tsa esita le phoso e nyenyane e ka ba e phahameng haholo, ho thaepa ho tsitsitseng, ka maikutlo a rona, ke molemo o moholo.
Ho bontša seo TVM assembler e shebahalang eka e kentsoe Haskell, re kentse sepache se tloaelehileng ho eona. Mona ke lintho tse 'maloa tseo u lokelang ho li ela hloko:
- Konteraka ena e na le ts'ebetso e le 'ngoe, empa u ka sebelisa tse ngata kamoo u ratang. Ha o hlalosa ts'ebetso e ncha ka puo ea moamoheli (ke hore, Haskell), eDSL ea rona e u lumella ho khetha hore na u batla hore e fetohe mokhoa o ikhethileng ho TVM kapa e kenngoe feela moo o letsetsoang teng.
- Joalo ka Haskell, mesebetsi e na le mefuta e hlahlojoang ka nako ea ho bokella. Ho eDSL ea rona, mofuta oa ho kenya tšebetsong ke mofuta oa stack eo mosebetsi o e lebelletseng, 'me mofuta oa sephetho ke mofuta oa stack o tla hlahisoa kamora mohala.
- Khoutu e na le litlhaloso
stacktype, e hlalosang mofuta o lebelletsoeng oa stack sebakeng sa mohala. Konteraka ea pele ea sepache tsena e ne e le litlhaloso feela, empa ho eDSL ea rona ha e le hantle ke karolo ea khoutu 'me e hlahlojoa ka nako ea ho bokella. Li ka sebetsa e le litokomane kapa lipolelo tse thusang moqapi ho fumana bothata haeba khoutu e fetoha 'me mofuta oa stack o fetoha. Ehlile, litlhaloso tse joalo ha li ame ts'ebetso ea nako ea ho sebetsa, kaha ha ho na khoutu ea TVM e hlahisoang bakeng sa bona. - Ena e ntse e le mohlala o ngotsoeng ka libeke tse peli, kahoo ho sa ntse ho e-na le mosebetsi o mongata o lokelang ho etsoa morerong ona. Mohlala, maemo ohle a litlelase tseo u li bonang khoutung e ka tlase e lokela ho hlahisoa ka bo eona.
Sena ke seo ts'ebetsong ea sepache sa multisig se shebahalang ka sona ho eDSL ea rona:
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 @Word32Khoutu e felletseng ea mohloli oa eDSL ea rona le konteraka ea sepache e saenneng ka bongata e ka fumanoa ho Le ho feta mabapi le lipuo tse hahiloeng, mosebetsi-'moho le rona Georgy Agapov.
Liqeto mabapi le tlholisano le TON
Ka kakaretso, mosebetsi oa rona o ile oa nka lihora tsa 380 (ho kenyeletsoa ho tloaelana le litokomane, liboka le tsoelo-pele ea sebele). Bahlahisi ba bahlano ba kentse letsoho morerong oa tlholisano: CTO, moetapele oa sehlopha, litsebi tsa sethala sa blockchain le baetsi ba software ba Haskell.
Re fumane lisebelisoa tsa ho nka karolo tlholisanong ntle le bothata, kaha moea oa hackathon, tšebelisano e haufi, le tlhoko ea ho ikakhela ka setotsoana likarolong tsa mahlale a macha e lula e le monate. Masiu a 'maloa a ho se robale e le hore a fumane liphello tse ngata maemong a fokolang a lichelete a lefelloa ke phihlelo ea bohlokoa le mehopolo e babatsehang. Ntle le moo, ho sebetsa mesebetsing e joalo kamehla ke teko e ntle ea lits'ebetso tsa k'hamphani, kaha ho thata haholo ho fumana litholoana tse ntle ntle le tšebelisano e ntle ea kahare.
Mantsoe a thoko: re khahliloe ke mosebetsi o mongata o kentsoeng ke sehlopha sa TON. Ba ile ba khona ho haha tsamaiso e rarahaneng, e ntle, 'me ea bohlokoa ka ho fetisisa, e sebetsang. TON e ipakile e le sethala se nang le bokhoni bo boholo. Leha ho le joalo, e le hore tikoloho ena e ntlafatse, ho na le ho hongata ho lokelang ho etsoa, ka bobeli mabapi le tšebeliso ea merero ea blockchain le ho ntlafatsa lisebelisoa tsa ntlafatso. Re motlotlo ho ba karolo ea ts'ebetso ena.
Haeba ka mor'a ho bala sehlooho sena u ntse u e-na le lipotso kapa u na le maikutlo a ho sebelisa TON ho rarolla mathata a hau, - re tla thabela ho arolelana phihlelo ea rona.
Source: www.habr.com
