Шумо эҳтимол ин Telegram-ро шунидаед
Дастаи Серокелл, ки таҷрибаи ғанӣ дар таҳияи лоиҳаҳои бузурги blockchain дорад, натавонист дар канор биистад. Мо панҷ кормандро ба озмун вакил кардем ва пас аз ду ҳафта онҳо дар он бо лақаби тасодуфии Sexy Chameleon ҷои аввалро гирифтанд. Дар ин мақола ман дар бораи он ки чӣ тавр онҳо ин корро карданд. Умедворем, ки дар даҳ дақиқаи оянда шумо ақаллан як ҳикояи ҷолибро хонед ва ҳадди аксар дар он чизе муфид хоҳед ёфт, ки шумо метавонед дар кори худ истифода баред.
Аммо биёед бо контексти каме оғоз кунем.
Рақобат ва шартҳои он
Ҳамин тариқ, вазифаҳои асосии иштирокчиён татбиқи як ё якчанд шартномаҳои интеллектуалии пешниҳодшуда, инчунин пешниҳоди пешниҳодҳо оид ба беҳтар намудани экосистемаи TON буданд. Озмун аз 24-уми сентябр то 15-уми октябр давом кард ва натиҷааш танҳо 15-уми ноябр эълон шуд. Муддати тӯлонӣ бо назардошти он, ки дар ин муддат Telegram тавонист озмунҳо оид ба тарҳрезӣ ва таҳияи замимаҳо дар C++ барои санҷиш ва арзёбии сифати зангҳои VoIP дар Telegram баргузор ва эълон кунад.
Мо аз рӯйхате, ки ташкилкунандагон пешниҳод кардаанд, ду шартномаи оқилонаро интихоб кардем. Барои яке аз онҳо, мо асбобҳоеро истифода бурдем, ки бо TON тақсим карда шудаанд ва дуюмӣ бо забони наве, ки муҳандисони мо махсусан барои TON таҳия кардаанд ва дар Ҳаскелл сохта шудаанд, амалӣ карда шуданд.
Интихоби забони функсионалии барномасозӣ тасодуфӣ нест. Дар мо
Чаро мо ҳатто тасмим гирифтем, ки иштирок кунем?
Хулоса, зеро ихтисоси мо лоиҳаҳои ғайристандартӣ ва мураккабест, ки малакаҳои махсусро талаб мекунанд ва аксар вақт барои ҷомеаи IT арзиши илмӣ доранд. Мо рушди сарчашмаҳои кушодро сахт дастгирӣ мекунем ва ба оммавӣ кардани он машғулем ва инчунин бо донишгоҳҳои пешбари Русия дар соҳаи илмҳои компютерӣ ва математика ҳамкорӣ мекунем.
Супоришҳои ҷолиби озмун ва ҷалб дар лоиҳаи маҳбуби мо Telegram худ як ангезаи олӣ буданд, аммо фонди ҷоиза як ҳавасмандии иловагӣ гардид. 🙂
Тадқиқоти blockchain TON
Мо пешрафтҳои навро дар blockchain, зеҳни сунъӣ ва омӯзиши мошинсозӣ бодиққат назорат мекунем ва мекӯшем, ки як нашри муҳимро дар ҳар як соҳае, ки мо кор мекунем, аз даст надиҳем. Аз ин ру, то огози мусобика коллективи мо аллакай бо идеяхои аз
То оғози озмун, код аллакай нашр шуда буд, аз ин рӯ, барои сарфаи вақт мо тасмим гирифтем, ки роҳнамо ё хулосаеро, ки навиштааст, ҷустуҷӯ кунем. аз ҷониби истифодабарандагон. Мутаассифона, ин ягон натиҷа надод - ба ғайр аз дастурҳо оид ба васл кардани платформа дар Ubuntu, мо ягон маводи дигар пайдо накардем.
Худи ҳуҷҷатҳо хуб омӯхта шуда буд, аммо дар баъзе минтақаҳо хондан душвор буд. Аксар вақт ба мо лозим омад, ки ба нуктаҳои муайян баргардем ва аз тавсифи сатҳи баланди идеяҳои абстрактӣ ба ҷузъиёти татбиқи сатҳи паст гузарем.
Агар дар спецификация умуман тавсифи муфассали амалй нагардида бошад, осонтар мебуд. Маълумот дар бораи он, ки мошини маҷозӣ стеки худро чӣ гуна муаррифӣ мекунад, эҳтимол дорад, ки таҳиягаронро барои эҷоди шартномаҳои интеллектуалӣ барои платформаи TON парешон кунад, на ба онҳо кӯмак кунад.
Nix: якҷоя кардани лоиҳа
Дар Серокелл мо мухлисони бузург ҳастем
Ҳамин тавр, мо аз эҷод кардан оғоз кардем
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && make
Дар хотир доред, ки ба шумо лозим нест, ки ягон вобастагӣ насб кунед. Nix ба таври ҷодугарӣ ҳама чизро барои шумо иҷро мекунад, новобаста аз он ки шумо NixOS, Ubuntu ё macOS-ро истифода мебаред.
Барномасозӣ барои TON
Рамзи шартномаи интеллектуалӣ дар Шабакаи TON дар мошини виртуалии TON (TVM) кор мекунад. TVM нисбат ба аксари дигар мошинҳои виртуалӣ мураккабтар аст ва дорои функсияҳои хеле ҷолиб аст, масалан, он метавонад бо он кор кунад идома и пайвандҳо ба маълумот.
Ғайр аз он, бачаҳо аз TON се забони нави барномасозиро эҷод карданд:
Панҷ як забони универсалии барномасозии стек мебошад, ки ба он монанд аст
FunC як забони барномасозии шартномаи интеллектуалӣ аст, ки ба он монанд аст
Ассамблеяи панҷум - Китобхонаи панҷоҳ барои тавлиди коди иҷрошавандаи бинарӣ барои TVM. Панҷум Ассемблер компилятор надорад. Ин
Мусобикаи мо кор мекунад
Нихоят, вакти он расидааст, ки ба натичахои чидду чахди худ назар кунем.
Канали пардохти асинхронӣ
Канали пардохт як шартномаи оқилонаест, ки ба ду корбар имкон медиҳад, ки берун аз blockchain пардохт фиристанд. Дар натиҷа, шумо на танҳо пулро сарфа мекунед (комиссия вуҷуд надорад), балки вақтро низ сарфа мекунед (ба шумо лозим нест, ки коркарди блоки навбатиро интизор шавед). Пардохтҳо метавонанд ба қадри дилхоҳ ва ба қадри зарурӣ кам бошанд. Дар ин ҳолат, тарафҳо набояд ба ҳамдигар бовар кунанд, зеро адолати ҳисоббаробаркунии ниҳоӣ бо шартномаи оқилона кафолат дода мешавад.
Мо роҳи ҳалли хеле соддаи мушкилотро ёфтем. Ду тараф метавонанд паёмҳои имзошударо мубодила кунанд, ки ҳар яки онҳо ду рақамро дар бар мегиранд - маблағи пурраи ҳар як тараф пардохтшударо дар бар мегирад. Ин ду рақам чунин кор мекунанд
Дарвоқеъ, як рақам барои амалӣ кардани ин идея кифоя аст, аммо мо ҳардуро тарк кардем, зеро бо ин роҳ мо метавонем интерфейси корбарро қулайтар созем. Илова бар ин, мо тасмим гирифтем, ки маблағи пардохтро дар ҳар як паём дохил кунем. Бе он, агар паём бо ягон сабаб гум шавад, пас, гарчанде ки ҳамаи маблағҳо ва ҳисобҳои ниҳоӣ дуруст хоҳанд буд, корбар метавонад талафотро пайхас накунад.
Барои санҷидани идеяи худ, мо намунаҳои истифодаи чунин протоколи канали пардохти оддӣ ва мухтасарро ҷустуҷӯ кардем. Тааҷҷубовар аст, ки мо танҳо ду ёфтем:
Шарҳи муносибати шабеҳ, танҳо барои як канали яктарафа.Дарсӣ , ки як идеяи моро тасвир мекунад, вале бидуни тавзеҳ додани бисёр ҷузъиёти муҳим, ба монанди дурустии умумӣ ва тартиби ҳалли низоъҳо.
Маълум шуд, ки ба дурустии он диккати махсус дода, протоколи моро муфассал тавсиф кардан ба максад мувофик аст. Пас аз чанд такрор, мушаххасот омода шуд ва акнун шумо низ метавонед.
Мо шартномаро дар FunC амалӣ кардем ва мо утилитаи сатри фармонро барои ҳамкорӣ бо шартномаи худ комилан дар Fift навиштем, ки ташкилкунандагон тавсия кардаанд. Мо метавонистем ягон забони дигарро барои CLI-и худ интихоб кунем, аммо мо манфиатдор будем, ки Fit-ро санҷем, то бубинем, ки он дар амал чӣ гуна иҷро шудааст.
Рости гап, пас аз кор бо Fift мо ягон сабабҳои асоснокро надидем, ки ин забонро ба забонҳои маъмул ва фаъолона истифодашаванда бо абзорҳо ва китобхонаҳои таҳияшуда бартарӣ диҳем. Барномасозӣ бо забони стекӣ хеле ногувор аст, зеро шумо бояд ҳамеша дар сари худ он чизеро, ки дар стек аст, нигоҳ доред ва компилятор дар ин кор кӯмак намекунад.
Аз ин рӯ, ба назари мо, ягона далели мавҷудияти Fift нақши он ҳамчун забони мизбон барои Fift Assembler мебошад. Аммо оё беҳтар нест, ки ассемблери TVM ба ягон забони мавҷуда ворид карда шавад, на ин ки барои ин ҳадафи аслӣ як забони навро ихтироъ кунад?
TVM Haskell eDSL
Ҳоло вақти он расидааст, ки дар бораи шартномаи дуюми интеллектуалии мо сӯҳбат кунем. Мо тасмим гирифтем, ки ҳамёни бисёр имзо таҳия кунем, аммо навиштани як шартномаи интеллектуалии дигар дар FunC хеле дилгиркунанда хоҳад буд. Мо мехостем каме мазза илова кунем ва ин забони маҷлиси худи мо барои TVM буд.
Мисли Fift Assembler, забони нави мо дарунсохт аст, аммо мо ба ҷои Fift Haskell-ро ҳамчун мизбон интихоб кардем ва ба мо имкон дод, ки аз системаи пешрафтаи навъи он пурра истифода барем. Ҳангоми кор бо шартномаҳои интеллектуалӣ, ки арзиши ҳатто хатои хурд метавонад хеле баланд бошад, чопкунии статикӣ, ба андешаи мо, бартарии калон аст.
Барои нишон додани он, ки ассемблери TVM дар Ҳаскелл чӣ гуна аст, мо дар он ҳамёни стандартиро татбиқ кардем. Инҳоянд чанд чизҳое, ки бояд ба онҳо диққат диҳем:
- Ин шартнома аз як функсия иборат аст, аммо шумо метавонед шумораи зиёди онро истифода баред. Вақте ки шумо функсияи навро дар забони мизбон (яъне Ҳаскелл) муайян мекунед, eDSL-и мо ба шумо имкон медиҳад, ки интихоб кунед, ки оё шумо мехоҳед, ки он реҷаи алоҳида дар TVM шавад ё танҳо дар нуқтаи занг ворид карда шавад.
- Мисли Ҳаскелл, функсияҳо намудҳое доранд, ки дар вақти тартибдиҳӣ тафтиш карда мешаванд. Дар eDSL-и мо, навъи вуруди функсия навъи стек мебошад, ки функсия интизор аст ва навъи натиҷа навъи стек аст, ки пас аз занг тавлид мешавад.
- Рамз дорои эзоҳҳо мебошад
stacktype
, тавсифи навъи стек интизорӣ дар нуқтаи занг. Дар шартномаи аслии ҳамён инҳо танҳо шарҳҳо буданд, аммо дар eDSL-и мо онҳо воқеан як қисми код мебошанд ва дар вақти тартибдиҳӣ тафтиш карда мешаванд. Онҳо метавонанд ҳамчун ҳуҷҷат ё изҳорот хидмат кунанд, ки ба таҳиякунанда дар ёфтани мушкилот дар сурати тағир додани код ва тағир додани навъи стек кӯмак мекунанд. Албатта, чунин эзоҳҳо ба иҷрои вақти корӣ таъсир намерасонанд, зеро барои онҳо ягон рамзи TVM тавлид намешавад. - Ин ҳанӯз як прототипест, ки дар ду ҳафта навишта шудааст, аз ин рӯ дар лоиҳа кори зиёде бояд анҷом дода шавад. Масалан, ҳама намунаҳои синфҳое, ки шумо дар коди зер мебинед, бояд ба таври худкор тавлид карда шаванд.
Татбиқи ҳамёни multisig дар 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 @Word32
Рамзи пурраи сарчашмаи eDSL ва шартномаи ҳамёни бисёримзои моро дар ин ҷо пайдо кардан мумкин аст
Хулоса дар бораи мусобика ва ТОН
Дар маҷмӯъ, кори мо 380 соат тӯл кашид (бо назардошти шиносоӣ бо ҳуҷҷатҳо, вохӯриҳо ва таҳияи воқеӣ). Дар лоиҳаи озмун панҷ таҳиягар иштирок карданд: CTO, роҳбари даста, мутахассисони платформаи blockchain ва таҳиягарони нармафзори Haskell.
Мо захираҳоро барои иштирок дар озмун пайдо кардем, зеро рӯҳияи ҳакатон, кори дастаҷамъона ва зарурати зуд ба ҷанбаҳои технологияҳои нав ғарқ шудан ҳамеша ҳаяҷоновар аст. Якчанд шабҳои бехоби барои ноил шудан ба натиҷаҳои ҳадди аксар дар шароити захираҳои маҳдуд бо таҷрибаи бебаҳо ва хотираҳои олӣ ҷуброн карда мешаванд. Илова бар ин, кор дар чунин вазифаҳо ҳамеша як санҷиши хуби равандҳои ширкат аст, зеро бе ҳамкории хуби дохилӣ ноил шудан ба натиҷаҳои воқеан сазовор хеле душвор аст.
Матни суруд як сӯ: мо аз ҳаҷми коре, ки дастаи ТОН ба анҷом расонидааст, ба ваҷд омад. Ба онхо муяссар гардид, ки системам мураккаб, зебо ва аз хама мухимаш кор-куниро барпо кунанд. ТОН худро платформаи дорой иктидори калон нишон дод. Аммо, барои рушди ин экосистема, ҳам аз ҷиҳати истифодаи он дар лоиҳаҳои blockchain ва ҳам дар робита ба такмили абзорҳои рушд корҳои зиёдеро анҷом додан лозим аст. Мо ифтихор дорем, ки ҳоло як қисми ин раванд ҳастем.
Агар пас аз хондани ин мақола шумо то ҳол ягон савол дошта бошед ё дар бораи чӣ гуна истифода бурдани ТОН барои ҳалли мушкилоти худ фикре дошта бошед,
Манбаъ: will.com