Class: Synthra::Types::Crypto::BitcoinAddress

Inherits:
Base
  • Object
show all
Defined in:
lib/synthra/types/crypto/crypto.rb

Overview

BitcoinAddress type

Constant Summary collapse

BASE58_CHARS =

Base58 characters (Bitcoin uses Base58)

"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".freeze

Instance Method Summary collapse

Instance Method Details

#generate_base58_string(rng, length) ⇒ Object (private)



43
44
45
# File 'lib/synthra/types/crypto/crypto.rb', line 43

def generate_base58_string(rng, length)
  length.times.map { rng.sample(BASE58_CHARS.chars) }.join
end

#generate_edge(rng, context, args) ⇒ Object



33
34
35
# File 'lib/synthra/types/crypto/crypto.rb', line 33

def generate_edge(rng, context, args)
  ["1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4"].sample(random: rng.instance_variable_get(:@random))
end

#generate_invalid(rng, context, args) ⇒ Object



37
38
39
# File 'lib/synthra/types/crypto/crypto.rb', line 37

def generate_invalid(rng, context, args)
  [nil, "not an address", "invalid", [], {}].sample(random: rng.instance_variable_get(:@random))
end

#generate_random(rng, context, args) ⇒ String

Generate random Bitcoin address

Parameters:

Options Hash (args):

  • :format (Symbol)

    address format (:legacy, :bech32)

Returns:

  • (String)

    generated Bitcoin address



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/synthra/types/crypto/crypto.rb', line 19

def generate_random(rng, context, args)
  format_type = args[:format] || :legacy

  case format_type
  when :bech32
    # Bech32 format: bc1 + 42 characters
    "bc1" + generate_base58_string(rng, 42)
  else # :legacy
    # Legacy format: starts with 1 or 3, 26-35 characters
    prefix = rng.sample(["1", "3"])
    prefix + generate_base58_string(rng, rng.int(26, 34))
  end
end