Bitcoin ba kamo?'s avatar
Bitcoin ba kamo?
bitcoinbakamo@iris.to
npub1svhm...jk0z
Intindihin natin ang bitcoin. (Let's understand bitcoin, in Filipino.) https://bitcoinbakamo.xyz
Paano nga ba ang daloy ng tipikal na transaksyon? Nabanggit noon na: Walang lamang Bitcoin ang pitaka mo. Subalit para makabuluhan ang gamit nito, ang pitaka mo ay hinahanap ang mga transaksyong nagsasaad na sa address mo huling ipinasa ang Bitcoin. Babaguhin nating bahagya ang deskripsyon na iyan. Sa halip na address na pinagpasahan, ang mga UTXOs na tumutugmang pwedeng gastusin ng mga private keys sa loob ng iyong wallet ang pinagsasama-sama para ipakita sa user interface ang halaga. Ganun din ang konsepto ng block explorer. App din ito na sumisilip sa Bitcoin network at kinakalkula ang mga kondisyong nakasaad sa code para magpakita ng data na mas maiintindihan ng tao. Ang mga matulunging apps na wallet at block explorer ay maiging madaling naiintindihan ng karaniwang tao, para mapadali ang pagsali sa ekonomiya ng Bitcoin network. Balikan ang ipinakitang ilustrasyon ng daloy ng transaksyon sa block 170. At idadagdag na natin para sa diskusyon ang ilustrasyon naman para sa block 777777. Ipagpatuloy ang pag-aaral sa:
Panimulang Pagsiyasat sa Tipikal na Transaksyon Sa bagong post na ito, nanghiram uli ng ilustrasyon sa block explorer para sa 2 halimbawang blocks 170 at 777777. Makikita na may input at output parehas. Sa kaso ng block 170, walang address na pinapakita, dahil P2PK ang output. Nakandado sa public key mismo ang Bitcoin. Ang unang output ay #0, na nagsasaad ng pagkandado ng 10 Bitcoin sa public key ng receiver. Ang ikalawa ay #1 na nagkandado ng 40 Bitcoin sa public key ng sender (sukli). Subalit may mga wallet na gagawan pa rin ng interpretasyon na address ang mga iyan. Susundin lang ang nabanggit sa Kabanata 4 na encoding para sa legacy address. Pero mas tamang hindi binigyan ng interpretasyong address sa blockstream.info. Lipat naman ng tingin sa isang napiling transaksyon sa block 777777. Makikita na mas maraming nasasaad sa input, mas komplikado, na pag-uusapan natin sa susunod. Sa output naman, dalawang klase ng pagkandado ng Bitcoin ang naganap. Sa receiver, ang Bitcoin ay nakandado sa kanyang public key hash, isang P2PKH, kaya ang address ay legacy ang anyo (nag-uumpisa sa 1). Ang sukli naman ng sender ay nakandado sa kanyang witness script hash, isang P2WSH kaya mas makabago ang anyo (bc1). Sa mga ilustrasyon ng wallet at ng block explorer, matutukoy ang pinanggalingan at pinagpasahang mga address. Syempre kita mo rin kung magkano ang binigay at natanggap. Makikita rin kung saang block ito nakasama at kailan. Subalit alam mo ba na sa loob ng code, ay hindi ganito ang mababasa mo?
The most powerful country in the world isn't as powerful as the idea whose time has come. #Bitcoin marches on regardless of the election results.
It's #Bitcoin Whitepaper Day. Never forget why it's brought here.
Transaction Fees Para sa ilustrasyon: Napag-usapan natin ang input sa Coinbase transaction, at ang output. Ang total na pabuya ay bagong Bitcoin at transaction fees. Ang transaction fees ay ang diperensya ng lahat ng Bitcoin na nasa input ng mga transaksyon sa block at ng lahat ng Bitcoin na nasa output. Total fees = Sum (Inputs) - Sum (Outputs) Pagkatapos, ipagsasama ang block reward at transaction fees bilang halaga ng Bitcoin na pabuyang isasaad sa output. Sa block 170, nabanggit na walang transaction fee. Sa block 777777, kung ang block reward ay 6.25, ang transaction fee ay 0.18403232 kaya ang kabuuang pabuya ay 6.43403232 Bitcoin. Dahil mas mahal na ang Bitcoin kumpara noon, mahalaga na ang karagdagang pabuyang yan kahit pawang maliit sa paningin. Balikan lang natin ang pisikal na paghahalintulad ng Bitcoin sa sitwasyon ng block rewards. Ang bagong Bitcoin ay manggagaling sa enerhiyang ginamit ng lahat ng kasapi sa pagmimina, subalit sa isang miner lang ilalaan. Samantala, ang mga maliliit na butil ng transaction fees na ihiniwalay ng iba-ibang taong nagtranskayson, ay tutunawin kasama ang bagong Bitcoin na namina para magkaroon ng kabuuang Bitcoin na mapupunta sa nanalong mining node.
Output ng Coinbase Transaction Lipat na tayo sa output ng coinbase transaction. Sa Blockstream na ilustrasyon pa rin tayo tumingin. Dito ay nagsasaad ng dami ng bagong Bitcoin na binuo, kasama ang transaction fees. Isinasaad rin kung saang Bitcoin address ng miner tatanggapin ang kabuuang pabuya. Ang output na ito ay isa nang Unspent Transaction Output (UTXO). Magandang isang sinauna at bagong block ang tinitignan natin. Makikita na sa Block 170, ang pabuyang 50 Bitcoin ay nakandado sa Public Key (P2PK) mismo, walang address. May mga ganitong istilo noon bago pa ang P2PKH. Sa block 777777, makikita na ang pabuyang 6.43403232 Bitcoin ay nakandado naman sa isang Script Hash (P2SH) at pinakita rin ang katumbas na address. Pero unang output (#0) lang iyon. May dalawa pang output (#1 & #2) na OP_RETURN at walang Bitcoin na laman. Ang dalawang ito ay nasa klase ng output na hindi magagasta: data recording output. Tignan ang kabuuan at ilustrasyon sa:
Ito na nga ang Coinbase Ang input sa coinbase transaction ay ang coinbase, kung saan walang halaga ng Bitcoin ang nakasaad. Sa katunayan, kahit ano ang pwedeng laman nito. Ang pagsuri ng ilang halvings mula sa halaga ng block height naman kasi ang pagbabasehan kung ilan ang gagawing bagong Bitcoin. May naumpisahang istilo ng laman ng coinbase na ginaya na ng mga sumunod na miners. At nung naglaon ay may pamantayan o standards nang isinaad para sundin ng mga miners na laman ng coinbase, gaya ng nasasaad sa BIP-034 para sa version 2 blocks (pataas). Mula rito isinama na ang block height sa unang bytes ng coinbase para kakaiba ang hash ng bawat transaksyon. Pero hanggat may sobrang espasyo pa, maaari itong lagyan ng arbitraryong data ng sinumang may gusto. Tignan halimbawa ang coinbase transaction na inilalarawan naman kapag gumamit ka ng Bitcoin block chain explorer... Ituloy kasama ang mga makakatulong na ilustrasyon sa:
Coinbase Transaction - Introduksyon Nabanggit na sa nakaraan ang pangkalahatang ideya ng block reward, para diri-diretso na tayo. Coinbase na, tara. Ang pinakaunang ginagawang transaksyon sa isang block ay ang coinbase transaction. Ang mga node na nagmimina (mining node) ng Bitcoin ay gumagawa ng coinbase transaction para sa kanilang pabuya sa pagtatrabaho ng pag-aayos ng mga transaksyon sa block. Sa mga naunang blocks ng Bitcoin, coinbase transaction lang ang laman, kasi sobrang kaunti pa ang may alam at wala nang ibang kasali sa network maliban kay Satoshi Nakamoto. Ang genesis block (pinakaunang block) ay nabuo nung Enero 3, 2009. Mula rito, paggawa lang ng block reward na 50 na bagong mga Bitcoin kada ~10 minuto ang nangyayari. Naipon ang mga Bitcoin sa iisang nagmimina, kaya wala pang naipamigay na transaction fee. Noong Enero 9, 2009 unang nai-release ang open-source na Bitcoin client. Tsaka palang pwedeng sumali ang iba sa network. Ang pinakaunang transaksyon kung saan ginasta ang naipong Bitcoin ay naganap sa Block 170. Pinasahan ng 10 Bitcoin ni Satoshi Nakamoto si Hal Finney noong Enero 12, 2009. At dito, wala pang fees na ginamit! Pwede talaga ito sa Bitcoin network. Pero syempre iba na ang lagay ngayon. Imposible nang may magsama ng transaksyon mo sa block kung hindi ka magbabayad ng transaction fee. At lagi nang kombinasyon ng bagong Bitcoin at mga transaction fees ang output ng coinbase transaction. Sa ibabaw ng pag-aayos ng block ay ang kompetisyon gamit ang Proof-of-Work algorithm para ang hash ng block header ay may katumbas na numerong kaparehas o mas maliit ang halaga sa target. Ang Proof-of-Work algorithm ay nangangailangan ng paggamit ng hashing algorithm. Kaya kung halimbawa eh pantay-pantay ang lakas ng mga mining nodes, walang kasiguraduhan kung sino ang unang makakakuha ng target. Kung sinumang minero ang magiging matagumpay, sya ang mangongolekta ng pabuyang nakasaad sa kanyang coinbase transaction. Paano ang ibang gumawa ng coinbase transaction? Mawawalang bisa ito at susubok nalang ang mga natalong minero sa susunod na block. Ang mga sumusunod ang bumubuo ng istraktura ng coinbase transaction: > Coinbase - na syang arbitraryong input, walang pagbabasehan na nakaraang transaksyon. > Output - kung saan nasasaad ang pabuya, ito ay UTXO na. > Transaction fee - maaaring kasama ito o hindi sa pabuyang nakasaad sa output. Sa panahon ngayon, parang imposible nang hindi. Tignan ang ilustrasyon sa:
Ang Bitcoin ay bagay sa mga OFWs at kanilang mga pamilya. Borderless money transfer within minutes.
Pangkalahatang Ideya ng Pagmimina ng Block Reward Ang pinakaunang ginagawang transaksyon sa isang block ay ang coinbase transaction. Ang mga node na nagmimina (mining node) ng Bitcoin ay gumagawa ng coinbase transaction para sa kanilang pabuya sa pagtatrabaho ng pag-aayos ng mga transaksyon sa block. Isantabi muna natin ito at pag-usapan ang block reward. Sa ibabaw ng pag-aayos ng block ay ang kompetisyon gamit ang Proof-of-Work algorithm para ang hash ng block header ay may katumbas na numerong kaparehas o mas maliit ang halaga sa target. Ang Proof-of-Work algorithm ay nangangailangan ng paggamit ng hashing algorithm. Kaya kung halimbawa eh pantay-pantay ang lakas ng mga mining nodes, walang kasiguraduhan kung sino ang unang makakakuha ng target. Kung sinumang minero ang magiging matagumpay, sya ang mangongolekta ng pabuyang nakasaad sa kanyang coinbase transaction. Paano ang ibang gumawa ng coinbase transaction? Mawawalang bisa ito at susubok nalang ang mga natalong minero sa susunod na block. Ang dami ng bagong Bitcoin na bubuuin (block reward) ay nakadepende sa block height. Malalaman kung pang-ilang halving na ang nakalipas base sa block height - ang dami ng bloke sa blockchain. Ang bilang ng halving ay may karampatang bagong Bitcoin. Bitcoin halving ang tawag sa pangangalahati ng block reward. Nabanggit sa unang kabanata na ito ay nagaganap kada 210,000 blocks, o halos kada 4 na taon. Sa unang 210,000 blocks (0 halving), 50 ang binuong Bitcoin na pabuya. Sa blocks 210,001 - 420,000 (1 halving), 25 Bitcoin, atbp. Sa panahong isinulat ang kabanatang ito, nasa loob na ng 630,001 - 840,000 ang block height - ikatlong halving na. Kaya ang block reward ay 6.25 Bitcoin. Hanggang 64 na halvings lang ang pwedeng maganap. Matapos nito, puro transaction fees nalang ang makukuhang pabuya ng mga nagmimina. Subalit dahil ang 1 Satoshi ay 1/100,000,000 ng Bitcoin, hanggang ika-32 na halving lang mayroong block reward. Paano ba ito natakda? Binary right shift kasi sa halip na division ang operasyon ng pagkuha ng block reward gamit ang bilang ng halving. Ang 50 Bitcoin na 5,000,000,000 satoshis ay may 33 bits (100101010000001011111001000000000). Bawat tanggal ng dulong bit (ito ang binary right shift), ay katumbas ng pangangalahati ng halaga ng block reward. Maaari mo itong iberipika sa kahit anong decimal to binary converter. Matapos ang 32 halvings, 1 bit nalang ang matitira, na syang 1 Satoshi. Sa pag right shift ng ika-33 halving, wala nang matitirang bit. Kaya ayun na ang katapusan ng block reward. Magkakaroon kaya ng pagbabago sa code para maglaan pa ng mas maliit na dibisyon ng Bitcoin? Panahon ang makapagsasabi.
Unspent Transaction Output (UTXO) at isang metapora Lahat ng transaksyon sa Bitcoin, maliban sa coinbase transaction na pag-uusapan sa susunod na post, ay gumagamit ng unspent transaction output. Nakasaad sa loob nito ang halaga ng Bitcoin, at ang kondisyon na syang magkakandado rito para sa nararapat na may-ari. Ang lahat ng UTXO ay napapabilang sa UTXO set, na sinusubaybayan ng mga full nodes. Sa tipikal na transaksyon, kukuha ng magagamit na UTXO, para gumawa ng bagong UTXO. Ang nasa input ng mga transakayon ay pagtuturo sa mga UTXO na bubuksan ang kandado para magamit sa iba ang Bitcoin. Kapag nangyari iyon, ang UTXO ay magiging spent transaction output (STXO), na tatanggalin na sa UTXO set. Ang mga nasa output naman ang mga bagong UTXO na idadagdag sa set. Ang mekanismong ito ay nangangailangang gastusin ang anumang UTXO na kukunin. Maglalaan nalang ng bagong UTXO pabalik sa pinanggalingang pitaka kung sakaling may sukli. Kapag gumagamit tayo ng pisikal na salapi, nagkakaroon ng pagsasama-sama ng iba-ibang denominasyon para mabuo ang dapat bayaran. Kung kailangan, nagkakaroon din ng panunukli. Kapag nagbabayad ka ng buo, konti lang ang iaabot mong piraso ng salapi, at minsan, mas maraming piraso ang natatanggap mo pabalik - mas mababa lang ang denominasyon. Hawig ito sa paggamit ng mga UTXOs, pero kulang pa ang metapora. Hindi lang kasi sya parang magbabayad ka at manunukli. Sa halip, para kang kukuha ng salapi, tutunawin o ipoproseso, tapos hahatiin sa bayad, sukli, at transaction fee. Ang bayad o sukli ay malaki o maliit na salaping bubuuin, depende sa transaksyon. At may butil na natitira bilang transaction fee, na kokolektahin ng mining node.
Himayin ang Mekanismo ng Transaksyon: Panimula Napag-usapan na ang pagkakaroon ng Bitcoin, simpleng pagpapasahan nito, at napag-aralan din ng may kalaliman ang cryptography sa mga post dito sa website. Maaari na nating siyasatin ang mga transaksyong electronic sa higit pang mapanuring paraan. Noong mababa pa ang halaga ng Bitcoin kumpara sa fiat na salapi, nakakapagtransaksyon pa ang mga tao gamit ito para sa maliliit na bagay. Isang mahalagang parte ng kasaysayan ay ang Bitcoin Pizza Day: Mayo 22, 2010; Kung kailan si Laszlo Hanyecz ay nagbayad ng 10,000 Bitcoin kay Jeremy Sturdivant para sa 2 malalaking Papa John’s pizza. Ito ang unang nakilalang pakikipagtransaksyon sa Bitcoin para sa kalakal o paninda Bago natin himayin, subukan mong intindihin ang ilustrasyon ng dalawang transaksyong naganap sa block 170: Ipinapakita rito ang daloy ng paggawa ng bagong 50 Bitcoin, at isang transaksyon kung saan nagpasa ng 10 Bitcoin at may sukli na 40 Bitcoin. Ang paggawa ng 50 Bitcoin ay nagaganap sa coinbase transaction. Bago pa ito mag halving, kaya nag-umpisa sa 50. Ang pinakaunang transaksyon kung saan ginasta ang naipong Bitcoin ay naganap sa Block 170. Pinasahan ng 10 Bitcoin ni Satoshi Nakamoto si Hal Finney noong Enero 12, 2009. At dito, wala pang fees na ginamit! Pwede talaga ito sa Bitcoin network. Pero syempre iba na ang lagay ngayon. Nakikita mo ang Unspent Transaction Output (UTXO)? Napag-usapan na ito sa ibang post. Sa susunod, himayin pa natin ang konsepto.
Pagdagdag ng purpose at coin type sa HD wallet Dahil nga sa walang katapusang kombinasyon at sanga na pwedeng mabuo sa HD wallet, nagmungkahi ang BIP-0043 na ang antas kasunod ang master node (m), ang mga account/wallet (m/i), ay gamiting “purpose.” Sa pamamagitan nito, matutukoy ang mga susunod na struktura. m/purpose’/* Ang mga wallets na alinsunod sa BIP-0032 ay bibigyan na ng 0’ na purpose: m/0’/*. Ang pagkakaroon ng apostrophe (’) ay nangangahulugang hardened derivation. Kaya index ng unang hardened child key ang gamit para sa mga wallets alinsunod sa BIP-0032. Nabanggit din sa BIP-0043 na kapag mayroong mga software na kailangan ng isa pang istraktura, irekomenda ito sa ibang BIP, at ilagay ang numero nito bilang “purpose”. Kaya naman, nung nagkaroon ng bagong proposal na BIP-0044 na naglalayong magkaroon ng 5 antas ang HD wallet para maisama ang iba pang klase ng coins: m/purpose’/coin_type’/account’/change/address_index 44’ ang itinalaga sa purpose’. Buti nalang at 0’ ang coin_type’ na itinalaga para sa Bitcoin. 1’ naman para sa Bitcoin Testnet. Huwag na nating pakialaman yung iba. Ang account’ ay maraming posibilidad, pero hardened derivation ang gamit. Ang change na tumutukoy sa chain pag BIP-0032, ay nanatiling 0 para sa external, 1 para sa change/internal. Public derivation o ang pagkuha ng normal child keys ang gamit dito. At sa address_index, normal child keys din. Halimbawa, ang Bitcoin address ko na binahagi para makatanggap ng bayad ay galing sa public key ng ikapitong index, sa ikalawa kong account ng isang multi-coin wallet: m/44’/0’/1’/0/6 Banggitin na rin natin, na kaya sa BIP-0049 na nagrekomenda ng deribasyon para sa Nested SegWit (P2SH-P2WPKH) address, m/49’/* ang istraktura nito. Sa BIP-0084 rekomendasyon naman para sa Native SegWit address, m/84’/; at sa single key taproot na rekomendasyon sa BIP-0086, m/86’/ ang istraktura. Ayan, sana sa mga nakaraang usapan sa blog ay naintindihan mo pa lalo ang operasyon ng iyong Bitcoin wallet! Basahin ang kabuuang kabanata 4 ( ukol sa Bitcoin wallets!
Seed Phrase? Pagbuo at Gamit ng Mnemonic Code sa HD Wallets Ang paggamit ng mnemonic code ay iminungkahi sa BIP-0039 at naging standard na sa mga hierarchichal determinisitic (HD) wallets. Ito ay naglalayong mapadali ang pagtatago ng seed ng iyong wallet sa paraang mas kayang tandaan ng tao. Kumpara sa pagsulat at pagkabisado ng mahabang binary o hexadecimal na anyo ng seed, di hamak na mas madali ang paggamit ng mga pamilyar na salita. Kahit na sabihin mong mahirap pa rin kabisaduhin ang grupo ng 12-24 na salita. Madalas na tinatawag itong seed phrase. Pero ang mnemonic code ay nagsisilbing representasyon ng entropy na sya pang pagmumulan ng seed. Paano malalaman ang mnemonic code? Gamit ang CSPRNG ng wallet, kukuha ng entropy ENT na mula 128-256 bits ang haba, na multiple ng 32 bits. Ang inisyal na halaga ay padadaanin sa SHA-256 para makuha ang checksum CS. Ang checksum ay ang ENT/32 bits sa unahan ng hashed value. Iduduktong ang CS sa ENT. (Magreresulta ito sa dami ng bits na divisible ng 11) Tapos ay hahatiin ENT||CS sa tig-11 bits. Ang dami ng tig-11 bits na lupon ay ang dami ng salita sa mnemonic sentence MS. At ang halaga ng bawat 11-bits ay representasyon ng isa sa 2,048 na mga salitang naka index mula 0 hanggang 2047. Makikita rito ang English word list na rekomendasyon ng BIP-0039: Basahin ang kabuuan sa:
Pagbuo ng Master Seed at mga Keys sa HD Wallet Sa Master Seed, binubuo ang seed byte sequence S gamit ang pseudo-random number generator (PRNG). Ang seed byte sequence ay may habang 128 hanggang 512 bits, at 256 bits ang rekomendasyon sa BIP-0032. Ang randomness na nakukuha ng isang random number generator ay tinatawag na entropy. May ibang wallet na kaya makakuha ng entropy mula sa true random number generator (TRNG). Basta kung hindi man, dapat Cryptographically Secure Pseudo-random Number Generator (CSPRNG). Ang entropy ay nababanggit rin na may kaukulang haba ng bits, gaya ng makikita sa ilustrasyon ng key tree. Kaya baka mapagkamalan mo na ang seed at entropy ay parehas. Hindi. Ang seed ang lumabas na representasyon matapos makakolekta ng entropy ang random number generator. Pag tapos makapili ng S, dadaan ito sa Hash-based message authentication code (HMAC). Ipagpatuloy sa:
15 taon na ang nakaraan mula nang nabuo ang genesis block ng Bitcoin. Naglalaman ito ng arbitraryong data: 5468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73 Na kapag i convert sa ASCII ay nagsasabing: "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" - isang timestamp at nagkataong akmang akmang ulo ng balita sa araw na iyon para sa institusyong maaaring palitan ng #Bitcoin .
Digital Signatures (Digital na Lagda) Gamit ang kaalaman natin sa public key cryptography at hash functions, maiging pag-usapan na ang digital signatures. Ang digital signature ay isang numero na nakuha mula sa private key at sa laman ng mensaheng pinipirmahan. Kumbaga, ginamit ang mga katumbas na numero ng private key at mensahe sa kalkulasyon para makuha ang digital signature. Dahil sangkap ang mensahe, ang digital signature ay iba-iba ang halaga sa bawat mensahe. At sa paggamit ng private key, markado ang mensahe ng orihinal na may-ari. Ang RSA ay maaaring gamitin direkta kung saan ang mensahe ay nakapaloob na rin sa digital signature. Pero lalaktawan natin iyon para mailarawan ang gamit ng hash function sa kombinasyon ng RSA. Makikita sa ilutsrasyon sa bagong post ang prosesong sumusunod sa PKCS#1. Ang PKCS ay Public-key Cryptography Standards at ang #1 ay ang seksyon nito na naglalatag ng RSA Encryption Standard. Ipagpatuloy sa bagong blog post: