Voor het ontvangen van een bitcoinbedrag kiest/genereert men een geheime sleutel van 32 bytes, dus 256 bits, waar dan de bijbehorende publieke sleutel uit wordt afgeleid. Een hash van 20 bytes, dus 160 bits, van de publieke sleutel, vormt in de blockchain de interne representatie van een bitcoinadres. Met 0x00 ervoor en een hash van 4 bytes erachter als checksum wordt dit een string van 25 bytes, die vaak wordt ingevoerd en weergegeven in base58check.[7][8] Het heeft dan 25-34 alfanumerieke tekens, en begint dan met 1 (P2PKH-adres). Een variant begint met 3 (P2SH-adres). Hierbij staan P2PKH en P2SH voor de twee soorten transactieoutput, pay to public key hash en pay to script hash (zie ook onder). Iedereen kan de interne representatie in de base58-representatie omzetten en omgekeerd, dus qua veiligheid en privacy zijn ze gelijkwaardig; in een context waarin de representatie er niet toe doet behoeven “bitcoinadres” en “hash van de publieke sleutel” geen nadere aanduiding en kunnen deze formuleringen door elkaar gebruikt worden.
Men deelt dit bitcoinadres mee aan de betaler. Na betaling komt er in de blockchain een transactie te staan met als output (of een van de outputs) de combinatie van het bedrag en de hash van de publieke sleutel. Een miner die een blok vindt, zie onder, creëert daarmee een vaste blokbeloning, de reward, een output zonder dat er een betaler is. Deze is ook weer de combinatie van het bedrag en de hash van de publieke sleutel.[9]
Iemands bezit aan bitcoin bestaat uit de nog niet uitgegeven transactieoutputs (unspent transaction outputs, UTXO’s) waarvan men de geheime sleutel heeft. In combinatie met de betalingsopdracht kan men hieruit namelijk een code genereren die wordt meegestuurd met de betalingsopdracht. Daarmee kan worden vastgesteld dat de gebruikte geheime sleutel hoort bij de hash van de publieke sleutel, zonder dat de geheime sleutel zelf af te leiden is.[10] Voor extra veiligheid en privacy hoeft de gebruiker zelfs de publieke sleutel aan niemand bekend te maken, maar slechts de hash ervan.
Een transactie (behalve de eerste van een blok, die de vaste beloning van het vinden ervan bevat) heeft als input een of meer outpoints. Een outpoint is een verwijzing naar een bepaalde output van een bepaalde transactie.[11] Deze outputs moeten uiteraard onder controle staan van de opdrachtgever van de eerstgenoemde transactie. Verder wordt gecontroleerd of de output nog niet is uitgegeven, dus of het een UTXO is. De controlerende nodes houden hiervoor een UTXO-database bij, omdat dit gemakkelijker is dan het rechtstreeks uit de blockchain af te leiden. Begin 2018 zijn er ruim 60 miljoen UTXO’s.[12] De initiatiefnemer kan een output onder controle stellen van zichzelf, als wisselgeld. Het totale outputbedrag kan uiteraard niet meer zijn dan het totale inputbedrag, wel minder: het verschil is dan de transactiebeloning (zie ook verderop).
Bitcoin gebruikt bij de controle over een output de standaard secp256k1 ECDSA (Elliptic Curve Digital Signature Algorithm). De letters “sec” staan voor Standards for Efficient Cryptography. De p staat voor het feit dat de standaard een set van 6 parameters vastlegt. Het getal 256 betreft het aantal bits. De k verwijst naar het gebruik van een koblitzkromme. Er wordt gebruik gemaakt van de elliptische kromme y2 = x3 + 7 over het eindige lichaam Fn met n = 2256 − 232 − 29 − 28 − 27 − 26 − 24 − 1.[13][14][15]
Op 24 augustus 2017 werd Segregated Witness, kortweg SegWit, geactiveerd, niet te verwarren met het verdergaande voorstel SegWit2x. De beperking van de blokgrootte tot 1 MB werd gematigd tot 4 miljoen weight units (WU), kortweg 4 MWU, waarbij bytes die het effect van transacties bepalen (het vervallen en creëren van UTXO’s) voor 4 WU tellen, maar bytes voor het controleren van de geldigheid voor slechts 1 WU.[16]