Pages:
Author

Topic: TrueCoin <-- правильная монета - page 9. (Read 19792 times)

member
Activity: 112
Merit: 10
В логарифме - отношение сложностей.
wDiff_base - это заданная начальная сложность. Наверняка она же есть в каком-то значении типа 0x00ffffff...f
и высчитывается ln не от самого числа текущей сложности (мощности), а от того, во всколько раз она меньше чем базовая
и в "отрицательную" зону она кажись зайти не может - даже если система "умерла", и мощность стремится к 0 (в сети один майнер на PIV), сложность до 0хffff... не поднимется, застынет на 0х00ffff.... с генерацией блока раз в 3 часа  Tongue


тот же пример про i7, и сложности-мощности подробнее (базовая мощность - 1Mh/s, базовая сложность 0x00ffffff)
Один i7, мощность 1 Мh/s, сложность 0x 00ff ffff, награда = 10 * ln(0x00ffffff/0x00ffffff) = 10 * ln(1) = 0
Восемь i7, мощность 8 Mh/s, сложность 0х001f ffff, награда = 10 * ln(0x00ffffff/0x001fffff) = 10 * ln(Cool = 20,794
1024 i7-x, мощность 1Gih/s, сложность 0х 0000 3fff, награда = 10 * ln(0x00ffffff/0x00003fff) = 10 * ln(1024) = 69,315
и т.д.

Естественно сложность будет 256-битная (или 512-битная), но для дроби это абсолютно безразлично, так же и останется, меньше в Х раз чем базовая сложность.


И прибавлять единицу не обязательно. Можно красивые коэффициенты найти. Первоначальная награда Х, увеличение мощности в 10 раз добавляет Y, Y довольно просто считается.

Да не забивайте голову энергоэффективностью.
К сожаленью, всё вычисление блоков так устроено, что куча вычисленний уходит в пустоту.
PoW - это сама идея, молоти данные в поисках ненужного вообще никому, кроме самой системы Nonce.
Но остальное тоже не лучше - даже если всё оставлять на PoS, то и в PoS-блоках/транзакциях для защиты от спама, "ddos'a" и зафлуживания отправкой по 1 сатоши (если неправ, думаю Бальтазар поправит) всё равно придётся вводить на каждом ноде для всех потенциально опасных операций взаимодействия вычисления неких Nonce, которые долго искать и гораздо быстрее проверять.
member
Activity: 112
Merit: 10
Эх, ещё одна идейка, в порядке бреда:

Награда за блок - положительная обратная связь со сложностью генерации этого блока, как пример:
wReward = 10 * ln (wDiff_base / wDiff);

в переводе на человеческий язык:
*) майнинг на базовой сложности - награда 0
*) увеличение сложности в 1000 раз, прибавляет ~69 монет к награде за блок

схема примитивная конечно, но посылы следующие:
накопление монет в системе на старте, возрастает с появлением новых участников (мощностей);
если/когда система попадает в реальную экономику (хотя бы на уровнеь битков 11-12-го года), именно реальный интерес к валюте (увеличение мощностей) увеличивает её эмиссию;
всё ещё продолжающееся развитие микроэлектроники позволяет надеяться, что и при стабильном состоянии системы уже и с "огромным" охватом, будет постепенное наращивание мощностей -> незатухание эмиссии.

ну и абстрактный пример:
пусть i7-4770 выдаёт при майнинге 1Mh/s, и это базовая мощность системы.
ниже подразумевается что сложность уже пересчитана под текущие мощности
майнит один i7: награда_за_блок = 10*ln(1) = 0;
майнят два i7: награда_за_блок = 10*ln(2) = 6,931;
майнит десяток i7: награда_за_блок = 10*ln(10) = 23,026;
майнит тысяча i7, достигли 1Gh/s: награда_за_блок = 10*ln(1000) = 69,078;
умельцы подключили gpu, эквивалентная мощность 1Th/s: награда_за_блок = 10*ln(1000000) = 138,16;
нашествие асиков, эквивалентная мощность 1Ph/S: награда_за_блок = 10*ln(1000000000) = 207,23;
будущее, мощность системы достигает эксахеша: награда_за_блок = 10*ln(1000000000000) = 276,31.
jr. member
Activity: 42
Merit: 1000
При блоках раз в минуту : 1440 блоков/сут
при блоке раз в 2 минуты соотв. 720 бл/сут

Др. частота блоков нам не нужна вероятно.
Быстрее 1 бл/мин. блокцепь будет мучительно
 форкаться, а медленнее чем раз в 2 мин.
плохо для бизнеса Wink
member
Activity: 112
Merit: 10
Code:
package main

import (
"os"
"fmt"
"strconv"
"math/rand"
"math"
)



var block = 0//block count ( for genesis block = 0 )

var maxBlock = []int {
262980,
525960,
788940,
1051920,
1314900,
1577980,
1840850,
2103840,
2366820,
2629800,
2892780,
4733640,
4996620,
5259600,
}


var percent_year = 0.0314159
var percent_day_multi = math.Pow(1+percent_year, float64(1.0/365.0))
var percent = (percent_day_multi - 1) / 720.0

var PoS_percent = float64(0.01);

var Coin = int64(1000000)
var Cent = int64(10000)

var mplus, wMplus, sMplus float64

var wDiff = float64(1.0)
var sDiff = 0.0001

var supply = 0.0//moneysupply
var fees = 0.0

var wHour = 29//PoW blocks' rate per 1 hour
var shour = 1// PoS blocks' rate per 1 hour

// 1st year - hyper-maining.
var nblock_like_premine = 1000000
var bonus_premine = float64(20);


var cepochka_ostatok = float64(0);
var freq_pos = float64(0.2);
var max_pos2pow_dobavka = float64(0.25);

var ncount_pow = 0;
var ncount_pos = 0;

func main() {
rnd := rand.New(rand.NewSource(755875))
for {
x := 0.0;
if block < nblock_like_premine {x=1.0 - float64(block)/float64(nblock_like_premine)}
wReward := bonus_premine * x + supply * percent;
sReward := float64(0);
if rnd.Float64() < freq_pos{ // PoS-block
age_block := rnd.Int63n(60*720) + 30*720
coin := (0.3 + rnd.Float64()*0.4)*supply/(60*720*freq_pos) // 60 - srednij vozrast v dnyah, 720*freq_pos - blockov v den'. 0.3+rnd*0.4, v pos zadeistvovany 30%-70% vseh sredstv
coin_age := coin * float64(age_block) / float64(maxBlock[0]) //pseudorandom  coin_age in days
sReward = float64(coin_age) * PoS_percent
cepochka_ostatok += wReward - sReward // nedoemmissia, ili izlishki
// fmt.Println("Age:", age_block, "Coin:", coin, "PoS: ", sReward)
ncount_pos++
}else {// PoW-block
if cepochka_ostatok > 0{ // razmazywaem nevvedenyu emissiu iz pos po sledujshim pow
if cepochka_ostatok > wReward * max_pos2pow_dobavka{
cepochka_ostatok -= wReward * max_pos2pow_dobavka
wReward += wReward * max_pos2pow_dobavka
}else{
wReward += cepochka_ostatok;
cepochka_ostatok = 0
}
}
ncount_pow++
}

if sReward == 0{
supply += wReward
}else{
supply += sReward
}

// if block%(maxBlock[0]/10) == 0{
// fmt.Println("moneysupply: ", strconv.FormatFloat(supply, 'f' , -1, 64), " at block #", block, "year #", block / maxBlock[0])
// fmt.Println("PoS_blocks =", ncount_pos)
// fmt.Println("PoW_blocks =", ncount_pow)
// fmt.Println("==========================================================")
// }
block++
if block > maxBlock[10] { break }
}
fmt.Println("moneysupply: ", strconv.FormatFloat(supply, 'f' , -1, 64), " at block #", block, "year #", block / maxBlock[0])
fmt.Println("PoS_blocks =", ncount_pos," PoW_blocks =", ncount_pow)
fmt.Println("==========================================================")

os.Exit(0)
}

вот чего получилось. из первой версии симулятора, с прикрученными pos и "бешенным" майнингом первые Х годов/Х' блоков.
Комиссии вообще не принимал во внимание, проще считать что они не уничтожаются (как в btc), и соответсвенно на объем денежной массы никак не влияют.
(странный в Go инкремент какой-то, в проверке if не дают пользоватся. просто выходит синоним для i=i+1 без практической пользы в применении)


jr. member
Activity: 42
Merit: 1000
PI % можно  брать и на 365 дней
и на 365.25
Я не вижу тут разницы - это просто
 красивая константа.
Об этом напишут в новостях )
Обыватель будет озадачен - что такое PI ?!

если % = PI будет не удачен , то не будет работать и круглая 3 вероятно.

Будет более выстроенная система начнем англоветку и там нам расскажут,
 почему ничего не будет работать и как надо ... )

member
Activity: 112
Merit: 10
да моя идея проста. из вашего первого поста. Стабильно низко-инфляционная валюта
на 20й год - денежная масса больше на Х% чем на 19-й.
на 120й год - денежная масса больше на Х% чем в 119-й  Grin

(причём PoS эмиссия суммарно не должна превышать инфляцию - в противном случае для держателей средств валюта становится дефляционной).

Просто повторюсь. [Бешенно, потом плавно] эмитируем N лет, а после замедляемся и (а) стабилизуемся, (б) - потихоньку сжимаемся.
Эти идеи уже воплощены. (а) - NVC, (б) - BTC.

Если задача создать такую систем - то никаких формул выдумывать не нужно. Максимум, создать почти копию биткоина с PoS, где pos-блоки не будут генерировать проценты, а сразу будут жить поножным кормом с комиссий, как в оригинале PoW, по прошествии 12-20 лет.

p.s. а как в Go деление по модулю выглядит? хочу промежуточные данные на экран хотя бы раз "в день" выводить не чаще, иначе ощущение что ядерный взрыв рассчитываешь, по скорости обработки  Grin
if (!(block%720)){...} - такая конструкция нужна


p.p.s и да, как будет выглядеть функционированние криптовалюты даже слабо-инфляционной не говоря про стабильную/сжимаемую денежную массу никто пока точно не скажет. Попросту ниже 10% эмиссии нет ещё нигде (даже в старейшем "дефляционном" биткоине) Cheesy
jr. member
Activity: 42
Merit: 1000
Если хотите напишите, калькулятор. Huh
Цель - подобрать такой ежедневный процент
прироста награды, чтобы в итоге за год
число монет выросло на PI %.
Это посчитать несложно, поэтому я не спешу.

У меня сегодня голова никакая.
Завтра почитаю про PoS.
В стиле NVC и классическую теорию (их 4.5 варианта есть)
вот ЭТИ совместные системы (PoS+PoW) рассчитать
 с созданием целевой инфляции будет
 сложнее намного.

member
Activity: 112
Merit: 10
Только чистый PoS - это форк сбережений;

Что же касается срока жизни в 10 лет, так за 10 лет даже биткоин вполне себе инфляционная валюта (https://bitcointalksearch.org/topic/chart-bitcoin-inflation-vs-time-130619). Там правда с моей точки зрения странный метод "мгновенной" инфляции который вызывает скачки, но это из как 10ку считать 7+3 или 6+4.  На том графике хорошо видно, что в биткоине сейчас ещё эмиссия больше 10% в год. И это ко всей массе, включая мёртвые/отправленнные в никуда и т.п. монеты.

Я максималист, на четверть века рассчитывал  Grin
member
Activity: 112
Merit: 10
Да не натуральный это метод подсчёта. Если за 20 лет объём в 22 раза увеличился  Shocked

Не понимаю - зачем часть комиссий уничтожать. В идеологии NVC - понятно, их цель практически совпадает с биткоиновской -  число монет в системе со временем должно перестать расти.

И откуда взялась их идея эмисии в PoW-блоках, в зависимости от сложности системы (как аналог - придумали деньги в городке, рисовали в год по 10000 новых; потом расширили сферу влияния на область - стали рисовать по 1000, потом придумали клише для печатанья - стали выпускать по 100, стране понравились эти деньги - расширились ещё раз, стали выпускать на всю страну в год по 10 новых). Смысл экономический этого каков?
Как я понимаю с точки зрения их методологии: PoW-генерация, это просто распределённый по пользователям и во времени преймайн. Как только система вырастает из детских штанишек - PoW-генерация становится мизерной, и равновесный приход/расход денег в системе начинают обеспечивать PoS|шредер в транзакциях.
jr. member
Activity: 42
Merit: 1000
Я шучу )
А правильно оказывается вот как :
http://ru.wikipedia.org/wiki/Aes_Grave
member
Activity: 112
Merit: 10
Пока я вижу только такие сущности, независимо наблюдаемые системой (часть из них может и отсутствовать, определяется при проектировании):

блок - квант времени

М - общая денежная масса (где М0 - виртуальные монеты, нужные для эмиссионого алгоритма, (M + М0) - те самые supply из симулятора)

I% - текущий [рассчитываемый] процент эмиссии. Вычисляемый от него block_reward отходит майнерам (с точки зрения индивидумам - обогащение), с точки зрения системы просто обезличенная эмиссия каждый квант времени. Увеличение % эмиссии вызывает повышение инфляции, в "умеренных дозах" подогревая экономическую активность. Увеличение денежной массы, медленней чем рост связанной с ней (этими деньгами) реальной экономики - порождает замедление роста, но повышает защиту от пузырей и прочих перекосов и т.д.

V - сумма транзакций системы за время ххх, довольно сложно предсказать насколько соответствует реальной экономической активности, а насколько - перекладыванием денег из одного своего кармана в другой.

Vп - "бизнес"-транзакции с комиссией (минимум ~0,0..zz% от суммы транзакции) (практически "подтверждённая" деловая активность системы)

t% рекомендуемые проценты комиссии в транзакциях - "навязываемые" издержки при переводах и ослабляющие экономическую активность агентов, на величину эмиссии никак не влияет
(абсолютная величина комиссия возможно понадобится для технической защиты системы от спам-транзакций)

PoS%, % награды при PoS-генерации - величина стимулирующая "сбережения" и "накопления", при значении близком к I%, может вызывать стремление свернуть активность (транзакции) в пользу накоплений путём генерации PoS-процентов (но при добавлении несложного кода, на величину эмиссии никак не влияет)
Также PoS% по сути определяет минимальную границу стоимости кредита в системе (Таким образом понятие бесроцентный кредит - это кредит в 2*t% разовых + PoS% годовых).

из всего вышеперечисленного - косвенно можно вычислять объёмы "активных" монет (задействованных в транзакции + PoS), и объёмы "анабиозных/мёртвых" (оставшиеся, нигде не задействованные)

Итого, наблюдая на текущем блоке k (и для предшествующих блоков) параметры М, V, Vп, также вычисляя объёмы активных денег (транзакционных), денег на сбережении (PoS), и денег в анабиозе /мёртвых система по заранее заложенным правилам может изменять I%, PoS%, t/t%.

member
Activity: 112
Merit: 10
ещё вариант - погрешность может накапливается, из-за того процент на блок вычисляется /720, а не извлечением корня 720-й степени из (1+day/100), но имхо с такой точностью уже подгонять - это маразм  Tongue
jr. member
Activity: 42
Merit: 1000
А вот схема №4 Wink
 более простая

 1) большой премайн , 90+% из которых
  раздается бесплатно всем желающим
  на манер Рипплов.

 2) после начальной дистрибуции
   сам собой установится низкий курс
  к др. койнам.
   рост вознаграждения за блок происходит
  каждые сутки ( из расчета выхода на PI
  % роста койновой массы в год).
  что дает нам ( за вычетом ~1% утерянных койнов (ежегодно)) 2.14% реальной типа "инфляции" в год.
  
 3) Майнинг PoW основан на алгоритмах
   приведенных в постах выше.Довольно скоро
   появятся более эффективные майнеры для
   GPU, и ботнеты уйдут снимать сливки
   в др.места.
   Трудность вырастет и курс - тоже,
  так ранние адоптеры будут вознаграждены
  за взятый на себя риск.
  
 4) Если ASIC и/или FPGA все-таки будут
  созданы позже , то это не первоочередная проблема.
 
 5) В условиях мировой депрессии, которая продлиться миним. до 2016.
    в реальной ( не крипто- ) экономике
  экономический рост ( реальный, а не призрачной по статистике) будет низким.
 и PI процентов в год расширения денежной массы должно хватить.

 6) Если TrueCoin не будет успешен или %%
   "инфляции" будут малы
 (и будет набл. дефляция внутри форка )
 то будет сделана
  др. подобная виртуальная валюта,
 с более удачными свойствами.

 Что я упустил  ?
-----------
  О названии :
 Может назвать в честь римских денег ?
 Ass - звучит гордо Huh
 AssGrave - "могильщик" фиата !
 


 
member
Activity: 112
Merit: 10
Вроде бы всё то же самое

изменил строки
var percent_year = 0.0314159
var percent_day_multi =  math.Pow(1+percent_year, float64(1.0/365.0))
var percent = (percent_day_multi - 1) / 720.0


PoW bounty:  1.2522628786536848e-07
----------------------------------------------------------
moneysupply:  1.0638667494366378  at block # 525961
==========================================================

у moneysupply на одну тысячную разница. наверно из-за 365 дней в проценте.

1.81647227375:1.760293788 = 1,03191. Процент на 0,05 отличается от задуманного. может тоже из-за расхождений по високосным/обычным годам?

В общем,
Симулятор слабо-инфляционной валюты, со стабильным % эмиссии готов. Теперь осталось приспособить формулы из какой-нибудь "true money theory" для динамического изменения годового процента, и математическая база готова  Grin

если изменить на /365.25, и прогнать опять до 18 и 19 - по идее должно выйти 1.0314159, плюс-минус ошибки округления Smiley
jr. member
Activity: 42
Merit: 1000
1) Может быть даже >3 раза если судить
 по количеству кремния потребного )
 Я имею ввиду если использовать 3 хэша,
 на пяти хэшах этот коэфф. должен еще вырасти...
 стоимость асика в розницу на начальном этапе будет такая, что потенциальные покупатели "ракеты из подвала" задумаются
 крепко стоит ли рисковать такими деньгами ?!

2) Да, криптоэксперты одобряют всех финалистов.
 Но последним я бы поставил самый безопасный
 из них ( с самой большой security margin )
 А keccak лучше совать в середину "бутерброда" ИМХО.
 
3)  я имел ввиду variance.
member
Activity: 112
Merit: 10
Сложные проценты и должны в абсолютном значении эмиссию разгонять.

И удвоение за ~25 лет - вполне нормально.
Биг мак за пол века подорожал в ~10 раз - а о постоянно безумной инфляции в США как-то не кричали всё это время  Cheesy


p.s. rand.NewSource(7556) - чего делает? обычный rand() си-шный, но в диапазоне 0-7556?
member
Activity: 112
Merit: 10
Для симулятора наверно проще считать год как 720*365 = 262800 итераций/блоков?

А с числами может где я протупил - или блок за 10 минут посчитал, или считал для недель а потом с днями перепутал и т.п.

На код можно будет глянуть потом? Пока простые обкатки идут, вроде должен суметь "прочесть".
jr. member
Activity: 42
Merit: 1000
Само по себе наличие неск. хеш-функций
просто увеличивает стоимость АСИК.
А вот хаотичность их порядка,
должна создать для его производителей
 большие трудности.
Groestl из них самый тяжелый в железе (был).
К тому же для него доказана и
 стойкость против коллизий и полная случайность и еще чего-то там )

Мне почему-то кажется ( но может я ошибаюсь ) что более случайные функции
 (SHA-3 финалисты) могут снизить вариацию
 в майнинге.
member
Activity: 112
Merit: 10
Quote
wReward - это награда за 1 PoW блок у меня.
КАлька с Той формулы, именно в монетах должно получаться а не процентах Huh.

C++ клиент НЕ считает через трудность как я
 они берут таргет, а трудность потом высчитывается
 в другом месте в безумной функции кою я не понимаю,
 как перевести на Go.
ПОртировать с языка на язык трудно всегда.
Но польза от симулятора есть - он считает годы работы
 за минуты, а тестнет нельзя запучтить быстрее
 чем блок раз в 30 сек.

Я вот думаю , что можно ваще не ловить эту формулу.
главное смоделировать изменение награды похожим
 на данные реального NVC ( мы ведь не собираемся
 менять эту их функцию wReward).
А хотим просто прибавлять к ней наш скромный процент
 (как вы думаете: делать это в каждом блоке или реже ?)

Еще сначала PoS-блоков нет, потом их число растет
 до 50/50 и позже PoW почти сходит на нет,
как это учесть по какой функции прибавлять % к
 PoS и по какой к PoW-блокам ?
Ненужна нам их PoW-формула. Ни btc, ни nvc.
Представьте награду за PoW-блок так:
сама_награда = 0; // просто 0 и всё.
эмиссия = %(от всего агрегата монет системы)
комиссия = сумма_комиссий_с_транзакций_блока
итоговая_награда = сама_награда + эмиссия + комиссия;

вычислять % на какую-то фиксированную награду за блок не имеет смысла; подозреваю аналога в реальной экономике такому параметру нет вообще ни в какой теории.
Ведь неважно, эмитируем ли мы средства в систему целиком раз в год, или мельчайшими частями раз в 2 минуты; если эмиссия основана на общей денежной массе, то и считать её нужно каждый раз от этого текущего агрегата М.

 % эмиссии в блоке - это
// Percent_year_digit - Это константа либо вычисленная величина в формате 9%, 5%, 3,14% и т.п.
a = pow (1 + Percent_year_digit/100, float64(1.0/365.0) ) //это дневной процент в формате "множителя"
b = (a-1)/720.0 // это процент за блок, в формате "доли"
block_emission = M * b;

// иттого
wReward = 0 + block_emission + commission;
jr. member
Activity: 42
Merit: 1000
Да, нечто такое может пригодится
подобные идеи ( насчет хаотичного перемешивания функций)
высказывал tacotime на форуме.

Посмотрим что, из этого удастся извлечь.
Однако будет и оппозиция,
типа все финалисты SHA-3 суть новые
 алгоритм и недостаточно изучены и
 как можно доверять им свои деньги
 и т. д.
----------
Мне только кажется что ГСЧ тут - лишний )
Pages:
Jump to: