Pay to Public Key Hash
Ty Everett (ty@projectbabbage.com)
Abstract
The Pay-to-Public-Key-Hash (P2PKH) output script is a commonly used script in the Bitcoin network that allows users to send funds to a specific Bitcoin address. This standard provides a detailed specification of the P2PKH output script, providing detail on the operations performed, and giving examples for serialized Bitcoin addresses.
Motivation
The P2PKH output script is used to ensure that only the owner of a specific Bitcoin address can spend the funds sent to that address. This is achieved by requiring the spender to provide a valid signature that corresponds to the public key associated with the address. The P2PKH output script is widely used in the Bitcoin network and is the most common output script used in transactions.
Specification
The P2PKH output script is defined as follows:
Where:
OP_DUP
duplicates the top stack item.OP_HASH160
computes the RIPEMD160 hash of the SHA256 hash of the top stack item.<PubKeyHash>
is the RIPEMD160 hash of the SHA256 hash of the public key associated with the Bitcoin address.OP_EQUALVERIFY
checks if the top two stack items are equal and removes them if they are.OP_CHECKSIG
verifies that the signature provided by the spender is valid for the public key associated with the address.
Serialization Format (Base58)
The P2PKH output script is serialized using Base58 encoding. The serialized format is as follows:
Where:
[Version Byte]
is a single byte that identifies the network and the script type. The value of the version byte is0x00
for the mainnet and0x6F
for the testnet.[PubKeyHash]
is a 20-byte RIPEMD160 hash of the SHA256 hash of the public key associated with the Bitcoin address.[Checksum]
is a 4-byte checksum computed using the first four bytes of the double-SHA256 hash of the serialized script.
Examples
P2PKH Bitcoin addresses for mainnet always start with a 1
because the [Version Byte]
is 0x00
. On testnet, they will always start with either m
or, less often, n
, because the [Version Byte]
is 0x6F
.
Mainnet example P2PKH address: 1PyWzkfKrq1kakvLTeaCdAL8y8UJAcZAqU
Testnet example P2PKH address: mineSVDRCrSg2gzBRsY4Swb5QHFgdnGkis
How it Works
When a user creates a new Bitcoin address, a public key and a corresponding private key are generated. The public key is then hashed, first with SHA256 and then the result is hashed again using the RIPEMD160 algorithm to obtain a 20-byte hash value, which is the PubKeyHash used in the P2PKH output script.
To send funds to a P2PKH address, the sender creates a transaction that includes an output with the P2PKH output script and the address's PubKeyHash. To spend the funds, the recipient must provide a valid signature that corresponds to the public key associated with the address. The signature is verified using the OP_CHECKSIG
opcode in the output script.
Implementations
The P2PKH output script is implemented in most Bitcoin wallets and is widely used in the Bitcoin network. There are also many libraries available that provide functions for creating and validating P2PKH transactions.
Last updated