lib/zold/commands/propagate.rb
def propagate(id, _)
      start = Time.now
      modified = []
      total = 0
      network = @wallets.acq(id, &:network)
      @wallets.acq(id, &:txns).select { |t| t.amount.negative? }.each do |t|
        total += 1
        if t.bnf == id
          @log.error("Paying itself in #{id}? #{t}")
          next
        end
        @wallets.acq(t.bnf, exclusive: true) do |target|
          unless target.exists?
            @log.debug("#{t.amount * -1} from #{id} to #{t.bnf}: wallet is absent")
            next
          end
          unless target.network == network
            @log.debug("#{t.amount * -1} to #{t.bnf}: network mismatch, '#{target.network}'!='#{network}'")
            next
          end
          next if target.includes_positive?(t.id, id)
          unless target.prefix?(t.prefix)
            @log.debug("#{t.amount * -1} from #{id} to #{t.bnf}: wrong prefix \"#{t.prefix}\" in \"#{t}\"")
            next
          end
          target.add(t.inverse(id))
          @log.info("#{t.amount * -1} arrived to #{t.bnf}: #{t.details}")
          modified << t.bnf
        end
      end
      modified.uniq!
      @log.debug("Wallet #{id} propagated successfully, #{total} txns \
in #{Age.new(start, limit: 20 + total * 0.005)}, #{modified.count} wallets affected")
      modified.each do |w|
        @wallets.acq(w, &:refurbish)
      end
      modified
    end
def propagate(id, _)
      start = Time.now
      modified = []
      total = 0
      network = @wallets.acq(id, &:network)
      @wallets.acq(id, &:txns).select { |t| t.amount.negative? }.each do |t|
        total += 1
        if t.bnf == id
          @log.error("Paying itself in #{id}? #{t}")
          next
        end
        @wallets.acq(t.bnf, exclusive: true) do |target|
          unless target.exists?
            @log.debug("#{t.amount * -1} from #{id} to #{t.bnf}: wallet is absent")
            next
          end
          unless target.network == network
            @log.debug("#{t.amount * -1} to #{t.bnf}: network mismatch, '#{target.network}'!='#{network}'")
            next
          end
          next if target.includes_positive?(t.id, id)
          unless target.prefix?(t.prefix)
            @log.debug("#{t.amount * -1} from #{id} to #{t.bnf}: wrong prefix \"#{t.prefix}\" in \"#{t}\"")
            next
          end
          target.add(t.inverse(id))
          @log.info("#{t.amount * -1} arrived to #{t.bnf}: #{t.details}")
          modified << t.bnf
        end
      end
      modified.uniq!
      @log.debug("Wallet #{id} propagated successfully, #{total} txns \
in #{Age.new(start, limit: 20 + total * 0.005)}, #{modified.count} wallets affected")
      modified.each do |w|
        @wallets.acq(w, &:refurbish)
      end
      modified
    end
def propagate ( id , _ ) start = Time . now modified = [ ] total = 0 network = @wallets . acq ( id , :network ) @wallets . acq ( id , :txns ) . select { | t | t . amount . negative? } . each do | t | total += 1 if t . bnf == id @log . error ( "Paying itself in #{id}? #{t}" ) next end @wallets . acq ( t . bnf , exclusive : true ) do | target | unless target . exists? @log . debug ( "#{t.amount * -1} from #{id} to #{t.bnf}: wallet is absent" ) next end unless target . network == network @log . debug ( "#{t.amount * -1} to #{t.bnf}: network mismatch, '#{target.network}'!='#{network}'" ) next end next if target . includes_positive? ( t . id , id ) unless target . prefix? ( t . prefix ) @log . debug ( "#{t.amount * -1} from #{id} to #{t.bnf}: wrong prefix \"#{t.prefix}\" in \"#{t}\"" ) next end target . add ( t . inverse ( id ) ) @log . info ( "#{t.amount * -1} arrived to #{t.bnf}: #{t.details}" ) modified << t . bnf end end modified . uniq! @log . debug ( "Wallet #{id} propagated successfully, #{total} txns \
in #{Age.new(start, limit: 20 + total * 0.005)}, #{modified.count} wallets affected" ) modified . each do | w | @wallets . acq ( w , :refurbish ) end modified end
Returns list of Wallet IDs which were affected
Returns list of Wallet IDs which were affected