{"id":14980213,"url":"https://github.com/vtm9/adequate_crypto_address","last_synced_at":"2025-10-28T23:31:21.103Z","repository":{"id":45313891,"uuid":"148783176","full_name":"vtm9/adequate_crypto_address","owner":"vtm9","description":"A Ruby Library for dealing with validation cryptocurrency addresses","archived":false,"fork":false,"pushed_at":"2022-09-14T16:22:59.000Z","size":50,"stargazers_count":21,"open_issues_count":1,"forks_count":13,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T19:37:49.350Z","etag":null,"topics":["bitcoin","bitcoincash","dash","ethereum","ltc","ripple","ruby","zcash"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vtm9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-14T12:07:21.000Z","updated_at":"2024-07-14T23:53:00.000Z","dependencies_parsed_at":"2022-08-31T14:23:19.095Z","dependency_job_id":null,"html_url":"https://github.com/vtm9/adequate_crypto_address","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vtm9%2Fadequate_crypto_address","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vtm9%2Fadequate_crypto_address/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vtm9%2Fadequate_crypto_address/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vtm9%2Fadequate_crypto_address/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vtm9","download_url":"https://codeload.github.com/vtm9/adequate_crypto_address/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238738000,"owners_count":19522288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","bitcoincash","dash","ethereum","ltc","ripple","ruby","zcash"],"created_at":"2024-09-24T14:01:27.457Z","updated_at":"2025-10-28T23:31:15.809Z","avatar_url":"https://github.com/vtm9.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nAdequateCryptoAddress\n===============\n\n[![Gem Version][gem-version-svg]][gem-version-link]\n[![Build Status][build-status-svg]][build-status-link]\n[![Code Climate][codeclimate-status-svg]][codeclimate-status-link]\n[![Coverage Status][coverage-status-svg]][coverage-status-link]\n[![Downloads][downloads-svg]][downloads-link]\n[![Docs][docs-rubydoc-svg]][docs-rubydoc-link]\n[![License][license-svg]][license-link]\n\nSimple wallet address validator and normalizer for cryptocurrencies addresses in Ruby.\n\nInspired by [ognus/wallet-address-validator](https://github.com/ognus/wallet-address-validator).\n\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'adequate_crypto_address'\n```\n\nOr install it yourself as:\n\n```bash\ngem install adequate_crypto_address\n```\n\n## Main API\n\n##### .valid? (address, currency [, type = :prod])\n\n###### Parameters\n* address - Wallet address to validate.\n* currency - Currency name string or symbol in any case, `:bitcoin` or `'BTC'` or `:btc` or `'BitCoin'`\n* type - Optional. You can enforce validation with specific type. Not all currencies support types.\n\n\u003e Returns true if the address (string) is a valid wallet address for the crypto currency specified, see below for supported currencies.\n\n### Supported crypto currencies\n\n* Bitcoin/BTC, `'bitcoin'` or `'BTC'` types: `:segwit_v0_keyhash :segwit_v0_scripthash :hash160 :p2sh`\n* BitcoinCash/BCH, `'bitcoincash'` or `'BCH'` types: `:p2sh :p2pkh :p2pkhtest :p2shtest`\n* Dash, `'dash'` or `'DASH'` types: `:prod :test`\n* Zcash/ZEC, `'zcash'` or `'ZEC'` types: `:prod :test`\n* Ethereum/ETH, `'ethereum'` or `'ETH'`\n* Ripple/XRP, `'ripple'` or `'XRP'`\n* Toncoin, `'TON'`\n* Monero/XRM, `'monero'`\n\n## Usage\n\n### Validation\n``` ruby\nrequire 'adequate_crypto_address'\n# BTC\nAdequateCryptoAddress.valid?('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'BTC') #=\u003e true\nAdequateCryptoAddress.valid?('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', :bitcoin, :p2sh) #=\u003e true\n\n# BCH\nAdequateCryptoAddress.valid?('bitcoincash:qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk', :bch) #=\u003e true\nAdequateCryptoAddress.valid?('mmRH4e9WW4ekZUP5HvBScfUyaSUjfQRyvD', :BCH, :p2pkhtest) #=\u003e true\n\n# ETH\nAdequateCryptoAddress.valid?('0xde709f2102306220921060314715629080e2fb77', :ETH) #=\u003e true\nAdequateCryptoAddress.valid?('de709f2102306220921060314715629080e2fb77', :ethereum) #=\u003e true\n```\n\n### Normalization\n###### *Not all currencies support this feature.\n``` ruby\nrequire 'adequate_crypto_address'\n\n# BCH\nAdequateCryptoAddress.address('mmRH4e9WW4ekZUP5HvBScfUyaSUjfQRyvD', 'bch').cash_address #=\u003e \"bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf\"\nAdequateCryptoAddress.address('bitcoincash:qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk', 'bch').legacy_address #=\u003e \"1LcerwTc1oPsMtByDCNUXFxReZpN1EXHoe\"\n\naddress_string = 'qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk'\naddr = AdequateCryptoAddress.address(address_string, 'bch')\naddr.prefix #=\u003e \"bitcoincash\"\naddr.type #=\u003e :p2pkh\naddr.address #=\u003e \"bitcoincash:qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk\"\n\n# ETH\nAdequateCryptoAddress.address('D1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'eth').address #=\u003e \"0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb\"\n```\n\n\n### ActiveRecord validation example\n``` ruby\nclass Model \u003c ActiveRecord::Base\n  attribute :address, :string\n  attribute :dest_tag, :string\n  attribute :currency, :string\n\n  validate  :validate_address_type\n  validate  :validate_destination_tag\n\n  def validate_address_type\n    errors.add(:address, 'invalid address') unless AdequateCryptoAddress.valid?(address, currency)\n  end\n\n  # for Ripple\n  def validate_destination_tag\n    errors.add(:dest_tag, 'invalid destination tag') if dest_tag.present? \u0026\u0026 !(dest_tag =~ /\\A\\d{1,10}\\z/)\n  end\nend\n\n```\n### Add your currnecy\n``` ruby\n# frozen_string_literal: true\n# for Rails /config/initializers/adequate_crypto_address.rb\nmodule AdequateCryptoAddress\n  class Coin\n    attr_reader :address\n\n    def initialize(address_sring)\n      @address = address_sring\n    end\n\n    def valid?(_type)\n      address.present?\n    end\n  end\nend\n\nAdequateCryptoAddress.valid?('addr', :coin) #=\u003e true\n```\n\n## Development\n\nRun `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.\n\n## Contributing\n\n1. Fork [the repo](https://github.com/vtm9/adequate_crypto_address)\n2. Grab dependencies: `bundle install`\n3. Make sure everything is working: `bundle exec rake spec`\n4. Make your changes\n5. Test your changes\n5. Create a Pull Request\n6. Celebrate!!!!!\n\n## Notes\n\nBug reports and pull requests are welcome on GitHub at https://github.com/vtm9/adequate_crypto_address/issues\n\n [gem-version-svg]: https://badge.fury.io/rb/adequate_crypto_address.svg\n [gem-version-link]: https://rubygems.org/gems/adequate_crypto_address\n [downloads-svg]: http://ruby-gem-downloads-badge.herokuapp.com/adequate_crypto_address\n [downloads-link]: https://rubygems.org/gems/adequate_crypto_address\n [build-status-svg]: https://travis-ci.org/vtm9/adequate_crypto_address.svg?branch=master\n [build-status-link]:https://travis-ci.org/vtm9/adequate_crypto_address\n [coverage-status-svg]: https://coveralls.io/repos/vtm9/adequate_crypto_address/badge.svg?branch=master\n [coverage-status-link]: https://coveralls.io/r/vtm9/adequate_crypto_address?branch=master\n [codeclimate-status-svg]: https://codeclimate.com/github/vtm9/adequate_crypto_address.svg\n [codeclimate-status-link]: https://codeclimate.com/github/vtm9/adequate_crypto_address\n [docs-rubydoc-svg]: https://img.shields.io/badge/docs-rubydoc-blue.svg\n [docs-rubydoc-link]: http://www.rubydoc.info/gems/adequate_crypto_address/\n [license-svg]: https://img.shields.io/badge/license-MIT-blue.svg\n [license-link]: https://github.com/vtm9/adequate_crypto_address/blob/master/LICENSE.txt\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvtm9%2Fadequate_crypto_address","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvtm9%2Fadequate_crypto_address","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvtm9%2Fadequate_crypto_address/lists"}