Eleghị anya ị nụla Telegram ahụ . Mana ị nwere ike agbagharala akụkọ ahụ n'oge na-adịbeghị anya Telegram maka mmejuputa otu nkwekọrịta smart ma ọ bụ karịa maka ikpo okwu a.
Ndị otu Serokell, nwere ahụmahụ dị ukwuu n'ịzụlite nnukwu ọrụ blockchain, enweghị ike iguzo n'akụkụ. Anyị nyefere ndị ọrụ ise na asọmpi ahụ, izu abụọ ka nke ahụ gasịrị, ha butere ọnọdụ mbụ na ya n'okpuru aha (na) aha njirimara Sexy Chameleon. N'isiokwu a, m ga-ekwu banyere otú ha si mee ya. Anyị na-atụ anya na n'ime nkeji iri na-esote, ị ga-agụkarị akụkọ na-adọrọ mmasị, na nke kachasị, ị ga-ahụ ihe bara uru na ya nke ị nwere ike itinye n'ọrụ gị.
Ma ka anyị jiri ntakịrị ihe na-ekwu okwu bido.
Asọmpi na ọnọdụ ya
Ya mere, isi ọrụ nke ndị sonyere bụ mmejuputa otu ma ọ bụ karịa n'ime nkwekọrịta smart ndị a na-atụ anya, yana ịme atụmatụ iji meziwanye gburugburu ebe obibi TON. Asọmpi a malitere site na Septemba 24 ruo Ọktoba 15, na a mara ọkwa nsonaazụ ya naanị na Nọvemba 15. Ogologo oge dị ogologo, na-atụle na n'oge a Telegram jisiri ike jide ma kwusaa nsonaazụ nke asọmpi na imepụta na mmepe nke ngwa na C ++ maka ịnwale na ịlele ogo oku VoIP na Telegram.
Anyị ahọpụtara nkwekọrịta smart abụọ na ndepụta nke ndị nhazi ahụ tụrụ aro. Maka otu n'ime ha, anyị ji ngwá ọrụ e kesara na TON, ma nke abụọ bụ nke etinyere n'asụsụ ọhụrụ nke ndị injinia anyị mepụtara kpọmkwem maka TON ma wuo ya na Haskell.
Nhọrọ nke asụsụ mmemme na-arụ ọrụ abụghị ihe mberede. N'ime anyị Anyị na-ekwukarị banyere ihe mere anyị ji eche na mgbagwoju anya nke asụsụ na-arụ ọrụ bụ nnukwu ikwubiga okwu ókè na ihe kpatara na anyị na-ahọrọkarị ha ka ndị na-eche echiche. Site n'ụzọ, ọ nwekwara .
Gịnị mere anyị ji kpebie iso mee ihe?
Na nkenke, n'ihi na anyị pụrụ iche bụ ndị na-abụghị ọkọlọtọ na mgbagwoju oru ngo na-achọ nkà pụrụ iche na-abụkarị ndị ọkà mmụta sayensị uru na IT obodo. Anyị na-akwado ike na-emeghe-isi mmepe na-etinye aka na ya popularization, na-arụkọ ọrụ na-eduga Russian mahadum na ubi nke kọmputa sayensị na mgbakọ na mwepụ.
Ọrụ ndị na-atọ ụtọ nke asọmpi na itinye aka na ọrụ Telegram anyị hụrụ n'anya bụ n'onwe ha ihe mkpali dị mma, mana ego nrite ghọrọ ihe mkpali ọzọ. 🙂
TON nyocha blockchain
Anyị na-enyocha nke ọma mmepe ọhụrụ na blockchain, ọgụgụ isi na mmụta igwe ma gbalịa ka ị ghara ịhapụ otu ntọhapụ dị ịrịba ama na mpaghara ọ bụla anyị na-arụ ọrụ. Ya mere, site n'oge asọmpi ahụ malitere, ndị otu anyị amaralarị echiche sitere na . Otú ọ dị, tupu ịmalite ọrụ na TON, anyị enyochaghị akwụkwọ nkà na ụzụ na koodu isi mmalite nke ikpo okwu, n'ihi ya, nzọụkwụ mbụ pụtara ìhè - nyocha nke ọma nke akwụkwọ akụkọ na na na .
Ka ọ na-erule oge asọmpi ahụ malitere, e bipụtala koodu ahụ, yabụ iji chekwaa oge, anyị kpebiri ịchọ ntuziaka ma ọ bụ nchịkọta nke edere. site n'aka ndị ọrụ. Ọ dị nwute, nke a enyeghị nsonaazụ ọ bụla - ewezuga ntuziaka maka ikpokọta ikpo okwu na Ubuntu, anyị ahụghị ihe ọ bụla ọzọ.
A nyochara akwụkwọ ahụ n'onwe ya nke ọma, mana ọ siri ike ịgụ na mpaghara ụfọdụ. Ọtụtụ mgbe, anyị ga-alaghachi na isi ihe ma gbanwee site na nkọwa ọkwa dị elu nke echiche nkịtị gaa na nkọwa mmejuputa dị ala.
Ọ ga-adị mfe ma ọ bụrụ na nkọwapụta ahụ agụnyeghị nkọwa zuru ezu nke mmejuputa ya ma ọlị. Ozi gbasara otu igwe mebere na-anọchi anya nchịkọta ya nwere ike ịdọpụ uche ndị mmepe na-eke nkwekọrịta smart maka ikpo okwu TON karịa inyere ha aka.
Nix: na-etinye ọrụ ahụ ọnụ
Na Serokell anyị bụ nnukwu Fans . Anyị na-anakọta ọrụ anyị na ha ma tinye ha n'iji , ma tinye ya na sava anyị niile . N'ihi nke a, ihe niile anyị na-ewu nwere ike imegharị ma na-arụ ọrụ na sistemụ arụmọrụ ọ bụla enwere ike itinye Nix.
Ya mere, anyị malitere site na-eke . Site n'enyemaka ya, ịchịkọta TON dị mfe dịka o kwere mee:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeRịba ama na ịkwesighi ịwụnye ndabere ọ bụla. Nix ga-emere gị ihe niile n'ụzọ anwansi, ma ị na-eji NixOS, Ubuntu, ma ọ bụ macOS.
Mmemme maka TON
Koodu nkwekọrịta smart na TON Network na-agba ọsọ na TON Virtual Machine (TVM). TVM dị mgbagwoju anya karịa ọtụtụ igwe ndị ọzọ mebere, ma nwee ọrụ na-adọrọ mmasị, dịka ọmụmaatụ, ọ nwere ike ịrụ ọrụ aga n'ihu и njikọ na data.
Ọzọkwa, ụmụ okorobịa si TON mepụtara asụsụ mmemme atọ ọhụrụ:
Ise bụ asụsụ mmemme tojupụtara zuru ụwa ọnụ nke yiri . Ikike ya dị oke mma bụ ikike iji TVM na-emekọrịta ihe.
FunC bụ smart nkwekọrịta mmemme asụsụ yiri ma chịkọtara ya n'asụsụ ọzọ - Fift Assembler.
Mgbakọ nke ise - Ọbá akwụkwọ ise maka ịmepụta koodu ọnụọgụ abụọ maka TVM. Mgbakọ nke ise enweghị mkpọkọta. Nke a .
Asọmpi anyị na-arụ ọrụ
N'ikpeazụ, oge eruola ka anyị leba anya na nsonaazụ mbọ anyị rụpụtara.
Ọwa ịkwụ ụgwọ anaghị agbanwe agbanwe
Ọwa ịkwụ ụgwọ bụ nkwekọrịta smart nke na-enye ndị ọrụ abụọ aka izipu ịkwụ ụgwọ na mpụga blockchain. N'ihi ya, ị na-echekwa ọ bụghị naanị ego (enweghị ọrụ), kamakwa oge (ịkwesighi ichere ka a na-ahazi ngọngọ ọzọ). Ịkwụ ụgwọ nwere ike ịdị ntakịrị ka achọrọ yana mgbe achọrọ. N'okwu a, ndị otu ahụ ekwesịghị ịtụkwasị ibe ha obi, ebe ọ bụ na a na-ekwe nkwa ikpe ziri ezi nke njedebe ikpeazụ site na nkwekọrịta smart.
Anyị chọtara ngwọta dị mfe maka nsogbu ahụ. Ndị otu abụọ nwere ike ịgbanwe ozi bịanyere aka na ya, nke ọ bụla nwere ọnụọgụ abụọ - ego zuru oke nke otu ọ bụla kwụrụ. Nọmba abụọ a na-arụ ọrụ dị ka na omenala ekesa usoro ma tọọ "mere tupu" usoro na azụmahịa. Iji data a, nkwekọrịta ga-enwe ike dozie esemokwu ọ bụla nwere ike ime.
N'ezie, otu nọmba zuru ezu iji mejuputa echiche a, mana anyị hapụrụ ha abụọ n'ihi na otu a anyị nwere ike ime ka interface onye ọrụ dị mfe karị. Na mgbakwunye, anyị kpebiri itinye ego ịkwụ ụgwọ na ozi ọ bụla. Enweghị ya, ọ bụrụ na ozi ahụ efunahụ maka ihe ụfọdụ, mgbe ahụ, ọ bụ ezie na ego niile na ngụkọta ikpeazụ ga-abụ nke ziri ezi, onye ọrụ nwere ike ọ gaghị achọpụta ọnwụ ahụ.
Iji nwalee echiche anyị, anyị na-achọ ihe atụ nke iji usoro ịkwụ ụgwọ dị mfe na nkenke. N'ụzọ dị ịtụnanya, anyị hụrụ naanị abụọ:
- usoro yiri nke ahụ, naanị maka ọwa nke unidirectional.
- , nke na-akọwa otu echiche dị ka nke anyị, ma na-akọwaghị ọtụtụ nkọwa dị mkpa, dị ka nhazi izugbe na usoro nhazi esemokwu.
Ọ bịara doo anya na ọ bụ ihe ezi uche dị na ya ịkọwa usoro anyị n'ụzọ zuru ezu, na-elebara anya n'ụzọ pụrụ iche na nhazi ya. Mgbe ọtụtụ iterations gasịrị, nkọwapụta dị njikere, ma ugbu a ị nwekwara ike. .
Anyị mebere nkwekọrịta ahụ na FunC, anyị dekwara ọrụ ahịrị iwu maka ịmekọrịta nkwekọrịta anyị kpamkpam na Fift, dị ka ndị nhazi kwadoro. Anyị nwere ike ịhọrọ asụsụ ọ bụla maka CLI anyị, mana anyị nwere mmasị ịnwale Fit ịhụ ka ọ si arụ ọrụ na omume.
N'ikwu eziokwu, mgbe anyị na Fift rụchara ọrụ, anyị ahụghị ihe ọ bụla gbara ọkpụrụkpụ mere anyị ga-eji na-ahọrọ asụsụ a karịa asụsụ ndị a ma ama na ndị na-arụsi ọrụ ike na-eji ngwá ọrụ na ụlọ akwụkwọ ndị mepere emepe. Ịmepụta ihe n'asụsụ dabeere na nchịkọta adịghị mma, ebe ọ bụ na ị ga-edobe isi gị mgbe niile ihe dị na nchịkọta, na nchịkọta anaghị enyere aka na nke a.
Ya mere, n'echiche anyị, nanị ihe ziri ezi maka ịdị adị nke Fift bụ ọrụ ya dị ka asụsụ nnabata maka Fift Assembler. Mana ọ gaghị aka mma itinye onye na-ezukọta TVM n'asụsụ ụfọdụ dị adị, kama chepụta nke ọhụrụ maka naanị ebumnuche a?
TVM Haskell eDSL
Ugbu a ọ bụ oge ikwu maka nkwekọrịta smart nke abụọ anyị. Anyị kpebiri ịmepụta obere akpa mbinye aka, mana ide nkwekọrịta smart ọzọ na FunC ga-abụ ihe na-agwụ ike. Anyị chọrọ ịgbakwunye ekpomeekpo, nke ahụ bụkwa asụsụ mgbakọ nke anyị maka TVM.
Dị ka Fift Assembler, asụsụ ọhụrụ anyị agbakwunyere, mana anyị họọrọ Haskell dị ka onye ọbịa kama nke Fift, na-enye anyị ohere iji usoro ụdị ya dị elu mee ihe nke ọma. Mgbe ị na-arụ ọrụ na nkwekọrịta smart, ebe ọnụahịa nke ọbụna obere njehie nwere ike ịdị oke elu, ederede static, n'echiche anyị, bụ nnukwu uru.
Iji gosi ihe onye na-achịkọta TVM dị ka agbakwunyere na Haskell, anyị etinyere obere akpa ọkọlọtọ na ya. Nke a bụ ihe ole na ole ị ga-aṅa ntị na:
- Nkwekọrịta a nwere otu ọrụ, mana ị nwere ike iji ọtụtụ masịrị gị. Mgbe ị kọwapụtara ọrụ ọhụrụ n'asụsụ ndị ọbịa (ya bụ Haskell), eDSL anyị na-enye gị ohere ịhọrọ ma ịchọrọ ka ọ bụrụ usoro dị iche na TVM ma ọ bụ tinye ya n'ahịrị n'oge oku.
- Dị ka Haskell, ọrụ nwere ụdị a na-enyocha n'oge achịkọta. Na eDSL anyị, ụdị ntinye nke ọrụ bụ ụdị nchịkọta nke ọrụ ahụ na-atụ anya ya, na ụdị ihe ga-esi na ya pụta bụ ụdị nchịkọta nke a ga-emepụta mgbe okukuchara.
- Koodu ahụ nwere nkọwa
stacktype, na-akọwa ụdị nchịkọta a na-atụ anya na ebe oku. N'ime nkwekọrịta obere akpa mbụ ndị a bụ naanị nkwupụta, mana na eDSL anyị bụ n'ezie akụkụ nke koodu ahụ ma na-enyocha ya n'oge nchịkọta. Ha nwere ike ije ozi dị ka akwụkwọ ma ọ bụ nkwupụta na-enyere onye nrụpụta aka ịchọta nsogbu ahụ ma ọ bụrụ na koodu gbanwere na ụdị nchịkọta gbanwere. N'ezie, nkọwa ndị dị otú ahụ anaghị emetụta arụmọrụ oge ojiri, ebe ọ bụ na enweghị koodu TVM emepụtara maka ha. - Nke a ka bụ ihe atụ edere n'ime izu abụọ, ya mere a ka nwere ọtụtụ ọrụ a ga-arụ na ọrụ ahụ. Dịka ọmụmaatụ, oge niile nke klaasị ị na-ahụ na koodu dị n'okpuru kwesịrị ka ewepụta ya na-akpaghị aka.
Nke a bụ ihe ntinye nke obere akpa multisig dị na eDSL anyị:
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 @Word32Enwere ike ịchọta koodu isi mmalite nke eDSL anyị yana nkwekọrịta obere mbinye aka na Na ndị ọzọ banyere asụsụ arụnyere n'ime ya, onye ọrụ ibe anyị Georgy Agapov.
Mkpebi gbasara asọmpi na TON
Na mkpokọta, ọrụ anyị were awa 380 (gụnyere ịmara akwụkwọ, nzukọ na mmepe n'ezie). Ndị mmepe ise sonyere na asọmpi a: CTO, ndị isi otu, ndị ọkachamara n'elu ikpo okwu blockchain na ndị mmepe ngwanrọ Haskell.
Anyị chọtara ihe onwunwe iji sonye na asọmpi n'enweghị ihe isi ike, ebe ọ bụ na mmụọ nke hackathon, imekọ ihe ọnụ, na mkpa ọ dị ime ngwa ngwa n'ime akụkụ nke teknụzụ ọhụrụ na-akpali akpali mgbe niile. Ọtụtụ abalị enweghị ụra iji nweta nsonaazụ kacha mma na ọnọdụ enweghị oke na-akwụ ụgwọ site na ahụmịhe bara uru na ncheta mara mma. Tụkwasị na nke ahụ, ịrụ ọrụ na ọrụ ndị dị otú ahụ na-abụkarị ule dị mma nke usoro ụlọ ọrụ ahụ, ebe ọ bụ na ọ na-esiri ike ị nweta nsonaazụ dị mma n'ezie na-enweghị mmekọrịta dị n'ime ụlọ na-arụ ọrụ nke ọma.
Ekwupụta egwu: oke ọrụ ndị otu TON na-arụ masịrị anyị. Ha jisiri ike wuo usoro mgbagwoju anya, mara mma, na nke kachasị mkpa, usoro ọrụ. TON egosila na ya bụ ikpo okwu nwere ikike dị ukwuu. Otú ọ dị, ka usoro gburugburu ebe obibi a nwee ike ịmalite, ọ dị mkpa ka a rụọ ọtụtụ ihe, ma n'ihe banyere iji ya na ọrụ blockchain na imeziwanye ngwá ọrụ mmepe. Obi dị anyị ụtọ ugbu a ịbụ akụkụ nke usoro a.
Ọ bụrụ na ị gụchara akụkọ a, ị ka nwere ajụjụ ọ bụla ma ọ bụ nwee echiche maka otu esi eji TON dozie nsogbu gị, — anyị ga-enwe obi ụtọ ịkọrọ anyị ahụmahụ.
isi: www.habr.com
