Masalo ua e faalogo i lena Telegram . Ae atonu na e misia le tala fou e leʻi leva Telegram mo le faʻatinoina o se tasi pe sili atu konekarate atamai mo lenei faʻavae.
O le au a Serokell, ma le poto masani i le atinaʻeina o poloketi tetele poloka poloka, e le mafai ona tuʻu ese. Na matou faamatuu atu tagata faigaluega se toalima i le tauvaga, ma i le lua vaiaso mulimuli ane na latou maua ai le tulaga muamua i lalo o le (i) igoa tauvalaau tauagafau Sexy Chameleon. I lenei tusiga o le a ou talanoa e uiga i le auala na latou faia ai. Matou te faʻamoemoe o le isi sefulu minute e te faitau ai i se tala manaia, ma o le tele o le ae mauaina se mea aoga i totonu e mafai ona e faʻaaogaina i lau galuega.
Ae tatou amata i sina talaaga itiiti.
Tauvaga ma ona tulaga
O le mea lea, o galuega autu a le au auai o le faʻatinoina lea o se tasi pe sili atu o konekarate atamai fuafuaina, faʻapea foʻi ma le faia o talosaga e faʻaleleia ai le faʻaogaina o le TON. O le tauvaga na amata mai ia Setema 24 e oo atu ia Oketopa 15, ma na o le aso 15 o Novema na faalauiloa ai faaiuga. O se taimi umi lava, mafaufau i le taimi lea na mafai ai e Telegram ona taofi ma faʻasalalau iʻuga o tauvaga i luga o le mamanu ma le atinaʻeina o talosaga ile C ++ mo le suʻeina ma le iloiloga o le lelei o le VoIP telefoni i Telegram.
Na matou filifilia ni konekarate atamai se lua mai le lisi na faʻatulagaina e le faʻalapotopotoga. Mo se tasi oi latou, na matou faʻaogaina meafaigaluega na tufatufa atu i le TON, ma o le lona lua na faʻatinoina i se gagana fou na atiaʻe e a matou inisinia faʻapitoa mo TON ma fausia i Haskell.
Ole filifiliga ole gagana fa'apolokalame fa'atino e le'o fa'afuase'i. I la tatou E masani ona tatou talanoa e uiga i le mafuaʻaga tatou te manatu ai o le lavelave o gagana faʻatino o se faʻateleina tele ma pe aisea tatou te masani ai ona sili atu i latou i mea faʻapitoa. I le ala, o loʻo i ai foi .
Aisea na matou filifili ai e auai?
I se faapuupuuga, ona o la matou faʻapitoa e le faʻapitoa ma lavelave galuega faatino e manaʻomia ai tomai faʻapitoa ma e masani ona aoga faʻasaienisi i le IT community. Matou te lagolagoina malosi le atinaʻeina o punaoa tatala ma o loʻo auai i lona faʻalauiloaina, ma galulue faʻatasi ma le taʻitaʻia o iunivesite a Rusia i le matata o le saienisi komepiuta ma le matematika.
O galuega manaia o le tauvaga ma le auai i la tatou galuega pele Telegram sa i ai ia i latou lava o se faaosofiaga sili ona lelei, ae o le faʻailoga tupe na avea ma faʻamalosiaga faaopoopo. 🙂
suʻesuʻega poloka poloka TON
Matou te vaʻavaʻai totoʻa atinaʻe fou i poloka poloka, atamai faʻapitoa ma aʻoaʻoga masini ma taumafai e aua neʻi misia se faʻasalalauga taua se tasi i vaega taʻitasi matou te galulue ai. O le mea lea, e oo atu i le taimi na amata ai le tauvaga, ua masani le matou 'au i manatu mai . Ae ui i lea, aʻo leʻi amataina le galuega ma le TON, matou te leʻi suʻesuʻeina faʻamaumauga faʻapitoa ma le faʻamatalaga moni o le faʻavae, o lea na manino ai le laasaga muamua - o se suʻesuʻega maeʻaeʻa o faʻamaumauga aloaia i luga. ma i totonu .
E oo atu i le taimi na amata ai le tauvaga, ua uma ona lolomiina le code, ina ia sefe le taimi, na matou filifili e suʻe se taʻiala poʻo se aotelega na tusia e tagata fa'aoga. Ae paga lea, e leʻi maua ai ni faʻaiʻuga - e ese mai i faʻatonuga mo le faʻapipiʻiina o le faʻavae i luga o le Ubuntu, matou te leʻi mauaina nisi mea.
O faʻamaumauga lava ia na suʻesuʻeina lelei, ae sa faigata ona faitau i nisi o vaega. O le tele o taimi e tatau ai ona matou toe fo'i i nisi vaega ma sui mai fa'amatalaga maualuga o manatu fa'apitoa i fa'amatalaga fa'atino tulaga maualalo.
O le a sili atu ona faigofie pe afai e le aofia ai i le faʻamatalaga se faʻamatalaga auiliili o le faʻatinoga. O faʻamatalaga e uiga i le faʻatusaina e se masini komepiuta lona faʻapipiʻi e sili atu ona faʻalavelaveina le au atiaʻe e faia konekarate atamai mo le TON platform nai lo le fesoasoani ia i latou.
Nix: tu'u fa'atasi le poloketi
I Serokell o matou o tagata fiafia tele . Matou te aoina a matou poloketi faʻatasi ma faʻapipiʻi i latou e faʻaaoga , ma fa'apipi'i i luga oa matou 'au'aunaga uma . Faʻafetai i lenei mea, o matou fale uma e toe faʻaleleia ma galue i soʻo se faiga faʻaogaina e mafai ona faʻapipiʻi ai Nix.
O lea na matou amata i le fatuina . Faatasi ai ma lana fesoasoani, o le tuufaatasia o le TON e faigofie lava pe a mafai:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeManatua e te le manaʻomia le faʻapipiʻiina o soʻo se faʻalagolago. O le a faia fa'amaneta e Nix mea uma mo oe, pe oe fa'aaogaina NixOS, Ubuntu, po'o macOS.
Polokalama mo TON
O le tulafono faakonekarate atamai i le TON Network o loʻo faʻaogaina i luga o le TON Virtual Machine (TVM). O le TVM e sili atu le lavelave nai lo le tele o isi masini komepiuta, ma e sili ona manaia galuega, mo se faʻataʻitaʻiga, e mafai ona galue ma fa'aauau и so'oga i fa'amaumauga.
E le gata i lea, na faia e tama mai le TON ni gagana fou e tolu:
Lima ose gagana fa'apolokalame fa'aputuga lautele e fa'atusa . O lona tomai sili o le mafai lea ona fegalegaleai ma le TVM.
FiafiaC ose gagana polokalame konekarate atamai e tutusa ma ma ua tuufaatasia i se isi gagana - Fift Assembler.
Fa'apotopotoga Lona Lima — Lima faletusi mo le fa'atupuina o tulafono fa'atino e lua mo le TVM. O le Fifth Assembler e leai se faʻapipiʻi. Lenei .
E aoga a tatou tauvaga
Mulimuli ane, ua oo i le taimi e vaavaai ai i taunuuga oa tatou taumafaiga.
Auala totogi fa'aasynchronous
Totogi auala o se konekarate atamai lea e mafai ai e tagata faʻaoga e toʻalua ona lafo tupe i fafo atu o le poloka poloka. O se taunuuga, e te faʻasaoina e le gata o tupe (e leai se komisi), ae faʻapea foi le taimi (e te le tau faʻatali mo le isi poloka e faʻatautaia). Totogi e mafai ona laʻititi pe a manaʻomia ma i taimi uma e manaʻomia ai. I lenei tulaga, e le tatau ona faʻalagolago le tasi i le isi, talu ai o le saʻo o le faʻaiuga mulimuli e faʻamaonia e le konekarate atamai.
Na matou mauaina se fofo faigofie i le faafitauli. E mafai e itu e lua ona faafesuiai fe'au ua sainia, e tofu uma ma numera e lua—o le aofa'iga atoa e totogi e pati ta'itasi. O nei numera e lua e galue pei o i faiga fa'asoa fa'aleaganu'u ma fa'atulaga le fa'atonuga "na tupu muamua" i fefa'atauaiga. O le fa'aaogaina o nei fa'amaumauga, o le a mafai ai e le konekarate ona fo'ia so'o se fete'ena'iga e ono tula'i mai.
O le mea moni, e tasi le numera e lava e faʻatino ai lenei manatu, ae na matou tuʻua uma ona o le auala lea e mafai ai ona matou faia se faʻaoga sili atu ona faigofie. E le gata i lea, na matou filifili e faʻapipiʻi le aofaʻi o tupe totogi i feʻau taʻitasi. A aunoa ma lea, afai e leiloa le feʻau mo nisi mafuaʻaga, e ui lava o le aofaʻi uma ma le faʻatusatusaga mulimuli o le a saʻo, e le mafai e le tagata faʻaoga ona iloa le leiloa.
Ina ia faʻataʻitaʻi lo matou manatu, matou te suʻeina ni faʻataʻitaʻiga o le faʻaogaina o se faʻaoga faigofie ma le faʻapitoa o auala totogi. O le mea e ofo ai, na o le lua na matou mauaina:
- se faiga fa'apena, na'o le tulaga o se alale'a e tasi.
- , o loʻo faʻamatalaina le manatu tutusa e pei o matou, ae aunoa ma le faʻamatalaina o le tele o faʻamatalaga taua, e pei o le saʻo lautele ma faiga faʻavae feteʻenaʻiga.
Na manino mai e talafeagai le faʻamatalaina auiliili o la matou faʻasalalauga, faʻapitoa i lona saʻo. A maeʻa le tele o faʻamatalaga, ua saunia le faʻamatalaga, ma o lea e mafai foi ona e faia. .
Na matou fa'atinoina le konekarate i FunC, ma sa matou tusia le fa'atonuga mo le fegalegaleai ma le matou konekarate atoa i le Fift, e pei ona fautuaina e le au fa'atonu. Semanu e mafai ona matou filifilia se isi gagana mo la matou CLI, ae sa matou fiafia e taumafai ia Fit e iloa ai pe na faapefea ona faatino i le faatinoga.
Ina ia faʻamaoni, ina ua maeʻa ona galulue ma le Lima, matou te leʻi vaʻaia ni mafuaaga faʻamalosi e sili atu ai lenei gagana i gagana taʻutaʻua ma faʻaaogaina ma mea faigaluega ma faletusi. O le fa'apolokalameina i se gagana fa'avae fa'aputuga e fai lava si le fiafia, talu ai e tatau ona e teu pea i lou ulu mea o lo'o i luga o le fa'aputuga, ma e le fesoasoani le tu'ufa'atasi i lenei mea.
O le mea lea, i lo matou manatu, na o le pau lava le faʻamaoniga mo le i ai o le Fift o lana matafaioi o se gagana talimalo mo le Fift Assembler. Ae e le sili atu ea le fa'aofiina o le TVM assembler i se gagana o lo'o iai, nai lo le fa'atupuina o se gagana fou mo lenei fa'amoemoe?
TVM Haskell eDSL
O le taimi nei e talanoa ai e uiga i la matou konekarate atamai lona lua. Na matou filifili e atiaʻe se atotupe e tele saini, ae o le tusiaina o se isi konekarate atamai i FunC o le a le manaia tele. Na matou manana'o e fa'aopoopo sina tofo, ma o la matou lava gagana fa'apotopotoga mo le TVM.
E pei o le Fift Assembler, o la tatou gagana fou ua faʻapipiʻiina, ae na matou filifilia Haskell e fai ma talimalo nai lo le Fift, faʻatagaina i matou e faʻaoga atoatoa i lona tulaga maualuga. Pe a galue ma konekarate atamai, lea o le tau e oʻo lava i sina mea sese e mafai ona maualuga tele, static typing, i lo matou manatu, o se avanoa tele.
Ina ia faʻaalia foliga o le TVM assembler o loʻo faʻapipiʻiina i Haskell, matou te faʻatinoina se atotupe masani i luga. O nai mea nei e fa'alogo i ai:
- O lenei konekarate e aofia ai le tasi galuega, ae e mafai ona e faʻaogaina le tele e te manaʻo ai. A e faauigaina se galuega fou i le gagana talimalo (e pei o Haskell), o la matou eDSL e mafai ai ona e filifili pe e te manaʻo e avea ma se masani masani i le TVM pe faʻapipiʻi i le nofoaga o le telefoni.
- E pei o Haskell, o galuega e iai ituaiga e siaki ile taimi fa'aopoopo. I la matou eDSL, o le ituaiga faʻapipiʻi o se galuega o le ituaiga o faaputuga o loʻo faʻamoemoeina e le galuega, ma o le iʻuga o le ituaiga o faaputuga o le a gaosia pe a uma le valaau.
- O loʻo i ai faʻamatalaga i le code
stacktype, fa'amatala le ituaiga fa'aputuga o lo'o fa'amoemoeina i le vala'au. I le ulua'i fa'akonekarate atotupe na'o ni fa'amatalaga, ae i totonu o la matou eDSL o latou moni lava o se vaega o le tulafono ma siaki i le taimi fa'aopoopo. E mafai ona avea o ni faʻamaumauga poʻo ni faʻamatalaga e fesoasoani i le atinaʻe e suʻe le faʻafitauli pe a suia le code ma suia le ituaiga faaputuga. Ioe, o ia fa'amatalaga e le a'afia ai le fa'atinoga o le ta'aloga talu ai e leai se code TVM e faia mo i latou. - O se fa'ata'ita'iga lava lea ua tusia i le lua vaiaso, o lea o lo'o tele pea galuega e tatau ona fa'atino i le galuega. Mo se faʻataʻitaʻiga, o faʻataʻitaʻiga uma o vasega o loʻo e vaʻaia i le faʻailoga o loʻo i lalo e tatau ona gaosia otometi.
O le mea lea e foliga mai o le faʻatinoina o se atotupe multisig i la matou 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 @Word32E mafai ona maua le fa'asinomaga atoa o le matou eDSL ma le tele-signature wallet contract i Ma sili atu e uiga i gagana ua fausia, o le matou paaga o Georgy Agapov.
Fa'ai'uga e uiga i le tauvaga ma le TON
I le aotelega, o la matou galuega e 380 itula (e aofia ai le faamasani i faʻamaumauga, fonotaga ma atinaʻe moni). E toalima le au atinaʻe na auai i le tauvaga poloketi: CTO, taʻitaʻi o le au, tagata tomai faʻapitoa poloka poloka ma Haskell software developers.
Na matou mauaina ni punaoa e auai ai i le tauvaga e aunoa ma se faigata, talu ai o le agaga o le hackathon, vavalalata le galulue faatasi, ma le manaʻoga ia vave faʻatofuina i tatou lava i vaega o tekinolosi fou e fiafia i taimi uma. Le tele o po e leai se moe e ausia ai taunuuga aupito maualuga i tulaga o punaoa utiuti e tauia e le aoga taua ma manatuaga sili ona lelei. E le gata i lea, o le galue i ia galuega e masani lava o se suʻega lelei o faiga a le kamupani, talu ai e matua faigata lava ona ausia taunuʻuga lelei moni e aunoa ma se fesoʻotaʻiga lelei i totonu.
Fa'a'ese'ese upu: sa matou maofa i le tele o galuega na fa'atino e le 'au a le TON. Na mafai ona latou fausia se lavelave, matagofie, ma sili ona taua, faiga galue. TON ua faʻaalia o ia lava o se faʻavae e iai le gafatia tele. Ae ui i lea, ina ia mafai ona atiaʻe lenei siosiomaga faʻanatura, e tele mea e manaʻomia ona fai, e le gata i lona faʻaogaina i poloka poloka poloka ma i tulaga o le faʻaleleia atili o meafaigaluega. Matou te mitamita i le avea nei ma se vaega o lenei faagasologa.
Afai a uma ona faitau lenei tusiga o loʻo i ai pea ni au fesili pe iai ni manatu ile faʻaogaina o le TON e foia ai ou faʻafitauli, — o le a tatou fiafia e faasoa atu o tatou aafiaga.
puna: www.habr.com
