Package fr.acinq.bitcoin

Types

Link copied to clipboard
object Base58
Link copied to clipboard
object Base58Check

https://en.bitcoin.it/wiki/Base58Check_encoding Base58Check is a format based on Base58 and used a lot in bitcoin, for encoding addresses and private keys for example. It includes a prefix (usually a single byte) and a checksum so you know what has been encoded, and that it has been transmitted correctly. For example, to create an address for a public key you could write: {{{ val pub: BinaryData = "0202a406624211f2abbdc68da3df929f938c3399dd79fac1b51b0e4ad1d26a47aa" val address = Base58Check.encode(Base58.Prefix.PubkeyAddress, Crypto.hash160(pub)) }}} And to decode a private key you could write: {{{ // check that is it a mainnet private key val (Base58.Prefix.SecretKey, priv) = Base58Check.decode("5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn") }}}

Link copied to clipboard
object Bech32

Bech32 and Bech32m address formats. See https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki and https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki.

Link copied to clipboard
object Bitcoin
Link copied to clipboard
data class Block(val header: BlockHeader, val tx: List<Transaction>)
Link copied to clipboard
data class BlockHeader(    val version: Long,     val hashPreviousBlock: ByteVector32,     val hashMerkleRoot: ByteVector32,     val time: Long,     val bits: Long,     val nonce: Long) : BtcSerializable<BlockHeader>
Link copied to clipboard
interface BtcSerializable<T>
Link copied to clipboard
abstract class BtcSerializer<T>
Link copied to clipboard
open class ByteVector(    bytes: ByteArray,     offset: Int,     size: Int)
Link copied to clipboard
class ByteVector32(bytes: ByteArray, offset: Int) : ByteVector
Link copied to clipboard
class ByteVector64(bytes: ByteArray, offset: Int) : ByteVector
Link copied to clipboard
object Crypto
Link copied to clipboard
object Descriptor
Link copied to clipboard
object DeterministicWallet

see https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

Link copied to clipboard
typealias Int5 = Byte

Bech32 works with 5 bits values, we use this type to make it explicit: whenever you see Int5 it means 5 bits values, and whenever you see Byte it means 8 bits values.

Link copied to clipboard
data class KeyPath(val path: List<Long>)
Link copied to clipboard
object LexicographicalOrdering

Lexicographical Ordering of Transaction Inputs and Outputs. See https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki

Link copied to clipboard
object MerkleTree

see https://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees

Link copied to clipboard
object MnemonicCode
Link copied to clipboard
object OP_0 : ScriptElt
Link copied to clipboard
object OP_0NOTEQUAL : ScriptElt
Link copied to clipboard
object OP_1 : ScriptElt
Link copied to clipboard
object OP_10 : ScriptElt
Link copied to clipboard
object OP_11 : ScriptElt
Link copied to clipboard
object OP_12 : ScriptElt
Link copied to clipboard
object OP_13 : ScriptElt
Link copied to clipboard
object OP_14 : ScriptElt
Link copied to clipboard
object OP_15 : ScriptElt
Link copied to clipboard
object OP_16 : ScriptElt
Link copied to clipboard
object OP_1ADD : ScriptElt
Link copied to clipboard
object OP_1NEGATE : ScriptElt
Link copied to clipboard
object OP_1SUB : ScriptElt
Link copied to clipboard
object OP_2 : ScriptElt
Link copied to clipboard
object OP_2DIV : ScriptElt
Link copied to clipboard
object OP_2DROP : ScriptElt
Link copied to clipboard
object OP_2DUP : ScriptElt
Link copied to clipboard
object OP_2MUL : ScriptElt
Link copied to clipboard
object OP_2OVER : ScriptElt
Link copied to clipboard
object OP_2ROT : ScriptElt
Link copied to clipboard
object OP_2SWAP : ScriptElt
Link copied to clipboard
object OP_3 : ScriptElt
Link copied to clipboard
object OP_3DUP : ScriptElt
Link copied to clipboard
object OP_4 : ScriptElt
Link copied to clipboard
object OP_5 : ScriptElt
Link copied to clipboard
object OP_6 : ScriptElt
Link copied to clipboard
object OP_7 : ScriptElt
Link copied to clipboard
object OP_8 : ScriptElt
Link copied to clipboard
object OP_9 : ScriptElt
Link copied to clipboard
object OP_ABS : ScriptElt
Link copied to clipboard
object OP_ADD : ScriptElt
Link copied to clipboard
object OP_AND : ScriptElt
Link copied to clipboard
object OP_BOOLAND : ScriptElt
Link copied to clipboard
object OP_BOOLOR : ScriptElt
Link copied to clipboard
object OP_CAT : ScriptElt
Link copied to clipboard
object OP_CHECKLOCKTIMEVERIFY : ScriptElt
Link copied to clipboard
object OP_CHECKMULTISIG : ScriptElt
Link copied to clipboard
object OP_CHECKMULTISIGVERIFY : ScriptElt
Link copied to clipboard
object OP_CHECKSEQUENCEVERIFY : ScriptElt
Link copied to clipboard
object OP_CHECKSIG : ScriptElt
Link copied to clipboard
object OP_CHECKSIGADD : ScriptElt
Link copied to clipboard
object OP_CHECKSIGVERIFY : ScriptElt
Link copied to clipboard
object OP_CODESEPARATOR : ScriptElt
Link copied to clipboard
object OP_DEPTH : ScriptElt
Link copied to clipboard
object OP_DIV : ScriptElt
Link copied to clipboard
object OP_DROP : ScriptElt
Link copied to clipboard
object OP_DUP : ScriptElt
Link copied to clipboard
object OP_ELSE : ScriptElt
Link copied to clipboard
object OP_ENDIF : ScriptElt
Link copied to clipboard
object OP_EQUAL : ScriptElt
Link copied to clipboard
object OP_EQUALVERIFY : ScriptElt
Link copied to clipboard
object OP_FROMALTSTACK : ScriptElt
Link copied to clipboard
object OP_GREATERTHAN : ScriptElt
Link copied to clipboard
object OP_GREATERTHANOREQUAL : ScriptElt
Link copied to clipboard
object OP_HASH160 : ScriptElt
Link copied to clipboard
object OP_HASH256 : ScriptElt
Link copied to clipboard
object OP_IF : ScriptElt
Link copied to clipboard
object OP_IFDUP : ScriptElt
Link copied to clipboard
data class OP_INVALID(val code: Int) : ScriptElt
Link copied to clipboard
object OP_INVALIDOPCODE : ScriptElt
Link copied to clipboard
object OP_INVERT : ScriptElt
Link copied to clipboard
object OP_LEFT : ScriptElt
Link copied to clipboard
object OP_LESSTHAN : ScriptElt
Link copied to clipboard
object OP_LESSTHANOREQUAL : ScriptElt
Link copied to clipboard
object OP_LSHIFT : ScriptElt
Link copied to clipboard
object OP_MAX : ScriptElt
Link copied to clipboard
object OP_MIN : ScriptElt
Link copied to clipboard
object OP_MOD : ScriptElt
Link copied to clipboard
object OP_MUL : ScriptElt
Link copied to clipboard
object OP_NEGATE : ScriptElt
Link copied to clipboard
object OP_NIP : ScriptElt
Link copied to clipboard
object OP_NOP : ScriptElt
Link copied to clipboard
object OP_NOP1 : ScriptElt
Link copied to clipboard
object OP_NOP10 : ScriptElt
Link copied to clipboard
object OP_NOP4 : ScriptElt
Link copied to clipboard
object OP_NOP5 : ScriptElt
Link copied to clipboard
object OP_NOP6 : ScriptElt
Link copied to clipboard
object OP_NOP7 : ScriptElt
Link copied to clipboard
object OP_NOP8 : ScriptElt
Link copied to clipboard
object OP_NOP9 : ScriptElt
Link copied to clipboard
object OP_NOT : ScriptElt
Link copied to clipboard
object OP_NOTIF : ScriptElt
Link copied to clipboard
object OP_NUMEQUAL : ScriptElt
Link copied to clipboard
object OP_NUMEQUALVERIFY : ScriptElt
Link copied to clipboard
object OP_NUMNOTEQUAL : ScriptElt
Link copied to clipboard
object OP_OR : ScriptElt
Link copied to clipboard
object OP_OVER : ScriptElt
Link copied to clipboard
object OP_PICK : ScriptElt
Link copied to clipboard
data class OP_PUSHDATA(val data: ByteVector, val opCode: Int) : ScriptElt
Link copied to clipboard
object OP_PUSHDATA1 : ScriptElt
Link copied to clipboard
object OP_PUSHDATA2 : ScriptElt
Link copied to clipboard
object OP_PUSHDATA4 : ScriptElt
Link copied to clipboard
object OP_RESERVED : ScriptElt
Link copied to clipboard
object OP_RESERVED1 : ScriptElt
Link copied to clipboard
object OP_RESERVED2 : ScriptElt
Link copied to clipboard
object OP_RETURN : ScriptElt
Link copied to clipboard
object OP_RIGHT : ScriptElt
Link copied to clipboard
object OP_RIPEMD160 : ScriptElt
Link copied to clipboard
object OP_ROLL : ScriptElt
Link copied to clipboard
object OP_ROT : ScriptElt
Link copied to clipboard
object OP_RSHIFT : ScriptElt
Link copied to clipboard
object OP_SHA1 : ScriptElt
Link copied to clipboard
object OP_SHA256 : ScriptElt
Link copied to clipboard
object OP_SIZE : ScriptElt
Link copied to clipboard
object OP_SUB : ScriptElt
Link copied to clipboard
object OP_SUBSTR : ScriptElt
Link copied to clipboard
object OP_SWAP : ScriptElt
Link copied to clipboard
object OP_TOALTSTACK : ScriptElt
Link copied to clipboard
object OP_TUCK : ScriptElt
Link copied to clipboard
object OP_VER : ScriptElt
Link copied to clipboard
object OP_VERIF : ScriptElt
Link copied to clipboard
object OP_VERIFY : ScriptElt
Link copied to clipboard
object OP_VERNOTIF : ScriptElt
Link copied to clipboard
object OP_WITHIN : ScriptElt
Link copied to clipboard
object OP_XOR : ScriptElt
Link copied to clipboard
data class OutPoint(val hash: ByteVector32, val index: Long) : BtcSerializable<OutPoint>

an out point is a reference to a specific output in a specific transaction that we want to claim

Link copied to clipboard
data class PrivateKey(val value: ByteVector32)

A bitcoin private key. A private key is valid if it is not 0 and less than the secp256k1 curve order when interpreted as an integer (most significant byte first). The probability of choosing a 32-byte string uniformly at random which is an invalid private key is negligible, so this condition is not checked by default. However, if you receive a private key from an external, untrusted source, you should call isValid() before actually using it.

Link copied to clipboard
object Protocol
Link copied to clipboard
data class PublicKey(val value: ByteVector)

A bitcoin public key (in compressed form). A public key is valid if it represents a point on the secp256k1 curve. The validity of this public key is not checked by default, because when you create a public key from a private key it will always be valid. However, if you receive a public key from an external, untrusted source, you should call isValid() before actually using it.

Link copied to clipboard
data class Satoshi(val sat: Long) : Comparable<Satoshi>
Link copied to clipboard
object Script
Link copied to clipboard
sealed class ScriptElt
Link copied to clipboard
object ScriptEltMapping
Link copied to clipboard
object ScriptFlags
Link copied to clipboard
data class ScriptLeaf(    val id: Int,     val script: ByteVector,     val leafVersion: Int)

leaf of a script tree used to create and spend tapscript transactions

Link copied to clipboard
sealed class ScriptTree<T>

Simple binary tree structure

Link copied to clipboard
data class ScriptWitness(val stack: List<ByteVector>) : BtcSerializable<ScriptWitness>
Link copied to clipboard
object SigHash
Link copied to clipboard
object SigVersion
Link copied to clipboard
data class Transaction(    val version: Long,     val txIn: List<TxIn>,     val txOut: List<TxOut>,     val lockTime: Long) : BtcSerializable<Transaction>
Link copied to clipboard
data class TxIn(    val outPoint: OutPoint,     val signatureScript: ByteVector,     val sequence: Long,     val witness: ScriptWitness = ScriptWitness.empty) : BtcSerializable<TxIn>

Transaction input

Link copied to clipboard
data class TxOut(val amount: Satoshi, val publicKeyScript: ByteVector) : BtcSerializable<TxOut>
Link copied to clipboard
class UInt256 : Comparable<UInt256>
Link copied to clipboard
data class XonlyPublicKey(val value: ByteVector32)

x-only pubkey, used with Schnorr signatures (see https://github.com/bitcoin/bips/tree/master/bip-0340) we only store the x coordinate of the pubkey, the y coordinate is always even

Functions

Link copied to clipboard
fun ByteArray.byteVector(): ByteVector
Link copied to clipboard
fun ByteArray.byteVector32(): ByteVector32
Link copied to clipboard
fun ByteArray.byteVector64(): ByteVector64
Link copied to clipboard
fun Int.sat(): Satoshi
fun Long.sat(): Satoshi
Link copied to clipboard
fun Int.toSatoshi(): Satoshi
fun Long.toSatoshi(): Satoshi
Link copied to clipboard
fun <T> List<T>.updated(i: Int, t: T): List<T>

Properties

Link copied to clipboard
const val MaxBlockSize: Int = 1000000