Smart Media Tokens Whitepaper [PL] cz. 7steemCreated with Sketch.

in #polish5 years ago (edited)

Parametry inflacji


SMT.jpg


Tworzenie SMT po uruchomieniu nazywa się inflacją. Inflacja jest środkiem, za pomocą którego SMT nagradza twórców za wartość, którą zapewniają. Zdarzenia inflacyjne wykorzystują następującą strukturę danych:


struct smt_inflation_unit
{
flat_map< account_name_type, uint16_t > token_unit;
};
// Event: Support issuing tokens to target at time
struct token_inflation_event
{
timestamp schedule_time;
smt_inflation_unit unit;
uint32_t num_units;
};


Możliwy cel inflacyjny


Celem jest podmiot, do którego kierowana jest inflacja. Celem może być normalne konto Steem kontrolowane przez indywidualnego założyciela lub chronione wieloma podpisami konto złożone z kilku założycieli. Ponadto możliwe jest kilka specjalnych celów reprezentujących pozbawione zaufania funkcje zapewniane przez samą blokadę:

• Nagrody. Specjalne miejsce docelowe reprezentujące nagrody.
• Nabywanie. Specjalne miejsce docelowe reprezentujące przydzielone tokeny.


Sekwencje zdarzeń


Tradycyjne sieci blockchain obliczają inflację w przeliczeniu na blok, ponieważ nagroda za produkcję bloku jest głównym (często jedynym) sposobem inflacji. Jednak nie ma dobrego powodu, aby łączyć inflację w celu blokowej produkcji dla SMT. W rzeczywistości, SMT nie mają nagród blokowych, ponieważ nie mają bloków (podstawowa funkcjonalność produkcji blokowej jest dostarczana przez świadków Steema, którzy są nagradzani STEEM)

Powtarzanie inflacji w regularnych odstępach czasu można włączyć, dodając interval_seconds i interval_count do struktury danych token_inflation_event. Wynikiem jest nowa struktura danych o nazwie token_inflation_event_seq_v1:


// Event seq v1: Support repeatedly issuing tokens to target at time
struct token_inflation_event_seq_v1
{
timestamp schedule_time;
smt_inflation_unit unit;
asset new_smt;
int32_t interval_seconds;
uint32_t interval_count;
};


Struktura danych reprezentuje zdarzenie inflacji tokena, które powtarza się co interval_seconds sekund, dla czasów interval_count. Maksymalna wartość całkowita 0xFFFFFFFF to specjalna wartość wartownika, która reprezentuje sekwencję zdarzeń, która powtarza się na zawsze. Uwaga: new_smt to ilość SMT, a nie liczba jednostek. Liczba jednostek jest określana jako podzielenie new_smt przez sumę członków jednostki.


Dodanie inflacji względnej


Często rozkłady inflacji wyrażane są w procentach podaży, a nie w wartościach bezwzględnych:


// Event seq v2: v1 + allow relative amount of tokens
struct token_inflation_event_seq_v2
{
timestamp schedule_time;
smt_inflation_unit unit;
uint32_t num_units;
int32_t interval_seconds;
uint32_t interval_count;
asset abs_amount;
uint32_t rel_amount_numerator;
};


Następnie obliczamy new_smt w następujący sposób z podaży:


rel_amount = (smt_supply * rel_amount_numerator) / SMT_REL_AMOUNT_DENOMINATOR;
new_smt = max( abs_amount, rel_amount );


Jeśli ustawimy SMT_REL_AMOUNT_DENOMINATOR na potęgę dwóch, podział można zoptymalizować do operacji zmiany bitów. Aby uzyskać bardziej dynamiczny zakres od bitów, możemy pozwolić, aby zmiana była zmienna:


// Event seq v3: v2 + specify shift in struct
struct token_inflation_event_seq_v3
{
timestamp schedule_time;
smt_inflation_unit unit;
int32_t interval_seconds;
uint32_t interval_count;
asset abs_amount;
uint32_t rel_amount_numerator;
uint8_t rel_amount_denom_bits;
};


Następnie obliczenia stają się:


rel_amount = (smt_supply * rel_amount_numerator) >> rel_amount_denom_bits;
new_smt = max( abs_amount, rel_amount );


Oczywiście implementacja tych obliczeń musi ostrożnie radzić sobie z potencjalnym przepełnieniem w wartości pośredniej smt_supply * rel_amount_numerator!


Dodawanie modulacji czasu


Modulacja czasu pozwala na realizację stopy inflacji, która zmienia się w sposób ciągły w miarę upływu czasu zgodnie z odcinkową funkcją liniową. Można to osiągnąć, po prostu określając lewy / prawy punkt końcowy przedziału czasu i określając bezwzględne wartości na obu punktach końcowych:


// Event seq v4: v3 + modulation over time
struct token_inflation_event_seq_v4
{
timestamp schedule_time;
smt_inflation_unit unit;
int32_t interval_seconds;
uint32_t interval_count;
timestamp lep_time;
timestamp rep_time;
asset lep_abs_amount;
asset rep_abs_amount;
uint32_t lep_rel_amount_numerator;
uint32_t rep_rel_amount_numerator;
uint8_t rel_amount_denom_bits;
};


Kilka uwag na ten temat:

• Tylko licznik względnych ilości jest interpolowany, mianownik jest taki sam dla obu punktów końcowych.
• W przypadku czasów sprzed czasu lewego punktu końcowego używana jest kwota z lewego punktu końcowego.
• W przypadku czasów po właściwym czasie końcowym używana jest kwota w prawym punkcie końcowym.

Kod wygląda mniej więcej tak:


Jeśli( now <= lep_time )
{
abs_amount = lep_abs_amount;
rel_amount_numerator = lep_rel_amount_numerator;
}


Jeśli ( now >= rep_time )


{
abs_amount = rep_abs_amount;
rel_amount_numerator = rep_rel_amount_numerator;
}


lub


{
// t is a number between 0.0 and 1.0
// this calculation will need to be implemented
// slightly re-arranged so it uses all integer math
t = (now - lep_time) / (rep_time - lep_time)
abs_amount = lep_abs_amount * (1-t) + rep_abs_amount * t;
rel_amount_numerator = lep_rel_amount_numerator * (1-t) + rep_rel_amount_numerator * t;
}


Operacje inflacyjne


Operacja inflacji jest określona następująco:


{
account_name_type control_account;
timestamp schedule_time;
smt_inflation_unit inflation_unit;
int32_t interval_seconds = 0;
uint32_t interval_count = 0;
timestamp lep_time;
timestamp rep_time;
asset lep_abs_amount;
asset rep_abs_amount;
uint32_t lep_rel_amount_numerator = 0;
uint32_t rep_rel_amount_numerator = 0;
uint8_t rel_amount_denom_bits = 0;
extensions_type extensions
};


Operacja setup_inflation_operation jest operacją początkową, która musi zostać wykonana przed działaniem smt_setup_operation. Zobacz rozdział dotyczący operacji wstępnego ustawienia SMT.


FAQ o inflacji


• P: Czy struktury danych dotyczących inflacji SMT mogą wyrażać aktualny program inflacyjny Steema?
• O: Tak (z wyjątkiem błędów zaokrąglania).

• P: Czy struktury danych dotyczących inflacji SMT mogą nagradzać założycieli bezpośrednio po X miesięcy / lat?
• O: Tak.

• P: Nie dbam o modulację czasu. Czy mogę to wyłączyć?
• O: Tak, ustaw tylko lep_abs_amount == rep_abs_amount i lep_rel_amount_numerator
== rep_rel_amount_numerator
na tę samą wartość i ustaw lep_time = rep_time (dowolna wartość wystarczy).

• P: Czy te złożone ustawienia mogą być ukryte przez dobrze zaprojektowany interfejs użytkownika?
• O: Tak.

• P: Czy możemy modelować inflację jako funkcję czasu z pełną dokładnością?
• O: Struktury danych inflacji można w pełni modelować / symulować. W przypadku niektórych problemów struktur, kwota wydana zależy od tego, ile jest podniesiona, więc struktury problemu nie można modelować z pełną dokładnością.


cdn. wkrótce kolejne części...


Smart Media Tokens Whitepaper [PL] cz. 1

Smart Media Tokens Whitepaper [PL] cz. 2

Smart Media Tokens Whitepaper [PL] cz. 3

Smart Media Tokens Whitepaper [PL] cz. 4

Smart Media Tokens Whitepaper [PL] cz. 5

Smart Media Tokens Whitepaper [PL] cz. 6


All rights reserved by @astromaniak 2019

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.034
BTC 63247.38
ETH 3242.29
USDT 1.00
SBD 3.90