ุชู†ููŠุฐ ุงู„ุฑู…ุฒ ุงู„ู…ุฎุตุต ุนู„ู‰ GO

ู‡ุฐุง ููŠ ุงู„ูˆุงู‚ุน ูƒู„ ุดูŠุก ุนู† ุงู„ุนู‚ูˆุฏ ุงู„ุฐูƒูŠุฉ.


ูˆู„ูƒู† ุฅุฐุง ูƒู†ุช ู„ุง ุชุชุฎูŠู„ ุชู…ุงู…ู‹ุง ู…ุง ู‡ูˆ ุงู„ุนู‚ุฏ ุงู„ุฐูƒูŠ ุŒ ูˆุจุตูุฉ ุนุงู…ุฉ ุจุนูŠุฏุฉ ุนู† ุงู„ุชุดููŠุฑ ุŒ ูู…ุง ู‡ูˆ ุงู„ุฅุฌุฑุงุก ุงู„ู…ุฎุฒู† ููŠ ู‚ุงุนุฏุฉ ุงู„ุจูŠุงู†ุงุช ุŒ ูŠู…ูƒู†ูƒ ุฃู† ุชุชุฎูŠู„ ุจุงู„ูƒุงู…ู„. ูŠู‚ูˆู… ุงู„ู…ุณุชุฎุฏู… ุจุฅู†ุดุงุก ุฃุฌุฒุงุก ู…ู† ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุงู„ุชูŠ ุชุนู…ู„ ุจุนุฏ ุฐู„ูƒ ุนู„ู‰ ุฎุงุฏู…ู†ุง. ู…ู† ุงู„ุณู‡ู„ ุนู„ู‰ ุงู„ู…ุณุชุฎุฏู… ูƒุชุงุจุชู‡ุง ูˆู†ุดุฑู‡ุง ุŒ ูˆู…ู† ุงู„ุขู…ู† ู„ู†ุง ุชู†ููŠุฐู‡ุง.

ู„ุณูˆุก ุงู„ุญุธ ุŒ ู„ู… ู†ู‚ู… ุจุชุทูˆูŠุฑ ุงู„ุฃู…ุงู† ุญุชู‰ ุงู„ุขู† ุŒ ู„ุฐุง ู„ู† ุฃุตูู‡ ุงู„ุขู† ุŒ ูˆู„ูƒู† ุณุฃุนุทูŠ ุจุนุถ ุงู„ุชู„ู…ูŠุญุงุช.

ู†ูƒุชุจ ุฃูŠุถู‹ุง ุนู„ู‰ Go ุŒ ูˆูŠูุฑุถ ูˆู‚ุช ุชุดุบูŠู„ู‡ ุจุนุถ ุงู„ู‚ูŠูˆุฏ ุงู„ู…ุญุฏุฏุฉ ู„ู„ุบุงูŠุฉ ุŒ ูˆุฃู‡ู…ู‡ุง ุŒ ุจุดูƒู„ ุนุงู… ุŒ ู„ุง ูŠู…ูƒู†ู†ุง ุงู„ุงุฑุชุจุงุท ุจู…ุดุฑูˆุน ุขุฎุฑ ู…ูƒุชูˆุจ ุบูŠุฑ ุฃุซู†ุงุก ุงู„ุชู†ู‚ู„ ุŒ ุณูŠุคุฏูŠ ู‡ุฐุง ุฅู„ู‰ ุฅูŠู‚ุงู ูˆู‚ุช ุงู„ุชุดุบูŠู„ ุงู„ุฎุงุต ุจู†ุง ููŠ ูƒู„ ู…ุฑุฉ ู†ู†ูุฐ ููŠู‡ุง ูƒูˆุฏ ุทุฑู ุซุงู„ุซ. ุจุดูƒู„ ุนุงู… ุŒ ู„ุฏูŠู†ุง ุฎูŠุงุฑ ุงุณุชุฎุฏุงู… ู†ูˆุน ู…ู† ุงู„ู…ุชุฑุฌู… ุŒ ุญูŠุซ ูˆุฌุฏู†ุง ู„ูˆุง ุนุงู‚ู„ ุชู…ุงู…ู‹ุง ูˆ WASM ุนุงู‚ู„ ุชู…ุงู…ู‹ุง ุŒ ูˆู„ูƒู† ุจุทุฑูŠู‚ุฉ ู…ุง ู„ุง ุฃุฑูŠุฏ ุฅุถุงูุฉ ุนู…ู„ุงุก ุฅู„ู‰ ู„ูˆุง ุŒ ูˆู„ูƒู† ู…ุน WASM ุงู„ุขู† ู‡ู†ุงูƒ ู…ุดุงูƒู„ ุฃูƒุซุฑ ู…ู† ุงู„ููˆุงุฆุฏ ุŒ ุฅู†ู‡ุง ููŠ ุญุงู„ุฉ ู…ุณูˆุฏุฉ ุŒ ุงู„ุฐูŠ ูŠุชู… ุชุญุฏูŠุซู‡ ูƒู„ ุดู‡ุฑ ุŒ ู„ุฐู„ูƒ ุณู†ู†ุชุธุฑ ุญุชู‰ ุชุณุชู‚ุฑ ุงู„ู…ูˆุงุตูุงุช. ู†ุณุชุฎุฏู…ู‡ ูƒู…ุญุฑูƒ ุซุงู†.

ู†ุชูŠุฌุฉ ู„ู…ุนุงุฑูƒ ุทูˆูŠู„ุฉ ู…ุน ุถู…ูŠุฑู‡ ุŒ ุชู‚ุฑุฑ ูƒุชุงุจุฉ ุนู‚ูˆุฏ ุฐูƒูŠุฉ ุนู„ู‰ GO. ุงู„ุญู‚ูŠู‚ุฉ ู‡ูŠ ุฃู†ู‡ ุฅุฐุง ู‚ู…ุช ุจุจู†ุงุก ุจู†ูŠุฉ ุชู†ููŠุฐ ูƒูˆุฏ GO ุงู„ู…ุชุฑุฌู…ุฉ ุŒ ูุณูŠุชุนูŠู† ุนู„ูŠูƒ ู†ู‚ู„ ู‡ุฐุง ุงู„ุชู†ููŠุฐ ุฅู„ู‰ ุนู…ู„ูŠุฉ ู…ู†ูุตู„ุฉ ุŒ ูƒู…ุง ุชุชุฐูƒุฑ ุŒ ู…ู† ุฃุฌู„ ุงู„ุฃู…ุงู† ุŒ ูˆุงู„ุชุญูˆูŠู„ ุฅู„ู‰ ุนู…ู„ูŠุฉ ู…ู†ูุตู„ุฉ ู‡ูˆ ูู‚ุฏุงู† ู„ู„ุฃุฏุงุก ุนู„ู‰ IPC ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฐู„ูƒ ู„ุงุญู‚ู‹ุง ุŒ ุนู†ุฏู…ุง ูู‡ู…ู†ุง ุฃุญุฌุงู… ุงู„ู…ู„ูุงุช ุงู„ู‚ุงุจู„ุฉ ู„ู„ุชู†ููŠุฐ ูƒูˆุฏ ุŒ ูƒุงู† ู…ู† ุฏูˆุงุนูŠ ุณุฑูˆุฑู†ุง ุฃู† ู†ุฎุชุงุฑ ู‡ุฐุง ุงู„ุญู„. ุงู„ุดูŠุก ู‡ูˆ ุฃู†ู‡ ู‚ุงุจู„ ู„ู„ุชุทูˆูŠุฑ ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฃู†ู‡ ูŠุถูŠู ุชุฃุฎูŠุฑู‹ุง ู„ูƒู„ ู…ูƒุงู„ู…ุฉ ูุฑุฏูŠุฉ. ูŠู…ูƒู†ู†ุง ุฑูุน ุงู„ุนุฏูŠุฏ ู…ู† ุฃูˆู‚ุงุช ุงู„ุชุดุบูŠู„ ุนู† ุจุนุฏ.

ุฃูƒุซุฑ ู‚ู„ูŠู„ุง ุนู† ุงู„ู‚ุฑุงุฑุงุช ุงู„ู…ุชุฎุฐุฉ ุจุญูŠุซ ูŠูƒูˆู† ูˆุงุถุญุง. ูŠุชูƒูˆู† ูƒู„ ุนู‚ุฏ ุฐูƒูŠ ู…ู† ุฌุฒุฃูŠู† ุŒ ุฌุฒุก ูˆุงุญุฏ ู‡ูˆ ุฑู…ุฒ ุงู„ูุตู„ ุŒ ูˆุงู„ุซุงู†ูŠ ู‡ูˆ ุจูŠุงู†ุงุช ุงู„ูƒุงุฆู† ุŒ ู„ุฐู„ูƒ ูŠู…ูƒู†ู†ุง ุŒ ุจู…ุฌุฑุฏ ู†ุดุฑ ุงู„ุฑู…ุฒ ุŒ ุฅู†ุดุงุก ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุนู‚ูˆุฏ ุงู„ุชูŠ ุณุชุชุตุฑู ุจุดูƒู„ ุฃุณุงุณูŠ ุŒ ูˆู„ูƒู† ู…ุน ุฅุนุฏุงุฏุงุช ู…ุฎุชู„ูุฉ ูˆู…ุน ุฏูˆู„ุฉ ู…ุฎุชู„ูุฉ. ุฅุฐุง ุชุญุฏุซู†ุง ุฃูƒุซุฑ ู…ู† ุฐู„ูƒ ุŒ ูู‡ุฐุง ุจุงู„ูุนู„ ุนู† blockchain ูˆู„ูŠุณ ู…ูˆุถูˆุน ู‡ุฐู‡ ุงู„ู‚ุตุฉ.

ูˆู‡ูƒุฐุง ุŒ ู†ู‚ูˆู… ุจุชู†ููŠุฐ GO


ู‚ุฑุฑู†ุง ุงุณุชุฎุฏุงู… ุขู„ูŠุฉ ุงู„ุจุฑู†ุงู…ุฌ ุงู„ู…ุณุงุนุฏ ุŒ ูˆู‡ูŠ ู„ูŠุณุช ุฌุงู‡ุฒุฉ ูˆุฌูŠุฏุฉ ูู‚ุท. ูŠู‚ูˆู… ุจู…ุง ูŠู„ูŠ ุŒ ู†ู‚ูˆู… ุจุชุฌู…ูŠุน ู…ุง ุณูŠูƒูˆู† ู…ูƒูˆู†ู‹ุง ุฅุถุงููŠู‹ุง ุจุทุฑูŠู‚ุฉ ุฎุงุตุฉ ููŠ ู…ูƒุชุจุฉ ู…ุดุชุฑูƒุฉ ุŒ ุซู… ุชุญู…ูŠู„ู‡ ุŒ ูˆุงู„ุนุซูˆุฑ ุนู„ู‰ ุงู„ุฑู…ูˆุฒ ููŠู‡ ูˆุชู…ุฑูŠุฑ ุงู„ุชู†ููŠุฐ ู‡ู†ุงูƒ. ู„ูƒู† ุงู„ู…ุดูƒู„ุฉ ู‡ูŠ ุฃู† GO ู„ุฏูŠู‡ ูˆู‚ุช ุชุดุบูŠู„ ุŒ ูˆู‡ุฐุง ูŠูƒุงุฏ ูŠูƒูˆู† ู…ูŠุบุงุจุงูŠุช ู…ู† ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุŒ ูˆุจุดูƒู„ ุงูุชุฑุงุถูŠ ุŒ ูุฅู† ูˆู‚ุช ุงู„ุชุดุบูŠู„ ู‡ุฐุง ูŠุฐู‡ุจ ุฃูŠุถู‹ุง ุฅู„ู‰ ู‡ุฐู‡ ุงู„ู…ูƒุชุจุฉ ุŒ ูˆู„ุฏูŠู†ุง ูˆู‚ุช ุชุดุบูŠู„ raznipipenny ููŠ ูƒู„ ู…ูƒุงู†. ู„ูƒู†ู†ุง ุงู„ุขู† ู‚ุฑุฑู†ุง ุงู„ู…ุถูŠ ู‚ุฏู…ู‹ุง ุŒ ู…ุน ุงู„ุชุฃูƒุฏ ู…ู† ุฃู†ู‡ ูŠู…ูƒู†ู†ุง ู‡ุฒูŠู…ุชู‡ ููŠ ุงู„ู…ุณุชู‚ุจู„.

ูƒู„ ุดูŠุก ุจุณูŠุท ุนู†ุฏู…ุง ุชุจู†ูŠ ู…ูƒุชุจุชูƒ ุŒ ุชู‚ูˆู… ุจุจู†ุงุฆู‡ุง ุจุงุณุชุฎุฏุงู… ุงู„ู…ูุชุงุญ - buildmode = plugin ูˆุชุญุตู„ ุนู„ู‰ ู…ู„ู .so ุŒ ุงู„ุฐูŠ ุชูุชุญู‡ ุจุนุฏ ุฐู„ูƒ.

p, err := plugin.Open(path) 

ุชุจุญุซ ุนู† ุงู„ุดุฎุตูŠุฉ ุงู„ุชูŠ ุชู‡ุชู… ุจู‡ุง:

 symbol, err := p.Lookup(Method) 

ูˆุงู„ุขู† ุŒ ุงุนุชู…ุงุฏู‹ุง ุนู„ู‰ ู…ุง ุฅุฐุง ูƒุงู† ุงู„ู…ุชุบูŠุฑ ุฏุงู„ุฉ ุฃูˆ ุฏุงู„ุฉ ุŒ ูŠู…ูƒู†ูƒ ุฅู…ุง ุชุณู…ูŠุชู‡ ุฃูˆ ุงุณุชุฎุฏุงู…ู‡ ูƒู…ุชุบูŠุฑ.

ุชุญุช ุบุทุงุก ู‡ุฐู‡ ุงู„ุขู„ูŠุฉ ูŠูˆุฌุฏ dlopen (3) ุจุณูŠุท ุŒ ู†ู‚ูˆู… ุจุชุญู…ูŠู„ ุงู„ู…ูƒุชุจุฉ ุŒ ู†ุชุญู‚ู‚ ู…ู† ุฃู†ู‡ุง ู…ูƒูˆู† ุฅุถุงููŠ ูˆู†ุนุทูŠ ุงู„ุบู„ุงู ููˆู‚ู‡ุง ุŒ ุนู†ุฏ ุฅู†ุดุงุก ุงู„ุบู„ุงู ุŒ ูŠุชู… ุชุบู„ูŠู ุฌู…ูŠุน ุงู„ุฃุญุฑู ุงู„ู…ุตุฏุฑุฉ ููŠ ุงู„ูˆุงุฌู‡ุฉ {} ูˆุชุฎุฒูŠู†ู‡ุง. ุฅุฐุง ูƒุงู†ุช ุฏุงู„ุฉ ุŒ ููŠุฌุจ ุงุฎุชุฒุงู„ู‡ุง ุฅู„ู‰ ุงู„ู†ูˆุน ุงู„ุตุญูŠุญ ู…ู† ุงู„ูˆุธูŠูุฉ ูˆุงุณุชุฏุนุงุคู‡ุง ุจุจุณุงุทุฉ ุŒ ุฅุฐุง ูƒุงู† ุงู„ู…ุชุบูŠุฑ - ุซู… ูŠุนู…ู„ ู…ุซู„ ุงู„ู…ุชุบูŠุฑ.

ุงู„ุดูŠุก ุงู„ุฑุฆูŠุณูŠ ุงู„ุฐูŠ ูŠุฌุจ ุชุฐูƒุฑู‡ ู‡ูˆ ุฃู†ู‡ ุฅุฐุง ูƒุงู† ุงู„ุฑู…ุฒ ู…ุชุบูŠุฑู‹ุง ุŒ ูู‡ูˆ ุนุงู„ู…ูŠ ุทูˆุงู„ ุงู„ุนู…ู„ูŠุฉ ุจุฃูƒู…ู„ู‡ุง ูˆู„ุง ูŠู…ูƒู†ูƒ ุงุณุชุฎุฏุงู…ู‡ ุจุฏูˆู† ุชููƒูŠุฑ.

ุฅุฐุง ุชู… ุงู„ุฅุนู„ุงู† ุนู† ู†ูˆุน ููŠ ุงู„ู…ูƒูˆู† ุงู„ุฅุถุงููŠ ุŒ ูู…ู† ุงู„ู…ู†ุทู‚ูŠ ูˆุถุน ู‡ุฐุง ุงู„ู†ูˆุน ููŠ ุญุฒู…ุฉ ู…ู†ูุตู„ุฉ ุจุญูŠุซ ูŠู…ูƒู† ู„ู„ุนู…ู„ูŠุฉ ุงู„ุฑุฆูŠุณูŠุฉ ุฃู† ุชุนู…ู„ ู…ุนู‡ ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุชู…ุฑูŠุฑ ูƒูˆุณูŠุทุฉ ุฅู„ู‰ ูˆุธุงุฆู ุงู„ู…ูƒูˆู† ุงู„ุฅุถุงููŠ. ู‡ุฐุง ุงุฎุชูŠุงุฑูŠ ุŒ ู„ุง ูŠู…ูƒู†ูƒ ุงุณุชุฎุฏุงู… ุงู„ุจุฎุงุฑ ูˆุงู„ุงู†ุนูƒุงุณ.

ุนู‚ูˆุฏู†ุง ู‡ูŠ ูƒุงุฆู†ุงุช ู…ู† "ุงู„ูุฆุฉ" ุงู„ู…ู‚ุงุจู„ุฉ ุŒ ูˆููŠ ุงู„ุจุฏุงูŠุฉ ุชู… ุชุฎุฒูŠู† ู…ุซูŠู„ ู‡ุฐุง ุงู„ูƒุงุฆู† ููŠ ู…ุชุบูŠุฑู†ุง ุงู„ู…ุตุฏู‘ุฑ ุŒ ู„ุฐุง ูŠู…ูƒู†ู†ุง ุฅู†ุดุงุก ู…ุชุบูŠุฑ ุขุฎุฑ ุขุฎุฑ:

 export, err := p.Lookup("EXPORT") obj := reflect.New(reflect.ValueOf(export).Elem().Type()).Interface() 

ูˆุจุงู„ูุนู„ ุฏุงุฎู„ ู‡ุฐุง ุงู„ู…ุชุบูŠุฑ ุงู„ู…ุญู„ูŠ ู…ู† ุงู„ู†ูˆุน ุงู„ุตุญูŠุญ ุŒ ู‚ู… ุจุฅู„ุบุงุก ุชุณู„ุณู„ ุญุงู„ุฉ ุงู„ูƒุงุฆู†. ุจุนุฏ ุงุณุชุนุงุฏุฉ ุงู„ูƒุงุฆู† ุŒ ูŠู…ูƒู†ู†ุง ุงุณุชุฏุนุงุก ุทุฑู‚ ุนู„ูŠู‡. ุจุนุฏ ุฐู„ูƒ ูŠุชู… ุฅุฌุฑุงุก ุชุณู„ุณู„ ู„ู„ูƒุงุฆู† ูˆุฅุถุงูุชู‡ ู…ุฑุฉ ุฃุฎุฑู‰ ุฅู„ู‰ ุงู„ู…ุชุฌุฑ ุŒ ู‡ุชุงู ุฃุทู„ู‚ู†ุง ุนู„ูŠู‡ ุงุณู… ุงู„ุทุฑูŠู‚ุฉ ุงู„ูˆุงุฑุฏุฉ ููŠ ุงู„ุนู‚ุฏ.

ุฅุฐุง ูƒู†ุช ู…ู‡ุชู…ู‹ุง ุจูƒูŠููŠุฉ ุงู„ู‚ูŠุงู… ุจุฐู„ูƒ ุŒ ูˆู„ูƒู†ูƒ ูƒุณูˆู„ ุฌุฏู‹ุง ู„ู‚ุฑุงุกุฉ ุงู„ูˆุซุงุฆู‚ ุŒ ูุนู†ุฏุฆุฐู:

 method := reflect.ValueOf(obj).MethodByName(Method) res:= method.Call(in) 

ููŠ ุงู„ู…ู†ุชุตู ุŒ ู…ุง ุฒู„ุช ุจุญุงุฌุฉ ู„ู…ู„ุก ุงู„ู…ุตููˆูุฉ ููŠ ุงู„ูˆุงุฌู‡ุงุช ุงู„ูุงุฑุบุฉ ุงู„ุชูŠ ุชุญุชูˆูŠ ุนู„ู‰ ุงู„ู†ูˆุน ุงู„ุตุญูŠุญ ู…ู† ุงู„ูˆุณูŠุทุฉ ุŒ ุฅุฐุง ูƒู†ุช ู…ู‡ุชู…ู‹ุง ุŒ ุงู†ุธุฑ ุจู†ูุณูƒ ูƒูŠู ุชู… ุฐู„ูƒ ุŒ ุงู„ู…ุตุงุฏุฑ ู…ูุชูˆุญุฉ ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุตุนูˆุจุฉ ุงู„ุนุซูˆุฑ ุนู„ู‰ ู‡ุฐุง ุงู„ู…ูƒุงู† ููŠ ุงู„ุชุงุฑูŠุฎ .

ุจุดูƒู„ ุนุงู… ุŒ ูƒู„ ุดูŠุก ูŠุนู…ู„ ู„ุตุงู„ุญู†ุง ุŒ ูŠู…ูƒู†ูƒ ูƒุชุงุจุฉ ุฑู…ุฒ ุจุดูŠุก ู…ุซู„ ูุฆุฉ ุŒ ูˆูˆุถุนู‡ ุนู„ู‰ blockchain ุŒ ูˆุฅู†ุดุงุก ุนู‚ุฏ ู…ู† ู‡ุฐู‡ ุงู„ูุฆุฉ ู…ุฑุฉ ุฃุฎุฑู‰ ุนู„ู‰ blockchain ุŒ ูˆุฅุฌุฑุงุก ู…ูƒุงู„ู…ุฉ ุฃุณู„ูˆุจ ุนู„ูŠู‡ ูˆุฅุนุงุฏุฉ ูƒุชุงุจุฉ ุงู„ุญุงู„ุฉ ุงู„ุฌุฏูŠุฏุฉ ู„ู„ุนู‚ุฏ ุฅู„ู‰ blockchain. ุนุธูŠู…! ูƒูŠููŠุฉ ุฅู†ุดุงุก ุนู‚ุฏ ุฌุฏูŠุฏ ู…ุน ุฑู…ุฒ ููŠ ู…ุชู†ุงูˆู„ ุงู„ูŠุฏุŸ ุจุณูŠุท ุฌุฏู‹ุง ุŒ ู„ุฏูŠู†ุง ูˆุธุงุฆู ู…ูู†ุดุฆ ุชู‚ูˆู… ุจุฅุฑุฌุงุน ูƒุงุฆู† ุชู… ุฅู†ุดุงุคู‡ ุญุฏูŠุซู‹ุง ุŒ ูˆู‡ูˆ ุงู„ุนู‚ุฏ ุงู„ุฌุฏูŠุฏ. ุญุชู‰ ุงู„ุขู† ุŒ ูƒู„ ุดูŠุก ูŠุนู…ู„ ู…ู† ุฎู„ุงู„ ุงู„ุชููƒูŠุฑ ูˆูŠุฌุจ ุนู„ู‰ ุงู„ู…ุณุชุฎุฏู… ุฃู† ูŠูƒุชุจ:

 var EXPORT ContractType 

ุญุชู‰ ู†ุนุฑู ุงู„ุฑู…ุฒ ุงู„ุฐูŠ ูŠู…ุซู„ ุงู„ุนู‚ุฏ ุŒ ูˆู†ุณุชุฎุฏู…ู‡ ููŠ ุงู„ูˆุงู‚ุน ูƒู‚ุงู„ุจ.

ู†ุญู† ู„ุง ู†ุญุจู‡ุง ุญู‚ู‹ุง. ูˆุถุฑุจู†ุง ุจุดุฏุฉ.

ุงู„ุชุญู„ูŠู„


ุฃูˆู„ุงู‹ ุŒ ูŠุฌุจ ุนู„ู‰ ุงู„ู…ุณุชุฎุฏู… ุฃู„ุง ูŠูƒุชุจ ุฃูŠ ุดูŠุก ุบูŠุฑ ุถุฑูˆุฑูŠ ุŒ ูˆุซุงู†ูŠู‹ุง ุŒ ู„ุฏูŠู†ุง ููƒุฑุฉ ุฃู† ุชูุงุนู„ ุงู„ุนู‚ุฏ ู…ุน ุงู„ุนู‚ุฏ ูŠุฌุจ ุฃู† ูŠูƒูˆู† ุจุณูŠุทู‹ุง ุŒ ูˆุงุฎุชุจุงุฑู‡ ุจุฏูˆู† ุฑูุน blockchain ุŒ blockchain ุจุทูŠุก ูˆุตุนุจ.

ู„ุฐู„ูƒ ุŒ ู‚ุฑุฑู†ุง ุฃู† ู†ู„ู ุงู„ุนู‚ุฏ ููŠ ุบู„ุงู ุŒ ูŠุชู… ุฅู†ุดุงุคู‡ ุนู„ู‰ ุฃุณุงุณ ุงู„ุนู‚ุฏ ูˆู†ู…ูˆุฐุฌ ุงู„ุบู„ุงู ุŒ ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ุญู„ ู…ูู‡ูˆู…. ุฃูˆู„ุงู‹ ุŒ ูŠู†ุดุฆ ุงู„ู…ุฌู…ู‘ุน ูƒุงุฆู† ุชุตุฏูŠุฑ ู„ู†ุง ุŒ ูˆุซุงู†ูŠู‹ุง ุŒ ูŠุณุชุจุฏู„ ุงู„ู…ูƒุชุจุฉ ุงู„ุชูŠ ูŠุชู… ุฌู…ุน ุงู„ุนู‚ุฏ ุจู‡ุง ุนู†ุฏู…ุง ูŠูƒุชุจ ุงู„ู…ุณุชุฎุฏู… ุงู„ุนู‚ุฏ ุŒ ูˆุชุณุชุฎุฏู… ู…ูƒุชุจุฉ ุงู„ุฃุณุงุณ ู…ุน mokas ููŠ ุงู„ุฏุงุฎู„ ุŒ ูˆุนู†ุฏู…ุง ูŠุชู… ู†ุดุฑ ุงู„ุนู‚ุฏ ุŒ ูŠุชู… ุงุณุชุจุฏุงู„ู‡ ุจุนู†ุตุฑ ู‚ุชุงู„ูŠ ูŠุนู…ู„ ู…ุน blockchain ู†ูุณู‡ .

ุจุงุฏุฆ ุฐูŠ ุจุฏุก ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุชุญู„ูŠู„ ุงู„ุดูุฑุฉ ูˆูู‡ู… ู…ุง ู„ุฏูŠู†ุง ุจุดูƒู„ ุนุงู… ุŒ ูˆุงู„ุนุซูˆุฑ ุนู„ู‰ ุงู„ู‡ูŠูƒู„ ุงู„ู…ูˆุฑูˆุซ ู…ู† BaseContract ู…ู† ุฃุฌู„ ุฅู†ุดุงุก ุบู„ุงู ุญูˆู„ู‡.

ูŠุชู… ุฐู„ูƒ ุจุจุณุงุทุฉ ุดุฏูŠุฏุฉ ุŒ ู†ู‚ุฑุฃ ุงู„ู…ู„ู ู…ุน ุงู„ุฑู…ุฒ ููŠ [] ุจุงูŠุช ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฃู† ุงู„ู…ุญู„ู„ ุงู„ู„ุบูˆูŠ ู†ูุณู‡ ูŠู…ูƒู†ู‡ ู‚ุฑุงุกุฉ ุงู„ู…ู„ูุงุช ุŒ ูู…ู† ุงู„ุฌูŠุฏ ุฃู† ูŠูƒูˆู† ุงู„ู†ุต ููŠ ู…ูƒุงู† ู…ุง ุชุดูŠุฑ ุฅู„ูŠู‡ ุฌู…ูŠุน ุนู†ุงุตุฑ AST ุŒ ูŠุดูŠุฑูˆู† ุฅู„ู‰ ุฑู‚ู… ุงู„ุจุงูŠุช ููŠ ุงู„ู…ู„ู ุŒ ูˆููŠ ุงู„ู…ุณุชู‚ุจู„ ู†ุฑูŠุฏ ุชู„ู‚ูŠ ุฑู…ุฒ ุงู„ู‡ูŠูƒู„ ูƒู…ุง ู‡ูˆ ุŒ ู†ุฃุฎุฐ ุดูŠุฆู‹ุง ู…ุซู„.

 func (pf *ParsedFile) codeOfNode(n ast.Node) string { return string(pf.code[n.Pos()-1 : n.End()-1]) } 

ู†ุญู† ููŠ ุงู„ูˆุงู‚ุน ู†ู‚ูˆู… ุจุชุญู„ูŠู„ ุงู„ู…ู„ู ูˆุงู„ุญุตูˆู„ ุนู„ู‰ ุฃุนู„ู‰ ุนู‚ุฏุฉ AST ุงู„ุชูŠ ุณู†ุฒุญู ู…ู†ู‡ุง ุฅู„ู‰ ุงู„ู…ู„ู.

 fileSet = token.NewFileSet() node, err := parser.ParseFile(fileSet, name, code, parser.ParseComments) 

ุจุนุฏ ุฐู„ูƒ ุŒ ู†ู†ุชู‚ู„ ุฅู„ู‰ ุงู„ูƒูˆุฏ ุจุฏุกู‹ุง ู…ู† ุงู„ุนู‚ุฏุฉ ุงู„ุนู„ูˆูŠุฉ ุŒ ูˆู†ุฌู…ุน ูƒู„ ุดูŠุก ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู… ููŠ ุจู†ูŠุฉ ู…ู†ูุตู„ุฉ.

 for _, decl := range node.Decls { switch d := decl.(type) { case *ast.GenDecl: โ€ฆ case *ast.FuncDecl: โ€ฆ } } 

Decls ุŒ ู„ู‚ุฏ ุชู… ุชุญู„ูŠู„ู‡ ุจุงู„ูุนู„ ููŠ ู…ุตููˆูุฉ ุŒ ูˆู‚ุงุฆู…ุฉ ุจูƒู„ ู…ุง ุชู… ุชุญุฏูŠุฏู‡ ููŠ ุงู„ู…ู„ู ุŒ ูˆู„ูƒู†ู‡ุง ุนุจุงุฑุฉ ุนู† ู…ุฌู…ูˆุนุฉ ู…ู† ูˆุงุฌู‡ุงุช Decl ุงู„ุชูŠ ู„ุง ุชุตู ู…ุง ุจุฏุงุฎู„ู‡ุง ุŒ ู„ุฐู„ูƒ ูŠุฌุจ ุฃู† ูŠู„ู‚ูŠ ูƒู„ ุนู†ุตุฑ ุจู†ูˆุน ู…ุนูŠู† ุŒ ูˆู‡ู†ุง ุงุจุชุนุฏ ู…ุคู„ููˆ ุงู„ู„ุบุฉ ุนู† ููƒุฑุชู‡ู… ุจุงุณุชุฎุฏุงู… ุงู„ูˆุงุฌู‡ุงุช ุŒ ุงู„ูˆุงุฌู‡ุฉ ููŠ go / ast ู‡ูŠ ุจุงู„ุฃุญุฑู‰ ูุฆุฉ ุฃุณุงุณูŠุฉ.

ู†ุญู† ู…ู‡ุชู…ูˆู† ุจุงู„ุนู‚ุฏ ู…ู† ู†ูˆุน GenDecl ูˆ FuncDecl. GenDecl ู‡ูˆ ุชุนุฑูŠู ู…ุชุบูŠุฑ ุฃูˆ ู†ูˆุน ุŒ ูˆุชุญุชุงุฌ ุฅู„ู‰ ุงู„ุชุญู‚ู‚ ู…ู† ู…ุง ู‡ูˆ ุจุงู„ุถุจุท ุงู„ู†ูˆุน ุงู„ุฐูŠ ุจุฏุงุฎู„ู‡ ุŒ ูˆุฅู„ู‚ุงุกู‡ ู…ุฑุฉ ุฃุฎุฑู‰ ุฅู„ู‰ ู†ูˆุน TypeDecl ุงู„ุฐูŠ ูŠู…ูƒู†ูƒ ุงู„ุนู…ู„ ู…ุนู‡ ุจุงู„ูุนู„. FuncDecl ุฃุจุณุท - ุฅู†ู‡ุง ุฏุงู„ุฉ ุŒ ูˆุฅุฐุง ูƒุงู† ูŠุญุชูˆูŠ ุนู„ู‰ ุญู‚ู„ Recv ุŒ ูู‡ุฐู‡ ุทุฑูŠู‚ุฉ ู„ู„ุจู†ูŠุฉ ุงู„ู…ู‚ุงุจู„ุฉ. ู†ุฌู…ุน ูƒู„ ู‡ุฐู‡ ุงู„ุฃุดูŠุงุก ููŠ ุชุฎุฒูŠู† ู…ุฑูŠุญ ุŒ ู„ุฃู†ู†ุง ู†ุณุชุฎุฏู… ุจุนุฏ ุฐู„ูƒ ู†ุตู‹ุง / ู‚ุงู„ุจู‹ุง ุŒ ูˆู„ูŠุณ ู„ุฏูŠู‡ุง ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ู‚ูˆุฉ ุงู„ุชุนุจูŠุฑูŠุฉ.

ุงู„ุดูŠุก ุงู„ูˆุญูŠุฏ ุงู„ุฐูŠ ู†ุญุชุงุฌ ุฅู„ู‰ ุชุฐูƒุฑู‡ ุจุดูƒู„ ู…ู†ูุตู„ ู‡ูˆ ุงุณู… ู†ูˆุน ุงู„ุจูŠุงู†ุงุช ุงู„ู…ูˆุฑูˆุซ ู…ู† BaseContract ุŒ ูˆุณู†ู‚ูˆู… ุจุงู„ุฑู‚ุต ุญูˆู„ู‡.

ุฅู†ุดุงุก ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ


ูˆู‡ูƒุฐุง ุŒ ู†ุญู† ู†ุนุฑู ุฌู…ูŠุน ุงู„ุฃู†ูˆุงุน ูˆุงู„ูˆุธุงุฆู ุงู„ู…ูˆุฌูˆุฏุฉ ููŠ ุนู‚ุฏู†ุง ูˆู†ุญุชุงุฌ ุฅู„ู‰ ุฃู† ู†ูƒูˆู† ู‚ุงุฏุฑูŠู† ุนู„ู‰ ุฅุฌุฑุงุก ุงุณุชุฏุนุงุก ุฃุณู„ูˆุจ ุนู„ู‰ ูƒุงุฆู† ู…ู† ุงุณู… ุงู„ุฃุณู„ูˆุจ ุงู„ูˆุงุฑุฏ ูˆู…ุฌู…ูˆุนุฉ ู…ุชุณู„ุณู„ุฉ ู…ู† ุงู„ุญุฌุฌ. ูˆู„ูƒู† ุจุนุฏ ูƒู„ ุดูŠุก ุŒ ููŠ ูˆู‚ุช ุฅู†ุดุงุก ุงู„ุดูุฑุฉ ุŒ ู†ุนุฑู ุงู„ุฌู‡ุงุฒ ุงู„ูƒุงู…ู„ ู„ู„ุนู‚ุฏ ุŒ ู„ุฐู„ูƒ ู†ุถุน ุจุฌูˆุงุฑ ู…ู„ู ุงู„ุนู‚ุฏ ุงู„ุฎุงุต ุจู†ุง ุจุฌูˆุงุฑ ู…ู„ู ุขุฎุฑ ุŒ ุจู†ูุณ ุงุณู… ุงู„ุญุฒู…ุฉ ุŒ ุญูŠุซ ู†ุถุน ุฌู…ูŠุน ุนู…ู„ูŠุงุช ุงู„ุงุณุชูŠุฑุงุฏ ุงู„ุถุฑูˆุฑูŠุฉ ุŒ ูŠุชู… ุชุญุฏูŠุฏ ุงู„ุฃู†ูˆุงุน ุจุงู„ูุนู„ ููŠ ุงู„ู…ู„ู ุงู„ุฑุฆูŠุณูŠ ูˆุบูŠุฑ ุถุฑูˆุฑูŠ.

ูˆู‡ู†ุง ุงู„ุดูŠุก ุงู„ุฑุฆูŠุณูŠ ุŒ ูŠู„ู ุนู„ู‰ ุงู„ูˆุธุงุฆู. ูŠุชู… ุงุณุชูƒู…ุงู„ ุงุณู… ุงู„ุบู„ุงู ุจู†ูˆุน ู…ู† ุงู„ุจุงุฏุฆุฉ ูˆุงู„ุขู† ูŠุณู‡ู„ ุงู„ุนุซูˆุฑ ุนู„ู‰ ุงู„ุบู„ุงู.

 symbol, err := p.Lookup("INSMETHOD_" + Method) wrapper, ok := symbol.(func(ph proxyctx.ProxyHelper, object []byte, data []byte) (object []byte, result []byte, err error)) 

ูƒู„ ุบู„ุงู ู„ู‡ ู†ูุณ ุงู„ุชูˆู‚ูŠุน ุŒ ู„ุฐู„ูƒ ุนู†ุฏู…ุง ู†ุณู…ูŠู‡ ู…ู† ุงู„ุจุฑู†ุงู…ุฌ ุงู„ุฑุฆูŠุณูŠ ุŒ ู„ุง ู†ุญุชุงุฌ ุฅู„ู‰ ุงู†ุนูƒุงุณุงุช ุฅุถุงููŠุฉ ุŒ ุงู„ุดูŠุก ุงู„ูˆุญูŠุฏ ู‡ูˆ ุฃู† ู…ุบู„ูุงุช ุงู„ูˆุธูŠูุฉ ุชุฎุชู„ู ุนู† ุฃุบู„ูุฉ ุงู„ุทุฑูŠู‚ุฉ ุŒ ูู‡ูŠ ู„ุง ุชุณุชู‚ุจู„ ูˆู„ุง ุชุนูŠุฏ ุญุงู„ุฉ ุงู„ูƒุงุฆู†.

ู…ุงุฐุง ู„ุฏูŠู†ุง ุฏุงุฎู„ ุงู„ุบู„ุงูุŸ

ู†ู†ุดุฆ ู…ุฌู…ูˆุนุฉ ู…ู† ุงู„ู…ุชุบูŠุฑุงุช ุงู„ูุงุฑุบุฉ ุงู„ู…ู‚ุงุจู„ุฉ ู„ูˆุณูŠุทุงุช ุงู„ุฏุงู„ุฉ ุŒ ูˆู†ุถุนู‡ุง ููŠ ู…ุชุบูŠุฑ ู…ู† ู†ูˆุน ู…ุฌู…ูˆุนุฉ ู…ู† ุงู„ูˆุงุฌู‡ุงุช ุŒ ูˆู†ุฑุบูŠ ุงู„ูˆุณูŠุทุงุช ููŠู‡ุง ุŒ ุฅุฐุง ูƒู†ุง ุทุฑูŠู‚ุฉ ุŒ ูŠุฌุจ ุนู„ูŠู†ุง ุฃูŠุถู‹ุง ุฅุฌุฑุงุก ุชุณู„ุณู„ ู„ุญุงู„ุฉ ุงู„ูƒุงุฆู† ุŒ ุจุดูƒู„ ุนุงู… ุดูŠุก ู…ู† ู‡ุฐุง ุงู„ู‚ุจูŠู„:

 {{ range $method := .Methods }} func INSMETHOD_{{ $method.Name }}(ph proxyctx.ProxyHelper, object []byte, data []byte) ([]byte, []byte, error) { self := new({{ $.ContractType }}) err := ph.Deserialize(object, self) if err != nil { return nil, nil, err } {{ $method.ArgumentsZeroList }} err = ph.Deserialize(data, &args) if err != nil { return nil, nil, err } {{ if $method.Results }} {{ $method.Results }} := self.{{ $method.Name }}( {{ $method.Arguments }} ) {{ else }} self.{{ $method.Name }}( {{ $method.Arguments }} ) {{ end }} state := []byte{} err = ph.Serialize(self, &state) if err != nil { return nil, nil, err } {{ range $i := $method.ErrorInterfaceInRes }} ret{{ $i }} = ph.MakeErrorSerializable(ret{{ $i }}) {{ end }} ret := []byte{} err = ph.Serialize([]interface{} { {{ $method.Results }} }, &ret) return state, ret, err } {{ end }} 

ุณูˆู ูŠู‡ุชู… ุงู„ู‚ุงุฑุฆ ุงู„ูŠู‚ุธ ุจู…ุง ู‡ูˆ ู…ุณุงุนุฏ ุงู„ูˆูƒูŠู„ุŸ - ู‡ุฐุง ู‡ูˆ ูƒุงุฆู† ุงู„ุฌู…ุน ุงู„ุฐูŠ ู…ุง ุฒู„ู†ุง ุจุญุงุฌุฉ ุฅู„ูŠู‡ ุŒ ูˆู„ูƒู†ู†ุง ู†ุณุชุฎุฏู… ุงู„ุขู† ู‚ุฏุฑุชู‡ ุนู„ู‰ ุงู„ุชุณู„ุณู„ ูˆุฅู„ุบุงุก ุงู„ุชุณู„ุณู„.

ุญุณู†ู‹ุง ุŒ ุณูˆู ูŠุณุฃู„ ุฃูŠ ุดุฎุต ูŠู‚ุฑุฃ ุŒ "ู„ูƒู† ู‡ุฐู‡ ู‡ูŠ ุญุฌุฌูƒ ุŒ ู…ู† ุฃูŠู† ู‡ู…ุŸ" ุฅู„ูŠูƒ ุฃูŠุถู‹ุง ุฅุฌุงุจุฉ ู…ูู‡ูˆู…ุฉ ุŒ ู†ุนู… ุงู„ู†ุต / ุงู„ู‚ุงู„ุจ ู„ูŠุณ ู‡ู†ุงูƒ ุนุฏุฏ ูƒุงูู ู…ู† ุงู„ู†ุฌูˆู… ู…ู† ุงู„ุณู…ุงุก ุŒ ูˆู„ู‡ุฐุง ุงู„ุณุจุจ ู†ุญุณุจ ู‡ุฐู‡ ุงู„ุฃุณุทุฑ ููŠ ุงู„ุดูุฑุฉ ุŒ ูˆู„ูŠุณ ููŠ ุงู„ู‚ุงู„ุจ.

ูŠุญุชูˆูŠ method.ArgumentsZeroList ุนู„ู‰ ุดูŠุก ู…ุซู„

 var arg0 int = 0 Var arg1 string = โ€œโ€ Var arg2 ackwardType = ackwardType{} Args := []interface{}{&arg0, &arg1, &arg2} 

ูˆุจู†ุงุกู‹ ุนู„ูŠู‡ ุŒ ุชุญุชูˆูŠ ุงู„ูˆุณูŠุทุงุช ุนู„ู‰ "arg0ุŒ arg1ุŒ arg2".

ูˆุจุงู„ุชุงู„ูŠ ุŒ ูŠู…ูƒู†ู†ุง ุฃู† ู†ุทู„ู‚ ุนู„ู‰ ุฃูŠ ุดูŠุก ู†ุฑูŠุฏู‡ ุŒ ู…ุน ุฃูŠ ุชูˆู‚ูŠุน.

ูˆู„ูƒู† ู„ุง ูŠู…ูƒู†ู†ุง ุฅุฌุฑุงุก ุชุณู„ุณู„ ู„ุฃูŠ ุฅุฌุงุจุฉ ุŒ ูุงู„ุญู‚ูŠู‚ุฉ ู‡ูŠ ุฃู† ุงู„ู…ุณู„ุณู„ ูŠุนู…ู„ ู…ุน ุงู„ุงู†ุนูƒุงุณ ุŒ ูˆู„ุง ูŠู…ู†ุญ ุญู‚ ุงู„ูˆุตูˆู„ ุฅู„ู‰ ุงู„ุญู‚ูˆู„ ุบูŠุฑ ุงู„ู…ุตุฏุฑุฉ ู„ู„ู‡ูŠุงูƒู„ ุŒ ูˆู„ู‡ุฐุง ุงู„ุณุจุจ ู„ุฏูŠู†ุง ุทุฑูŠู‚ุฉ ู…ุณุงุนุฏ ูˆูƒูŠู„ ุฎุงุตุฉ ุชุฃุฎุฐ ูƒุงุฆู† ูˆุงุฌู‡ุฉ ุฎุทุฃ ูˆุชู†ุดุฆ ูƒุงุฆู†ู‹ุง ู…ู† ู†ูˆุน ุงู„ุฃุณุงุณ ู…ู†ู‡. ุงู„ุฎุทุฃ ุŒ ุงู„ุฐูŠ ูŠุฎุชู„ู ุนู† ุงู„ุฎุทุฃ ุงู„ู…ุนุชุงุฏ ููŠ ุฃู† ู†ุต ุงู„ุฎุทุฃ ู…ูˆุฌูˆุฏ ููŠู‡ ููŠ ุงู„ุญู‚ู„ ุงู„ู…ุตุฏุฑ ุŒ ูˆูŠู…ูƒู†ู†ุง ุฅุฌุฑุงุก ุชุณู„ุณู„ ู„ู‡ ุŒ ูˆุฅู† ูƒุงู† ุฐู„ูƒ ู…ุน ุจุนุถ ุงู„ุฎุณุงุฆุฑ.

ูˆู„ูƒู† ุฅุฐุง ุงุณุชุฎุฏู…ู†ุง ู…ุนู‚ู…ู‹ุง ู„ุฅู†ุดุงุก ุฑู…ุฒ ุŒ ูุฅู†ู†ุง ู„ุง ู†ุญุชุงุฌ ุฅู„ูŠู‡ ุญุชู‰ ุŒ ูู†ุญู† ู†ุฌู…ุนู‡ ููŠ ู†ูุณ ุงู„ุญุฒู…ุฉ ุŒ ู„ุฏูŠู†ุง ุญู‚ ุงู„ูˆุตูˆู„ ุฅู„ู‰ ุงู„ุญู‚ูˆู„ ุบูŠุฑ ุงู„ู…ุตุฏุฑุฉ.

ูˆู„ูƒู† ู…ุงุฐุง ู„ูˆ ุฃุฑุฏู†ุง ุงุณุชุฏุนุงุก ุนู‚ุฏ ู…ู† ุนู‚ุฏุŸ


ุฃู†ุช ู„ุง ุชูู‡ู… ุนู…ู‚ ุงู„ู…ุดูƒู„ุฉ ุฅุฐุง ูƒู†ุช ุชุนุชู‚ุฏ ุฃู†ู‡ ู…ู† ุงู„ุณู‡ู„ ุงุณุชุฏุนุงุก ุนู‚ุฏ ู…ู† ุนู‚ุฏ. ูˆุงู„ุญู‚ูŠู‚ุฉ ู‡ูŠ ุฃู†ู‡ ูŠุฌุจ ุชุฃูƒูŠุฏ ุตุญุฉ ุนู‚ุฏ ุขุฎุฑ ุจุงู„ุฅุฌู…ุงุน ุŒ ูˆูŠุฌุจ ุชูˆู‚ูŠุน ุญู‚ูŠู‚ุฉ ู‡ุฐู‡ ุงู„ู…ูƒุงู„ู…ุฉ ุนู„ู‰ blockchain ุŒ ุจุดูƒู„ ุนุงู… ุŒ ุจุจุณุงุทุฉ ุชุฌู…ูŠุน ุนู‚ุฏ ุขุฎุฑ ูˆุงุณุชุฏุนุงุก ุทุฑูŠู‚ุชู‡ ู„ู† ูŠุนู…ู„ ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฃู†ู†ูŠ ุฃุฑูŠุฏ ุญู‚ู‹ุง. ู„ูƒู†ู†ุง ุฃุตุฏู‚ุงุก ู„ู„ู…ุจุฑู…ุฌูŠู† ุŒ ู„ุฐุง ูŠุฌุจ ุฃู† ู†ุนุทูŠู‡ู… ุงู„ูุฑุตุฉ ู„ู„ู‚ูŠุงู… ุจูƒู„ ุดูŠุก ู…ุจุงุดุฑุฉ ุŒ ูˆุฅุฎูุงุก ูƒู„ ุงู„ุญูŠู„ ุชุญุช ุบุทุงุก ุงู„ู†ุธุงู…. ูˆุจุงู„ุชุงู„ูŠ ุŒ ูุฅู† ุชุทูˆูŠุฑ ุงู„ุนู‚ุฏ ูƒู…ุง ู„ูˆ ูƒุงู† ู…ุน ุงู„ู…ูƒุงู„ู…ุงุช ุงู„ู…ุจุงุดุฑุฉ ุŒ ูˆุงู„ุนู‚ูˆุฏ ุชุณุญุจ ุจุนุถู‡ุง ุงู„ุจุนุถ ุจุดูุงููŠุฉ ุŒ ูˆู„ูƒู† ุนู†ุฏู…ุง ู†ุฌู…ุน ุงู„ุนู‚ุฏ ู„ู„ู†ุดุฑ ุŒ ูุฅู†ู†ุง ู†ู†ุฒู„ู‚ ูˆูƒูŠู„ู‹ุง ุจุฏู„ุงู‹ ู…ู† ุนู‚ุฏ ุขุฎุฑ ุŒ ูˆุงู„ุฐูŠ ู„ุง ูŠุนุฑู ุณูˆู‰ ุนู†ูˆุงู†ู‡ ูˆุชูˆู‚ูŠุนุงุช ุงู„ุงุณุชุฏุนุงุก ุญูˆู„ ุงู„ุนู‚ุฏ.

ูƒูŠู ุชู†ุธู… ูƒู„ ู‡ุฐุงุŸ - ุณูŠุชุนูŠู† ุนู„ูŠู†ุง ุชุฎุฒูŠู† ุนู‚ูˆุฏ ุฃุฎุฑู‰ ููŠ ุฏู„ูŠู„ ุฎุงุต ูŠู…ูƒู† ู„ู…ูˆู„ุฏู†ุง ุงู„ุชุนุฑู ุนู„ูŠู‡ ูˆุฅู†ุดุงุก ูˆูƒู„ุงุก ู„ูƒู„ ุนู‚ุฏ ูŠุชู… ุงุณุชูŠุฑุงุฏู‡.

ุฃูŠ ุฅุฐุง ุงู„ุชู‚ูŠู†ุง:

 import โ€œContractsDir/ContractAddress" 

ู†ูƒุชุจู‡ุง ุนู„ู‰ ู‚ุงุฆู…ุฉ ุงู„ุนู‚ูˆุฏ ุงู„ู…ุณุชูˆุฑุฏุฉ.

ุจุงู„ู…ู†ุงุณุจุฉ ุŒ ู„ู‡ุฐุง ู„ุง ุชุญุชุงุฌ ุฅู„ู‰ ู…ุนุฑูุฉ ูƒูˆุฏ ุงู„ู…ุตุฏุฑ ู„ู„ุนู‚ุฏ ุŒ ู…ุง ุนู„ูŠูƒ ุณูˆู‰ ู…ุนุฑูุฉ ุงู„ูˆุตู ุงู„ุฐูŠ ู‚ู…ู†ุง ุจุฌู…ุนู‡ ุจุงู„ูุนู„ ุŒ ู„ุฐู„ูƒ ุฅุฐุง ู†ุดุฑู†ุง ู…ุซู„ ู‡ุฐุง ุงู„ูˆุตู ููŠ ู…ูƒุงู† ู…ุง ุŒ ูˆูƒู„ ุงู„ู…ูƒุงู„ู…ุงุช ุชู…ุฑ ุนุจุฑ ุงู„ู†ุธุงู… ุงู„ุฑุฆูŠุณูŠ ุŒ ูู„ุง ูŠู‡ู…ู†ุง ู…ุง ุชู…ุช ูƒุชุงุจุฉ ุนู‚ุฏ ุขุฎุฑ ุจุงู„ู„ุบุฉ ุŒ ุฅุฐุง ูƒุงู† ุจุฅู…ูƒุงู†ู†ุง ุงุณุชุฏุนุงุก ุงู„ุทุฑู‚ ุนู„ูŠู‡ ุŒ ูŠู…ูƒู†ู†ุง ูƒุชุงุจุฉ ูƒุนุจ ู„ู‡ ุนู„ู‰ Go ุŒ ูˆุงู„ุฐูŠ ุณูŠุจุฏูˆ ูƒุญุฒู…ุฉ ุจุนู‚ุฏ ูŠู…ูƒู† ุงุณุชุฏุนุงุคู‡ ู…ุจุงุดุฑุฉ. ุฎุทุท ู†ุงุจู„ูŠูˆู† ุŒ ุฏุนู†ุง ู†ุจุฏุฃ.

ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ู„ุฏูŠู†ุง ุจุงู„ูุนู„ ุทุฑูŠู‚ุฉ ู…ุณุงุนุฏ ูˆูƒูŠู„ ุŒ ู…ุน ู‡ุฐุง ุงู„ุชูˆู‚ูŠุน:

 RouteCall(ref Address, method string, args []byte) ([]byte, error) 

ูŠู…ูƒู† ุงุณุชุฏุนุงุก ู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ู…ุจุงุดุฑุฉ ู…ู† ุงู„ุนู‚ุฏ ุŒ ูˆุชุณู…ู‰ ุงู„ุนู‚ุฏ ุงู„ุจุนูŠุฏ ุŒ ูˆุชุฑุฏ ุงุณุชุฌุงุจุฉ ู…ุชุณู„ุณู„ุฉ ู†ุญุชุงุฌ ุฅู„ู‰ ุชุญู„ูŠู„ู‡ุง ูˆุงู„ุนูˆุฏุฉ ุฅู„ู‰ ุนู‚ุฏู†ุง.

ูˆู„ูƒู† ู…ู† ุงู„ุถุฑูˆุฑูŠ ุฃู† ูŠุจุฏูˆ ูƒู„ ุดูŠุก ู„ู„ู…ุณุชุฎุฏู… ูƒู…ุง ูŠู„ูŠ:

 ret := contractPackage.GetObject(Address).Method(arg1,arg2, โ€ฆ) 

ู„ู†ุจุฏุฃ ุฃูˆู„ุงู‹ ุŒ ููŠ ุงู„ูˆูƒูŠู„ ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุณุฑุฏ ุฌู…ูŠุน ุงู„ุฃู†ูˆุงุน ุงู„ุชูŠ ูŠุชู… ุงุณุชุฎุฏุงู…ู‡ุง ููŠ ุชูˆู‚ูŠุนุงุช ุทุฑู‚ ุงู„ุนู‚ุฏ ุŒ ูˆู„ูƒู† ูƒู…ุง ู†ุชุฐูƒุฑ ุŒ ู„ูƒู„ ุนู‚ุฏุฉ AST ูŠู…ูƒู†ู†ุง ุฃุฎุฐ ุชู…ุซูŠู„ู‡ุง ุงู„ู†ุตูŠ ุŒ ูˆุงู„ุขู† ุญุงู† ุงู„ูˆู‚ุช ู„ู‡ุฐู‡ ุงู„ุขู„ูŠุฉ.

ุจุนุฏ ุฐู„ูƒ ุŒ ู†ุญุชุงุฌ ุฅู„ู‰ ุฅู†ุดุงุก ู†ูˆุน ู…ู† ุงู„ุนู‚ุฏ ุŒ ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ูู‡ูˆ ูŠุนุฑู ูุตู„ู‡ ุจุงู„ูุนู„ ุŒ ู„ุง ูŠู„ุฒู… ุณูˆู‰ ุนู†ูˆุงู†.

 type {{ .ContractType }} struct { Reference Address } 

ุจุนุฏ ุฐู„ูƒ ุŒ ู†ุญุชุงุฌ ุฅู„ู‰ ุชู†ููŠุฐ ูˆุธูŠูุฉ GetObject ุจุทุฑูŠู‚ุฉ ู…ุง ุŒ ูˆุงู„ุชูŠ ุณุชุนุฑุถ ู…ุซูŠู„ ูˆูƒูŠู„ ุนู„ู‰ ุงู„ุนู†ูˆุงู† ุงู„ู…ูˆุฌูˆุฏ ููŠ blockchain ูŠุนุฑู ูƒูŠููŠุฉ ุงู„ุนู…ู„ ู…ุน ู‡ุฐุง ุงู„ุนู‚ุฏ ุŒ ูˆูŠุจุฏูˆ ู„ู„ู…ุณุชุฎุฏู… ู…ุซูŠู„ู‹ุง ู„ู„ุนู‚ุฏ.

 func GetObject(ref Address) (r *{{ .ContractType }}) { return &{{ .ContractType }}{Reference: ref} } 

ูˆู…ู† ุงู„ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู… ุฃู† ุทุฑูŠู‚ุฉ GetObject ููŠ ูˆุถุน ุชุตุญูŠุญ ุฃุฎุทุงุก ุงู„ู…ุณุชุฎุฏู… ู‡ูŠ ุทุฑูŠู‚ุฉ ุจู†ูŠุฉ BaseContract ู…ุจุงุดุฑุฉ ุŒ ูˆู„ูƒู† ู„ุง ูŠูˆุฌุฏ ุดูŠุก ุŒ ู„ุง ุดูŠุก ูŠู…ู†ุนู†ุง ุŒ ุจู…ุฑุงู‚ุจุฉ ุงุชูุงู‚ูŠุฉ ู…ุณุชูˆู‰ ุงู„ุฎุฏู…ุฉ ุŒ ู…ู† ุงู„ู‚ูŠุงู… ุจู…ุง ู‡ูˆ ู…ู†ุงุณุจ ู„ู†ุง. ุงู„ุขู† ูŠู…ูƒู†ู†ุง ุฅู†ุดุงุก ุนู‚ุฏ ูˆูƒูŠู„ ุŒ ุงู„ุฃุณุงู„ูŠุจ ุงู„ุชูŠ ู†ุชุญูƒู… ููŠู‡ุง. ูŠุจู‚ู‰ ู„ุฅู†ุดุงุก ุทุฑู‚ ููŠ ุงู„ูˆุงู‚ุน.

 {{ range $method := .MethodsProxies }} func (r *{{ $.ContractType }}) {{ $method.Name }}( {{ $method.Arguments }} ) ( {{ $method.ResultsTypes }} ) { {{ $method.InitArgs }} var argsSerialized []byte err := proxyctx.Current.Serialize(args, &argsSerialized) if err != nil { panic(err) } res, err := proxyctx.Current.RouteCall(r.Reference, "{{ $method.Name }}", argsSerialized) if err != nil { panic(err) } {{ $method.ResultZeroList }} err = proxyctx.Current.Deserialize(res, &resList) if err != nil { panic(err) } return {{ $method.Results }} } {{ end }} 

ู‡ู†ุง ู†ูุณ ุงู„ู‚ุตุฉ ู…ุน ุจู†ุงุก ู‚ุงุฆู…ุฉ ุงู„ุญุฌุฉ ุŒ ู„ุฃู†ู†ุง ูƒุณุงู„ู‰ ูˆู†ุฎุฒู† ุจุงู„ุถุจุท ุนู‚ุฏุฉ ุงู„ุทุฑูŠู‚ุฉ ุงู„ุณุงุจู‚ุฉ ุŒ ุจุงู„ู†ุณุจุฉ ู„ู„ุญุณุงุจุงุช ุŒ ูŠุชุทู„ุจ ุงู„ุฃู…ุฑ ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ุชุญูˆูŠู„ุงุช ู…ู† ุงู„ู†ูˆุน ุงู„ุฐูŠ ู„ุง ุชุนุฑูู‡ ุงู„ู‚ูˆุงู„ุจ ุŒ ู„ุฐู„ูƒ ูŠุชู… ุฅุนุฏุงุฏ ูƒู„ ุดูŠุก ู…ู‚ุฏู…ู‹ุง. ู…ุน ุงู„ูˆุธุงุฆู ุŒ ูƒู„ ุดูŠุก ุฃูƒุซุฑ ุชุนู‚ูŠุฏู‹ุง ุจุดูƒู„ ุฎุทูŠุฑ ุŒ ูˆู‡ุฐุง ู‡ูˆ ู…ูˆุถูˆุน ู…ู‚ุงู„ ุขุฎุฑ.

ุงู„ูˆุธุงุฆู ุงู„ุชูŠ ู„ุฏูŠู†ุง ู‡ูŠ ู…ูู†ุดุฆ ุงู„ูƒุงุฆู†ุงุช ุŒ ูˆู‡ู†ุงูƒ ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ุชุฑูƒูŠุฒ ุนู„ู‰ ูƒูŠููŠุฉ ุฅู†ุดุงุก ุงู„ูƒุงุฆู†ุงุช ุจุงู„ูุนู„ ููŠ ู†ุธุงู…ู†ุง ุŒ ูˆูŠุชู… ุชุณุฌูŠู„ ุญู‚ูŠู‚ุฉ ุงู„ุฅู†ุดุงุก ุนู„ู‰ ู…ู†ูุฐ ุชู†ููŠุฐ ุจุนูŠุฏ ุŒ ูˆูŠุชู… ู†ู‚ู„ ุงู„ูƒุงุฆู† ุฅู„ู‰ ู…ู†ูุฐ ุขุฎุฑ ุŒ ูˆูŠุชู… ูุญุตู‡ ูˆุญูุธู‡ ุจุงู„ูุนู„ ู‡ู†ุงูƒ ุŒ ูˆู‡ู†ุงูƒ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุทุฑู‚ ู„ู„ุญูุธ ุŒ ุฏูˆู† ุฌุฏูˆู‰ ู‡ุฐุง ุงู„ู…ุฌุงู„ ู…ู† ุงู„ู…ุนุฑูุฉ ูŠุณู…ู‰ ุงู„ุชุดููŠุฑ. ูˆุงู„ููƒุฑุฉ ุจุณูŠุทุฉ ููŠ ุงู„ุฃุณุงุณ ุŒ ูˆู‡ูŠ ุนุจุงุฑุฉ ุนู† ุบู„ุงู ูŠุชู… ุชุฎุฒูŠู† ุงู„ุนู†ูˆุงู† ุฏุงุฎู„ู‡ ูู‚ุท ุŒ ูˆุงู„ุทุฑู‚ ุงู„ุชูŠ ุชุณู„ุณู„ ุงู„ู…ูƒุงู„ู…ุฉ ูˆุชุณุญุจ ู…ุนุงู„ุฌู†ุง ุงู„ู…ูุฑุฏ ุŒ ูˆุงู„ุฐูŠ ูŠู‚ูˆู… ุจุงู„ุจุงู‚ูŠ. ู„ุง ูŠู…ูƒู†ู†ุง ุงุณุชุฎุฏุงู… ู…ุณุงุนุฏ ุงู„ูˆูƒูŠู„ ุงู„ู…ูุฑุณูŽู„ ุŒ ู„ุฃู† ุงู„ู…ุณุชุฎุฏู… ู„ู… ูŠู†ู‚ู„ู‡ ุฅู„ูŠู†ุง ุŒ ู„ุฐุง ูƒุงู† ุนู„ูŠู†ุง ุฃู† ู†ุฌุนู„ู‡ ูุฑุฏูŠู‹ุง.

ุฎุฏุนุฉ ุฃุฎุฑู‰ - ููŠ ุงู„ูˆุงู‚ุน ุŒ ู…ุง ุฒู„ู†ุง ู†ุณุชุฎุฏู… ุณูŠุงู‚ ุงู„ุงุชุตุงู„ ุŒ ูˆู‡ุฐุง ูƒุงุฆู† ูŠุฎุฒู† ู…ุนู„ูˆู…ุงุช ุญูˆู„ ู…ู† ูˆู…ุชู‰ ูˆู„ู…ุงุฐุง ูˆู„ู…ุงุฐุง ุชู… ุงุณุชุฏุนุงุก ุนู‚ุฏู†ุง ุงู„ุฐูƒูŠ ุŒ ุจู†ุงุกู‹ ุนู„ู‰ ู‡ุฐู‡ ุงู„ู…ุนู„ูˆู…ุงุช ุŒ ูŠุชุฎุฐ ุงู„ู…ุณุชุฎุฏู… ู‚ุฑุงุฑู‹ุง ุจุดุฃู† ุชู†ููŠุฐ ุงู„ุชู†ููŠุฐ ุนู„ู‰ ุงู„ุฅุทู„ุงู‚ ุŒ ูˆุฅุฐุง ุฃู…ูƒู† ุซู… ูƒูŠู.

ููŠ ุงู„ุณุงุจู‚ ุŒ ู‚ู…ู†ุง ุจุจุณุงุทุฉ ุจุชู…ุฑูŠุฑ ุงู„ุณูŠุงู‚ ุŒ ูˆูƒุงู† ุญู‚ู„ุงู‹ ุบูŠุฑ ูˆุงุถุญ ููŠ ู†ูˆุน BaseContract ู…ุน ู…ูุญุฏุฏ ูˆู…ูุญุถุฑ ุŒ ูˆุณู…ุญ ุงู„ู…ูุญุฏุฏ ุจุชุนูŠูŠู† ุงู„ุญู‚ู„ ู…ุฑุฉ ูˆุงุญุฏุฉ ูู‚ุท ุŒ ู„ุฐู„ูƒ ุชู… ุชุนูŠูŠู† ุงู„ุณูŠุงู‚ ู‚ุจู„ ุชู†ููŠุฐ ุงู„ุนู‚ุฏ ุŒ ูˆู„ู… ูŠุชู…ูƒู† ุงู„ู…ุณุชุฎุฏู… ู…ู† ู‚ุฑุงุกุชู‡ ุฅู„ุง.

ูˆู„ูƒู† ู‡ู†ุง ุชูƒู…ู† ุงู„ู…ุดูƒู„ุฉ ุŒ ูŠู‚ุฑุฃ ุงู„ู…ุณุชุฎุฏู… ู‡ุฐุง ุงู„ุณูŠุงู‚ ูู‚ุท ุŒ ุฅุฐุง ุฃุฌุฑู‰ ู…ูƒุงู„ู…ุฉ ุฅู„ู‰ ู†ูˆุน ู…ู† ูˆุธุงุฆู ุงู„ู†ุธุงู… ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุงุณุชุฏุนุงุก ูˆูƒูŠู„ ู„ุนู‚ุฏ ุขุฎุฑ ุŒ ูุฅู† ู…ูƒุงู„ู…ุฉ ุงู„ูˆูƒูŠู„ ู‡ุฐู‡ ู„ุง ุชุชู„ู‚ู‰ ุฃูŠ ุณูŠุงู‚ ุŒ ุญูŠุซ ู„ุง ุฃุญุฏ ูŠู…ุฑุฑู‡ุง ุฅู„ูŠู‡. ุซู… ูŠุฏุฎู„ ุงู„ุชุฎุฒูŠู† ุงู„ู…ุญู„ูŠ ุงู„ุบูˆุฑูˆุชูŠู† ุงู„ู…ุดู‡ุฏ. ู‚ุฑุฑู†ุง ุนุฏู… ูƒุชุงุจุฉ ุงู„ุฎุงุตุฉ ุจู†ุง ุŒ ูˆู„ูƒู† ุงุณุชุฎุฏู… github.com/tylerb/gls.

ูŠุณู…ุญ ู„ูƒ ุจุถุจุท ุงู„ุณูŠุงู‚ ุงู„ุฎุงุต ุจุงู„ุบูˆุฑูˆุชูŠู† ุงู„ุญุงู„ูŠ ูˆุฃุฎุฐู‡. ูˆุจุงู„ุชุงู„ูŠ ุŒ ุฅุฐุง ู„ู… ูŠุชู… ุฅู†ุดุงุก ุบูˆุฑูˆุชูŠู† ุฏุงุฎู„ ุงู„ุนู‚ุฏ ุŒ ูุฅู†ู†ุง ูู‚ุท ู†ุถุน ุงู„ุณูŠุงู‚ ููŠ gls ู‚ุจู„ ุจุฏุก ุงู„ุนู‚ุฏ ุŒ ูˆุงู„ุขู† ู„ุง ู†ุนุทูŠ ุงู„ู…ุณุชุฎุฏู… ุทุฑูŠู‚ุฉ ุŒ ูˆู„ูƒู† ู…ุฌุฑุฏ ูˆุธูŠูุฉ.

 func GetContext() *core.LogicCallContext { return gls.Get("ctx").(*core.LogicCallContext) } 

ูˆู‡ูˆ ูŠุณุชุฎุฏู…ู‡ ุจุณุนุงุฏุฉ ุŒ ูˆู„ูƒู†ู†ุง ู†ุณุชุฎุฏู…ู‡ ููŠ RouteCall () ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ู„ูู‡ู… ุงู„ุนู‚ุฏ ุงู„ุฐูŠ ูŠุณุชุฏุนูŠ ุญุงู„ูŠู‹ุง ุดุฎุตู‹ุง ู…ุง.

ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ูŠู…ูƒู† ู„ู„ู…ุณุชุฎุฏู… ุฅู†ุดุงุก goroutine ุŒ ูˆู„ูƒู† ุฅุฐุง ูุนู„ ุฐู„ูƒ ุŒ ูุณูŠุชู… ูู‚ุฏ ุงู„ุณูŠุงู‚ ุŒ ู„ุฐู„ูƒ ู†ุญุชุงุฌ ุฅู„ู‰ ุงู„ู‚ูŠุงู… ุจุดูŠุก ุจู‡ุฐุง ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุฅุฐุง ูƒุงู† ุงู„ู…ุณุชุฎุฏู… ูŠุณุชุฎุฏู… ุงู„ูƒู„ู…ุฉ ุงู„ุฑุฆูŠุณูŠุฉ go ุŒ ููŠุฌุจ ุนู„ูŠู†ุง ุฃู† ู†ู„ู ู…ุซู„ ู‡ุฐู‡ ุงู„ู…ูƒุงู„ู…ุงุช ููŠ ุบู„ุงูู†ุง ุŒ ูˆุงู„ุฐูŠ ุณูŠุชุฐูƒุฑู‡ ุงู„ุณูŠุงู‚ ูˆูŠู†ุดุฆู‡ goroutine ูˆุงุณุชุนุงุฏุฉ ุงู„ุณูŠุงู‚ ููŠู‡ ุŒ ูˆู„ูƒู† ู‡ุฐุง ู‡ูˆ ู…ูˆุถูˆุน ู…ู‚ุงู„ ุขุฎุฑ.

ู…ุนู‹ุง


ู†ุญู† ู†ุญุจ ุจุดูƒู„ ุฃุณุงุณูŠ ูƒูŠููŠุฉ ุนู…ู„ ุณู„ุณู„ุฉ ุฃุฏูˆุงุช ู„ุบุฉ GO ุŒ ููŠ ุงู„ูˆุงู‚ุน ุฅู†ู‡ุง ู…ุฌู…ูˆุนุฉ ู…ู† ุงู„ุฃูˆุงู…ุฑ ุงู„ู…ุฎุชู„ูุฉ ุงู„ุชูŠ ุชูุนู„ ุดูŠุฆู‹ุง ูˆุงุญุฏู‹ุง ุŒ ูˆุงู„ุชูŠ ูŠุชู… ุชู†ููŠุฐู‡ุง ู…ุนู‹ุง ุนู†ุฏู…ุง ุชุจุฏุฃ ููŠ ุงู„ุจู†ุงุก ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„. ู‚ุฑุฑู†ุง ุฃู† ู†ูุนู„ ุงู„ุดูŠุก ู†ูุณู‡ ุŒ ูŠุถุน ูุฑูŠู‚ ูˆุงุญุฏ ู…ู„ู ุนู‚ุฏ ููŠ ุฏู„ูŠู„ ู…ุคู‚ุช ุŒ ูˆุงู„ุซุงู†ูŠ ูŠุถุน ุบู„ุงูู‹ุง ู„ู‡ ูˆูŠุณุชุฏุนูŠ ู…ุฑุฉ ุซุงู„ุซุฉ ุŒ ู…ู…ุง ูŠุคุฏูŠ ุฅู„ู‰ ุฅู†ุดุงุก ูˆูƒูŠู„ ู„ูƒู„ ุนู‚ุฏ ู…ุณุชูˆุฑุฏ ุŒ ูˆุงู„ุฑุงุจุน ูŠุฌู…ุน ูƒู„ ุดูŠุก ุŒ ูˆุงู„ุฎุงู…ุณ ูŠู†ุดุฑู‡ ุนู„ู‰ blockchain. ูˆู‡ู†ุงูƒ ุฃู…ุฑ ูˆุงุญุฏ ู„ุชุดุบูŠู„ู‡ู… ุจุงู„ุชุฑุชูŠุจ ุงู„ุตุญูŠุญ.

ุญุณู†ู‹ุง ุŒ ู„ุฏูŠู†ุง ุงู„ุขู† ุณู„ุณู„ุฉ ุฃุฏูˆุงุช ูˆูˆู‚ุช ุชุดุบูŠู„ ู„ุฅุทู„ุงู‚ GO ู…ู† GO. ู„ุง ุชุฒุงู„ ู‡ู†ุงูƒ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ู…ุดุงูƒู„ ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุฅู„ุบุงุก ุชุญู…ูŠู„ ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุบูŠุฑ ุงู„ู…ุณุชุฎุฏู…ุฉ ุจุทุฑูŠู‚ุฉ ุฃูˆ ุจุฃุฎุฑู‰ ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุชุญุฏูŠุฏ ุจุทุฑูŠู‚ุฉ ู…ุง ุฃู†ู‡ุง ู…ุนู„ู‚ุฉ ูˆุฅุนุงุฏุฉ ุชุดุบูŠู„ ุงู„ุนู…ู„ูŠุฉ ุงู„ู…ุนู„ู‚ุฉ ุŒ ูˆู„ูƒู† ู‡ุฐู‡ ู…ู‡ุงู… ูˆุงุถุญุฉ ู„ูƒูŠููŠุฉ ุญู„ู‡ุง.

ู†ุนู… ุŒ ุจุงู„ุทุจุน ุŒ ู„ุง ูŠุชุธุงู‡ุฑ ุงู„ุฑู…ุฒ ุงู„ุฐูŠ ูƒุชุจู†ุงู‡ ุจุฃู†ู‡ ู…ูƒุชุจุฉ ุŒ ูˆู„ุง ูŠู…ูƒู† ุงุณุชุฎุฏุงู…ู‡ ู…ุจุงุดุฑุฉ ุŒ ูˆู„ูƒู† ู‚ุฑุงุกุฉ ู…ุซุงู„ ุนู„ู‰ ุฅู†ุดุงุก ูƒูˆุฏ ุงู„ุนู…ู„ ุฃู…ุฑ ุฑุงุฆุน ุฏุงุฆู…ู‹ุง ุŒ ููŠ ูˆู‚ุช ูˆุงุญุฏ ูุงุชู†ูŠ ุฐู„ูƒ. ูˆูู‚ู‹ุง ู„ุฐู„ูƒ ุŒ ูŠู…ูƒู† ุนุฑุถ ุฌุฒุก ู…ู† ุฅู†ุดุงุก ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ููŠ ุงู„ู…ุชุฑุฌู… ุŒ ูˆู„ูƒู† ูƒูŠู ูŠุจุฏุฃ ููŠ ุงู„ู…ู†ูุฐ .

Source: https://habr.com/ru/post/ar425985/


All Articles