Bitcoin Forum
May 04, 2024, 03:29:21 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 »  All
  Print  
Author Topic: DIANNA: IANA Decentralized концепт дизайн  (Read 31157 times)
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 10:49:37 AM
 #241

Чето уж сильно жеские коэфициенты получаются. Надо брать более либеральную пологую функцию. Не разницы а отношения

K=1/(F/6 - 1)

Получается на промежутке от 9 до 12,5 блоков в час цена вальсирует в пределах 20%.

В общем, Ukigo, пересчитай плз обе

1714793361
Hero Member
*
Offline Offline

Posts: 1714793361

View Profile Personal Message (Offline)

Ignore
1714793361
Reply with quote  #2

1714793361
Report to moderator
If you see garbage posts (off-topic, trolling, spam, no point, etc.), use the "report to moderator" links. All reports are investigated, though you will rarely be contacted about your reports.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714793361
Hero Member
*
Offline Offline

Posts: 1714793361

View Profile Personal Message (Offline)

Ignore
1714793361
Reply with quote  #2

1714793361
Report to moderator
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 11:18:03 AM
Last edit: March 06, 2012, 11:35:05 AM by pent
 #242

Для начала можно просчитать динамику развития неймспейса .bit Данные по нему в динамике имеются в блокчейне. Дамп блоков неймкоин доступен через RPC.

Нужны дампы активности доменных операций в формате

блок:таймштамп:кол-во операций с доменами
блок:таймштамп:кол-во операций с доменами
блок:таймштамп:кол-во операций с доменами

кол-во операций это name_firstupdate + name_update
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 12:02:26 PM
 #243

Так, я короче гоню. Взял частоту вместо отношения. Получилось все наоборот Smiley

Счас перепишу формулы.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 01:48:30 PM
 #244

А вот теперь правильно, в интегрально-дружелюбном исчислении.

Возьмем время, за которое биткоин вычисляет 2016 блоков как tsBase
Возьмем время, за которое дианна вычисляет 2016 блоков как ts

Тогда коэффициент K будет выражен как

K=tsBase/(ts-tsBase)

График функции K(ts). K становится меньше с возрастанием ts и не позволяет ts достигнуть tsBase (1.21E6)



ts так же можно выразить через частоту блоков в час, если принять биткоиновские данные константами:

F=2016*3600/ts

Это облегчает восприятие предыдущего графика функции. Тогда зависимость K от частоты выхода блоков дианы будет такая:

pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 02:21:06 PM
Last edit: March 06, 2012, 02:51:05 PM by pent
 #245

Тогда значит примерно алгоритм nextFeeRequired на языке Ы (деления на ноль не проверял! Smiley )

Для простоты понимания эту процедуру в диане я назвал тоже ретаргетом. Хотя это репрайсинг =)
Code:
DChain=get_dianna_chain_index(); // Цепь дианы
BChain=get_bitcoin_chain_index(); // Цепь биткоин

tsTgt=60*60*24*14; // Шаг ретаргета биткоин и дианы в секундах (биткоин не ретаргетится по этому значению)
nB=2016; // Шаг ретаргета биткоин и дианы в блоках
lastRetarget=query_dianna_db("last_retarget_height"); // номер блока дианы с последним ретаргетом

Bfirst = BChain[BBestHeight - nB]; // блок последнего ретаргета биткоин
Blast = BChain[BBestHeight]; // последний блок биткоин
Dfirst = DChain[lastRetarget]; // блок последнего ретаргета дианы
Dlast = DChain[DBestHeight]; // последний блок дианы

tsB = Blast->ts - Bfirst->ts; // Сколько времени прошло с предыдущего ретаргета Bitcoin
tsD = Dlast->ts - Dfirst->ts; // Сколько времени прошло с предыдущего ретаргета DIANNA
retarget=0;
if (Dlast->height % nB == 0) retarget = 1; // ретаргет через nB блоков!
if (tsD >= tsTgt) retarget = 1; // ИЛИ ретаргет через tsTgt секунд

if (retarget == 1) :
  // Приводим к общему знаменателю
  tsD *= nB;
  tsD /= Dlast->height - Dfirst->height; // int!!!
  price = Dlast->price * tsTgt; // int64!!!!
  price /= tsD - tsTgt; // int64!!!!
  // Защита от дурака
  if (price > Dlast->price*4) price = Dlast->price * 4;
  if (price < Dlast->price/4) price = Dlast->price / 4;
  query_dianna_db("set_block_retaget_marker",BBestHeight + 1, true);
  return price;
endif

return Dlast->price;
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 02:26:52 PM
 #246

это даже проще для меня  Smiley

А как тогда выразить среднее ожидаемое время нахождения блока дианы в секундах ?

среднее время нахождения блока биткойна я считаю у себя так :
  time = difficulty * 2**32 / hashrate*10**9
то есть трудность и хэшрейт относятся к предыдущему блоку, а время исп. уже для текущего

Представь что сложность берется из текущего биткоин блока. Это почти одно и тоже.

Но диана добавляет к этой сложности еще PDiff %. То есть если Difficulty = 10**6, а PDiff насчитали на 0.1, то блок дианы считается по сложности (10**6 + 10**5), т.е. DiannaDifficulty=Difficulty*(1+Pdiff)
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 02:44:01 PM
 #247

Пару слов о сложности. Difficulty, это просто такая мера величины для прикида на глаз, т.к. это дабл. А дабл значение не может быть точно выражено в процессорном понимании.

Биткоин оперирует понятием таргет. Это uint256.

Для простоты понимания таргета был введен difficulty=maxtarget/target

Но для тестовых расчетов всяких там ожиданий difficulty годится. Не годится в боевом коде.

Считай мощности биткоин и дианы равны. Как будто оба обладают одинаковыми мощностями. Мержед это предоставляет.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 06, 2012, 02:55:38 PM
 #248

Ну коли охота трахаться с uint256, то валяй =)
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 07, 2012, 03:44:34 PM
Last edit: March 07, 2012, 04:14:39 PM by pent
 #249

Мне кажется ты зря мучаешься с эмуляцией биткоин цепи. В биткоин итак все понятно. Bounty=50, sum(txfee)-->0

Можно просто взять данные развития неймкоин с апреля 2011 по сей день.

далее из неймкоин вытянуть такую таблицу:

block_id:block_timestamp:num_ops
block_id:block_timestamp:num_ops
....
block_id:block_timestamp:num_ops

Далее, создаем 1 блок дианы (считаем 1 неймспейс) датой 1 блока неймкоин с одной транзакцией и стартовой ценой, скажем, 0.01 BTC.

Потом, исходя из таблицы неймкоин, создаем другие блоки. Их expectation time будет на PDiff % больше, чем у биткоина, то есть в среднем 10+10*PDiff минут. Создаем их так, чтобы виртуальным кастомерам не приходилось ждать более суток апдейта. Делаем репрайсинг и т.п.

Хотя мне чето кажется все равно это не реально будет. У неймкоин домены были сначала дорогие, счас вообще халява, спама полно. К тому же оборот по диане начнет влиять на курс USD/BTC, а этого мы не можем рассчитать.

Например, если биткоин вдруг взлетит до 100 USD, а цена дианы была 0.5 BTC, то никто не захочет за 50 баксов апдейтить домен. Спрос упадет, за ним и цена дианы до приемлимого уровня.

В общем тут есть взаимные влияния, которые трудно рассчитать.

Надо если рассчитывать, то предполагать что курс USD/BTC фиксированный. Что биткоин блоки выходят каждые 10 минут на одинаковой сложности. Тогда расчет какой то вменяемый получится. Обратные связи в системе скомпенсируют эти допущения в реале.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 07, 2012, 05:13:59 PM
 #250

Время в блоках, цены в коинах. Да. А как по другому?
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 07, 2012, 06:24:36 PM
 #251

Время в блоках -- это разумно
Дык я и не шучу -- не стоит беспокоится слишком много о курсе к $
через пару лет в Америке все равно дефолт будет

завтра понастраиваю свою беду
может у тебя еще какие варианты формулы цены есть ?
я бы их заодно попробовал


За курс точно не стоит беспокоиться, т.к. есть обратная связь. Если курс подскочил, получается подскочила и цена. Клиенты сказали "данунах" и спрос упал. Значит упало количество блоков в промежуток времени. Значит, цена будет вскоре пересчитана в меньшую сторону.

И наоборот.

Так что обратка есть, все нормально.

Вариант формулы изменения цены окончательный. Может еще просто лимиты K подправить надо будет. Сейчас 0.25 <= K <= 4

http://dianna-project.org/wiki/Domain_Transaction_Fee
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 07, 2012, 08:14:58 PM
 #252

Я подумал, а может же быть DDoS такой, что один майнер будет майнить по 1 транзакции на почти минимальной сложности биткоина и может завысить цену до потолка, не теряя ничего при этом? Может.

А мы тогда будем привязывать блок дианы не к предыдщему PARENT блоку, а непосредственно к нему.

То есть, PARENT блок Bitcoin должен быть включен в официальную цепь bitcoin. Только тогда блок DIANNA будет принят системой.

Сложность DIANNA всегда больше сложности Bitcoin. Значит любой подошедший PARENT-блок биткоин имеет немало шансов попасть в мейнстрим. Это еще больше повышает безопасность системы.

Это уравнивает шансы пуллов согласно их хешрейтам, а чтобы заспамить диану, надо чтобы сеть bitcoin принимала каждый блок пулла. А это практически невозможно.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 07, 2012, 08:57:56 PM
 #253

Описал структуру доменной транзакции http://dianna-project.org/wiki/Domain_Transaction#Syntax
Описал логику Transaction Fee http://dianna-project.org/wiki/Domain_Transaction_Fee
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 08, 2012, 12:12:57 AM
 #254

Описал возможные операции с доменом http://dianna-project.org/wiki/Domain_Transaction#Domain_operations
Переделал описание блока, описал синтаксис http://dianna-project.org/wiki/DIANNA_block#Syntax
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 08, 2012, 01:22:43 AM
 #255

Описал детали имплементации мержед майнинга в DIANNA http://dianna-project.org/wiki/Merged_Mining
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 08, 2012, 03:19:48 AM
Last edit: March 08, 2012, 03:47:23 AM by pent
 #256

Очередное изменение, ногами не бить Smiley Формула цены не была окончательной Smiley

Репрайсинг теперь происходит базируясь не на частоте блоков биткоин, а на пред-предыдущей частоте блоков DIANNA. То есть базируясь на частоте двух последних чекпоинтов репрайсинга. По этому цена гуляет в какую хош сторону и ищет свое значение, значение PDiff и частоту блоков, которая бы устроила данный неймспейс. Во!

http://dianna-project.org/wiki/Repricing_procedure

Если в цепи не было активности в течении последнего "bitcoin-года", цепь уничтожается.

Это реально ТруЪ получился. Каждый неймспейс будет иметь свой адекватный прайс, и свою адекватную частоту появления блоков.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 08, 2012, 06:10:53 AM
 #257

Цена сдирается за полный или неполный килобайт, точнее 1000 байт. А пдифф считается по сумме таких сдираний.

Цена операции равна прайсу в простом случае, когда значение не больше килобайта.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 09, 2012, 06:47:01 AM
 #258

А что ты вообще считаешь? Какие исходные данные? Какой первый блок? Сколько он генерируется?

Quote
замена умножения на сложение приводит к плавному росту цены в облака

Кгхм. Ну ессесно. К - это не цена, это нельзя добавлять.
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 09, 2012, 06:53:20 AM
Last edit: March 09, 2012, 08:28:56 AM by pent
 #259

Мои комментарии по поводу tru

Code:

def reprice(h):
    if h == 0:
        return old_price
    n_prev = h - check_prev
    n_preprev = check_prev - check_preprev
    ts_prev = times[h-1] - times[check_prev]
    ts_preprev = times[check_prev] - times[check_preprev]
    koef = (ts_preprev * n_prev)/(ts_prev * n_preprev+333) # division by zero !!!
    price = old_price * koef
    return price

Во-первых, нет никакого деления на ноль:
Code:
  if n_prev == 0 and n_preprev == 0:
     return old_price/4;
 if n_prev == 0:
     return old_price/4;
 if n_preprev == 0:
     return old_price*4;

Во вторых, s/+333//g, это оч большой костыль.

В третьих,
Code:
if price > old_price*4:
 price = old_price*4;
if price < old_price/4:
 price = old_price/4;

В четвертых, у тебя питон воспринимает koef как integer, а не float. То есть дробную часть откидывает. Я не очень дружу с питоном, но вот это исправило ситуацию

Code:
    koef = float(1)
    koef = koef * ts_preprev/ts_prev
    koef = koef * n_prev/n_preprev

В-пятых, скорость появления блока < 600 секунд маловероятна.

Code:
return int(times[b-1] + winestim + random.randrange(1, 90))

Впрочем, это не важно, можешь оставить -130 .. 130

В шестых, вот этот кусок кода надо сделать вот таким образом:
Code:
   if ((z - check_prev) % 2016 == 0):
       checks.append(z)
       print "==checkpoint by blocknum"
       new_price = reprice(z)
       check_preprev = check_prev
       check_prev = z
    else: ###### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       if ((times[z]-times[check_prev]) >= 1209600): ##### !!!!!!!!!!!!!!!1
          checks.append(z)
          print "==checkpoint by time: span=", times[z]-times[check_prev], " (tgt: 1209600)"
          new_price = reprice(z)
          check_preprev = check_prev
          check_prev = z

ИТОГО:
Code:
#!/usr/bin/env python

import time, sys, random

random.seed(time.asctime())
#print random.randint(1,77)

last = 200000

winestim = 600

check_prev = 0
check_preprev = 0

prices = []
checks = []
times = []

deltas = []


start_price = 0.02


def set_time(b):
    if b == 0:
        return 1370000000
#    print times[b-1] + winestim + random.randrange(-130, 130)
    return int(times[b-1] + winestim + random.randrange(1, 90))
#    return int(times[b-1] + winestim + 30)


def reprice(h):
    print "=====checkpoint @", h
    if h == 0:
        return old_price
    if h == 2016:
        return old_price
    n_prev = h - check_prev
    n_preprev = check_prev - check_preprev
    if n_prev ==0 and n_preprev ==0:
        return old_price/4
    if n_prev == 0:
        return old_price/4
    if n_preprev == 0:
        return old_price * 4;
    ts_prev = times[h-1] - times[check_prev]
    ts_preprev = times[check_prev] - times[check_preprev]
    print "check_prev=",check_prev," check_preprev=",check_preprev
    print "nprev=", n_prev, " npprev=",n_preprev
    print "tsprev=", ts_prev, " tspprev=",ts_preprev
    koef = float(1)
    koef = koef * ts_preprev/ts_prev
    koef = koef * n_prev/n_preprev
    print "k=",koef
    price = old_price * koef
    if price > old_price*4:
        price = old_price*4
    if price < old_price/4:
        price = old_price/4
    print "old=", old_price," new=", price
    return price


old_price = start_price

for x in range(0, last):
    times.append(0)

for z in range(0, last):
    times[z] = set_time(z)
#    if z !=0:
#       print "Block #",z," time=", times[z], "diff=", times[z]-times[z-1]
    if z < 2016:
        continue

    if ((z - check_prev) % 2016 == 0):
       checks.append(z)
       print "==checkpoint by blocknum"
       new_price = reprice(z)
       check_preprev = check_prev
       check_prev = z
    else:
       if ((times[z]-times[check_prev]) >= 1209600):
          checks.append(z)
          print "==checkpoint by time: span=", times[z]-times[check_prev], " (tgt: 1209600)"
          new_price = reprice(z)
          check_preprev = check_prev
          check_prev = z
    if new_price != old_price:
        old_price = new_price
        print "====== repricing ======="
        print "price =", old_price, "at block #", z
        prices.append(old_price)
print
print "min & max prices were =", min(prices), max(prices)
print
print "checkpoints were : "
print
print checks
print


РЕЗУЛЬТАТ при равномерном распределении спроса (random) и стартовой цене 0.02, за 200к блоков
Code:

min & max prices were = 0.0200060868679 0.0211689919176

checkpoints were :

[2016, 3892, 5768, 7644, 9521, 11396, 13272, 15147, 17024, 18901, 20774, 22648, 24526, 26401, 28277, 30151, 32030, 33905, 35779, 37655, 39530, 41406, 43283, 45157, 47033, 48907, 50783, 52659, 54534, 56410, 58289, 60167, 62043, 63918, 65792, 67671, 69543, 71419, 73297, 75173, 77051, 78927, 80804, 82682, 84558, 86435, 88311, 90189, 92064, 93938, 95815, 97689, 99567, 101444, 103317, 105193, 107067, 108946, 110822, 112700, 114577, 116455, 118330, 120207, 122080, 123958, 125833, 127709, 129581, 131458, 133332, 135209, 137086, 138963, 140838, 142715, 144592, 146466, 148345, 150225, 152100, 153975, 155850, 157726, 159601, 161479, 163356, 165233, 167109, 168985, 170861, 172738, 174616, 176490, 178367, 180245, 182120, 183996, 185869, 187739, 189618, 191496, 193370, 195244, 197122, 198997]

Цена гуляла в течении 4 лет аж в пределах 10%. Но это без обратки. "Общественность" в виде функции random не "возмущалась" по поводу скачка цены, понижая спрос Smiley И вообще цена random() устраивала похоже Smiley По этому наблюдался стабильный рост.

Полный лог http://pastebin.com/2TvsE3pJ
pent (OP)
Hero Member
*****
Offline Offline

Activity: 490
Merit: 500



View Profile
March 09, 2012, 08:40:19 AM
 #260

Рост цены в 10% за 4 года при псевдо-равномерном распределении я связываю с тем, что где то допущена ошибка в расчете блок-фрейма. Где то откуда то надо вычесть единицу в общем в индексе =)
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!