Saturday, September 19, 2015

Blockchain - I (Blockchain structure - Гинжэн блок ерөнхий бүтэц, Proof of work - гүйцэтгэлийн баталгаа)

Blockchain - I (Blockchain structure - Гинжэн блок ерөнхий бүтэц, Proof of work - гүйцэтгэлийн баталгаа)

(хяналт хийж бна...)
Энэхүү хөгжүүлэгчийн хөтөч нь биткойн-д тулгуурласан апп хийхэд хэрэгтэй мэдээллүүдийг багтаасан байна, гэвч энэ нь албан ёсны specification биш юм. Энэхүү хөтөчийг бүрнээр нь ашиглахын тулд  bitcoin core -ын хамгийн сүүлийн хувилбарыг download хийн суулгах хэрэгтэй.
Ямар нэгэн асуулт байвал биткойн хөгжүүлэгчдийн хэлэлцүүлэг дээр асуулт тавих хэрэгтэй.

Гинжэн блок
Гинжэн блок нь биткойны гүйлгээг нийтэд дэлгэн нээлттэй болгох зориулалттай зохиогдсон бөгөөд дэс дараалагдсан, хийгдсэн он цагийг агуулсан гүйлгээний тэмдэглээ юм. Энэ нь ямарваа нэгэн гүйлгээг дахин хуурамчаар хийх, хийгдсэн гүйлгээнд зохиомлоор өөр болгох зэргээс сайн хамгаалагдсан байна. Сүлжээн дэх зангилаа бүр зөвхөн өөрийн баталгаажуулсан блокийг агуулсан гинжэн блокийг тусадаа хадгалж байдаг. Хэрэв хэд хэдэн зангилаанууд хоорондоо адил блокуудыг хадгалж байвал тэдгээр нь "зөвшилцсөн" (consensus) байдалд байна. Эдгээр зангилаа нар хоорондоо зөвшилцөөнд хүрэхдээ тусгай баталгаажуулалтын дүрмийг (validation) ашиглах бөгөөд үүнийг "зөвшилцөөний дүрэм" (consensus rules) гэж нэрлэнэ. Дараах хэсэг нь энэхүү bitcoin core-д ашиглагддаг зөвшилцөөний дүрмүүдийг тайлбарласан байна.

Block Chain Overview

Дээр үзүүлсэн зураг нь гинжэн блокийн амарчилсан зураг болно. Нэг буюу түүнээс илүү гүйлгээнүүд нь блокийн хэсэг болон тэмдэглэгдэнэ. Гүйлгээний хуулбар болгонд хаш хийж, хашийг хамтатгасны дараа ганц хаш үлдтэл хаш дахин дахин хийгдэнэ. Энэхүү сүүлчийн хан нь merkle tree-ын merkle root юм.

Merkle root нь блокийн толгой хэсэгт (header)-т байрлагдана. Мөн блок бүр нь өмнөх блокийн хаш-ийг агуулж өмнөх блоктой холбогдоно. Ингэж холбогдсоноор тухайн гүйлгээ өөрчлөх боломжгүй болно учир нь гүйлгээг өөрчлөхийн тулд гүйлгээг тэмдэглэсэн блок болон тухайн блокийн дараа хийгдэх блокийг өөрчлөх хэрэгтэй.

Гүйлгээнүүд мөн хоорондоо гинжэн хэлхээгээр холбогдоно. Биткойн түрийвчны программ нь сатоши-г түрийвчнээс илгээж буй мэтээр хэрэглэгчдэд харагдана, харин яг үнэндээ бол биткойн нь нэг гүйлгээнээс нөгөө гүйлгээ рүү л шилжүүлэгдэнэ. Гүйлгээ бүр нь урьд нь хийгдсэн нэг буюу түүнээс илүү хийгдсэн гүйлгээнүүс ирсэн сатоши-г зарцуулах ба ингэснээр тухайн гүйлгээний оролт нь (input) нь түрүүчийн гүйлгээнүүдийн гаралт (output) юм.

Transaction Propagation

Нэг гүйлгээ хийгдэхэд хэд хэдэн гаралт (output) үүсэж боломжтой юм. Энэ нь хэд хэдэн өөр түрийвч рүү гүйлгээ хийсэн тохиолдол байж болно. Харин тухайн гүйлгээний гаралт бүр нь гинжэн блокт нэг удаа л оролт болон тэмдэглэгдэнэ. Ямарваа нэгэн тохиолдолд тухайн гаралтад дахин хандсан тохиолдол нь хориотой бөгөөд - энэ нь сатоши-г дахин хэрэглэх оролдлого юм. Үүнийг double spending буюу "дахин зарцуулалт" гэж нэрлэнэ.

Гаралтууд нь "гүйлгээний таних тэмдэг"(transaction identifiers (TXID))-тай уялдан орших бөгөөд, энэ нь гүйлгээний хаш утга юм. Дээр өгүүлсэнчлэн нэг гүйлгээний гаралтын утга нь ганц удаа л ашиглах боломжтой тул, гинжэн блок-т орших нийт гүйлгээ нь 2 янзаар хувааж болно:
1. "зарцуулагдаагүй гүйлгээний гаралтууд" (Unspent Transaction Outputs (UTXO))
2. "зарцуулагдсан гүйлгээний гаралтууд.
Ямарваа нэгэн төлбөр нь хүчинтэй байхын тулд, тухайн гүйлгээ нь зарцуулагдаагүй гүйлгээний гаралтууд (UTXO-unspend transaction output)-аас л ашиглах ёстой.
Ямарваа нэгэн гүйлгээний гаралтын хэмжээ нь оролтын хэмжээнээс өөр бол дараах дүрмийг ашиглана:
- Гүйлгээний гаралтын хэмжээ нь оролтын хэмжээнээс их бол тухайн гүйлгээг хорьж гүйлгээ цуцлагдана
- Гүйлгээний гаралтын хэмжээ нь оролтын хэмжээнээс бага бол, зөрүүг нь тухайн гүйлгээг агуулсан блокийг хийсэн биткойны уурхайчин гүйлгээний шимтгэл болгон авна.
Жишээ нь дээр харуулсан зурагнаас гүйлгээ бүр нь тухайн гүйлгээний оролтуудаас 10000-аар цөөн сатошиг зарцуулах ба 10000 сатоши нь уурхайчид гүйлгээний шимтгэл болон очих болно.

Гүйцэтгэлийн баталгаажуулалт (Proof of work)
Гинжэн блок нь сүлжээн дэх нэргүй оролцогчдын тусламжтайгаар оршиж байдаг тул, биткойны блокийг баталгаажуулалт хийгдэх их хэмжээний гүйцэтгэл хийх хэрэгтэй. Учир нь хэн нэг нь түрүүчийн хийгдсэн блокуудыг дүрэм зөрчин өөрчлөх оролдлого хийсэн тохиолдолд, шинээр блок үүсгэж буй дүрмийн дагуу оролцогчдоос илүү их оролдлого хийж тэдгээрийг гүйцэн очих шаардлагатай болно.
Блокууд бүгд гинжэн хэлхээгээр холбогдсон тул ямарваа нэгэн блокийг өөрчлөхийн тулд тухайн блокийн дараах бүх блокийг засан янзлах хэрэгтэй болно. Харин гинжэн блокт цагаас цагт нэмэгдэж буй тул тэдгээрийг мөн гүйцэн очиж өөрчилөх хэрэгтэй бөгөөд ингэснээр блок бүрийг өөрчлөх зардал нь блок нэмэгдэх тутамд ихсэж байна гэсэн үг. Ингэснээр гүйцэтгэлийн баталгаажуулалт нь блок нэмэгдэх тутамд илүү баталгаажиж байна гэсэн үг.

Гүйцэтгэлийн баталгаажуулалтад шифрлэлтийн хашийн хариуг нь урьдчилан тодорхойлох боломжгүй чанарыг ашигладаг. Сайн шифрлэлтийн алгоритмийн шифрлэлтийн хариу нь урьдчилан тодорхойлох боломжгүй тусмаа сайн гэж үздэг. Үндсэн текстийг өөрчилсөн тохиолдолд шифрлэлтийн утга мөн өөрчлөгдөх ба энэхүү өөрчлөлтийг урьдчилан мэдэх аргагүй байна. Таныг тухайн блокийг бүтээхийн тулд илүү хөдөлмөр хийснийг батлахын тулд, та блокийн толгойн хэсгийг хаш-лах ба утга нь тодорхой утгаас хэтрэхгүй байх хэрэгтэй. Жишээ нь, хашийн хамгийн өндөр утга нь 2^256-1 тохиолдолд, та 2^255-аас бага утга олсоноороо 2 хүртэл комбинацыг оролдлого хийснийг батална. Дээрхи жишээний хувьд та дунджаар, 2 хаш хийх оролдлого тутмын 1-д нь амжилттай хаш хийнэ гэсэн үг. Тэр ч байтугай та тухайн хашийн оролдлого нь тухайн тоот хязгаар-(target threshold) аас бага гарах эсхийг магадлаж болно.
Биткойны дизайны хувьд тоот хязгаарыг багасгах ба багасганаас үүдсэнээс оролдлого нь ихсэх ба энэ 2-ын харьцаа нь шугаман (linear) хамааралтай байна.

Шинээр хийгдсэн блок нь тухайн блокийн хаш нь зөвшилцдлийн протоколд заасан хашийг олох хэр хэцүүг тодорхойлсон хашийн нөхцлийг хангасан тохиолдолд д гинжэн блокт нэмэгдэнэ. 2016 блок болгоны эцэст, сүлжээ нь блокийн толгойн хэсэгт тэмдэглэгдсэн он цагийн тэмдэглэгээг ашиглан, 2016 блок дахь эхний болон эцсийн блок хийгдсэн хугацааг тодорхойлно. Энэхүү хугацаа интервал нь 1209600 секунд байсан тохиолдолд хамгийн тохиромжтой гэж үздэг ба энэ нь дунджаар 2 долоо хоног юм.

Хэрэв 2016 блокууд нь 2 долоо хоногоос бага хугацаанд хийгдсэн тохиолдолд, хашийн утгыг олоход пропорцоор (300% хүртэл) илүү хүнд болгоно. Ингэж тохиргоо хийсэн тохиолдолд дараагийн 2016 блок нь дунджаар 2 долоо хоногт хийгдэхээр тохиргоо хийгдэнэ.

Хэрэв 2016 блокууд нь 2 долоо хоногоос илүү хугацаанд хийгдсэн тохиолдолд, хашийн утгыг олоход илүү амар болгосноор (75% хүртэл багасгана) мөн дараагийн 2016 блокууд нь 2 долоо хоногт хийгдэхээр тохиргоо хийгдэнэ.

(Bitcoin Core-ын программд 2016 блокийг off-by-one алдааны уршгаас 2015 блокоос огноог гаргаснаар бага зэрэг хазайлт үүссэ болно.)

Үүнээс үүдэн ямар нэгэн блокийг хакердах тохиолдолд, тухайн блокоос хойших бүх блокийг өөрчилсөн тохиолдолд л болно гэдэгийг санаарай. Мөн түүнчлэн блок бүрийг бүтээхийн тулд тоот хязгаар (target threshold)-аас доош хаш утга гарган авах хэрэгтэй тул тухайн блокийг дүрмийн дагуу халдлага хийх тохиолдолд тухайн блок болон түүнээс цааших блок бүрийг бүтээхэд зарцуулсан их хэмжээний хаш тооцоолон бодох хүчин чадал хэрэгтэй болно. Үүнийг гүйцэлдүүлэхийн тулд, нийт сүлжээний 51-ээс дээш хувийг эзэмшсэнээр л хийх боломжтой. (Зарим тохиолдолд 50%-оос доош хаш хийх хүчин чадалтай тохиолдолд халдлага хийх боломжтой: Блокийн толгой хэсгийн тэмдэглэгээ нь хэд хэдэн засахад амар тэмдэглэгээнүүд бий, жишээ нь dedicated nonce field-ийг өөрчилсөнөөр шинээр гүйлгээ хүлээх шаардлагагүй. Мөн блокийн толгойн хэсгээс зөвхөн эхний 80 байт-д хаш хийж гүйцэтгэлийн баталгаажуулалт хийгдэнэ, мөн шинээр гүйлгээ нэмэх үед хаш гаргаж авахад блок дахь merklee tree-д орсон урьд блокийн хаш-ууд дээр зөвхөн хаш хийгдэнэ.)


3 comments:

  1. YoBit allows you to claim FREE COINS from over 100 unique crypto-currencies, you complete a captcha once and claim as much as coins you can from the available offers.

    After you make about 20-30 claims, you complete the captcha and keep claiming.

    You can press claim as many times as 50 times per one captcha.

    The coins will safe in your account, and you can convert them to Bitcoins or USD.

    ReplyDelete
  2. Casino Review 2020 - BBSEon
    Casino Review 2020. Play 토토 프로토 for 안전한바카라사이트 real, with no download, or with our full list of bonuses! 카카오 스포츠 Deposit & withdraw in-game 블랙잭애니 cash prizes: 벳 플릭스 A full list of slots, poker, roulette,

    ReplyDelete
  3. Harrah's Resort Southern California - MapyRO
    Find the 시흥 출장마사지 Harrah's 강릉 출장안마 Resort Southern California (www.harrahscasino.com) location in Greater Santa 용인 출장안마 Barbara, 강릉 출장안마 United States. 안성 출장샵

    ReplyDelete