Documentation ¶
Overview ¶
Package constants provides magic numbers and other useful data, such as opcodes, which would otherwise have to be copy/pasted and re-declared across packages.
Index ¶
Constants ¶
const ( // BitcoinSeedIV is the initialization vector used for creating bitcoin wallet seeds. BitcoinSeedIV = "Bitcoin seed" // Base58Alphabet is the Bitcoin Base 58 alphabet. Base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" // Bech32Alphabet is the base-32 encoding alphabet for BECH32 as specified in BIP-173. Bech32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l" // Bech32Separator is the separating character in bech32 which separates the HRP from the version number and encoded data. Bech32Separator = "1" // Bip32Hardened is the HD key index threshold above which any derived child keys are hardened. Bip32Hardened uint32 = 0x80000000 // BlockMaxSize is the maximum block size, not including segwit data. BlockMaxSize = 1000000 // OpReturnMaxSize is the maximum size of an OP_RETURN output data payload. OpReturnMaxSize = 80 // SatoshisPerBitcoin is the number of base satoshi units per BTC SatoshisPerBitcoin = 100_000_000 // SeedMinimumSize and SeedMaximumSize are the lower and upper limits on // the byte-size of a BIP39 seed which can be used for generating a master key. SeedMinimumSize int = 128 / 8 SeedMaximumSize int = 512 / 8 // SerializedExtendedKeyLength is the byte length of a bip32 serialized extended key. SerializedExtendedKeyLength int = 78 // SigHash enum types SigHashAll uint32 = 1 SigHashNone uint32 = 2 SigHashSingle uint32 = 3 SigHashAnyoneCanPay uint32 = 0x80 // PublicKeyCompressedLength is the byte-size of a compressed public key. PublicKeyCompressedLength int = 33 // PublicKeyUncompressedLength is the byte-size of an uncompressed public key. PublicKeyUncompressedLength int = 65 // PublicKeySchnorrLength is the byte-size of a BIP340 schnorr public key. PublicKeySchnorrLength int = 32 // PublicKeyCompressedEvenByte and PublicKeyCompressedOddByte indicate the bytes prefixing // compressed public keys to indicate whether the Y coordinate of the public key point (X, Y) is even or odd. PublicKeyCompressedEvenByte byte = 2 PublicKeyCompressedOddByte byte = 3 PublicKeyUncompressedPrefix byte = 4 // TaprootLeafVersionTapscript is the version number used in Taproot Tapscript leaf nodes. TaprootLeafVersionTapscript = 0xc0 // WitnessVersionZero is the first witness version introduced. It is used for bech32-encoded // P2WPKH and P2WSH witness programs. WitnessVersionZero = 0 )
const ( OP_0 = 0x00 // 0 OP_FALSE = 0x00 // 0 or OP_0 OP_DATA_1 = 0x01 // 1 OP_DATA_2 = 0x02 // 2 OP_DATA_3 = 0x03 // 3 OP_DATA_4 = 0x04 // 4 OP_DATA_5 = 0x05 // 5 OP_DATA_6 = 0x06 // 6 OP_DATA_7 = 0x07 // 7 OP_DATA_8 = 0x08 // 8 OP_DATA_9 = 0x09 // 9 OP_DATA_10 = 0x0a // 10 OP_DATA_11 = 0x0b // 11 OP_DATA_12 = 0x0c // 12 OP_DATA_13 = 0x0d // 13 OP_DATA_14 = 0x0e // 14 OP_DATA_15 = 0x0f // 15 OP_DATA_16 = 0x10 // 16 OP_DATA_17 = 0x11 // 17 OP_DATA_18 = 0x12 // 18 OP_DATA_19 = 0x13 // 19 OP_DATA_20 = 0x14 // 20 OP_DATA_21 = 0x15 // 21 OP_DATA_22 = 0x16 // 22 OP_DATA_23 = 0x17 // 23 OP_DATA_24 = 0x18 // 24 OP_DATA_25 = 0x19 // 25 OP_DATA_26 = 0x1a // 26 OP_DATA_27 = 0x1b // 27 OP_DATA_28 = 0x1c // 28 OP_DATA_29 = 0x1d // 29 OP_DATA_30 = 0x1e // 30 OP_DATA_31 = 0x1f // 31 OP_DATA_32 = 0x20 // 32 OP_DATA_33 = 0x21 // 33 OP_DATA_34 = 0x22 // 34 OP_DATA_35 = 0x23 // 35 OP_DATA_36 = 0x24 // 36 OP_DATA_37 = 0x25 // 37 OP_DATA_38 = 0x26 // 38 OP_DATA_39 = 0x27 // 39 OP_DATA_40 = 0x28 // 40 OP_DATA_41 = 0x29 // 41 OP_DATA_42 = 0x2a // 42 OP_DATA_43 = 0x2b // 43 OP_DATA_44 = 0x2c // 44 OP_DATA_45 = 0x2d // 45 OP_DATA_46 = 0x2e // 46 OP_DATA_47 = 0x2f // 47 OP_DATA_48 = 0x30 // 48 OP_DATA_49 = 0x31 // 49 OP_DATA_50 = 0x32 // 50 OP_DATA_51 = 0x33 // 51 OP_DATA_52 = 0x34 // 52 OP_DATA_53 = 0x35 // 53 OP_DATA_54 = 0x36 // 54 OP_DATA_55 = 0x37 // 55 OP_DATA_56 = 0x38 // 56 OP_DATA_57 = 0x39 // 57 OP_DATA_58 = 0x3a // 58 OP_DATA_59 = 0x3b // 59 OP_DATA_60 = 0x3c // 60 OP_DATA_61 = 0x3d // 61 OP_DATA_62 = 0x3e // 62 OP_DATA_63 = 0x3f // 63 OP_DATA_64 = 0x40 // 64 OP_DATA_65 = 0x41 // 65 OP_DATA_66 = 0x42 // 66 OP_DATA_67 = 0x43 // 67 OP_DATA_68 = 0x44 // 68 OP_DATA_69 = 0x45 // 69 OP_DATA_70 = 0x46 // 70 OP_DATA_71 = 0x47 // 71 OP_DATA_72 = 0x48 // 72 OP_DATA_73 = 0x49 // 73 OP_DATA_74 = 0x4a // 74 OP_DATA_75 = 0x4b // 75 OP_PUSHDATA1 = 0x4c // 76 OP_PUSHDATA2 = 0x4d // 77 OP_PUSHDATA4 = 0x4e // 78 OP_1NEGATE = 0x4f // 79 OP_RESERVED = 0x50 // 80 OP_1 = 0x51 // 81 or OP_TRUE OP_TRUE = 0x51 // 81 OP_2 = 0x52 // 82 OP_3 = 0x53 // 83 OP_4 = 0x54 // 84 OP_5 = 0x55 // 85 OP_6 = 0x56 // 86 OP_7 = 0x57 // 87 OP_8 = 0x58 // 88 OP_9 = 0x59 // 89 OP_10 = 0x5a // 90 OP_11 = 0x5b // 91 OP_12 = 0x5c // 92 OP_13 = 0x5d // 93 OP_14 = 0x5e // 94 OP_15 = 0x5f // 95 OP_16 = 0x60 // 96 OP_NOP = 0x61 // 97 OP_VER = 0x62 // 98 OP_IF = 0x63 // 99 OP_NOTIF = 0x64 // 100 OP_VERIF = 0x65 // 101 OP_VERNOTIF = 0x66 // 102 OP_ELSE = 0x67 // 103 OP_ENDIF = 0x68 // 104 OP_VERIFY = 0x69 // 105 OP_RETURN = 0x6a // 106 OP_TOALTSTACK = 0x6b // 107 OP_FROMALTSTACK = 0x6c // 108 OP_2DROP = 0x6d // 109 OP_2DUP = 0x6e // 110 OP_3DUP = 0x6f // 111 OP_2OVER = 0x70 // 112 OP_2ROT = 0x71 // 113 OP_2SWAP = 0x72 // 114 OP_IFDUP = 0x73 // 115 OP_DEPTH = 0x74 // 116 OP_DROP = 0x75 // 117 OP_DUP = 0x76 // 118 OP_NIP = 0x77 // 119 OP_OVER = 0x78 // 120 OP_PICK = 0x79 // 121 OP_ROLL = 0x7a // 122 OP_ROT = 0x7b // 123 OP_SWAP = 0x7c // 124 OP_TUCK = 0x7d // 125 OP_CAT = 0x7e // 126 OP_SUBSTR = 0x7f // 127 OP_LEFT = 0x80 // 128 OP_RIGHT = 0x81 // 129 OP_SIZE = 0x82 // 130 OP_INVERT = 0x83 // 131 OP_AND = 0x84 // 132 OP_OR = 0x85 // 133 OP_XOR = 0x86 // 134 OP_EQUAL = 0x87 // 135 OP_EQUALVERIFY = 0x88 // 136 OP_RESERVED1 = 0x89 // 137 OP_RESERVED2 = 0x8a // 138 OP_1ADD = 0x8b // 139 OP_1SUB = 0x8c // 140 OP_2MUL = 0x8d // 141 OP_2DIV = 0x8e // 142 OP_NEGATE = 0x8f // 143 OP_ABS = 0x90 // 144 OP_NOT = 0x91 // 145 OP_0NOTEQUAL = 0x92 // 146 OP_ADD = 0x93 // 147 OP_SUB = 0x94 // 148 OP_MUL = 0x95 // 149 OP_DIV = 0x96 // 150 OP_MOD = 0x97 // 151 OP_LSHIFT = 0x98 // 152 OP_RSHIFT = 0x99 // 153 OP_BOOLAND = 0x9a // 154 OP_BOOLOR = 0x9b // 155 OP_NUMEQUAL = 0x9c // 156 OP_NUMEQUALVERIFY = 0x9d // 157 OP_NUMNOTEQUAL = 0x9e // 158 OP_LESSTHAN = 0x9f // 159 OP_GREATERTHAN = 0xa0 // 160 OP_LESSTHANOREQUAL = 0xa1 // 161 OP_GREATERTHANOREQUAL = 0xa2 // 162 OP_MIN = 0xa3 // 163 OP_MAX = 0xa4 // 164 OP_WITHIN = 0xa5 // 165 OP_RIPEMD160 = 0xa6 // 166 OP_SHA1 = 0xa7 // 167 OP_SHA256 = 0xa8 // 168 OP_HASH160 = 0xa9 // 169 OP_HASH256 = 0xaa // 170 OP_CODESEPARATOR = 0xab // 171 OP_CHECKSIG = 0xac // 172 OP_CHECKSIGVERIFY = 0xad // 173 OP_CHECKMULTISIG = 0xae // 174 OP_CHECKMULTISIGVERIFY = 0xaf // 175 OP_NOP1 = 0xb0 // 176 OP_NOP2 = 0xb1 // 177 OP_CHECKLOCKTIMEVERIFY = 0xb1 // 177 or OP_NOP2 OP_NOP3 = 0xb2 // 178 OP_CHECKSEQUENCEVERIFY = 0xb2 // 178 or OP_NOP3 OP_NOP4 = 0xb3 // 179 OP_NOP5 = 0xb4 // 180 OP_NOP6 = 0xb5 // 181 OP_NOP7 = 0xb6 // 182 OP_NOP8 = 0xb7 // 183 OP_NOP9 = 0xb8 // 184 OP_NOP10 = 0xb9 // 185 OP_CHECKSIGADD = 0xba // 186 OP_UNKNOWN187 = 0xbb // 187 OP_UNKNOWN188 = 0xbc // 188 OP_UNKNOWN189 = 0xbd // 189 OP_UNKNOWN190 = 0xbe // 190 OP_UNKNOWN191 = 0xbf // 191 OP_UNKNOWN192 = 0xc0 // 192 OP_UNKNOWN193 = 0xc1 // 193 OP_UNKNOWN194 = 0xc2 // 194 OP_UNKNOWN195 = 0xc3 // 195 OP_UNKNOWN196 = 0xc4 // 196 OP_UNKNOWN197 = 0xc5 // 197 OP_UNKNOWN198 = 0xc6 // 198 OP_UNKNOWN199 = 0xc7 // 199 OP_UNKNOWN200 = 0xc8 // 200 OP_UNKNOWN201 = 0xc9 // 201 OP_UNKNOWN202 = 0xca // 202 OP_UNKNOWN203 = 0xcb // 203 OP_UNKNOWN204 = 0xcc // 204 OP_UNKNOWN205 = 0xcd // 205 OP_UNKNOWN206 = 0xce // 206 OP_UNKNOWN207 = 0xcf // 207 OP_UNKNOWN208 = 0xd0 // 208 OP_UNKNOWN209 = 0xd1 // 209 OP_UNKNOWN210 = 0xd2 // 210 OP_UNKNOWN211 = 0xd3 // 211 OP_UNKNOWN212 = 0xd4 // 212 OP_UNKNOWN213 = 0xd5 // 213 OP_UNKNOWN214 = 0xd6 // 214 OP_UNKNOWN215 = 0xd7 // 215 OP_UNKNOWN216 = 0xd8 // 216 OP_UNKNOWN217 = 0xd9 // 217 OP_UNKNOWN218 = 0xda // 218 OP_UNKNOWN219 = 0xdb // 219 OP_UNKNOWN220 = 0xdc // 220 OP_UNKNOWN221 = 0xdd // 221 OP_UNKNOWN222 = 0xde // 222 OP_UNKNOWN223 = 0xdf // 223 OP_UNKNOWN224 = 0xe0 // 224 OP_UNKNOWN225 = 0xe1 // 225 OP_UNKNOWN226 = 0xe2 // 226 OP_UNKNOWN227 = 0xe3 // 227 OP_UNKNOWN228 = 0xe4 // 228 OP_UNKNOWN229 = 0xe5 // 229 OP_UNKNOWN230 = 0xe6 // 230 OP_UNKNOWN231 = 0xe7 // 231 OP_UNKNOWN232 = 0xe8 // 232 OP_UNKNOWN233 = 0xe9 // 233 OP_UNKNOWN234 = 0xea // 234 OP_UNKNOWN235 = 0xeb // 235 OP_UNKNOWN236 = 0xec // 236 OP_UNKNOWN237 = 0xed // 237 OP_UNKNOWN238 = 0xee // 238 OP_UNKNOWN239 = 0xef // 239 OP_UNKNOWN240 = 0xf0 // 240 OP_UNKNOWN241 = 0xf1 // 241 OP_UNKNOWN242 = 0xf2 // 242 OP_UNKNOWN243 = 0xf3 // 243 OP_UNKNOWN244 = 0xf4 // 244 OP_UNKNOWN245 = 0xf5 // 245 OP_UNKNOWN246 = 0xf6 // 246 OP_UNKNOWN247 = 0xf7 // 247 OP_UNKNOWN248 = 0xf8 // 248 OP_UNKNOWN249 = 0xf9 // 249 OP_SMALLINTEGER = 0xfa // 250 - bitcoin core internal OP_PUBKEYS = 0xfb // 251 - bitcoin core internal OP_UNKNOWN252 = 0xfc // 252 OP_PUBKEYHASH = 0xfd // 253 - bitcoin core internal OP_PUBKEY = 0xfe // 254 - bitcoin core internal OP_INVALIDOPCODE = 0xff // 255 - bitcoin core internal )
Variables ¶
var ( // Bech32ChecksumGen are the seed numbers used to create bech32 checksums. // https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#Checksum Bech32ChecksumGen = [...]int{0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3} // TxSegwitFlag is the byte sequence which, if present in a serialized transaction at a certain // location, indicates the precense of witness data. TxSegwitFlag = [...]byte{0, 1} )
var ( BitcoinNetwork = Network{ Symbol: "BTC", Name: "Bitcoin", Bech32: "bc", ScriptHash: 5, PubkeyHash: 0, WIF: 128, ExtendedPublic: 76067358, ExtendedPrivate: 76066276, } BitcoinTestnet = Network{ Symbol: "tBTC", Name: "Testnet Bitcoin", Bech32: "tb", ScriptHash: 196, PubkeyHash: 111, WIF: 239, ExtendedPublic: 70617039, ExtendedPrivate: 70615956, } LitecoinNetwork = Network{ Symbol: "LTC", Name: "Litecoin", Bech32: "ltc", ScriptHash: 50, PubkeyHash: 48, WIF: 176, ExtendedPublic: 27108450, ExtendedPrivate: 27106558, } ZcashNetwork = Network{ Symbol: "ZEC", Name: "Zcash", ScriptHash: 7357, PubkeyHash: 7352, WIF: 128, ExtendedPublic: 76067358, ExtendedPrivate: 76066276, } )
var CurrentNetwork = BitcoinNetwork
CurrentNetwork is a global variable that defines which network callers should use.
var NetworksByName = map[string]Network{ "Bitcoin": BitcoinNetwork, "Litecoin": LitecoinNetwork, "Zcash": ZcashNetwork, }
NetworksByName exposes network data sorted by capitalized coin names.
var NetworksBySymbol = map[string]Network{ "BTC": BitcoinNetwork, "LTC": LitecoinNetwork, "ZEC": ZcashNetwork, }
NetworksBySymbol exposes network data sorted by coin ticker symbol.
var OpCodes = map[string]byte{}/* 260 elements not displayed */
OpCodes is a map of human-readable opcode names to opcode byte values.
Functions ¶
This section is empty.
Types ¶
type AddressFormat ¶
type AddressFormat string
AddressFormat is used to describe different standardized script pubkey formats.
const ( FormatP2PKH AddressFormat = "P2PKH" FormatP2SH AddressFormat = "P2SH" FormatP2WPKH AddressFormat = "P2WPKH" FormatP2WSH AddressFormat = "P2WSH" FormatNONSTANDARD AddressFormat = "NONSTANDARD" )
type Network ¶
type Network struct { // The ticker symbol and name of this coin's network. Symbol string Name string // Only availble for segwit-enabled coins. Bech32 string // Constants used for base58-check encoding of addresses. ScriptHash uint16 PubkeyHash uint16 // Used for base58-check encoding of WIF private keys. WIF byte // Used for base58-check encoding of extended public and private keys. ExtendedPublic uint32 ExtendedPrivate uint32 }
Network represents a bitcoin-like coin, housing all the special magic numbers which are used for encoding addresses, and public and private keys.