Tuesday, April 12, 2016

Bitcoin дата - биткойны блокийн бүтэц

Bitcoin дата - биткойны блокийн бүтэц


Биткойны гүйлгээний мэдээллүүд нь блок тэмдэглэгээнд бүрмөсөн устахгүйгээр хадгалагдсан байдаг. Блокууд нь бие биенийхээ араас дараалж цуварсан байдлаар орших бөгөөд үүнийг гинжэн блок буюу blockchain гэж нэрлэнэ. Шинээр хийгдсэн гүйлгээнүүдийг блок болгон бүрдүүлсний дараа уурхайчдын тусламжтайгаар гинжэн блокийн төгсгөлд нэмэх бөгөөд ингэсний дараа сүлжээ нь тухайн шинэ блокийг хүлээн авсаны дараа өөрчлөх буюу гээх ямар ч боломжгүй болно. (софтвар нь өнчин блокийг харин гээж хүчингүй болгодгийг санаарай.)


FieldDescriptionSize
Шидэт дугаарямагт 0xD9B4BEF9 утгатай байна.4 byte
Блок хэмжээ (blocksize)Блокийн төгсгөл хүртэл хэмжээг byte-аар илэрхийлнэ.4 byte
Блокийн толгой (blockheader)толгой нь дотроо 6-н зүйлээс бүрдэнэ80 byte
Гүйлгээ тоолуур (transaction counter)эерэг бүхэл тоо VI = VarInt1 - 9 byte
Гүйлгээнүүдхоосон бус гүйлгээний жагсаалтГүйлгээнүүдийн тооноос шалтгаалаад өөр өөр байна. 

Блокийн бүтэц

Тайлбар

Блок бүр нь олон янзын тэмдэглэгээнүүдээс бүрдэх бөгөөд тэдгээрээс хамгийн онцлох тэмдэглэгээнүүд нь блокт хамаарагдах саяхан хийгдсэн гүйлгээ болон түрүүчийн блокийг заасан тэмдэглэгээнүүд орно. Мөн блок нь математекийн хувьд тайлахад хэцүү бодлогын хариуг агуулсан бөгөөд энэ нь блок тус бүрт өөр өөр байна. Шинээр хийгдсэн блокийг тухайн бодлогын хариуг гаргалгүйгээр сүлжээнд шилжүүлэн нийлүүлж болохгүй бөгөөд - энэхүү бодлогын хариуг гаргахын тулд уурхайчид хоорондоо өрсөлдөнө. Тухайн математикийн бодлогын хариуг гаргах нь их хэцүү бөгөөд харин нэгэнт хариу нь гарсан бол сүлжээ нь тухайн хариуг баталгаажуулах нь маш амархан байна. Тухайн блок нь хэд хэдэн өөр хариутай байх бөгөөд тайлахын тул ганц хариуг нь олсон байхад л хангалттай. 
Блокийн хариуг тайлахад шагналтай гэдгийг та мэдэж байгаа харин тухайн блокийг тайлсан шагналыг хүлээн авах хаягууд болон script-үүд нь мөн блокт тэмдэглэгдсэн байдаг. Энэхүү рекордыг generation гүйлгээ буюу coinbase гүйлгээ хэмээн нэрлэх бөгөөд тухайн блок дахь гүйлгээнүүдийн хамгийн эхний гүйлгээ нь байна. Нэг блок бүрдэх болгонд 25 биткойн үйлдвэрлэгдэх бөгөөд, энэ нь 210,000 блокийн дараа энэ нь түрүүчийнхээс хагас нь болж багасна. (ойролцоогоор 4 жил тутамд).
Биткойны гүйлгээ нь тухайн гүйлгээг эхэлсэн хүнээс сүлжээ рүү цацагдах бөгөөд сүлжээнд оролцож буй уурхайчдын компьютерүүд нь өөр өөрсдийн тайлах гэж буй блоктоо гүйлгээний рекордыг нэмнэ. Уурхайчид нь гүйлгээг өөр өөрсдийн блокт тэмдэглэх ашиг сонирхолтой байх бөгөөд учир нь гүйлгээ бүр нь гүйлгээний шимтгэлтэй учраас тэр юм. 
Блокийг тайлах математикийн тайлах цагийг цагт дунджаар 6 блок тайлж болохоор хүнд хөнгөнийг нь сүлжээгээр автоматаар тохируулна. 2016 блок бүрт (дунджаар 2 долоо хоног тутамд), биткойны бүх үйлчлэгчидүүд нь тухайн хугацаанд хэдэн блок үүсгэснийг харьцуулан үзээд зөрүүнээс нь шалтгаалан дараагийн 2016 блокийг тайлах хүнд хөнгөнийг нь тохируулна. Үүнээс үүдэн сүлжээ нь зөвшилцөөнд хүрсэний дараа блокийг үүсгэхэд шаардагдах математикийн хариун хүнд хөнгөнийг ихэсгэнэ (эсвэл багасгана).
Блок бүр нь түрүүчийн бүтээгдсэн блокийг заасан утгыг агуулсан байдаг учир, бүр блокууд нь нийлээд гинжэн цуваа үүсгэнэ. Зарим тохиолдолд гинжэн цуваа нь түр зуур салаалаль үүсэх магадлалтай, учир нь 2 уурхайчид тухайн блокийг тайлах зөв утгуудыг яг нэг цаг мөчид олсон байж болно. Энэхүү тохиолдолд сүлжээ нь энэхүү салаалтын аль нэгийг богино хугацаанд сонгож шийднэ.
Сүлжээнд буй үйлчлэгч мөн салаалсан тохиолдолд аль урт салаалсан хэсэг байна түүнийг сонгоно. Тухайн салаалалтын "урт"-ыг хэдэн блокоос бүрдсэн бус харин аль салаа нь хамгийн хэцүү утгуудыг тайлсан байна түүний нийлбэрээр нь дүгнэнэ. Ингэснээр ямар нэгэн халдагч этгээд хялбар аргаар тайлсан маш урт хэмжээний блокуудыг үүсгэн сүлжээнд нийлүүлэхээс сэргийлэх болно.


Блокийн тухай ерөнхий асуулт хариултууд:

Одоогоор хэдэн блокууд хийгдээд байна вэ?
Одоогоор хийгдээд буй блокийн тоог дараах линкээс харж болно: 
https://blockexplorer.com/api/status?q=getBlockCount

Хамгийн дээд тал нь хэдэн блок байж болох вэ?

Блокийн дээд хэмжээ гэж байхгүй, блокууд 10 минут тутамд үүсэн гинжэн цувралд залгагдаж байна. 

Биткойны дээд хэмжээ нь 21 сая биткойн гэж байгаа, хамгийн сүүлчийн биткойныг ухаж гаргасан ч блок нэмэгдсээр байх уу? 

Тийм. Блок нь тухайн гүйлгээг тэмдэглэх л үүрэгтэй. Бүх битконыг малтан гаргаж шинээр гаргах боломжгүй болсон тохиолдолд ч гүйлгээ бол хийгдсээр байна, тийм тул хүмүүс биткойныг ашиглан бизнес хийсээр байгаа тохиолдолд шинээр блокууд хийгдсээр байна гэсэн үг. 
Even when all 21 million coins have been generated?
Блокийг үүсгэхэд хэр хугацаа шаардагдах вэ?
Үүнийг тодорхой хэлэх боломжгүй. Блок үүсэхэд шаардагдах хугацааг дараах тооцоолон бодох линкээр орж харж болно:
https://en.bitcoin.it/wiki/Generation_Calculator

Хэрвээ би блокийг тайлах бодлогын 1%-ийг нь тайлж гаргасан байвал яах вэ?

Блокийг тайлахад тэдэн хувь үлдлээ, тэдэн хувь гүйцэтгэлтэй байна гэсэн ойлголт байхгүй болно. 24 цагийн турш тайлах оролдлого хийсэн хүний хувьд түүний хувьд дөнгөж тайлж эхэлж буй хүн 2-ын тайлах магадлал яг адилхан байна. 

Өөр илүү мэдээллийг хаанаас олж авч болох вэ?

Блок хаш хийх алгоритмийн тухай мэдээллийг дараах линк дээрээс олж авч болно:
https://en.bitcoin.it/wiki/Block_hashing



Saturday, September 19, 2015

Blockchain II (Block height, fork - блокийн өндөр, салаа блокууд)

Блок-ын өндөр, салаа блок(ууд)

(хяналт хийж бна...)
Блок-ын толгойн хэсэгийн хашийг тоон хязгаараас доош утгаар амжилттай хаш хийсэн ямар ч уурхайчин нь, тухайн блок нь хүчинтэй тохиолдолд гинжэлсэн блокууд руу нэмж болно. Эдгээр блокууд нь блок-ын "өндөр"-тэй байх бөгөөд энэ нь хамгийн эхний блок No.0 болох генесис блок болон тухайн блок хоёрын хооронд хийгдсэн блокуудын тоогоор илэрхийлэгдэнэ. 
Жишээ нь хамгийн эхний блокд хаш тайлах хэр хэцүүг дахин тодорхойлсон блок нь 2016-р блок болно. 
Common And Uncommon Block Chain Forks
Хэд хэдэн блокууд ижилхэн "өндөр"-тэй байх тохиолдолд байж болох бөгөөд эдгээр нь нэгээс илүү уурхайчинд алилхан буюу ойролцоо цаг мөчид зэрэг блок бүтээсэн тохиолдолд байж болно. Ингэснээр гинжилсэн блокуудад салаалалт (fork) үүсэх боломжтой. (Дээрх зураг дээр харуулснаар).

Хэрэв энэ тохиолдолд зэрэг өндөртэй блокуудаас сүлжээнд оролцож буй зангилаа бүр аль блокийг сонгох сонголт хийх хэрэгтэй болно. Ямар нэгэн өөр дүрэм бичигдээгүй тохиолдолд ихэнхдээ зангилаанд хүрж ирсэн эхний блокийг сонгоно.

Эцэстээ уурхайчин дахин блок үүсгэн түүнийгээ түрүүчийн хэсэгт зэрэг хийгдсэн блокуудын аль нэгт нь залгах хэрэгтэй болно. Ингэснээр тухайн залгасан блокийн үүсгэсэн салаа нь бусад салаалалтаасаа илүү хүчинтэй болно. Тухайн салаалалт дахь орших блокууд хүчинтэй л бол уурхайчид хамгийн их хүч чармайлт нэхэгдэх салаалалтыг дагаснаар бусад салаанууд хүчингүй болно. Эдгээр бусад салааг нь stale блок, өнчин (orphan) блок гэх мэтээр олон янзаар нэрлэгддэг. Зарим тохиололд жинхэнэ өнчин блок гэж байх бөгөөд энэ нь өмнөх блок нь устсан буюу байхгүй тохиолдолд ингэж нэрлэгдэнэ.

Зарим тохиолдолд салаалалт нь удаан хугацаагаар оршин тогтнох үе байдаг бөгөөд энэ нь уурхайчид тухайн салаалалтыг цаашин үргэлжлүүлж ажилладаг. Энэ үед бусад уурхайчид 51%-ын халдалт хийх оролдлого хийж байж болно.

Нэгээс илүү блокууд нь адилхан өндөртэй байх боломжтой тул блокын өндрөөр нь таних тэмдэг болгох нь тохиромжгүй юм. Харин үүний оронд блокын таних тэмдэгийг толгойн тэмдэглэгээний хаш утгаар нь дуудан, заах нь илүү тохиромжтой.

Гүйлгээний мэдээлэл

Блок бүр нь нэг буюу түүнээс дээш гүйлгээг хадгалж байдаг. Эдгээр гүйлгээний хамгийн эхнийх нь үндсэн зоосон (coinbase, a.k.a generation transaction) гүйлгээ гэж нэрлэгдэх бөгөөд энэ нь гүйлгээ нь блок хийгдсэн шагналыг хуримтлуулж, зарцуулах зориулалттай байна. Блок хийгдсэн шагнал нь гүйлгээний шимтгэл болон блок хөнгөлөлт (block subsudy) зэргээс бүрдэнэ. Дээр өгүүлсэнээр зарцуулагдаагүй гүйлгээ буюу UTXO (Unspent transaction Output) нь үндсэн зоосны гүйлгээ байсан тохиолдолд дараагийн 100 блокт зарцуулагдах боломжгүй байна. Ингэснээр тухайн блок салаалан, салаалсны дараа хүчингүй болсон тохиолдолд уурхайчинг шагнах боломжгүй бөгөөд хүчингүй болохоос өмнө уурхайчин шимтгэлийг зарцуулахаас сэргийлнэ.
Блок нь үндсэн бус гүйлгээ (non-coinbase transaction)-г агуулах шаардлагагүй боловч уурхайчид аль ч тохиолдолд үндсэн бус гүйлгээг блокт багтаадаг ба ингэснээрээ шагнал хүртэх боломжтой болно. Бүх гүйлгээнүүд нь (үндсэн гүйлгээ ч адил) блокт түүхий тэмдэглэгээ  форматаар (raw transaction format) болон үлдэнэ.
Түүхий гүйлгээний формат нь гүйлгээний таних тэмдэг-(transaction identifier) ийг бүтээхэд ашиглагддаг. Эдгээр форматыг ашиглан, merkle мод (tree) үүсгэнэ. Merkle модыг хоёр гүйлгээний таних тэмдгүүдийг нийлүүлсний дараа хаш хийж түүнийгээ дахин өөр адилхан замаар хийсэн хаш-тай нийлүүлэн дахин хаш хийх маягаар үүсгэнэ. Хэрэв гүйлгээнүүдийн тоо нь сондгой утгатай байсан тохиолдолд, тухайн сондгойрсон гүйлгээний таних тэмдэгт ганцаар хаш хийж өөртэй хаштай нийлүүлнэ. Энэ замаар хаш-уудыг нийлүүлж хаш хийгдсээр эцэстээ нэг хаш үлдэх бөгөөд үүнийг merkle модны үндэс гэж нэрлэнэ (merkle root).
Жишээ нь 5 гүйлгээнээс бүрдсэн merkle мод болон түүний үндэс хийгдэх зургийг дор харуулав:
       ABCDEEEE .......Merkle үндэс
      /        \
   ABCD        EEEE
  /    \      /
 AB    CD    EE .......E нь сондгой учир 2 дахин давтаж түүн дээрээ хаш хийнэ.
/  \  /  \  /
A  B  C  D  E .........гүйлгээнүүд



SPV буюу хялбаржуулсан төлбөрийн баталгаажуулалт нь merkle модыг ашиглаж хийгдэнэ. Ингэхдээ client системүүдэд гүйлгээ нь блокт байрлуулсаныг шалгахын тулд блокын толгойн хэсэг дэх merkle үндсэн хаш болон,  зэргэлдээх бүрэн хэмжээний системүүд-(full peer)-ээс дундын хаш-уудын жагсаалтыг ашиглан шалгалт хийнэ. Зэргэлдээх бүрэн хэмжээний системд итгэх эсэх шаардлага гарахгүй учир нь хуурамч блокийн толгойн тэмдэглэгээ болон дундын хаш-уудыг гаргах үнэ өртөг нь өндөр байна эс бөгөөс шалгалт нь буруу гарна.

Жишээ нь, гүйлгээ D блокт нэмэгдсэнийг шалгая гэж бодьё, тэгсэн тохиолдолд SPV буюу хялбаршуулсан шалгалт хийж буй client нь C, AB болон EEEE хашуудыг merkle үндэсэн хаш-тай хамт хэрэглэн шалгалт хийнэ, өөр ямарваа нэгэн мэдээлэл хэрэггүй болно. Хэрвээ эдгээр 5-н гүйлгээг агуулсан блокуудыг бүгдийг хуулан авахад 500,000-аас илүү byte шаардлагатай болно. Харин зөвхөн хаш болон блокийн эхэн тэмдэглэлийг ашигласнаар зөвхөн 140 byte download хийх шаардлагатай.

Жич: Хэрэв нэг блок дотор адил таних тэмдэг олдсон тохиолдолд, merkle мод нь өөр блоктой зөрчилдөх талтай, учир нь тухайн өөр блокоос зарим эсвэл бүх давхар тэмдэглэгээнүүдийг хассан байж болох талтай. Ингэж хасагдсан шалтгаан нь тэнцвэргүй merklee мод үүсэх нөхцлийг бүрдүүлэх талтай.

Адил таних тэмдэгтэй тусдаа гүйлгээнүүд нь практикийн хувьд тохиромжгүй тул, шударга программ хангамжид энэ нь дараа болохгүй ба; харин блокийн хүчингүй статусыг хадгалах эсхийг шалгах хэрэгтэй. Ингэхгүй тохиолдолд, адилхан тэмдэглэгээтэй хэсгийг нь устгасан хүчинтэй блок нь адил merkle үндсэн хаш болон блок хаштай байж болох бөгөөд, энэ хүчинтэй блок нь хадгалсан хүчингүй блокийн улмаас хүчингүй болох боломжтой юм. (CVE-2012-2459)

Зөвшилцлийн дүрэмийг өөрчлөх

Сүлжээнд буй зангилаанууд зөвшилцлийн байдалд оршихын тулд бүгд ижил зөвшилцлийн дүрэм ашиглан блок-т шалгалт хийнэ. Зарим тохиолдолд шинээр нэмэлт шаардлагатай өөрчлөлт болон сүлжээг зүй бусаар ашиглахаас хамгаалсан өөрчлөлтүүд хэрэгтэй болж "зөвшилцлийн дүрэмд" өөрчлөлт оруулах шаардлагатай болно. Энэ тохиолдолд шинээр өөрчлөлт хийсний дараа түр хугацаанд зарим зангилаанууд нь хуучин дүрмийг ашигласаар байх тохиолдолд бий бөгөөд энэ нь дараах 2 янзаар "зөвшилцлийн дүрэм" зөрчигдөх болно:
1. Шинэ зөвшилцлийн дүрмээр бүтээгдсэн блок-ийг шинэ upgrade хийсэн зангилаанууд хүлээн авч, хуучин дүрмээр ажиллаж буй зангилаанууд хүлээн авахаас татгалзах болно.
2. Хуучин зөвшилцлийн дүрмээр бүтээгдсэн блок-ийг хуучин дүрмээр ажиллаж буй зангилаанууд хүлээн авч шинээр upgrade хийж шинэ дүрмээр ажиллаж буй зангилаанууд хүлээн авахаас татгалзана.

Эхний тохиолдолд, хуучин дүрмээр ажиллаж буй зангилаанууд нь шинэ дүрмээр бүтээгдсэн блокууд-ыг хүлээн авалгүйгээр хуучин блокоос бүрдсэн салаалалт үүсгэж эхэлнэ. Энийг hard fork буюу хатуу салаалалт гэж нэрлэнэ.
Hard Fork
Хоёр дахь тохиолдолд upgrade хийсэн зангилаанууд нь хаш-уудын ихэнхийг хийж эхэлсэн тохиолдолд салаалалт үүсгэхээс сэргийлж болно. Үүний тулд upgrade хийгээгүй хуучин дүрмээр ажиллаж буй программууд нь аль ч шинэ блокийг upgrade хийсэн зангилаанаас татгалзалгүй хүлээн авна. Энэ тохиолдолд үүссэн салаалалтыг soft fork буюу зөөлөн салаалалт гэнэ.
Soft Fork
Үүнээс үүдэн зөвшилцлийн дүрэмд өөрчлөлт хийх нь хатуу эсвэл зөөлөн салаалалт хийх магадлалыг буй болгоно. Жишээ нь блок-ын хэмжээг 1mb-аас дээш болгох зөвшилцлийн дүрмийн өөрчлөлт хатуу салаалалт бий болгох нь зайлшгүй юм. Энэ тохиолдолд яг гинжэн блокийн салаалалт заавал хэрэггүй гэхдээ болзошгүй зүйл юм??

Нэмэль мэдээллүүд: BIP16BIP30, мөн BIP34 өөрчлөлтүүд нь зөөлөн салаалалт хийгдэж болзошгүй дүрмийн өөрчлөлтүүд юм.BIP50-д харин хатуу салаалалт санаандгүй үүссэн бөгөөд үүнийг түр хугацаанд upgrade хийгдсэн зангилаануудыг буцаан түр хугацаанд downgrade хийж зохиомол хатуу салаалалт үүсгэж шийдвэрлэсэн.
Гэвин Андрэсэн-ий дараах нийтлэл нь ирээдүйд хийгдэх дүрмийн өөрчлөлтүүд хэрхэн хийгдэхийг тайлбарласан байна: how future rule changes may be implemented.

Салаалалтыг нээж илрүүлэх

Upgrade хийгээгүй зангилаанууд нь хуучин дүрмээр хэсэг хугацаанд ч болов блок-уудыг үүсгэн энэнээс үүдэн хөрөнгө мөнгөний алдагдал гарах хэд хэдэн нөхцөл байдлыг үүсгэдэг. Ялангуяа хуучин зангилаанууд нь гүйлгээг хүлээн авч боловсруулсан ч түүнээс үүдсэн блокууд нь нийтээр хүлээн зөвшөөрөгдөх гинжэн блок-т хамрагдах боломжгүй болж болно. Мөн хуучин зангилаанууд нь гинжэн блокт хийгдсэн гүйлгээнүүдийг хүлээн авалгүйгээр дутуу мэдээлэл үүсгэж болно. 

Bitcoin Core нь гинжэн блок дахь гүйцэтгэлийн батламжийн мэдээллийг ашиглан хатуу салаалалтыг олж илрүүлэхээр бичигдсэн байдаг. Хэрэв upgrade хийгээгүй зангилаа нь хамгийн сайн гинжэн салаанаас 6-н блокоор илүү гүйцэтгэлийн баталгаатай блокийн толгой хэсгийг хүлээн авсан тохиолдолд, зангилаа нь getinfo RPC -д алдаа зааж alertnotify коммандыг гүйцэтгэнэ. Ингэснээр upgrade хийгээгүй зангилаа нь операторт хамгийн сайн гинжэн блок руу шилжих боломжгүй байгааг анхааруулна.

Бүрэн хэмжээний зангилаа нь мөн блок болон гүйлгээний version-ыг заасан дугаарыг мөн шалгаж болно. Хэрэв сүүлийн хэдэн блокуудын version дугаар нь түрүүчийн блокуудынхаас ахисан тохиолдолд, одоо хэрэглэгдэж буй зөвшилцлийн дүрмийг хэрэглэж болохгүй гэж ойлгож болно. Bitcoin core 0.10.0 нь үүнийг getinfo RPC болон alertnotify мэдээлж болно.

Зөвхөн version дугаарыг ашиглах нь мөн хангалтгүй байж болох ба учир нь блок болон гүйлгээний мэдээлэл нь upgrade хийгээгүй (шинээр өөрчилсөн зөвшилцлийн дүрэмийг ашиглаагүй) зангилаанаас ирсэн байж болох талтай юм. SPV буюу хялбарчилсан гүйлгээний шалгалт хийж буй client нь хэд хэдэн бүрэн хэмжээний зангилаатай холбогдон тэдгээр нь бүгд адил гинжэн дээр болон адилхан блокийн өндөр дээр байгаа эсэхийг шалган хатуу салаалалт үүссэн эсэхийг мэдэж болно. Аль нэг зангилаанд хазайлт үүссэн (тухайн зангилаа нь өөр салаан дээр ажиллаж буй тохиолдолд) SPV client нь тухайн зангилаанаас холбоогоо тасалж болно.
SPV client-үүд мөн блок болон гүйлгээний version дугаарыг хянаж, ирсэн гүйлгээнүүдийг шинэ зөвшилцлийн дүрмээр шинэ гүйлгээ хийх хэрэгтэй.




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-д орсон урьд блокийн хаш-ууд дээр зөвхөн хаш хийгдэнэ.)


Blockchain-ы бүтэц (цуврал)

Blockchain-ы дотоод бүтэц цуврал

Thursday, August 13, 2015

Биткойныг хадгалах ямар сонголтууд байна?

Биткойн түрийвч нь биет биш үсэг тооноос бүрдсэн хувийн нууц түлхүүр бөгөөд үүнийгээ ашиглан хаяг руугаа орж өөртөө буй биткойнуудыг ашиглана. Биткойны түрийвч маш олон сонголттой бөгөөд янз бүрийн хэлбэрээр сонголт байна. Тэр ч атугай түрийвчээ компьютерт хадгалалгүйгээр цаасан дээр хэвлэн авах ч боломж бий. Аль ч тохиолдолд та өөрийнхөө түрийвчийг сайн чандлан хадгалж, мөн backup хийх нь маш чухал юм. 
Биткойн нь орчин үеийн цаасан мөнгийг орлуулж болох төлбөрийн хэрэгсэл бөгөөд өдрөөс өдөрт бизнесүүд энэхүү төлбөрийн хэрэгслийг хүлээн авдаг болж байна. Бусад нийтлэлээс та биткойн хэрхэн үүсгэдэг болон гүйлгээ хийгддэгийг харсан байх, харин биткойныг яаж хадгалах вэ? Бид цаасан мөнгөө биет түрийвчэд хийж хадгалдаг харин биткойн нь төстэй ч дижиталаар хадгалагдана.
Яг үнэндээ бол биткойныг хаана ч хадгална гэсэн ойлголт байхгүй. Түүний оронд түрийвч нь нууц хувийн түлхүүр (secure digital key/private key) бөгөөд түүнийгээ ашиглан та нийтийн хаяг (public key) руу ороод гүйлгээг шифрлэлт хийнэ. Зөвхөн эдгээр мэдээлэл л биткойны түрийвчэнд оршино. 
Биткойны түрийвч нь ширээний компьютер, мобайль гар утас, хэвлэсэн цаасан дээр эсвэл компьютерийн биет төхөөрөмжүүд дээр байж болно. 
Ширээний компьютер буюу PC
Хэрэв та анх гарч ирсэн биткойны client болох Bitcoin Core software-ийг ашиглаж буй бол, та аль хэдийн түрийвч ашиглаж байна гэсэн үг. Энэ программаар гүйлгээг биткойны сүлжээ рүү дамжуулж, мөн өөртөө хаяг үүсгэн, нууц түлхүүрээ хадгалах боломжтой. 
Бусад desktop client-үүд гэвэл: MultiBit, Hive, Armory гэх мэт байна. Мөн darkwallet нь жижиг хэмжээний browser plugin ашиглаад coin mix үйлчилгээг ашигласнаар өөрийн гүйлгээгээр таныг олж авахгүй болгох нууцлалт хийх боломжтой. 
Мобайль түрийвч
Desktop PC-д зориулсан түрийвчүүд сайн хийгдсэн ч, та гадаа гудманд бараа худалдан авах зэрэгт бол мэдээж тохиромжгүй бөгөөд энэ тохиолдолд mobile утсан дээрээ суурилуулаад ашиглаж болох апп түрийвчүүдийг хэрэглээрэй. Ингэснээр гар утасаараа төлбөрөө хийх боломжтой болно. 
Зарим тохиолдолд NFC технологийг ашиглаад утсаа шүргүүлээд бие биендээ биткойноо дамжуулж болно. 
Харин биткойн апп-уудын нэг онцлог нь тэдгээр нь desktop PC дээрхи шиг бүрэн хэмжээний client биш байдаг. Desktop PC дээрхи бүрэн хэмжээний client нь хэдэн GB хэмжээтэй цаашид хэмжээ нь өсөж байдаг гинжэн блок(blockchain)-ийг бүхэлд нь сүлжээнээс татан авч диск дээр байрлуулна. Тийм учир үүнийг гар утсан дээр байрлуулах ихэнхдээ боломжгүй эсвэл тохиромжгүй байна. 
Харин түүний оронд гар утсан дээрхи client-үүд нь амарчилсан төлбөрийн баталгаажуулалт ашиглана. (simplified payment verification - SPV). Энэ нь гинжэн блок-ийн жижиг хэсгийг татан авснаар бусад мэдээллээ биткойн сүлжээн дээрхи өөр client-үүдэд найдана. 
Mobile түрийвчүүдээс: Bitcoin wallet, Mycelium, Xapo ба Blockchain гэх мэт байна. 
Эдгээрээс blockchain нь таны биткойны нууц түлхүүрэнд дахин шифрлэлт хийж, web server дээр байршуулна. 

Online түрийвчүүд
Вэб дээр тулгуурласан түрийвчүүд нь таны нууц түлхүүрийг онлайнаар хадгална. Тиймд интернэтэд холбогдсон хэн нэгэн этгээд таны түлхүүрийг хариуцна гэсэн үг. Энэний нэг тал нь та интернэтэд холбогдсон л бол түрийвчээ хаанаас ч ашиглаж болно гэсэн үг. Харин үүний маш том сөрөг давуу тал нь тухайн этгээд таны хариуцаж байсан түлхүүрийг ямар нэгэн шалтгаанаар алдсан, шамшигдуулсан тохиолдолд та биткойнуудаа алдан аюултай. 
Онлайн үйлчилгээ явуулдаг компаниуд гэвэл Coinbase, circle хүмүүс үйлчилгээнүүд байна.  

Hardware буюу биет төхөөрөмж дээр суурилсан түрийвчүүд
Эдгээр төхөөрөмжүүд нь түрийвчний нууц үгийг хадгалах бөгөөд одоохондоо ашиглалт хязгаарлагдмал байна. Эдгээрээс trezor төхөөрөмж хамгийн их ашиглагдаж байна. Энэхүү төхөөрөмжийг ашигласнаар та 3 дахь этгээдэд өөрийн нууцлалаа хадгалуулах зэрэг риск байхгүй болж зөвхөн өөрөө хариуцах боломжтой болно. 

Цаасан түрийвч
Хамгийн хямд болон тархсан сонголт бол та биткойны түрийвчийнхээ мэдээллийг цаасан дээр буулган авч онлайн орчноос тусдаа байлгах юм. Цаасан түрийвчний үйлчилгээ үзүүлдэг хэд хэдэн газрууд байна. Эдгээрийг ашиглаад та цаасан 2 янзын QR код хэвлүүлж болно: нэг нь таны хаяг буюу нийтийн түлхүүр, нөгөө нь таны түрийвчний нууцлал буюу хувийн нууц түлхүүр. Эдгээрийг QR код scanner ашиглаад биткойноо ашиглаж болно. Цаасан түрийвчний хамгийн давуу тал нь онлайн орчноос салгагдсан тул хакеруудын халдлагад өртөх, төхөөрөмжийг алдах зэрэг сөрөг үр дагаваруудаас чөлөөлөгдөнө гэсэн үг. 

Түрийвчээ хэрхэн хамгаалах вэ?
Түрийвчээ хамгаалж, аюулгүй байдлыг нь хангах дараах хэд хэдэн арга зам байна:

  • Шифрлэлт хийх

Түрийвчээ хамгаалах хамгийн тархсан арга нь шифрлэлт хийж түүнийгээ сайн password-оор давхар баталгаажуулах хэрэгтэй. Энэ нь таны түрийвч рүү халдах оролдлогыг хэцүү болгоно гэхдээ ямар ч боломжгүй болгоно гэсэн үг биш. Хэрэв таны компьютер вирустсан бол таныг password-ыг оруулах явцад хуулж аваад password-ыг мэдэж авах боломжтой. 


  • Backup (Нэмэлт хувилбар) хийх

Хэрэв эзэмшилд буй түрийвч нэгхэн хувь байгаад түүнийгээ алдсан тохиолдолд дотор нь буй биткойноо алдах болно. Үүнээс сэргийлж түрийвчний хувийн нууц түлхүүрээ хувилж (backup) авснаар энэ асуудлыг шийдэж болно. 


  • Нэгээс илүү гарын үсэг/баталгаажуулалт - Multi-signature transaction
Multi-signature transaction нь хэд хэдэн хүний гарын үсэг буюу шифрлэлт хийснээр л гүйлгээг хийх боломжтой. Оролцогч этгээдүүд анх хаяг үүсгэхдээ энийгээ тохиролцоно. Энэ нөхцлөөр бизнесийн түншүүд, гэр бүлийн хүмүүс хоорондоо тохиролцож хамтдаа биткойныг эзэмшиж болно. Тэр ч атугай та 2 өөр гар утсан дээрхи гарын үсэгүүдээс бүрдсэн хаяг ашиглах ч боломжтой.


  • Онлайнаас орчноос салангид хадгалах

Онлайнаас орчноос тусад нь хадгалахыг cold storage буюу үгчлэн орчуулвал "хүйтэн хадгалалт" гэж орчуулж болно. Ингэснээр онлайн хакеруудаас нууцлалаа хадгалах боломжтой гэж үздэг. Хэрэв та их хэмжээний биткойныг хадгалах хэрэг гарвал дийлэнхийг нь энэ маягаар хадгалаад цөөн хэсгийг гүйлгээ хийх зорилгоор онлайн байлгаж болох юм. Ингэснээр таны капиталын цөөн хэсэг нь л рисктэй орчинд хадгалагдана.


Tuesday, August 11, 2015

Орчуулга


  • bitcoin - биткойн (үгчилж орчуурвал битзоос гэж болно)
  • blockchain / general ledger - гинжэн блок / үндсэн тэмдэглэгээ
  • block - блок
  • miner(s) - уурхайчин(д),
  • hash - хаш
    (дурын мэдээлэл, дата-г алгоритмын тусламжтай нэг урттай утгаар илэрхийлэх, мөн fingerprint, message digest, cryptographic checksum, message integrity check, manipulation detection code(MAC) гэж янз янзаар нэрлэгдэнэ)
  • nonce - nonce
    (олон удаа үүсгэх зорилгоор хэрэглэх дурын тоо, дахин үүсгэх болгонд өөр өөр бөгөөд ямар утга үүсэхийг урьдчилан таах боломжгүй (random) байна)
  • encryption, sign - шифрлэлт
  • ciphertext - шифрлэгдсэн мэдээлэл
  • plaintext - тайлагдсан (шифрлэгдээгүй) мэдээлэл
  • private key -хувийн нууц түлхүүр - биткойн түрийвч 
  • public key - нийтийн түлхүүр - биткойн хаяг
  • node - зангилаа - сүлжээнд уурхай хийх, гүйлгээний баталгаа хийж сүлжээнд хамрагдсан компьютерийн систем, энэ нь ширээний компьютер-аас авхуулаад тусгайлан бэлтгэсэн ASIC (Application Specific Integrated Circuit) байж болно. 
  • target threshold - тоот хязгаар - хаш хийхэд хэр хүнд байхыг тодорхойлох тохируулах зориулалттай тоон утга.
  • consensus rule - зөвшилцөөний дүрэм - хашийг хэр хүчин чармайлтаар гаргах дүрэмийг заасан зөвшилцлийн болон бусад дүрэм.

  • transaction input/output - гүйлгээний оролт/гаралт
  • proof of work - гүйцэтгэлийн баталгаажуулалт
  • coinbase transaction - үндсэн гүйлгээ, үндсэн зоос гүйлгээ (блокт орших хамгийн эхний гүйлгээ)
  • transaction identifier - гүйлгээний таних тэмдэг
  • UTXO - Unspent transaction output - гүйлгээнд зарцуулагдаагүй гаралт
  • fork - салаалт - нэгээс илүү адил өндөртэй блок үүсэх
  • stale/orphan block - салаалсаны дараа хүчингүй болсон блок
  • true orphan block - өмнөх блокоосоо салсан буюу өмнөх блок нь мэдэгдэхгүй болсон блок
  • genesis block - биткойны хамгийн эхэнд үүссэн блок
  • raw transaction format - түүхий гүйлгээний формат
  • SPV - simplified payment verification - хялбаршуулсан гүйлгээний хяналт - гар утсанд түрийвч суулгасан тохиолдолд гинжэн блокийг бүхэлд нь download хийх нь тохиромжгүй учир, гүйлгээг хялбаршуулсан аргаар шалган баталгаажуулах
  • pubkey scripts - нийтийн түлхүүрийн скрипт - гүйлгээний гаралтанд орших скрипт бөгөөд, тухайн сатоши-нуудыг зарцуулах нөхцлүүдийг тусгасан байна. 
  • signature script - гарын үсэгтэй скрипт - pubkey scripts буюу нийтийн түлхүүрийн скрипт дээр нөхцлүүдийг ханган гүйлгээ хийсэн тохиолдолд энэ бичлэг үүснэ. 
  • EDCSA signature - EDCS гарын үсэг - Нийтийн түлхүүртэй холбоотой утга, тухайн нийтийн түлхүүр нь хэн нэгний нууц түлхүүрээс гаргаж авсан байна. Энэ гарын үсэг нь тухайн нийтийн түлхүүр лүү дамжуулсан сатоши-г зарцуулахад хэрэглэнэ:  
  • satoshi - биткойны хамгийн жижиг нэгж буюу 1 биткойны 100 саятай тэнцэнэ (0.00000001 BTC)



Sunday, August 9, 2015

Биткойны гүйлгээ хэрхэн хийгддэг вэ?



Энэ нийтлэлээрээ coindesk-ээс орчуулж, биткойн гүйлгээ хэрхэн гүйгддэг талаар тавилаа. Уг нь bitcoin.org-оос авья гэсэн ч coindesk дээрхи мэдээллүүд илүү уншихад дөхөмтэй тал эндээс орчуулав.


Харин зарим үг хэллэгүүдийн орчуулгыг ингэж орчуулахаар боллоо:

Биткойны гүйлгээ нь электрон түрийвчнээс хийгдэх бөгөөд аюулгүй байдлыг нь хангахын тулд дижиталаар шифрлэгдэнэ. Сүлжээн дэх этгээдүүд бүгд тухайн гүйлгээний талаар мэдээлэгдэх бөгөөд биткойны гүйлгээний түүх нь биткойн ухагдсан тэр цаг мөч хүртэл нь мөшгөж болно. 
Биткойны өөр дээрээ хадгалж үнэ өсөхийг нь хүлээх нь сайхан ч биткойн чинь төлбөрийн хэрэгсэл биз дээ тийм үү? Тийм болхоор биткойныг ашиглахад гүйлгээ хэрхэн хийгдэх вэ?
Биткойн гэж зүйл байхгүй зөвхөн гүйлгээний тэмдэглэгээ л гэж зүйл байна. 
Энэ бол хамгийн хачирхалтай нь юм: биткойн нь биетээр хаа нэгтээ оршихгүй, тэр ч байтугай таны системийн хард диск дээр ч биткойн гэж байхгүй. Бид биткойн эзэмших тухай ярьдаг, мөн биткойны хаяг зэргийг авч үзвэл дотор нь ямарваа нэгэн биткойн гэж байхгүй, өөрөөр хэлбэл түрийвчэн дотор мөнгө хэлбэрээр хадгалагдахгүй юм. Та ямар нэгэн биет зүйл рүү хуруугаараа заагаад, тэр ч байтугай компьютер дээр орших файл руу заагаад энэ биткойн байна гэж хэлэх боломжгүй. 
Тиймд биткойн биетээрээ оршихын оронд нэг хаягаас нөгөө хаяг руу хийгдэх гүйлгээний тэмдэглэгээ л гэж байна. Энэхүү гүйлгээний тэмдэглэгээнээс үүдэн тухайн түрийвчний баланс нь ихэсч багасна. Биткойн үүссэнээс хийгдсэн гүйлгээ болгоны тэмдэглэгээ нь гинжэн блок хэмээх нийтэд дэлгээстэй тэмдэглэгээнд бичигдэн үлдэнэ. Хэрвээ та ямарваа нэгэн биткойны хаягт орших балансыг мэдье гэвэл та гинжэн блок дахь мэдээллийг ашиглан дахин бүрдүүлэх замаар балансыг олох хэрэгтэй. 
Биткойны гүйлгээ нь ямаршуу янзтай харагдах вэ?
Хэрэв иргэн А нь иргэн Б рүү биткойн шилжүүлэх тохиолдолд, гүйлгээ нь 3 янзын мэдээлэл агуулагдана:
- оролт (input) - иргэн А рүү урьд нь анх аль хаягаас тухайн биткойныг шилжүүлсэн болох. (иргэн Я-аас бол түүний хаяг). 
- хэмжээ - Иргэн А нь Б рүү шилжүүлж буй биткойны тооны хэмжээ
- гаралт - Иргэн Б хүлээн авагчийн хаяг. 
Хэрхэн шилжүүлэх вэ?
Биткойныг та шилжүүлэхийн тулд 2 зүйл хэрэгтэй: Биткойны хаяг, хувийн нууц түлхүүр (private key). Биткойны хаяг нь рандом маягаар үүсгэгдэх бөгөөд тоо, үсэг холилдсон үгнээс бүрдэнэ. Хувийн нууц түлхүүр нь мөн тоо, үсэгнүүдээс бүрдсэн үг боловч үүний утгыг далд, чандлан нууцлах хэрэгтэй. 
Өөрөөр хэлбэл биткойны хаягийг шилэн хорготой сэифээр төлөөлүүлж болно. Бүх хүмүүс дотор нь юу байгааг мэдэж болох ч хувийн нууц түлхүүрийг ашигласнаар л дотроос нь гаргаж эсхүл дотор нь хийж болно. 
Иргэн А иргэн Б рүү биткойн шилжүүлэг хийх тохиолдолд хувийн нууц түлхүүрээ ашиглан шифрлэлт хийх болно. Шифрлэлт нь дараах мэдээллүүд дээр хийгдэнэ: 
- input дээрхи хэлснээр биткойны анхны гүйлгээ
- хэмжээ
- output - гаралт буюу хүлээн авагчийн хаяг. 
Ингэснээр иргэн А нь өөрийнхөө түрийвчнээс тухайн мэдээллийг биткойны сүлжээ рүү илгээнэ. Ингэсний дараа биткойны уурхайчид тухайн гүйлгээг баталгаажуулах ажилдаа орж, баталгаажуулалт амшилттай хийгдвэл, гүйлгээний блокт залгаж эцэст задлан тайлна. 
Би заримдаа гүйлгээг хийж дуустал хүлээх хэрэгтэй болох юм, яагаад вэ?
Таны гүйлгээг уурхайчид баталгаажуултал тодорхой хугацаа шаардагдана, тийм тул зарим тохиолдолд уурхайчидыг баталгаажуулж дуустал хүлээх хэрэгтэй болно. Биткойн протокол нь нэг блокийг малтаж дуустал ойролцоогоор 10 минут хүлээгдэхээр хийгдсэн байдаг.
Биткойноор төлбөрийг нь хийсэн бүтээгдэхүүнээ хүлээж авахаас өмнө зарим бизнесүүд блокийг баталгаажуултал хүлээлгэх бөгөөд эдгээр нь 10 минут хүлээлгэнэ гэсэн үг юм.
Зарим бизнесүүд гүйлгээг баталгаажуултал таныг хүлээлгэхгүй байж болно. Ингэснээрээ тухайн бизнес нь та төлбөр хийсэн биткойныг өөр зорилгоор дахин хэрэглэхгүй гэж итгэл хүлээлгэн азаа үзэж буй гэсэн үг юм бөгөөд энэ нь голцуу бага хэмжээний гүйлгээ хийгдсэн тохиолдолд байна.

Хэрвээ оролт гаралтын хэмжээ нь зөрүүтэй байвал яах вэ?

Дээр хэлсэнчлэн биткойн нь зөвхөн гүйлгээний тэмдэглэгээ байдлаар орших тул, таны түрийвч нь олон гүйлгээтэй байж болно. Магадгүй иргэн А таньд 2 биткойн илгээсэн, иргэн Б нь 3-ыг, иргэн В нь 1-ийг илгээсэн байж болох бөгөөд эдгээр нь тус тусдаа өөр өөр үед хийгдсэн гүйлгээнүүд юм.
Эдгээр нь таны түрийвчэнд автоматаар нийлбэр дүнгээрээ орж хадгадагдана гэсэн үг биш бөгөөд тэрний оронд өөр өөр гүйлгээ маягаар хадгалагдана.

Хэрэв та хүлээн авсан биткойныг иргэн Д-рүү шилжүүлсэн тохиолдолд, таны түрийвч урьд нь хүлээж авсан гүйлгээнүүдийг явуулах гэж буй хэмжээнд хүртэл нь хооронд нэмнэ.
Харин энэ тохиолдолд урьд нь хүлээгдэж авсан гүйлгээнүүдийн нийлбэр нь явуулах гэж буй хэмжээтэй яг таг тэнцүү байна гэж бараг байхгүй. Таны түрийвч гүйлгээний утгыг тасалж тоог нь тэнцүүлэхгүй боломжгүй, тийм учир та зөвхөн тухайн гүйлгээнүүдийг бүтнээр нь явуулж илүү явуулсан хэсгийг нь буцаан хариулт болгон явуулна.

Гүйлгээний шимтгэл гэж бий юу?

Зарим тохиолдолд байна, гэхдээ дандаа биш. Гүйлгээний шимтгэлийн хэмжээ олон янзын хүчин зүйлүүдээс хамаарна. Зарим түрийвчүүд нь гүйлгээний шимтгэлийг тогтоож болохоор хийгдсэн байна. Гүйлгээний аливаа нэг хэсэг нь хүлээн авагч ямар нэгэн шалтгаанаар аваагүй тохиолдолд шимтгэл хэмээн үзэгдэж уурхайчийн эзэмшил болно. ( Any portion of a transaction that isn’t picked up by the recipient or returned as change is considered a fee???)

Яг одоогийн байдлаар олон уурхайчид гүйлгээнүүдийг шимтгэлгүйгээр баталгаажуулж буй. Харин блок бүрдсэнээс үүдсэн шагнал нь яваандаа багассанаар уурхайчид шимтгэл шаардах төлөвтэй байна.

Гүйлгээний шимтгэлтэй нэг зовлонтой зүйл бол шимтгэлийн хэмжээг гаргах нь ярвигтай мөн хуучирсан аргаар тооцдог байсан. Энэ нь протоколийг хэд хэдэн удаа update хийсэний дараа засагдсан юм.

Биткойны гүйлгээ гүйцэтгэдэг үндсэн программыг нь update хийсэн тохиолдолд, гүйлгээний шимтгэлийг тооцоох аргыг өөрчилж болох ба ингэснээрээ хамгийн доод шимтгэлийг тооцох боломжтой болгоно.

Би гүйлгээний хийснийхээ төлөө тасалбар авч болох уу?

Биткойн нь гүйлгээний тасалбар гаргахаар анхнаасаа хийгдээгүй. Гэхдээ 0.9 хувилбараас хойш илүү хэрэглэгчдэд дөхөмтэй болгох үүднээс гүйлгээг өөр маягаар хийгддэг болно.
Мөн BitPay гэх мэт төлбөр гүйцэтгэгчэд нь гүйлгээний тасалбар, баталгаажуулалтын вэб хуудас гэх мэт илүү нэмэлт үйлчилгээнүүд үзүүлдэг. Эдгээр үйлчилгээ нь үндсэн биткойн гүйлгээнд байхгүй үйлчилгээ юм.

Би биткойныг бутархайгаар явуулж болох уу?

Биткойны гүйлгээ нь бутархайгаар хийгдэж болох бүрэн боломжтой. Сатоши нь биткойныг 1,000,000 сая хуваасны нэгтэй тэнцэх бөгөөд та 5430 хамгийн бага нь хэмжээний Сатоши-г биткойны сүлжээгээр илгээх боломжтой.