Class: Synthra::Types::Crypto::BitcoinAddress
- 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
- #generate_base58_string(rng, length) ⇒ Object private
- #generate_edge(rng, context, args) ⇒ Object
- #generate_invalid(rng, context, args) ⇒ Object
-
#generate_random(rng, context, args) ⇒ String
Generate random Bitcoin address.
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
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 |