Mwina munamvapo Telegalamu imeneyo . Koma mwina mudaphonya nkhani zomwe sizinali kale Telegalamu pakukhazikitsa mgwirizano umodzi kapena zingapo zanzeru papulatifomu.
Gulu la Serokell, lodziwa zambiri pakupanga ma projekiti akuluakulu a blockchain, silinathe kuyimilira. Tinapatsa antchito asanu ku mpikisanowo, ndipo masabata awiri pambuyo pake adatenga malo oyamba pansi pa (mu)dzina lodziwika bwino la Sexy Chameleon. M’nkhaniyi ndifotokoza mmene anachitira. Tikukhulupirira kuti mphindi khumi zikubwerazi mudzawerenga nkhani yosangalatsa, ndipo koposa zonse mupezamo kanthu kena kothandiza komwe mungagwiritse ntchito pantchito yanu.
Koma tiyeni tiyambe ndi nkhani yaing'ono.
Mpikisano ndi mikhalidwe yake
Chifukwa chake, ntchito yayikulu ya omwe adatenga nawo gawo inali kukhazikitsa imodzi kapena zingapo mwamapangano anzeru omwe akufunsidwa, komanso kupanga malingaliro opititsa patsogolo chilengedwe cha TON. Mpikisano udayamba pa Seputembara 24 mpaka Okutobala 15, ndipo zotsatira zake zidalengezedwa pa Novembara 15. Kwa nthawi yayitali, poganizira kuti panthawiyi Telegalamu idakwanitsa kugwira ndikulengeza zotsatira za mipikisano pakupanga ndi kukonza mapulogalamu mu C++ poyesa ndikuwunika ma foni a VoIP mu Telegraph.
Tinasankha makontrakitala awiri anzeru kuchokera pamndandanda womwe okonza amakonza. Kwa mmodzi wa iwo, tidagwiritsa ntchito zida zogawidwa ndi TON, ndipo yachiwiri idakhazikitsidwa muchilankhulo chatsopano chopangidwa ndi mainjiniya athu makamaka ku TON ndikumangidwira ku Haskell.
Kusankha chinenero chogwiritsira ntchito mapulogalamu sikunangochitika mwangozi. Mu wathu Nthawi zambiri timalankhula za chifukwa chomwe timaganiza kuti zovuta za zilankhulo zogwira ntchito ndizokokomeza kwambiri komanso chifukwa chake timawakonda kusiyana ndi omwe amatsutsa. Mwa njira, ilinso .
Nanga n’cifukwa ciani tinaganiza zocita nawo?
Mwachidule, chifukwa ukadaulo wathu ndi ntchito zosakhazikika komanso zovuta zomwe zimafuna luso lapadera ndipo nthawi zambiri zimakhala zasayansi kwa gulu la IT. Timathandizira kwambiri chitukuko chotseguka ndipo tikuchita nawo kutchuka kwake, komanso timagwirizana ndi mayunivesite otsogola aku Russia pankhani ya sayansi yamakompyuta ndi masamu.
Ntchito zosangalatsa za mpikisano komanso kutenga nawo gawo mu polojekiti yathu yokondedwa ya Telegalamu mwazokha zinali zolimbikitsa kwambiri, koma thumba la mphotho lidakhala chilimbikitso chowonjezera. 🙂
TON blockchain kafukufuku
Timayang'anitsitsa zomwe zikuchitika mu blockchain, luntha lochita kupanga komanso kuphunzira pamakina ndikuyesera kuti tisaphonye kumasulidwa kumodzi m'gawo lililonse lomwe timagwira ntchito. Chifukwa chake, pomwe mpikisano udayamba, gulu lathu linali litadziwa kale malingaliro ochokera . Komabe, tisanayambe kugwira ntchito ndi TON, sitinafufuze zolemba zamakono ndi ndondomeko yeniyeni ya nsanja, kotero sitepe yoyamba inali yoonekeratu - kufufuza mozama za zolemba zovomerezeka pa. ndi .
Pamene mpikisano udayamba, code inali itasindikizidwa kale, kotero kuti tisunge nthawi, tinaganiza zoyang'ana chitsogozo kapena chidule cholembedwa ndi ndi ogwiritsa. Tsoka ilo, izi sizinapereke zotsatira - kupatula malangizo osonkhanitsa nsanja pa Ubuntu, sitinapeze zida zina.
Zolemba zokhazo zidafufuzidwa bwino, koma zinali zovuta kuziwerenga m'malo ena. Nthawi zambiri tinkayenera kubwereranso ku mfundo zina ndikusintha kuchoka pamafotokozedwe apamwamba amalingaliro ang'onoang'ono kupita kuzinthu zotsika kwambiri.
Zingakhale zosavuta ngati ndondomekoyi sinaphatikizepo tsatanetsatane wa kukhazikitsidwa konse. Zambiri zokhudzana ndi momwe makina owonera amayimira kuchuluka kwake zitha kusokoneza opanga ma contract anzeru papulatifomu ya TON kuposa kuwathandiza.
Nix: kukhazikitsa polojekiti pamodzi
Ku Serokell ndife mafani akulu . Timasonkhanitsa mapulojekiti athu nawo ndikuwagwiritsa ntchito , ndikuyika pa maseva athu onse . Chifukwa cha izi, zomanga zathu zonse zimatha kubwerezedwanso ndipo zimagwira ntchito pamakina aliwonse omwe Nix angayikidwe.
Kenako tinayamba kupanga . Ndi chithandizo chake, kupanga TON ndikosavuta momwe mungathere:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeDziwani kuti simuyenera kukhazikitsa zodalira zilizonse. Nix ikuchitirani chilichonse mwamatsenga, kaya mukugwiritsa ntchito NixOS, Ubuntu, kapena macOS.
Kupanga kwa TON
Khodi yanzeru ya contract mu TON Network imayendera pa TON Virtual Machine (TVM). TVM ndi yovuta kwambiri kuposa makina ena ambiri, ndipo imakhala ndi ntchito zosangalatsa kwambiri, mwachitsanzo, imatha kugwira nawo ntchito kupitiriza и maulalo ku data.
Komanso, anyamata ochokera ku TON adapanga zilankhulo zitatu zatsopano:
Chasanu ndi chilankhulo chapadziko lonse lapansi chopanga mapulogalamu chomwe chimafanana . Kuthekera kwake kwakukulu ndikutha kulumikizana ndi TVM.
FunC ndi anzeru mgwirizano mapulogalamu chinenero chofanana ndi ndipo amapangidwa m'chinenero china - Fift Assembler.
Wachisanu Assembler - Laibulale yachisanu yopangira ma code a binary a TVM. Fifth Assembler alibe compiler. Izi .
Mpikisano wathu umagwira ntchito
Pomaliza, ndi nthawi yoti tiwone zotsatira za khama lathu.
Njira yolipirira yosasinthika
Njira yolipira ndi mgwirizano wanzeru womwe umalola ogwiritsa ntchito awiri kutumiza zolipira kunja kwa blockchain. Chotsatira chake, simukupulumutsa ndalama zokha (palibe ntchito), komanso nthawi (simuyenera kuyembekezera kuti chipika chotsatira chikonzedwe). Malipiro amatha kukhala ochepa monga momwe amafunira komanso pafupipafupi momwe angafunikire. Pankhaniyi, maphwando sayenera kukhulupirirana wina ndi mzake, popeza chilungamo cha kuthetsa komaliza kumatsimikiziridwa ndi mgwirizano wanzeru.
Tinapeza njira yosavuta yothetsera vutoli. Maphwando aŵiri atha kusinthanitsa mauthenga osainidwa, lirilonse liri ndi manambala aŵiri—ndalama zonse zoperekedwa ndi gulu lirilonse. Manambala awiriwa amagwira ntchito ngati m'machitidwe ogawidwa achikhalidwe ndikukhazikitsa dongosolo la "zidachitika kale" pazochita. Pogwiritsa ntchito deta iyi, mgwirizanowu udzatha kuthetsa mikangano iliyonse yomwe ingatheke.
M'malo mwake, nambala imodzi ndiyokwanira kukhazikitsa lingaliro ili, koma tidasiya zonse ziwiri chifukwa mwanjira iyi titha kupanga mawonekedwe osavuta ogwiritsa ntchito. Kuphatikiza apo, tinaganiza zophatikizira ndalama zolipirira mu uthenga uliwonse. Popanda izo, ngati uthengawo watayika pazifukwa zina, ndiye, ngakhale kuti ndalama zonse ndi kuwerengera komaliza zidzakhala zolondola, wogwiritsa ntchitoyo sangazindikire kutayika.
Kuti tiyese lingaliro lathu, tidayang'ana zitsanzo zogwiritsa ntchito njira yosavuta komanso yachidule yolipirira. Chodabwitsa, tapeza ziwiri zokha:
- njira yofananira, pokhapokha ngati njira ya unidirectional.
- , yomwe imalongosola lingaliro lomwelo ndi lathu, koma popanda kufotokoza zambiri zofunika, monga kulondola kwachizoloŵezi ndi njira zothetsera mikangano.
Zinadziwika kuti ndizomveka kufotokoza ndondomeko yathu mwatsatanetsatane, kumvetsera kwambiri kulondola kwake. Pambuyo kubwereza kangapo, ndondomekoyi inali yokonzeka, ndipo tsopano mukhoza. .
Tidakhazikitsa mgwirizano mu FunC, ndipo tidalemba njira yolumikizirana ndi mgwirizano wathu kwathunthu mu Fift, monga momwe okonzera adalimbikitsa. Tikadasankha chilankhulo china chilichonse cha CLI yathu, koma tinali ndi chidwi choyesa Fit kuti tiwone momwe imagwirira ntchito.
Kunena zowona, titagwira ntchito ndi Fift, sitinawone zifukwa zomveka zokondera chilankhulochi kuposa zilankhulo zodziwika komanso zogwiritsidwa ntchito mwachangu ndi zida ndi malaibulale opangidwa. Kukonzekera m'chinenero chokhazikitsidwa ndi stack sikusangalatsa, chifukwa muyenera kusunga m'mutu mwanu zomwe zili pa stack, ndipo wolembayo sakuthandizani pa izi.
Chifukwa chake, m'malingaliro athu, kulungamitsidwa kokha kwa kukhalapo kwa Fift ndi gawo lake ngati chilankhulo cholandirira Fift Assembler. Koma sizingakhale bwino kuyika chophatikizira cha TVM m'zilankhulo zomwe zilipo kale, m'malo mopanga china chatsopano pazolinga izi zokha?
TVM Haskell eDSL
Tsopano ndi nthawi yoti tikambirane za mgwirizano wathu wachiwiri wanzeru. Tinaganiza zopanga chikwama cha siginecha zingapo, koma kulemba mgwirizano wina wanzeru mu FunC kungakhale kotopetsa kwambiri. Tinkafuna kuwonjezera kukoma, ndipo chimenecho chinali chilankhulo chathu chapa TVM.
Monga Fift Assembler, chilankhulo chathu chatsopano chimaphatikizidwa, koma tidasankha Haskell kukhala wolandila m'malo mwa Fift, kutilola kuti tigwiritse ntchito bwino makina ake apamwamba. Pogwira ntchito ndi makontrakitala anzeru, pomwe mtengo wa zolakwika zazing'ono ukhoza kukhala wokwera kwambiri, kuyimira static, m'malingaliro athu, ndi mwayi waukulu.
Kuti tiwonetse zomwe TVM assembler imawoneka ngati yophatikizidwa ku Haskell, tidayika chikwama chokhazikika pamenepo. Nazi zinthu zingapo zofunika kuziganizira:
- Mgwirizanowu umakhala ndi ntchito imodzi, koma mutha kugwiritsa ntchito momwe mukufunira. Mukatanthauzira ntchito yatsopano m'chinenero cha alendo (ie Haskell), eDSL yathu imakulolani kuti musankhe ngati mukufuna kuti ikhale chizolowezi chosiyana mu TVM kapena kungoyimba pamzere poyimba.
- Monga Haskell, ntchito zili ndi mitundu yomwe imawunikidwa panthawi yophatikiza. Mu eDSL yathu, mtundu wolowetsa wa ntchito ndi mtundu wa stack yomwe ntchitoyo ikuyembekezera, ndipo mtundu wotsatira ndi mtundu wa stack yomwe idzapangidwe pambuyo pa kuyitana.
- Code ili ndi zofotokozera
stacktype, kufotokoza mtundu wa stack womwe ukuyembekezeka pa malo oyimbira foni. Mu mgwirizano woyambirira wa chikwama awa anali ndemanga chabe, koma mu eDSL yathu kwenikweni ndi gawo la code ndipo amafufuzidwa panthawi yosonkhanitsa. Atha kukhala ngati zolemba kapena mawu omwe amathandiza wopanga mapulogalamu kuti apeze vuto ngati kachidindo ikasintha ndipo mtundu wa stack ukusintha. Zoonadi, zofotokozera zotere sizimakhudza nthawi yothamanga, chifukwa palibe TVM code yomwe imapangidwira. - Ichi chikadali chitsanzo cholembedwa m'milungu iwiri, kotero pali ntchito yambiri yoti ichitidwe pa ntchitoyi. Mwachitsanzo, magawo onse a makalasi omwe mukuwona mu code pansipa ayenera kupangidwa zokha.
Izi ndi zomwe kukhazikitsidwa kwa chikwama cha multisig kumawoneka pa eDSL yathu:
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 @Word32Khodi yathunthu ya eDSL yathu ndi mgwirizano wa chikwama chamitundu yambiri imapezeka pa Ndipo zambiri za zilankhulo zomangidwa, mnzathu Georgy Agapov.
Zotsatira za mpikisano ndi TON
Pazonse, ntchito yathu inatenga maola a 380 (kuphatikizapo kudziŵa zolemba, misonkhano ndi chitukuko chenicheni). Madivelopa asanu adatenga nawo gawo pantchito yampikisano: CTO, mtsogoleri wamagulu, akatswiri papulatifomu ya blockchain ndi opanga mapulogalamu a Haskell.
Tinapeza zofunikira kuti titenge nawo mbali pampikisanowu popanda zovuta, chifukwa mzimu wa hackathon, mgwirizano wapamtima, komanso kufunikira kodzilowetsa muzinthu zamakono zatsopano zimakhala zosangalatsa nthawi zonse. Kusagona kochuluka usiku kuti tipeze zotsatira zabwino chifukwa chokhala ndi zinthu zochepa kumalipidwa ndi zochitika zamtengo wapatali ndi kukumbukira bwino. Kuphatikiza apo, kugwira ntchito zotere nthawi zonse kumakhala kuyesa kwabwino kwamakampani, chifukwa ndizovuta kwambiri kupeza zotsatira zabwino popanda kuyanjana kwamkati mkati.
Nyimbo pambali: tidachita chidwi ndi kuchuluka kwa ntchito yomwe gulu la TON lidachita. Iwo adatha kupanga zovuta, zokongola, komanso zofunika kwambiri, zogwirira ntchito. TON yatsimikizira kuti ndi nsanja yokhala ndi kuthekera kwakukulu. Komabe, kuti chilengedwechi chikule, pali zambiri zomwe ziyenera kuchitidwa, pogwiritsira ntchito ntchito za blockchain komanso kukonza zida zachitukuko. Ndife onyadira kuti tsopano tiri gawo la ndondomekoyi.
Ngati mutawerenga nkhaniyi mukadali ndi mafunso kapena muli ndi malingaliro amomwe mungagwiritsire ntchito TON kuthetsa mavuto anu, - tidzakhala okondwa kugawana zomwe takumana nazo.
Source: www.habr.com
