Efa naheno an'io Telegram io angamba ianao . Saingy mety ho tsy azonao ilay vaovao vao haingana Telegram amin'ny fampiharana fifanarahana marani-tsaina iray na maromaro ho an'ity sehatra ity.
Ny ekipa Serokell, manana traikefa be dia be amin'ny famolavolana tetikasa blockchain lehibe, dia tsy afaka nijanona. Nanendry mpiasa dimy izahay ho amin'ny fifaninanana, ary tapa-bolana taty aoriana dia nahazo ny laharana voalohany tamin'izany izy ireo teo ambanin'ny anaram-bositra kisendrasendra (amin'ny) Sexy Chameleon. Amin'ity lahatsoratra ity dia hiresaka momba ny fomba nanaovan'izy ireo izany aho. Manantena izahay fa ao anatin'ny folo minitra manaraka dia hamaky tantara mahaliana ianao farafaharatsiny, ary amin'ny ankapobeny dia hahita zavatra mahasoa ianao ao anatin'izany izay azonao ampiharina amin'ny asanao.
Fa andeha isika hanomboka amin'ny contexte kely.
Fifaninanana sy ny fepetra ao aminy
Noho izany, ny tena anjara asan'ny mpandray anjara dia ny fampiharana ny iray na maromaro amin'ireo fifanarahana marani-tsaina natolotra, ary koa ny fanaovana tolo-kevitra hanatsarana ny tontolo iainana TON. Nanomboka ny 24 septambra ka hatramin’ny 15 oktobra ny fifaninanana, ary ny 15 novambra vao fantatra ny vokatra azo. Ela be, raha jerena fa nandritra io fotoana io dia nahavita nitazona sy nanambara ny valin'ny fifaninanana momba ny famolavolana sy ny fampivoarana ny fampiharana amin'ny C ++ ny Telegram amin'ny fitiliana sy fanombanana ny kalitaon'ny antso VoIP ao amin'ny Telegram.
Nifantina fifanarahana hendry roa avy amin'ny lisitra natolotry ny mpikarakara izahay. Ho an'ny iray amin'izy ireo dia nampiasa fitaovana nozaraina tamin'ny TON izahay, ary ny faharoa dia nampiharina tamin'ny fiteny vaovao novolavolain'ireo injeniera manokana ho an'ny TON ary naorina tao amin'ny Haskell.
Tsy kisendrasendra ny fisafidianana ny fiteny fandaharana miasa. Ao aminay Matetika isika no miresaka momba ny antony hiheverantsika fa ny fahasarotan'ny fiteny miasa dia manitatra be ary nahoana no aleontsika azy ireo amin'ny fiteny mitodika amin'ny zavatra. Raha ny marina dia misy ihany koa izany .
Nahoana isika no nanapa-kevitra ny handray anjara?
Raha fintinina, satria tetikasa tsy manara-penitra sy be pitsiny ny fanasokajianay izay mitaky fahaiza-manao manokana ary matetika misy lanjany ara-tsiansa ho an'ny vondrom-piarahamonina IT. Manohana mafy ny fampivoarana loharano misokatra izahay ary mirotsaka amin'ny fampalaza azy, ary miara-miasa amin'ireo anjerimanontolo Rosiana mpitarika eo amin'ny sehatry ny informatika sy matematika.
Ny asa mahaliana amin'ny fifaninanana sy ny fandraisana anjara amin'ny tetikasa Telegram malalantsika dia tena antony manosika tsara, fa ny tahirim-bola dia nanjary famporisihana fanampiny. 🙂
TON blockchain fikarohana
Manara-maso akaiky ny fivoarana vaovao amin'ny blockchain, ny faharanitan-tsaina artifisialy ary ny fianarana milina izahay ary miezaka ny tsy hanadino ny famoahana manan-danja iray isaky ny faritra iasanay. Noho izany, tamin'ny fotoana nanombohan'ny fifaninanana dia efa fantatry ny ekipantsika ny hevitra avy amin'ny . Na izany aza, alohan'ny hanombohan'ny asa miaraka amin'ny TON, dia tsy nanadihady ny antontan-taratasy ara-teknika sy ny tena loharano loharanon'ny sehatra izahay, noho izany dia niharihary ny dingana voalohany - fandinihana lalina ny antontan-taratasy ofisialy momba ny ary ao .
Tamin'ny fotoana nanombohan'ny fifaninanana dia efa nivoaka ny kaody, ka mba hitsitsiana fotoana dia nanapa-kevitra izahay fa hitady torolalana na famintinana nosoratan'i mpampiasa. Indrisy anefa fa tsy nisy valiny izany - ankoatry ny torolàlana momba ny fanangonana ny lampihazo amin'ny Ubuntu, dia tsy nahita fitaovana hafa izahay.
Ny antontan-taratasy mihitsy dia nodinihina tsara, saingy sarotra novakiana tany amin'ny faritra sasany. Matetika izahay no tsy maintsy niverina tany amin'ny teboka sasany ary nifindra avy amin'ny famaritana avo lenta momba ny hevitra saro-takarina mankany amin'ny antsipiriany momba ny fampiharana.
Ho mora kokoa raha tsy misy famaritana amin'ny antsipiriany momba ny fampiharana mihitsy ny famaritana. Ny fampahalalana momba ny fomba fanehoana ny milina virtoaly iray dia mety hanelingelina ny mpamorona mamorona fifanarahana marani-tsaina ho an'ny sehatra TON fa tsy manampy azy ireo.
Nix: mametraka ny tetikasa miaraka
Mpankafy be izahay ao Serokel . Manangona ny tetikasanay miaraka aminy izahay ary mampiasa azy ireo , ary napetraka amin'ny lohamilinay rehetra . Noho izany, azo averina daholo ny fanangananay rehetra ary miasa amin'ny rafitra fiasa rehetra izay ahafahan'i Nix apetraka.
Dia nanomboka tamin'ny famoronana izahay . Miaraka amin'ny fanampiany, ny fanangonana TON dia tsotra araka izay azo atao:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeMariho fa tsy mila mametraka fiankinan-doha ianao. Nix dia hanao ny zava-drehetra ho anao, na mampiasa NixOS, Ubuntu, na macOS ianao.
Fandaharana ho an'ny TON
Ny kaody fifanarahana hendry ao amin'ny TON Network dia mandeha amin'ny TON Virtual Machine (TVM). Ny TVM dia sarotra kokoa noho ny ankamaroan'ny milina virtoaly hafa, ary manana fiasa tena mahaliana, ohatra, afaka miasa miaraka fitohizana и rohy mankany amin'ny data.
Ankoatr'izay, namorona fiteny fandaharana telo vaovao ireo lehilahy avy ao TON:
Dimy dia fiteny fandaharana stack universal izay mitovitovy . Ny fahaiza-manaony dia ny fahaizana mifandray amin'ny TVM.
FunC dia tenim-pandaharana fifanarahana marani-tsaina izay mitovy amin'ny ary natambatra amin'ny fiteny hafa - Fift Assembler.
Assembler fahadimy — Fitehirizam-boky dimy ho an'ny famoronana kaody mimari-droa azo tanterahina ho an'ny TVM. Tsy manana compiler ny Fifth Assembler. izany .
Mandeha ny fifaninanana ataontsika
Farany, fotoana hijerena ny vokatry ny ezaka ataontsika izao.
Fantsona fandoavam-bola asynchronous
Ny fantsona fandoavam-bola dia fifanarahana marani-tsaina izay ahafahan'ny mpampiasa roa mandefa fandoavam-bola ivelan'ny blockchain. Vokatr'izany dia tsy mitahiry vola fotsiny ianao (tsy misy komisiona), fa koa fotoana (tsy mila miandry ny fanodinana manaraka ianao). Ny fandoavam-bola dia mety ho kely araka izay irina ary matetika araka izay ilaina. Amin'ity tranga ity, ny antoko dia tsy voatery hifampatoky, satria ny fahamarinan'ny fifanarahana farany dia miantoka ny fifanarahana marani-tsaina.
Nahita vahaolana tsotra ho an'ny olana izahay. Afaka mifanakalo hafatra nosoniavina ny antoko roa, samy misy isa roa—ny vola feno naloan'ny antoko tsirairay. Ireo isa roa ireo dia miasa toy izany amin'ny rafitra nozaraina nentim-paharazana ary mametraka ny baiko "nitranga teo aloha" amin'ny fifampiraharahana. Amin'ny fampiasana an'io angona io, ny fifanarahana dia ho afaka hamaha izay mety ho fifandirana.
Raha ny marina, isa iray dia ampy hampiharana an'io hevitra io, saingy navelanay izy roa satria amin'izany fomba izany no ahafahantsika manamboatra interface tsara kokoa ho an'ny mpampiasa. Ankoatra izany, nanapa-kevitra ny hampiditra ny sandan'ny fandoavam-bola amin'ny hafatra tsirairay izahay. Raha tsy misy izany, raha very ny hafatra noho ny antony iray, dia mety tsy ho hitan'ny mpampiasa ny fatiantoka, na dia marina aza ny vola sy ny kajy farany.
Mba hitsapana ny hevitray dia nitady ohatra amin'ny fampiasana protocol fantsona fandoavana tsotra sy fohy toy izany izahay. Nahagaga fa roa ihany no hitanay:
- fomba fiasa mitovy amin'izany, ho an'ny fantsona tokana ihany.
- , izay manoritsoritra hevitra mitovy amin'ny anay, nefa tsy manazava antsipiriany manan-danja maro, toy ny fanitsiana ankapobeny sy ny fomba famahana ny fifandirana.
Nanjary nazava fa mitombina ny mamaritra amin'ny antsipiriany ny protocole ataontsika, mandinika manokana ny fahamarinany. Taorian'ny famerimberenana maromaro, dia efa vonona ny famaritana, ary azonao atao koa izao. .
Nametraka ny fifanarahana tao amin'ny FunC izahay, ary nanoratra ny fampitaovana andalana baiko mba hifaneraserana amin'ny fifanarahanay manontolo ao amin'ny Fift, araka ny soso-kevitry ny mpikarakara. Afaka nisafidy fiteny hafa ho an'ny CLI izahay, saingy liana izahay nanandrana ny Fit mba hahitana ny fahombiazany amin'ny fampiharana.
Raha ny marina, taorian'ny niara-niasa tamin'ny Fift, dia tsy nahita antony marim-pototra hisafidianana ity fiteny ity amin'ny fiteny malaza sy ampiasaina mavitrika miaraka amin'ny fitaovana sy tranomboky novolavolaina izahay. Ny fandaharana amin'ny fiteny mifototra amin'ny stack dia tsy mahafinaritra, satria tsy maintsy mitazona tsy tapaka ao an-dohanao izay ao anaty stack ianao, ary tsy manampy amin'izany ny compiler.
Noho izany, araka ny hevitray, ny hany fanamarinana ny fisian'ny Fift dia ny anjara asany amin'ny maha-teny fampiantranoana ny Fift Assembler. Fa tsy aleo ve ampidirina amin'ny fiteny efa misy ny assembler TVM, toy izay mamorona teny vaovao ho amin'izany tanjona izany?
TVM Haskell eDSL
Fotoana izao hiresahana momba ny fifanarahana marani-tsaina faharoa. Nanapa-kevitra ny hamolavola kitapo misy sonia maromaro izahay, fa ny fanoratana fifanarahana hendry hafa amin'ny FunC dia mankaleo loatra. Te-hanampy tsirony izahay, ary izany no fiteninay manokana ho an'ny TVM.
Tahaka ny Fift Assembler, ny fiteninay vaovao dia tafiditra, saingy nisafidy ny Haskell izahay ho mpampiantrano fa tsy ny Fift, ahafahantsika manararaotra tanteraka ny rafitra karazana mandroso. Rehefa miasa miaraka amin'ny fifanarahana marani-tsaina, izay mety ho avo be ny vidin'ny fahadisoana kely, ny fanoratana static, araka ny hevitray, dia tombony lehibe.
Mba hampisehoana ny endrik'ilay assembler TVM tafiditra ao amin'ny Haskell, dia nametraka kitapom-bola mahazatra izahay. Ireto misy zavatra vitsivitsy tokony hotandremana:
- Ity fifanarahana ity dia misy fiasa iray, saingy azonao ampiasaina araka izay tianao. Rehefa mamaritra asa vaovao amin'ny fiteny mpampiantrano ianao (izany hoe Haskell), ny eDSL anay dia mamela anao hisafidy raha tianao ho lasa fahazarana mitokana ao amin'ny TVM izy io na ampidirina fotsiny amin'ny toerana fiantsoana.
- Tahaka an'i Haskell, ny fiasa dia manana karazana voamarika amin'ny fotoana fanangonana. Ao amin'ny eDSL-ntsika, ny karazana fandraisan'anjaran'ny asa iray dia ny karazana stack izay andrasan'ny asa, ary ny karazana vokatra dia ny karazana stack izay hovokarina aorian'ny antso.
- Misy fanamarihana ny code
stacktype, mamaritra ny karazana stack andrasana amin'ny toerana fiantsoana. Ao amin'ny fifanarahana kitapom-bola tany am-boalohany dia fanehoan-kevitra fotsiny ireo, fa ao amin'ny eDSL anay dia ampahany amin'ny kaody izy ireo ary voamarina amin'ny fotoana fanangonana. Izy ireo dia azo ampiasaina ho antontan-taratasy na fanambarana izay manampy ny mpamorona hahita ny olana raha miova ny code ary miova ny karazana stack. Mazava ho azy fa tsy misy fiatraikany amin'ny fampandehanan-draharahan'ny fotoam-pivoriana ny fanamarihana toy izany, satria tsy misy kaody TVM natsangana ho azy ireo. - Mbola prototype nosoratana tao anatin'ny tapa-bolana izany, ka mbola betsaka ny asa tokony hatao amin'ny tetikasa. Ohatra, ny tranga rehetra amin'ny kilasy hitanao ao amin'ny kaody etsy ambany dia tokony ho tonga ho azy.
Toy izao ny fampiharana ny poketra multisig amin'ny 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 @Word32Ny kaody loharano feno amin'ny eDSL sy ny fifanarahana kitapom-bola misy sonia maro dia hita ao amin'ny Ary maro hafa momba ny fiteny voaorina, ilay mpiara-miasa aminay Georgy Agapov.
Fehiny momba ny fifaninanana sy ny TON
Amin'ny fitambarany, naharitra 380 ora ny asantsika (anisan'izany ny fahafantarana ny antontan-taratasy, ny fivoriana ary ny tena fampandrosoana). Mpandrindra dimy no nandray anjara tamin'ny tetikasa fifaninanana: CTO, mpitarika ny ekipa, manam-pahaizana momba ny sehatra blockchain ary mpamorona rindrambaiko Haskell.
Nahita loharano handraisana anjara amin'ny fifaninanana tsy misy fahasarotana izahay, satria mampientam-po foana ny toe-tsain'ny hackathon, ny fiaraha-miasa akaiky ary ny filàna haingana amin'ny lafiny teknolojia vaovao. Ny alina tsy misy torimaso mba hahazoana vokatra ambony indrindra amin'ny toe-javatra misy loharanon-karena voafetra dia omen'ny traikefa sarobidy sy fahatsiarovana tsara. Ankoatr'izay, ny fanaovana asa toy izany dia fitsapana tsara foana amin'ny fizotran'ny orinasa, satria sarotra be ny mahazo vokatra tena mendrika raha tsy misy fifandraisana anatiny miasa tsara.
Tononkira: nampiaiky volana anay ny habetsahan'ny asa nataon'ny ekipan'ny TON. Nahavita nanangana rafitra fiasana be pitsiny sy tsara tarehy ary indrindra izy ireo. Ny TON dia nanaporofo ny tenany ho sehatra manana hery lehibe. Na izany aza, mba hampandrosoana ity tontolo iainana ity dia betsaka kokoa ny zavatra tsy maintsy atao, na amin'ny fampiasana azy amin'ny tetikasa blockchain na amin'ny fanatsarana ny fitaovana fampandrosoana. Reharehantsika izao fa tafiditra amin'ity dingana ity.
Raha mbola manana fanontaniana ianao na manana hevitra momba ny fampiasana TON hamahana ny olanao rehefa avy namaky ity lahatsoratra ity ianao, — ho faly isika hizara ny traikefantsika.
Source: www.habr.com
