Блокчейнді не құруымыз керек?

Адамзаттың бүкіл тарихы - бұл тізбектерден құтылудың және жаңа, одан да күштілерін жасаудың үздіксіз процесі. (Авторы белгісіз)

Көптеген блокчейн жобаларын талдай отырып (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin және т. Блокчейндер әртүрлі дизайнға, декорацияға және мақсаттарға қарамастан, бір-бірімен белгілі бір жолмен қосылған іргетасы, қабырғалары, шатыры, терезелері, есіктері бар үйлерді еске түсіреді. Ал егер сіз құрылысты жобалаудың негізгі принциптерін түсінсеңіз және қолданылатын материалдардың қасиеттерін білсеңіз, онда белгілі бір үйдің мақсатын анықтауға болады. Қазіргі уақытта блокчейнге қатысты жағдай туындады, бұл туралы бәрі естіген, бірақ жұмыс істеу архитектурасы мен принциптерін аз адамдар түсінеді. Сондықтан блокчейн технологияларын пайдаланудың неліктен және қалай мағынасы бар екенін түсінбеушілік бар.

Бұл мақалада біз барлық блокчейндерге тән қасиеттер мен принциптерді талдаймыз. Әрі қарай, блокчейннің көмегімен шешуге болатын мәселелерді қарастырайық және материалды нығайту үшін виртуалды сайтымызда шағын, бірақ нақты блокчейн құрастырайық!

Сонымен, блокчейннің бастапқыда қандай мәселелерді шешкенін еске түсірейік.

Көпшілік таратылған, орталықтандырылмаған, жалпыға ортақ және өзгермейтін деректер базасы туралы айтатынына сенімдімін. Бірақ мұның бәрі не үшін қажет болды?

Мен кез келген технологияны стандарттарды оқудан бастағанды ​​жөн көремін, өйткені зерттелетін тақырып бойынша барлық мақалалар мен кітаптар соларға негізделген. Бірақ қазіргі уақытта блокчейн стандарттары жоқ; ISO тек жасады комитеттер олардың дамуы үшін. Қазіргі уақытта әрбір қоғамдық блокчейн жобасында өзінің White paper құжаты бар, ол негізінен техникалық сипаттама болып табылады. Бірінші жалпыға белгілі блокчейн жобасы - Bitcoin желісі. Желінің ресми веб-сайтына өтіңіз және біз қараймыз бәрі басталды.

Blockchain Challenge

Сонымен, Bitcoin пионер желісінде блокчейн шешкен міндет - делдалсыз сенімді емес ортада цифрлық активтерге (активтерге) меншік құқығын сенімді беруді жүзеге асыру. Мысалы, Bitcoin желісінде цифрлық актив биткоиндік цифрлық монеталар болып табылады. Bitcoin және басқа блокчейндердің барлық техникалық шешімдері осы мәселені шешуге келеді.

Блокчейн шешетін мәселелер

Белгілі бір қаржы ұйымы бүкіл әлем бойынша кез келген адамға ақша аударуға болатын желі құрды деп айтты делік. Сіз оған сенесіз бе? Егер бұл ұйым Visa немесе MasterCard болса, сіз оған сенетін шығарсыз, бірақ салыстырмалы түрде айтсақ, AnonymousWorldMoney болса, сенбейтін шығарсыз. Неге солай? Бірақ біз жеке компаниялармен бөлінген жүйелерді қалай жасайтынын, қандай мақсатта жасайтынын және бұл неге әкелетінін жақсы білеміз. Мұндай жүйелердің мәселелерін және блокчейн технологияларын қолдану арқылы оларды қалай шешуге болатынын егжей-тегжейлі қарастырайық.

Шартты AnonymousWorldMoney-де дерекқорлары бар серверлер бар делік және олардың бірнешеуінің әртүрлі деректер орталықтарында болғаны жақсы. Жіберуші ақша аударған кезде транзакция тіркеледі, ол барлық серверлерге қайталанады және ақша алушыға жетеді.

Блокчейнді не құруымыз керек?

Идеал әлемде бұл схема жақсы жұмыс істейді, бірақ бізде келесі мәселелер туындайды:

  1. Бір жағынан қатысушыларды анықтау проблемасы, екінші жағынан мәмілелердің анонимділігінің қажеттілігі. Анау. ақшаны белгілі бір алушыға аудару керек және бұл транзакция туралы транзакцияға қатысушылардан басқа ешкім білмейтіндей етіп аудару керек. Банктерде белгілі бір жеке немесе заңды тұлғаға байланысты шот нөмірлері мен банк карталары бар, банк құпиясы транзакция туралы ақпаратты қорғайды. Шартты AnonymousWorldMoney жеке деректер мен транзакциялар туралы ақпаратты өз мақсаттары үшін пайдаланбайтынына кім кепілдік береді?
  2. Алушы өзіне аударылған соманы дәл алғанына қалай көз жеткізуге болады? Салыстырмалы түрде айтқанда, жіберуші $100 аударды, ал алушы $10 алды. Жіберуші өзінің түбіртегімен AnonymousWorldMoney кеңсесіне келеді, ал кеңсе қызметкері өзінің нұсқасын көрсетеді, онда жіберуші бар болғаны $10 аударған деп жазылған.
  3. Сенімсіз орта мәселесі, мысалы, екі есе жұмсау деп аталатын алаяқтық. Жоспарсыз қатысушы төлем барлық серверлерге қайталанғанша өз балансын бірнеше рет жұмсай алады. CAP теоремасы, әрине, ешкім күшін жойған жоқ және ақыр соңында келісімге қол жеткізіледі, бірақ біреу көрсетілген қызметтер немесе тауарлар үшін ақша алмайды. Сондықтан, егер төлем ұйымына немесе транзакцияларға қатысушыларға толық сенім болмаса, онда сенімге емес, криптографияға негізделген желі құру қажет.
  4. Шартты AnonymousWorldMoney серверлерінің шектеулі саны бар, олар байқаусызда немесе зиянды ниетке байланысты қолжетімсіз болуы мүмкін.
  5. AnonymousWorldMoney өзінің нақты комиссиясын алады.
  6. Бақылау мүмкіндігі. Биткоиннің жұмыс істеуі кезінде адамдар бір-біріне монеталарды аударып қана қоймай, транзакцияның әртүрлі шарттарын, бағдарлама жұмысының сценарийлерін тексеруді, шарттарға байланысты әрекеттерді автоматты түрде орындауды және т.б.

Блокчейн бұл мәселелерді қалай шешеді

  1. Қатысушыларды сәйкестендіру жұп кілттердің көмегімен жүзеге асырылады: жеке және ашық, ал ЭЦҚ алгоритмі жіберуші мен алушыны бірегей түрде сәйкестендіреді, олардың жеке басын анонимді қалдырады.
  2. Транзакциялар блоктарға жиналады, блоктың хэші есептеледі және келесі блокқа жазылады. Блоктардағы хэштерді жазудың бұл тізбегі blockchain технологиясына өз атын береді, сонымен қатар блоктарды немесе блоктардан жеке транзакцияларды байқамай өзгертуге/жоюға мүмкіндік бермейді. Осылайша, егер транзакция блокчейнге қосылса, оның деректері өзгеріссіз қалатынына сенімді бола аласыз.
  3. Қай деректерді жарамды деп санайтын және қайсысын алып тастау керектігі туралы желілік консенсусқа қол жеткізу арқылы екі есе жұмсалатын алаяқтықтың алдын алады. Bitcoin желісінде консенсусқа жұмыс дәлелі (PoW) арқылы қол жеткізіледі.
  4. Желінің сенімділігіне блокчейннің жалпыға бірдей болуымен қол жеткізіледі, мұнда әрбір қатысушы өз түйінін басқара алады, блокчейннің толық көшірмесін ала алады және сонымен қатар транзакциялардың дұрыстығын дербес тексеруге кіріседі. Айта кету керек, заманауи блокчейндер тек қоғамдық (ашық) ғана емес, сонымен қатар жеке (жабық) блокчейндерді құруға, сондай-ақ аралас схемаларды пайдалануға мүмкіндік береді.
  5. Блокчейн комиссиялардан толығымен құтылмайды, өйткені... сіз желіні қолдайтын адамдарға төлеуіңіз керек, бірақ блокчейнде комиссияның қажеттілігі соншалықты сенімді түрде дәлелденген, оның қажеттілігіне күмән жоқ.
  6. Заманауи блокчейндер блокчейнде Smart Contracts деп аталатын бизнес логикасын жүзеге асыру мүмкіндігіне ие. Смарт келісімшарттардың логикасы әртүрлі жоғары деңгейлі тілдерде жүзеге асырылады.

Әрі қарай, біз бұл шешімдерді толығырақ қарастырамыз.

Блокчейн архитектурасы

Блокчейн компоненттері

Әрбір қатысушы блокчейннің толық көшірмесімен (толық түйін) өз түйінін іске қоса алады. Блокчейндегі транзакцияларды жаза алатын толық түйіндер деп аталады консенсус түйіндері (куәгер) немесе кеншілер (шахтер). Тек транзакциялардың дұрыстығын тексеретін толық түйіндер шақырылады аудит түйіндері (аудит). Жеңіл клиенттер (жеңіл клиенттер) блокчейннің толық көшірмелерін сақтамайды, бірақ толық түйіндерді пайдаланып желімен өзара әрекеттеседі.
Көптеген пайдаланушылар транзакциялар жасау үшін жеңіл клиенттерді немесе веб-әмияндарды пайдаланады. Барлық түйіндер бір-бірімен байланысты. Осы элементтер жиынтығымен желі архитектурасы тұрақтырақ болады:

Блокчейнді не құруымыз керек?

Транзакцияның өмірлік циклі

Транзакцияның өмірлік циклін қарастырайық және оны бөліктерге бөлейік:

Блокчейнді не құруымыз керек?

Блокчейн технологиялары

Техникалық шешімдерге және олардың бір-бірімен байланыстарына толығырақ тоқталайық.

Сәйкестендіру

Әрбір блокчейн транзакциясына цифрлық қолтаңба қойылуы керек. Сондықтан, транзакцияны аяқтау үшін әрбір қатысушыда кілт жұбы болуы керек: жеке / жалпы. Кейде жұп кілттер әмиян деп аталады, өйткені кілттер қатысушының бірегей цифрлық мекенжайымен және балансымен бірегей түрде байланысты. Шындығында, кілттер мен мекенжайлар әртүрлі санау жүйелеріндегі сандар тізбегі ғана. Кілттер мен әмиян мекенжайларының мысалдары:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Блокчейндерде цифрлық қолтаңбаны жасау үшін эллиптикалық қисықтарға негізделген алгоритм қолданылады: Эллиптикалық қисық цифрлық қолтаңба алгоритмі (ECDSA). Оның жұмыс істеуі үшін жеке кілт (256-биттік нөмір) әдетте кездейсоқ түрде алынады. Негізгі опциялардың саны 2-ден 256-ға дейін, сондықтан жеке кілттердің мәндерін сәйкестендірудің практикалық мүмкін еместігі туралы айтуға болады.

Әрі қарай, ашық кілт жеке кілттен оның мәнін эллиптикалық қисық сызықта орналасқан нүктенің координатасына көбейту арқылы алынады, нәтижесінде сол қисықтағы жаңа нүктенің координаталары алынады. Бұл әрекет транзакцияларға сандық қол қоюға жарамды кілт жұбын алуды қамтамасыз етеді. Ақырында, әмиян мекенжайы ашық кілттен бірегей түрде алынады.

Блокчейнде қолданылатын криптография туралы мәліметтері бар көптеген мақалалар бар, мысалы: Бір сөзбен айтқанда Bitcoin - Криптография

Жеке кілт қатаң түрде құпия және қауіпсіз сақталуы керек. Ашық кілт бәріне белгілі. Егер жеке кілт жоғалса, активке (тиындарға) қол жеткізуді қалпына келтіру мүмкін емес және ақша мәңгілікке жоғалады. Сондықтан жеке кілттерді қауіпсіз сақтау міндеті өте өзекті, өйткені Бұл әрқашан төлқұжатыңызбен келіп, шотыңызды қалпына келтіруге болатын банк емес. Флэш-дискілерге ұқсас суық криптографиялық әмияндарды шығарудың тұтас саласы бар:

Блокчейнді не құруымыз керек?

немесе сіз неғұрлым сенімді әдістерді пайдалана аласыз, мысалы, таңбалауыштардағы жеке кілттің мәнін белгілеу:

Блокчейнді не құруымыз керек?

Мәмілелер

Мәміле құрылымы туралы толығырақ ақпаратты мақаладан табуға болады Бір сөзбен айтқанда биткоин – транзакция. Біз үшін әрбір транзакцияда кем дегенде келесі деректер бар екенін түсіну маңызды:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Содан кейін транзакцияға жеке кілтпен қол қойылады және жіберіледі (хаттаманың жұмысы туралы мәліметтерді қараңыз Биткоин қысқаша хаттама) транзакциялардың жарамдылығын тексеретін блокчейндегі барлық түйіндерге. Транзакцияны тексеру алгоритмі тривиальды емес және қамтиды екі ондаған қадам.

Транзакция блоктары

Транзакциялардың жарамдылығын тексергеннен кейін түйіндер олардан блоктарды құрайды. Транзакциялардан басқа блокқа алдыңғы блоктың хэші және сан (Nonce есептегіші) жазылады, ал ағымдағы блоктың хэші SHA-256 алгоритмі арқылы есептеледі. Хэште белгіленген күрделілік шарттары болуы керек. Мысалы, Bitcoin желісінде хэштің қиындығы желінің қуатына байланысты әр 2 апта сайын автоматты түрде өзгереді, осылайша блок шамамен 10 минут сайын бір рет жасалады. Күрделілік келесі шартпен анықталады: табылған хэш алдын ала анықталған саннан аз болуы керек. Егер бұл шарт орындалмаса, онда Nonce мәніне 1 қосылады және хэшті есептеу жұмысы қайталанады. Хэшті таңдау үшін Nonce өрісі пайдаланылады, себебі Бұл блоктағы өзгертуге болатын жалғыз деректер, қалғандары өзгеріссіз қалуы керек. Жарамды хэште нақты хэштердің бірі сияқты жетекші нөлдердің белгілі саны болуы керек:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Хэшті сәтті табу - Bitcoin немесе Ethereum желілері үшін орындалған жұмыстың дәлелі (Proof-of-Work, PoW). Хэштерді табу процесі алтын өндіруге ұқсас тау-кен өндіру деп аталады. Атауы процестің мәнін өте дәл анықтайды, өйткені опцияларды қарапайым іздеу бар, және егер біреу қолайлы хэшті тапса, бұл шынымен сәттілік. Бұл мыңдаған бос жыныстардан нағыз алтын кесектерін тапқандай. Блок сыйлығы қазір 12.5 BTC болып табылады және егер сіз оны 3900 доллардың ағымдағы Bitcoin бағамына көбейтсеңіз, сіз бір килограмнан астам таза алтын аласыз. Күресетін нәрсе бар!

Хэшті сәтті тапқаннан кейін блок пен табылған хэштің өзі келесі блок ретінде блокчейнге жазылады. Блоктардың құрылымы туралы толығырақ мақалада табуға болады Қысқаша айтқанда Bitcoin - Blockchain, және төменде жеңілдетілген диаграмма берілген:

Блокчейнді не құруымыз керек?

Блокчейн алдыңғы блоктың хэші әлі жоқ блоктан басталады. Блокчейнде осындай бір ғана блок бар және оның өз атауы Genesis блогы бар. Қалған блоктар бірдей құрылымға ие және тек транзакциялар саны бойынша ерекшеленеді. Қазіргі уақытта Bitcoin немесе Ethereum-да жасалып жатқан нақты транзакциялар мен блоктарды көруге болады Block Explorer.

Биткоиндегі блоктардың өлшемі 1 МБ-пен шектелген және транзакциядағы ақпараттың ең аз көлемі шамамен 200 байт болса, блоктағы транзакциялардың максималды саны шамамен 6000 болуы мүмкін. Осы жерден, айтпақшы, барлығы күлетін Bitcoin өнімділігін бақылайды: блок шамамен 10 минут сайын * 60 секунд = 600 секундта жасалады, бұл шамамен 10 TPS ресми өнімділігін береді. Шын мәнінде, бұл өнімділік емес, әдейі орындалған жұмыс алгоритмі. Ethereum-де бәсекелестік үшін олар блокты құру уақытын 15 секундқа ғана жасады. және өнімділік ресми түрде өсті. Сондықтан, PoW консенсус ретінде пайдаланатын блокчейндерде өнімділікті салыстырудың мағынасы жоқ, өйткені ол кез келген мәнге тағайындалуы мүмкін кэшті есептеудің күрделілігіне тікелей байланысты.

Шанышқылар

Мысалы, бірнеше түйін күрделілік шарттарына сәйкес келетін, бірақ құны бойынша әртүрлі (басқаша айтқанда, олар әртүрлі консенсусқа келген) хэштерді тауып, блокчейнге блоктар жазған жағдайда не болады? Блокчейннің бұл жағдайдан қалай қорғайтынын көрейік. Бұл жағдайда шанышқы деп аталатын нәрсе пайда болады және блокчейнде тізбектің екі нұсқасы бар:

Блокчейнді не құруымыз керек?

Әрі қарай не болады? Содан кейін желінің бір бөлігі N+2 блогында бір тізбектен, ал бір бөлігі екіншісінен жұмыс істей бастайды:

Блокчейнді не құруымыз керек?

Осы блоктардың бірі ертерек табылып, блокчейнге жіберіледі, содан кейін ережелерге сәйкес блокчейн ұзағырақ тізбекке ауысып, баламалы блоктан барлық транзакциялардан бас тартуы керек:

Блокчейнді не құруымыз керек?

Бұл ретте, қатысушының транзакциясы тек қана форк-блоктардың бірінде болған кезде, ол жойылған жағдай туындауы мүмкін. Сондықтан, қалаған транзакцияның блокчейнге жазылғанына сенімді болу үшін жалпы ұсыныс бар - транзакцияға сенбес бұрын блокчейнге келесі бірнеше блок қосылғанша күту керек. Әртүрлі блокчейндерді күту үшін қанша блокты күту туралы ұсыныстар өзгереді. Мысалы, Bitcoin желісі үшін минимум 2 блок, максимум 6 блок.

Блок шанышқыларымен бірдей сурет 51% деп аталатын шабуыл кезінде байқалады - бұл шахтерлер тобы өздерінің алаяқтық транзакциялары арқылы тізбекті жоюға тырысып, балама блок тізбегін өсіруге тырысады. Қазіргі уақытта алаяқтыққа емес, өз күшіңізді адал өндіруге жұмсау тиімдірек.

Консенсус

Блокчейндегі блокты жазу үшін желі консенсусқа жетуі керек. Компьютерлік байланыс желілерінде консенсусқа жету міндетін еске түсірейік. Мәселе Византия генералдарының міндеті ретінде тұжырымдалған БФТ (Византия ақауларына төзімділік). Византия армиясының мәселелерінің көркем сипаттамасын қалдырмай, мәселені келесідей тұжырымдауға болады: егер кейбір желі түйіндері оларды әдейі бұрмалай алса, желі түйіндері жалпы нәтижеге қалай жетуі мүмкін. BFT мәселесін шешудің қолданыстағы алгоритмдері алаяқтардың 1/3 бөлігінен аз болса, желі дұрыс жұмыс істей алатынын көрсетеді. Неліктен BFT консенсусы Bitcoin желісіне қолданылмады? Неліктен PoW пайдалану қажет болды? Бірнеше себептер бар:

  • BFT түйіндердің шағын бекітілген жиынтығымен жақсы жұмыс істейді, бірақ жалпыға ортақ блокчейнде түйіндердің санын болжау мүмкін емес, сонымен қатар түйіндерді кездейсоқ қосуға және өшіруге болады.
  • Адамдарды блокчейн түйіндерін іске қосуға ынталандыру қажет. Ол үшін адамдарды марапаттау керек. BFT-те сыйақы алуға ресми түрде ештеңе жоқ, бірақ PoW-те сыйақы не үшін екені барлығына интуитивті деңгейде түсінікті: блок хэшін табу процесінде процессор тұтынатын электр энергиясы үшін.

PoW-тен басқа, қазіргі блокчейндерде қолданылатын бірнеше басқа консенсустар бар, мысалы:

  • PoS (Proof-of-Stake) - блокчейнде Hyperledger
  • DPoS (Delegated Proof-of-Stake) – блокчейнде BitShares
  • BFT модификациялары: SBFT (Жеңілдетілген BFT) және PBFT (Practical BFT), мысалы, блокчейндегі Экзонум

PoS консенсусына аздап тоқталайық, өйткені... Бұл жеке блокчейндерде ең кең таралған PoS және оның сорттары. Неге оңаша? Бір жағынан, PoS сипаттамалары PoW-мен салыстырғанда жақсырақ, өйткені Консенсусқа жету үшін аз есептеу ресурстары қажет, яғни блокчейнге деректерді жазу жылдамдығы артады. Бірақ екінші жағынан, PoS алаяқтық үшін көбірек мүмкіндіктерге ие, сондықтан оны бейтараптандыру үшін блокчейннің барлық қатысушылары белгілі болуы керек.

PoS консенсусы шоттағы қаражат сомасына байланысты блокчейнге транзакциялары бар блокты жаза алатын түйінді таңдауға негізделген, дәлірек айтсақ, шоттағы емес, кепілде, яғни. Кепіл ретінде неғұрлым көп қаражат болса, желі блокты жазу үшін сіздің түйініңізді таңдауы ықтимал. Блок жарамсыз болса, депозит қайтарылмайды. Бұл алаяқтықтан қорғауды қамтамасыз етеді. PoS-тің келесі нұсқалары бар:

  • Өкілетті PoS (DPoS) консенсусы қатысушыларды «сайлаушылар» және «тексерушілер» деп бөледі. Монета ұстаушылар (дауыс беруге қатысушылар) блокчейндегі транзакцияларды тексеру және тіркеу өкілеттігін басқа қатысушыларға береді. Осылайша, валидаторлар барлық есептеу жұмыстарын орындайды және ол үшін сыйақы алады, ал дауыс беруге қатысушылардың болуы валидаторлардың адалдығына кепілдік береді, өйткені оларды кез келген уақытта өзгертуге болады.
  • LPoS (Leased Proof-of-Stake) консенсусы сіздің қаражатыңызды басқа түйіндерге жалға беруге мүмкіндік береді, осылайша олардың блоктарды тексеру мүмкіндігі жоғары болады. Бұл. Сіз транзакциялар үшін комиссияны нақты транзакцияны тексеруге қатыспастан және тау-кен блоктарын ала аласыз.

Әлі кеңінен қолданылмаған бірқатар басқа консенсустар бар, мен оларды ақпарат үшін осында тізіп беремін, консенсус алгоритмдерінің шолуын, мысалы, мақалада табуға болады: Блокчейндегі консенсус алгоритмдері.

  • PoET (өткен уақыттың дәлелі)
  • PoC (сыйымдылықты дәлелдеу)
  • PoB (күйіктің дәлелі)
  • PoWeight (салмақ дәлелі)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (маңыздылығын дәлелдеу)

Блокчейндердің сенімділігі және орналастыру үлгілері

Жалпыға ортақ блокчейн

Тұрақтылық қоғамдық немесе басқа атау Рұқсатсыз блокчейн Бұл кез келген адамға қосылуға және ақпаратты көруге немесе тіпті өз түйінін қосуға мүмкіндік беру арқылы қол жеткізіледі және сенім PoW консенсусына негізделген.

Жеке блокчейн

жеке немесе Жеке рұқсат етілген блокчейн. Бұл блокчейндерде ақпаратқа қатысушылардың белгілі бір тобы (ұйымдар немесе адамдар) ғана қол жеткізе алады. Мұндай блокчейндерді жалпы пайданы немесе тиімділікті арттыру мақсатында ұйымдар жасайды. Олардың сенімділігі қатысушылардың ортақ мақсаттарымен және PoS және BFT консенсус алгоритмдерімен қамтамасыз етіледі.

Блокчейн консорциумы

Бар Консорциум немесе Жалпыға қолжетімді блокчейн. Бұл кез келген адам көру үшін қосыла алатын блокчейндер, бірақ қатысушы ақпарат қоса алады немесе өз түйінін басқа қатысушылардың рұқсатымен ғана қоса алады. Мұндай блокчейндерді ұйымдар тұтынушылардың немесе өнімді тұтынушылардың немесе жалпы қоғамның сенімін арттыру үшін жасайды. Мұнда сенімділікке қатысушылар арасында сенімнің болуы және бірдей PoS және BFT консенсус алгоритмдері арқылы қол жеткізіледі.

Ақылды Келісімдер

Биткоиннан кейін енгізілген блокчейндер бір дәрежеде ақылды келісімшарттарды орындау мүмкіндігін қосты. Негізінде, смарт келісім-шарт – орындау үшін бағдарлама коды орналастырылған транзакция. Ethereum желісіндегі ақылды келісім-шарттар EVM (Ethereum виртуалды машинасы) жүйесінде орындалады. Смарт келісім-шартты орындауды бастау үшін ол басқа транзакция арқылы анық іске қосылуы немесе орындаудың алғышарттары орындалуы керек. Смарт келісім-шартты орындау нәтижелері де блокчейнге жазылады. Блокчейннен тыс деректерді алу мүмкін, бірақ өте шектеулі.

Смарт келісім-шарт арқылы қандай бизнес логикасын жүзеге асыруға болады? Іс жүзінде көп нәрсе жоқ, мысалы, блокчейндегі деректерді пайдалана отырып, шарттарды тексеру, осы шарттарға байланысты цифрлық активтердің иелерін өзгерту, блокчейндегі тұрақты сақтауда деректерді жазу. Логика ерекше жоғары деңгейлі Solidity тілінде жүзеге асырылады.

Смарт келісімшарттар арқылы жүзеге асырылатын функционалдылықтың классикалық мысалы - ICO үшін таңбалауыштарды шығару. Мысалы, мен қарапайым 500 000 000 AlexToken шығару үшін смарт келісімшартты жүзеге асырдым. Авторы Etherscan ішіндегі сілтеме орналасқан

Solidity тіліндегі смарт келісімшарттың бастапқы коды

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

және желі оны көретін екілік көрініс

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Смарт келісімшарттар туралы толығырақ ақпаратты мақаладан табуға болады: Ethereum-дағы ақылды келісімшарттар дегеніміз не.

қорытынды

Біз заманауи блокчейндер құрастырылған технологияларды және олардың бір-бірімен қалай байланысатынын атап өттік. Енді блокчейн арқылы қандай мәселелерді шешуге болатынын және қандай шешімдер ең жақсы жағдайда тиімсіз болатынын тұжырымдап көрейік. Сонымен, блокчейнді пайдалану қажет емес, егер:

  • Мәмілелер сенімді ортада жүзеге асырылады;
  • Делдалдар комиссиясының болуы қатысушылардың өмірін нашарлатпайды;
  • Қатысушыларда цифрлық активтер ретінде ұсынылатын мүлік жоқ;
  • Сандық активтерде бөлу жоқ, яғни. мән тек бір қатысушыға тиесілі немесе жеткізіледі.

Блокчейнді болашақта не күтіп тұр? Енді біз блокчейн технологияларын дамытудың ықтимал жолдары туралы ғана болжам жасай аламыз:

  • Blockchain белгілі бір мәселелер ауқымын шешуге арналған SQL немесе NoSQL сияқты ортақ дерекқор технологиясына айналады;
  • Blockchain кең таралған протоколға айналады, мысалы HTTP Интернетке арналған;
  • Блокчейн планетадағы жаңа қаржылық және саяси жүйенің негізі болады!

Келесі бөлімде біз қазіргі уақытта қандай блокчейндер бар екенін және олардың әртүрлі салаларда неліктен қолданылатынын қарастырамыз.

Бұл тек бастамасы!

Ақпарат көзі: www.habr.com

пікір қалдыру