Files
Dena/app/models/payment_address.rb
2026-08-13 19:50:53 +03:30

79 lines
2.0 KiB
Ruby

# encoding: UTF-8
# frozen_string_literal: true
# TODO: Rename to DepositAddress
class PaymentAddress < ApplicationRecord
include Vault::EncryptedModel
vault_lazy_decrypt!
after_commit :enqueue_address_generation
validates :address, uniqueness: { scope: :wallet_id }, if: :address?
vault_attribute :details, serialize: :json, default: {}
vault_attribute :secret
belongs_to :wallet
belongs_to :member
before_validation do
next if blockchain_api&.case_sensitive?
self.address = address.try(:downcase)
end
before_validation do
next unless address? && blockchain_api&.supports_cash_addr_format?
self.address = CashAddr::Converter.to_cash_address(address)
end
def blockchain_api
BlockchainService.new(wallet.blockchain)
end
def enqueue_address_generation
AMQP::Queue.enqueue(:deposit_coin_address, { member_id: member.id, wallet_id: wallet.id }, { persistent: true })
end
def format_address(format)
format == 'legacy' ? to_legacy_address : to_cash_address
end
def to_legacy_address
CashAddr::Converter.to_legacy_address(address)
end
def to_cash_address
CashAddr::Converter.to_cash_address(address)
end
def trigger_address_event
::AMQP::Queue.enqueue_event('private', member.uid, :deposit_address, type: :create,
currencies: wallet.currencies.codes,
address: address)
end
end
# == Schema Information
# Schema version: 20210128083207
#
# Table name: payment_addresses
#
# id :integer not null, primary key
# member_id :bigint
# wallet_id :bigint
# address :string(95)
# remote :boolean default(FALSE), not null
# secret_encrypted :string(255)
# details_encrypted :string(1024)
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_payment_addresses_on_member_id (member_id)
# index_payment_addresses_on_wallet_id (wallet_id)
#