Bitcoin Forum

Local => Идеи => Topic started by: icreator on October 02, 2014, 03:59:03 AM



Title: shared payments - поделенные платежи
Post by: icreator on October 02, 2014, 03:59:03 AM
Есть потребность одним платежом раскидывать на много адресов с разными весовыми коэффициентами

сейчас приходится для этого пользоваться сторонними службами - в случае если часть и большие списки

а что если в самом клиенте создать эту возможность?

делаем так называемый shared address - в который записываем список адресов с весовыми коэффициентами:

Code:
shadrr_list = { "addr1": 2, "addr2": 0.33, ... }

для этого в API:
Code:
# создать и сохранить в wallet.dat список, так чтобы изменить этот список нельзя было
shaddr = makesharedaddress( shaddr_list, label )
# причем создается адрес на 1 символ длинее - с добавкой 'S':
shaddr --> 'S1NilT.....13Gfas'
len(shaddr ) --> 35

Чтобы послать всем поделенные платежи вызываем команду API:
Code:
sendshared( shaddr, amount )

тело функции (послать поленные платежи) примерно такое
Code:
################## on python
def sendshared( shaddr, amount ):
  if not amount > 0: return 'error'
  # calc sum
  sum = 0.0
  for v in shaddrs:
    if v>0:
      sum += v

  # recalc amo_outs
  list_out = {}
  for (k, v) in shaddrs.iteritems():
    if v>0:
      list_out[k] = round(amount *v / sum, 8)

  sum_out = 0.0
  for v in list_out:
    sum_out += v
  diff = amount - sum_out
  # ну и раскидать разницу по 0.00000001 случайно на адреса
  while diff>0:
    diff -= 0.00000001
    list_out[random_key[list_out]] += 0.00000001

  return connection.sendmany(list_out)
#################


Title: Re: shared payments - поделенные платежи
Post by: ArsenShnurkov on October 02, 2014, 08:27:12 AM
поздравляю, ты придумал бюджетный автомат (http://wiki.webmoney.ru/projects/webmoney/wiki/Бюджетный_автомат)


Title: Re: shared payments - поделенные платежи
Post by: icreator on October 02, 2014, 08:46:36 AM
его много кто придумал и он даже есть на моих сервисах

но зачем? когда каждый мог бы в своем кошельке это сделать автоматом


Title: Re: shared payments - поделенные платежи
Post by: GGUL on October 02, 2014, 08:59:41 AM
Навскидку..
Надо проверять (в общем случае):

- Отрицательные доли
-  amount >0
- sum >0
- diff может быть > 0, может быть <0
- diff нельзя распределять на нулевые суммы
- после распределения diff не должно получиться  отрицательных сумм
- не очень хорошо всю погрешность кидать на одну сумму.
- после распределения некоторые суммы могут получиться равным 0

думаю, что это не полный перечень. :)


Title: Re: shared payments - поделенные платежи
Post by: icreator on October 02, 2014, 09:11:03 AM
добавил проверку на отриц доли

все должно пахать


Title: Re: shared payments - поделенные платежи
Post by: icreator on October 02, 2014, 09:14:13 AM

- не очень хорошо всю погрешность кидать на одну сумму.
random_key