Funkcje systemu

Co można w systemie wywołać, kto może to zrobić i kiedy system odmówi. Pominęliśmy standardowe funkcje, które ma każdy token, i opisaliśmy te, które naprawdę coś robią w DAF.

Odczyt
tylko sprawdza, nic nie zmienia i nic nie kosztuje
Zmiana
zapisuje coś w systemie, to podpisana transakcja
Zawsze odmawia
istnieje, ale celowo nic nie robi

DAF

Główny token. Tu są przelewy, weryfikacja, blokady, emisja i redeem.

Przelewy

Przelew DAF

Zmiana

transfer(to, amount)

Przelewa DAF z własnego konta na wskazane konto. Obie strony muszą być zweryfikowane. Żadna nie może być na czarnej liście ani mieć zamrożonego konta.

Podstawowy sposób przekazania DAF innej osobie. Kwity na koncie nadawcy go nie ograniczają. Nie działa podczas awaryjnego wstrzymania.

Kto może
Posiadacz
Odmawia, gdy
  • Włączone jest awaryjne wstrzymanie.
  • Nadawca lub odbiorca jest na czarnej liście albo ma zamrożone konto.
  • Nadawca lub odbiorca nie jest zweryfikowany.
  • Nadawca ma za mało DAF albo odbiorca to adres zerowy.
Parametry
to
Konto odbiorcy.
amount
Kwota DAF do przelania. Może wynosić zero, ale blokady i tak obowiązują.
Zwraca
Potwierdzenie, że przelew się udał.

Przelew w imieniu posiadacza

Zmiana

transferFrom(from, to, amount)

Przelewa DAF z konta posiadacza na wskazane konto, w granicach zgody, której posiadacz udzielił wykonującemu przelew. Zgoda maleje o przelaną kwotę, chyba że jest nieograniczona.

Służy pośrednikom, na przykład programowi, który kieruje zlecenia na giełdę działającą w sieci. Nadawca i odbiorca muszą spełniać te same warunki co przy zwykłym przelewie.

Kto może
Pełnomocnik posiadaczaPełnomocnik nie musi być zweryfikowany, ale nie może być na czarnej liście ani mieć zamrożonego konta.
Odmawia, gdy
  • Pełnomocnik jest na czarnej liście albo ma zamrożone konto.
  • Zwykły przelew od nadawcy do odbiorcy zostałby zablokowany, na przykład przez awaryjne wstrzymanie albo brak weryfikacji.
  • Brak zgody albo zgoda niższa od kwoty. Przy kwocie zero pełnomocnik też potrzebuje zgody większej od zera.
  • Nadawca ma za mało DAF albo nadawca lub odbiorca to adres zerowy.
Parametry
from
Konto posiadacza, z którego schodzą DAF.
to
Konto odbiorcy.
amount
Kwota DAF do przelania.
Zwraca
Potwierdzenie, że przelew się udał.

Sprawdzenie, czy przelew przejdzie

Odczyt

canTransfer(from, to)canTransferFrom(spender, from, to)

Sprawdzają, czy zwykły przelew DAF od nadawcy do odbiorcy byłby teraz dozwolony. Druga wersja sprawdza też, czy pełnomocnik nie jest na czarnej liście i nie ma zamrożonego konta.

Aplikacja może ostrzec użytkownika przed wysłaniem przelewu. Nie dotyczą emisji, redeem ani usunięcia DAF, które mają własne zasady.

Kto może
Każdy
Parametry
from
Konto nadawcy.
to
Konto odbiorcy.
spender
Pełnomocnik, który miałby wykonać przelew w imieniu nadawcy.
Zwraca
Tak albo nie. Odpowiedź nie uwzględnia salda nadawcy ani wysokości zgody. Gdy nadawca lub odbiorca to adres zerowy, odpowiedź zawsze brzmi nie.

Weryfikacja i blokady

Stan konta i awaryjnego wstrzymania

Odczyt

isWhitelisted(account)isBlacklisted(account)isAccountFrozen(account)frozen()

Sprawdzają, czy konto jest zweryfikowane, czy jest na czarnej liście i czy jest zamrożone, a także czy włączone jest awaryjne wstrzymanie.

Korzysta z nich system kwitów przy wystawianiu i wymianie kwitów. Aplikacja może dzięki nim wyjaśnić użytkownikowi, dlaczego coś jest zablokowane.

Kto może
Każdy
Parametry
account
Sprawdzane konto.
Zwraca
Tak albo nie. Trzy stany konta są od siebie niezależne: wpis na czarną listę nie usuwa weryfikacji. Zaraz po uruchomieniu zweryfikowane są tylko główny sejf, sam token DAF i system kwitów. Nowy główny sejf zostaje zweryfikowany automatycznie w chwili przejęcia.

Zmiana listy zweryfikowanych

Zmiana

setWhitelisted(account, value)setWhitelistedBatch(accounts, value)

Dodaje konto do listy zweryfikowanych albo je z niej usuwa. Wersja zbiorcza obsługuje wiele kont naraz.

Konto trafia na listę po weryfikacji tożsamości (KYC). Bez wpisu nie wyśle ani nie odbierze przelewu DAF, nie zrobi samodzielnie redeem swoich DAF, nie dostanie kwitu i nie wymieni posiadanych.

Kto może
Główny sejf lub sejf działu zgodności
Odmawia, gdy
  • Wskazane konto to adres zerowy. W wersji zbiorczej jeden taki wpis cofa całość.
Parametry
account
Konto do zmiany.
accounts
Lista kont do zmiany.
value
Tak: dodać do listy. Nie: usunąć z listy.

Zmiana czarnej listy

Zmiana

setBlacklisted(account, value)setBlacklistedBatch(accounts, value)

Wpisuje konto na czarną listę albo je z niej zdejmuje. Wersja zbiorcza obsługuje wiele kont naraz.

Konto z czarnej listy nie wyśle ani nie odbierze DAF, nie zrobi samodzielnie redeem swoich DAF, nie przeleje cudzych jako pełnomocnik, nie dostanie kwitu i nie wymieni posiadanych. Jego weryfikacja się nie zmienia.

Kto może
Główny sejf lub sejf działu zgodności
Odmawia, gdy
  • Wskazane konto to adres zerowy. W wersji zbiorczej jeden taki wpis cofa całość.
Parametry
account
Konto do zmiany.
accounts
Lista kont do zmiany.
value
Tak: wpisać na czarną listę. Nie: zdjąć z czarnej listy.

Zamrożenie konta

Zmiana

setAccountFrozen(account, value)setAccountFrozenBatch(accounts, value)

Zamraża konto albo je odmraża. Wersja zbiorcza obsługuje wiele kont naraz.

Służy do tymczasowej blokady jednego konta. Zamrożone konto nie wyśle ani nie odbierze DAF, nie zrobi samodzielnie redeem swoich DAF, nie przeleje cudzych jako pełnomocnik i nie wymieni kwitów. Nowy kwit nadal można na nie wystawić.

Kto może
Główny sejf lub sejf awaryjnyZamrozić: główny sejf lub sejf awaryjny. Odmrozić: tylko główny sejf.
Odmawia, gdy
  • Konto próbuje odmrozić ktoś inny niż główny sejf.
  • Wskazane konto to adres zerowy. W wersji zbiorczej jeden taki wpis cofa całość.
Parametry
account
Konto do zmiany.
accounts
Lista kont do zmiany.
value
Tak: zamrozić. Nie: odmrozić.

Awaryjne wstrzymanie

Włączenie awaryjnego wstrzymania

Zmiana

freeze()

Włącza awaryjne wstrzymanie DAF. Zatrzymuje przelewy, każdą emisję DAF, a więc także wymianę kwitów, oraz redeem wykonywany przez samych posiadaczy.

Pierwszy przełącznik na wypadek incydentu. Usunięcie DAF i redeem w imieniu posiadacza nadal działają. Wystawiania kwitów nie zatrzymuje: do tego służy wstrzymanie systemu kwitów.

Kto może
Główny sejf lub sejf awaryjnyWyłączyć je może tylko główny sejf.
Odmawia, gdy
  • Awaryjne wstrzymanie jest już włączone.

Wyłączenie awaryjnego wstrzymania

Zmiana

unfreeze()

Wyłącza awaryjne wstrzymanie DAF. Przelewy, emisja i redeem wykonywany przez posiadaczy znów działają. Wymiana kwitów wraca, o ile nie jest włączone wstrzymanie systemu kwitów.

Wyłączyć je może tylko główny sejf. Sejf awaryjny może je jedynie włączyć. Zamrożone konta pozostają zamrożone.

Kto może
Główny sejf
Odmawia, gdy
  • Awaryjne wstrzymanie nie jest włączone.

Emisja, redeem i usuwanie

Emisja DAF

Zmiana

mint(to, amount)mintBatch(to, amounts)

Tworzy nowy DAF na wskazanym koncie, bez górnego limitu. Odbiorca nie musi być zweryfikowany, ale nie może nim dysponować, dopóki nie przejdzie weryfikacji.

W ten sposób główny sejf wydaje DAF bezpośrednio, a system kwitów przy wymianie kwitu. Wersja zbiorcza obsługuje wiele kont naraz. Jeden błędny wpis cofa całość.

Kto może
Główny sejf lub system kwitówSystem kwitów tworzy DAF tylko przy wymianie kwitu i sam wymaga wtedy, żeby posiadacz był zweryfikowany.
Odmawia, gdy
  • Włączone jest awaryjne wstrzymanie.
  • Odbiorca jest na czarnej liście albo ma zamrożone konto.
  • Kwota wynosi zero albo odbiorca to adres zerowy.
  • W wersji zbiorczej liczba odbiorców nie zgadza się z liczbą kwot.
Parametry
to
Konto odbiorcy. W wersji zbiorczej lista odbiorców.
amount
Kwota DAF do utworzenia.
amounts
Lista kwot, w tej samej kolejności co lista odbiorców.

Redeem własnych DAF

Zmiana

redeem(amount, redemptionRef)

Robi redeem DAF z własnego konta. Tokeny przestają istnieć, a system zapisuje redeem razem z podanym numerem referencyjnym.

Służy do rozliczenia z posiadaczem poza systemem. Redeem jest zapisywany osobno od usunięć, a numer pozwala dopasować go do rozliczenia. Samego rozliczenia system nie wykonuje.

Kto może
PosiadaczBlokady obowiązują tu każdego, także główny sejf.
Odmawia, gdy
  • Włączone jest awaryjne wstrzymanie.
  • Posiadacz jest na czarnej liście, ma zamrożone konto albo nie jest zweryfikowany.
  • Posiadacz ma mniej DAF, niż wynosi kwota.
  • Kwota wynosi zero.
Parametry
amount
Kwota DAF, która ma przestać istnieć.
redemptionRef
Numer referencyjny redeem, na przykład numer zgłoszenia albo faktury. Może być pusty.

Redeem w imieniu posiadacza

Zmiana

redeemOnBehalf(holder, amount, redemptionRef)

Robi redeem DAF z konta wskazanego posiadacza i zapisuje go jako redeem z numerem referencyjnym, nie jako usunięcie. Nie korzysta ze zgód udzielonych pełnomocnikom i ich nie zmienia.

Dla posiadacza, który zgłosił redeem poza systemem, na przykład w obsłudze klienta. Działa mimo czarnej listy, zamrożenia, braku weryfikacji i awaryjnego wstrzymania.

Kto może
Główny sejf lub sejf usuwania
Odmawia, gdy
  • Posiadacz ma mniej DAF, niż wynosi kwota.
  • Kwota wynosi zero albo posiadacz to adres zerowy.
Parametry
holder
Konto posiadacza, z którego znikną DAF.
amount
Kwota DAF, która ma przestać istnieć.
redemptionRef
Numer referencyjny redeem, na przykład numer zgłoszenia. Może być pusty.

Usunięcie DAF

Zmiana

burn(from, amount)

Usuwa DAF z dowolnego konta. Działa także na kontach z czarnej listy, zamrożonych i niezweryfikowanych oraz podczas awaryjnego wstrzymania.

Stosuje się je na przykład na żądanie uprawnionego organu. System zapisuje to jako usunięcie, nie jako redeem. Tokenów nie da się tą drogą przenieść na inne konto, można je tylko zniszczyć.

Kto może
Główny sejf lub sejf usuwania
Odmawia, gdy
  • Konto ma mniej DAF, niż wynosi kwota.
  • Kwota wynosi zero albo konto to adres zerowy.
Parametry
from
Konto, z którego DAF zostaną usunięte.
amount
Kwota DAF do usunięcia.

lockedDAF

System kwitów. Tu powstają kwity z zakupów i tu zamienia się je na DAF.

Wystawianie kwitów

Wystawienie kwitu

Zmiana

issue(holder, amount, unlockAt)issueBatch(holders, amounts, unlockAts)

Zapisuje zakup jako kwit z kwotą i chwilą odblokowania. Saldo lockedDAF kupującego rośnie o tę kwotę. Wersja zbiorcza zapisuje wiele zakupów naraz i odrzuca całość, gdy choć jeden wpis jest błędny.

Tak firma rejestruje zakup. Zakup z tą samą chwilą odblokowania dopisuje się do istniejącego kwitu. Wystawienia nie blokuje zamrożenie konta ani awaryjne wstrzymanie DAF.

Kto może
Główny sejf lub sejf sprzedaży
Odmawia, gdy
  • System kwitów jest wstrzymany.
  • Kupujący nie jest zweryfikowany albo jest na czarnej liście.
  • Chwila odblokowania wypada wcześniej niż za dobę albo później niż za 3650 dni.
  • Kwota wynosi zero, adres jest pusty lub należy do samego DAF albo lockedDAF, albo kupujący ma już 256 kwitów i żaden z nich nie ma tej chwili odblokowania.
Parametry
holder
Konto kupującego, na które trafia kwit.
amount
Kwota kwitu w najmniejszych jednostkach tokena. Po wymianie daje dokładnie tyle samo DAF.
unlockAt
Chwila odblokowania jako znacznik czasu w sekundach. Musi wypadać najwcześniej za dobę i najpóźniej za 3650 dni. Ta doba pozwala zatrzymać i anulować kwit wystawiony bez zamówienia. Do istniejącego kwitu można dopisać zakup najpóźniej dobę przed jego odblokowaniem.
holders
Wersja zbiorcza: lista kont kupujących.
amounts
Wersja zbiorcza: lista kwot w tej samej kolejności co konta.
unlockAts
Wersja zbiorcza: lista chwil odblokowania w tej samej kolejności. Wszystkie trzy listy muszą mieć równą długość. Inaczej całość zostaje odrzucona.

Sprawdzenie przed wystawieniem

Odczyt

canIssue(holder, amount, unlockAt)

Sprawdza, czy wystawienie kwitu z tymi danymi udałoby się teraz. Nie ocenia, kto je zleca. Ocenia wpis wobec obecnego stanu, więc nie uwzględnia wcześniejszych wpisów z tego samego wystawienia zbiorczego.

Firma może odsiać błędne wpisy przed wysłaniem. Chwilę odblokowania warto wybrać z zapasem ponad dobę, bo transakcja trafia do sieci później.

Kto może
Każdy
Parametry
holder
Konto kupującego.
amount
Planowana kwota kwitu w najmniejszych jednostkach tokena.
unlockAt
Planowana chwila odblokowania jako znacznik czasu w sekundach.
Zwraca
Tak, jeśli wystawienie udałoby się teraz. Nie, gdy system kwitów jest wstrzymany, kupujący nie jest zweryfikowany lub jest na czarnej liście, adres jest nieprawidłowy, kwota wynosi zero lub przekracza techniczny limit tokena, chwila odblokowania wypada poza dozwolonym zakresem albo kupujący nie ma już miejsca na kwit z nową chwilą odblokowania.

Wymiana na DAF

Wymiana własnych kwitów

Zmiana

redeem()

Wymienia na DAF naraz wszystkie odblokowane kwity własnego konta. Kwity znikają, a na konto trafia tyle samo nowego DAF. Kwity jeszcze nieodblokowane czekają dalej.

Kupujący może odebrać DAF sam, bez czekania na automat wymiany.

Kto może
PosiadaczDotyczy tylko własnych kwitów.
Odmawia, gdy
  • Żaden kwit nie jest jeszcze odblokowany.
  • Konto nie jest zweryfikowane, jest na czarnej liście albo jest zamrożone.
  • System kwitów jest wstrzymany albo trwa awaryjne wstrzymanie DAF.
  • System kwitów nie ma uprawnienia do emisji DAF, bo na przykład odebrał mu je główny sejf.
Zwraca
Kwota DAF, która trafiła na konto.

Wymiana za kupującego

Zmiana

redeemFor(holder)

Wymienia na DAF wszystkie odblokowane kwity wskazanego konta. DAF zawsze trafia do właściciela kwitów, nigdy do wykonującego wymianę. Gdy nie ma czego wymienić albo konto nie może odebrać DAF, odmawia i podaje powód.

Kupujący nie musi pamiętać o dacie. Wiele kont naraz obsługuje wymiana zbiorcza.

Kto może
Główny sejf lub automat wymianyAutomat wymiany ma własny klucz i działa sam, bez dodatkowych podpisów: może tylko wydać DAF właścicielom odblokowanych kwitów.
Odmawia, gdy
  • Żaden kwit tego konta nie jest jeszcze odblokowany.
  • Konto nie jest zweryfikowane, jest na czarnej liście albo jest zamrożone.
  • System kwitów jest wstrzymany albo trwa awaryjne wstrzymanie DAF.
  • System kwitów nie ma uprawnienia do emisji DAF, bo na przykład odebrał mu je główny sejf.
Parametry
holder
Konto, którego kwity są wymieniane. To ono dostaje DAF.
Zwraca
Kwota DAF, która trafiła na konto kupującego.

Wymiana zbiorcza

Zmiana

redeemForMany(holders)

Wymienia na DAF odblokowane kwity wielu kont w jednej transakcji. Bez błędu pomija konta bez odblokowanych kwitów oraz konta niezweryfikowane, z czarnej listy lub zamrożone. Ich kwity czekają.

Konto, które nie może odebrać DAF, nie zatrzymuje pozostałych. Pominięcie jest ciche, więc firma musi sama śledzić takie konta.

Kto może
Główny sejf lub automat wymianyAutomat wymiany ma własny klucz i działa sam, bez dodatkowych podpisów: może tylko wydać DAF właścicielom odblokowanych kwitów.
Odmawia, gdy
  • System kwitów jest wstrzymany albo trwa awaryjne wstrzymanie DAF. Wtedy nikt z listy nie dostaje DAF.
  • System kwitów nie ma uprawnienia do emisji DAF. Wtedy również nikt z listy nie dostaje DAF.
Parametry
holders
Lista kont do obsłużenia. Konto podane kilka razy dostaje DAF tylko raz.
Zwraca
Łączna kwota DAF przekazana kontom z listy. Zero, gdy wszystkie konta pominięto albo lista jest pusta.

Gotowość do wymiany

Odczyt

canRedeem(holder)redeemableOf(holder)

Sprawdza, czy wymiana dla konta udałaby się teraz. Nie ocenia, kto ją zleca. Osobno podaje kwotę już odblokowanych kwitów, bez sprawdzania, czy konto może odebrać DAF.

Automat wymiany i aplikacja mogą sprawdzić konto przed zleceniem wymiany i pokazać kupującemu kwotę gotową do odbioru.

Kto może
Każdy
Parametry
holder
Sprawdzane konto.
Zwraca
Sprawdzenie gotowości: tak tylko wtedy, gdy nie trwa ani wstrzymanie systemu kwitów, ani awaryjne wstrzymanie DAF, system kwitów ma uprawnienie do emisji DAF, a konto jest zweryfikowane, nie jest ani na czarnej liście, ani zamrożone i ma odblokowany kwit. Kwota: suma odblokowanych, jeszcze niewymienionych kwitów. Zero, gdy nic nie jest gotowe.

Anulowanie

Anulowanie kwitu lub jego części

Zmiana

cancelLot(holder, unlockAt, amount)

Zmniejsza jeden kwit o podaną kwotę albo usuwa go w całości. Saldo lockedDAF maleje o tę kwotę i nie powstaje za nią żaden DAF. Działa bez względu na weryfikację, czarną listę i zamrożenie konta, także podczas obu wstrzymań.

Służy do zwrotów. Działa także po odblokowaniu, dopóki kwit nie został wymieniony.

Kto może
Główny sejf lub sejf anulowań
Odmawia, gdy
  • Konto nie ma kwitu z tą chwilą odblokowania, bo na przykład został już wymieniony lub anulowany.
  • Kwota przekracza to, co zostało w kwicie.
  • Kwota wynosi zero.
Parametry
holder
Konto, do którego należy kwit.
unlockAt
Dokładna chwila odblokowania kwitu. Po niej system rozpoznaje, o który kwit chodzi.
amount
Kwota do anulowania, najwyżej cała kwota pozostała w kwicie.

Anulowanie wszystkich kwitów konta

Zmiana

cancelAll(holder)

Usuwa wszystkie kwity konta, także już odblokowane, a saldo lockedDAF spada do zera. Nie powstaje za nie żaden DAF. Działa bez względu na weryfikację, czarną listę i zamrożenie konta, także podczas obu wstrzymań.

Stosuje się ją przy pełnym zwrocie albo gdy konto objęły sankcje.

Kto może
Główny sejf lub sejf anulowań
Odmawia, gdy
  • Konto nie ma żadnego kwitu.
Parametry
holder
Konto, którego kwity są anulowane.
Zwraca
Łączna kwota anulowanych kwitów.

Podgląd kwitów

Podgląd kwitów konta

Odczyt

lotsOf(holder)lotOf(holder, unlockAt)lotCountOf(holder)

Podaje kwity konta: wszystkie naraz, jeden wskazany chwilą odblokowania albo samą ich liczbę. Obejmuje też kwity odblokowane, ale jeszcze niewymienione.

Aplikacja i firma widzą, z jakich zakupów składa się saldo lockedDAF i kiedy każdy z nich się odblokuje.

Kto może
Każdy
Parametry
holder
Sprawdzane konto.
unlockAt
Tylko przy podglądzie jednego kwitu: jego chwila odblokowania.
Zwraca
Pełny podgląd: dwie listy tej samej długości, chwile odblokowania i kwoty, dopasowane pozycja po pozycji. Kolejność nie ma znaczenia i może się zmieniać. Jeden kwit: pozostała kwota albo zero, gdy takiego kwitu nie ma. Liczba kwitów: najwyżej 256.

Najbliższe odblokowanie

Odczyt

nextUnlockOf(holder)

Podaje najwcześniejszą chwilę odblokowania spośród kwitów konta.

Pozwala pokazać kupującemu najbliższą datę i zaplanować wymianę.

Kto może
Każdy
Parametry
holder
Sprawdzane konto.
Zwraca
Znacznik czasu w sekundach. Zero, gdy konto nie ma kwitów. Jeśli ta chwila już nadeszła, co najmniej jeden kwit jest odblokowany i czeka na wymianę.

Wstrzymanie

Wstrzymanie systemu kwitów

Zmiana

pause()

Włącza drugi przełącznik: zatrzymuje wystawianie i wymianę kwitów. Anulowanie działa dalej. Nie wpływa na przelewy DAF, a odblokowane kwity czekają do wznowienia.

Służy na wypadek zagrożenia, na przykład przejęcia sejfu sprzedaży. Żeby zatrzymać także DAF, trzeba osobno włączyć awaryjne wstrzymanie.

Kto może
Główny sejf lub sejf awaryjnyWyłączyć wstrzymanie może tylko główny sejf.
Odmawia, gdy
  • System kwitów jest już wstrzymany.

Wznowienie systemu kwitów

Zmiana

unpause()

Wyłącza wstrzymanie systemu kwitów. Wystawianie i wymiana znów działają, a kwity odblokowane w czasie przerwy można wymienić na pełną kwotę.

Sejf awaryjny może system zatrzymać, ale nie wznowić. Awaryjne wstrzymanie DAF wyłącza się osobno. Dopóki trwa, wymiana nie działa.

Kto może
Główny sejf
Odmawia, gdy
  • System kwitów nie jest wstrzymany.

Przeniesienia

Przelewy i pełnomocnictwa

Zawsze odmawia

transfer(_, _)transferFrom(_, _, _)approve(_, _)permit(_, _, _, _, _, _, _)

Standardowe funkcje tokena: przelew, przelew przez pełnomocnika, zgoda dla pełnomocnika i taka sama zgoda udzielona podpisem. W lockedDAF każda z nich zawsze odmawia.

Kwit jest przypisany do kupującego, więc nie da się go przelać, sprzedać ani powierzyć komuś innemu. Saldo lockedDAF w portfelu służy tylko do podglądu.

Kto może
NiktOdmawia każdemu, także głównemu sejfowi.
Dlaczego
  • Kwitu nie można przenieść ani dać do niego zgody pełnomocnikowi, nawet z ważnym podpisem.
Parametry
to
Odbiorca przelewu. Ignorowany.
from
Konto, z którego pełnomocnik miałby przelać kwit. Ignorowane.
amount
Kwota przelewu lub zgody. Ignorowana.
spender
Osoba, która miałaby zostać pełnomocnikiem. Ignorowana.
owner
Posiadacz, który podpisuje zgodę. Ignorowany.
value
Kwota podpisanej zgody. Ignorowana.
deadline
Termin ważności podpisanej zgody. Ignorowany.
v
Część podpisu posiadacza. Ignorowana.
r
Część podpisu posiadacza. Ignorowana.
s
Część podpisu posiadacza. Ignorowana.

Administracja

Funkcje wspólne dla obu kontraktów oraz jednorazowe wdrożenie systemu.

Własność i uprawnienia

Jednorazowe przekazanie własności

Zmiana

DAF i lockedDAF

transferOwnership(newOwner)

Przekazuje własność kontraktu w jednym kroku, bez potwierdzenia przez nowego właściciela. Działa tylko raz, przy wdrożeniu: tak fabryka oddaje oba kontrakty głównemu sejfowi. W DAF nowy właściciel trafia też na listę zweryfikowanych.

Później zostaje już tylko przekazanie dwuetapowe, więc pomyłka w adresie niczego nie oddaje.

Kto może
WdrażającyTylko raz, przy wdrożeniu przez fabrykę. Potem odmawia każdemu, także głównemu sejfowi.
Odmawia, gdy
  • Wdrożenie już się zakończyło, więc odmawia każdemu, także głównemu sejfowi.
  • Wywołuje ktoś inny niż obecny właściciel.
  • Nowy właściciel to pusty adres albo sam kontrakt. W lockedDAF także adres DAF.
Parametry
newOwner
adres nowego właściciela

Dwuetapowe przekazanie własności

Zmiana

DAF i lockedDAF

requestOwnershipHandover()completeOwnershipHandover(pendingOwner)

Przyszły właściciel prosi o przekazanie, a główny sejf zatwierdza tę prośbę. Prośba wygasa po 48 godzinach. W DAF nowy właściciel trafia też na listę zweryfikowanych, a poprzedni na niej zostaje.

W obecnej wersji kodu to jedyny sposób, by po wdrożeniu zmienić główny sejf. Każdy kontrakt przekazuje się osobno.

Kto może
Przyszły właściciel i główny sejfProśbę może złożyć każdy adres, ale bez zatwierdzenia przez główny sejf nic się nie zmienia.
Odmawia, gdy
  • Zatwierdza ktoś inny niż obecny główny sejf.
  • Wskazany adres nie złożył prośby, wycofał ją albo od prośby minęło ponad 48 godzin.
  • Nowy właściciel to pusty adres albo sam kontrakt. W lockedDAF także adres DAF.
Parametry
pendingOwner
adres, który poprosił o przekazanie i ma zostać nowym właścicielem

Nadawanie i odbieranie uprawnień

Zmiana

DAF i lockedDAF

grantRoles(user, roles)revokeRoles(user, roles)

Nadaje lub odbiera uprawnienia wskazanemu adresowi. Kilka uprawnień można zmienić naraz. Uprawnienia mają numery, a ten sam numer oznacza w DAF i w lockedDAF inne uprawnienie, więc trzeba wybrać właściwy kontrakt.

Tak główny sejf przydziela zadania osobnym sejfom i automatowi wymiany. Sam nie potrzebuje nadanych uprawnień. Odebranie systemowi kwitów prawa emisji DAF zatrzymuje wymianę.

Kto może
Główny sejfAdres z uprawnieniem może też sam z niego zrezygnować.
Odmawia, gdy
  • Wywołuje ktoś inny niż główny sejf, nawet adres ze wszystkimi uprawnieniami.
Parametry
user
adres, któremu nadaje się lub odbiera uprawnienia
roles
suma numerów uprawnień, na przykład 3 oznacza numery 1 i 2. W DAF: 1 emisja DAF, 2 usunięcie DAF i redeem w imieniu posiadacza, 4 weryfikacja i czarna lista, 8 awaryjne wstrzymanie i zamrażanie kont, 16 odzyskanie pomyłkowych wpłat. W lockedDAF: 1 wystawianie kwitów, 2 wymiana za kupujących, 4 anulowanie kwitów, 8 wstrzymanie systemu kwitów, 16 odzyskanie pomyłkowych wpłat. Wyłączyć wstrzymanie i odmrozić konto może tylko główny sejf.

Aktualizacja

Przejście na nową wersję kodu

Zmiana

DAF i lockedDAF

upgradeToAndCall(newImplementation, data)

Przełącza kontrakt na nową wersję kodu i może przy tym wykonać dodatkowe polecenie. Działa natychmiast. Samo przełączenie nie zmienia sald, kwitów, list kont ani uprawnień.

Służy do poprawek i nowych funkcji, w każdym kontrakcie osobno. System sprawdza tylko, czy nowy kod nadaje się do aktualizacji. Jego treść musi ocenić główny sejf.

Kto może
Główny sejf
Odmawia, gdy
  • Wywołuje ktoś inny niż główny sejf, nawet adres ze wszystkimi uprawnieniami.
  • Pod podanym adresem nie ma kodu przygotowanego do aktualizacji, na przykład podano pusty adres albo zwykły portfel.
  • Dodatkowe polecenie nie powiodło się, więc cała zmiana zostaje cofnięta.
  • Wywołanie trafiło pod adres samego kodu, a nie pod adres kontraktu.
Parametry
newImplementation
adres nowej wersji kodu, wgranej wcześniej
data
dodatkowe polecenie wykonywane zaraz po zmianie, na przykład przeniesienie danych. Puste, gdy nie jest potrzebne.

Odzyskiwanie pomyłkowych wpłat

Odzyskanie pomyłkowych wpłat

Zmiana

DAF i lockedDAF

recoverERC20(token, to, amount)recoverETH(to, amount)

Wysyła wskazanemu odbiorcy tokeny lub ETH, które trafiły do kontraktu przez pomyłkę. Nie zmienia sald posiadaczy ani kwitów. Odzyskanie DAF działa jak zwykły przelew: odbiorca musi być zweryfikowany, a awaryjne wstrzymanie je blokuje.

Służy do zwrotu pomyłkowych wpłat. Zwykłe przelewy ETH kontrakty odrzucają, ale ETH może trafić do nich inną drogą.

Kto może
Główny sejf lub sejf odzyskiwaniaSejf odzyskiwania dostaje to uprawnienie osobno w każdym kontrakcie.
Odmawia, gdy
  • Wywołuje ktoś inny niż główny sejf lub sejf odzyskiwania tego kontraktu.
  • Pusty adres tokenu lub odbiorcy albo zerowa kwota.
  • Kontrakt ma za mało środków, pod adresem tokenu nie ma kontraktu, token odrzucił przelew albo odbiorca nie przyjmuje ETH. Kwitów nie da się tak odzyskać, bo nie można ich przelać.
  • Przy odzyskiwaniu DAF: trwa awaryjne wstrzymanie albo odbiorca lub kontrakt, z którego wysyła się DAF, nie jest zweryfikowany, jest na czarnej liście lub ma zamrożone konto.
Parametry
token
adres tokenu do odzyskania
to
adres odbiorcy
amount
kwota w najmniejszych jednostkach tokenu lub ETH

Wdrożenie

Wdrożenie całego systemu

Zmiana

Fabryka wdrożeniowa

deploy(owner, dafImplementation, lockedImplementation, cfg)

Tworzy DAF i system kwitów w jednym kroku i daje systemowi kwitów prawo emisji DAF. Główny sejf i system kwitów trafiają na listę zweryfikowanych. Oba kontrakty przechodzą do głównego sejfu, a fabryka nie zachowuje żadnych uprawnień.

Jeden krok nie daje nikomu okazji do przejęcia kontraktów. Liczbę wymaganych podpisów sejfu sprawdza skrypt wdrożeniowy, nie fabryka.

Kto może
WdrażającyTylko adres wskazany przy tworzeniu fabryki.
Odmawia, gdy
  • Wywołuje ktoś inny niż adres wskazany przy tworzeniu fabryki.
  • Adres głównego sejfu jest pusty albo jest adresem fabryki, któregoś z tworzonych kontraktów lub podanego kodu DAF bądź lockedDAF.
  • Pod podanym adresem kodu DAF lub lockedDAF nie ma kontraktu albo jest tam niewłaściwy kod, na przykład gdy adresy zamieniono miejscami.
Parametry
owner
adres głównego sejfu, przyszłego właściciela obu kontraktów
dafImplementation
adres wcześniej wgranego kodu DAF
lockedImplementation
adres wcześniej wgranego kodu lockedDAF
cfg
nazwa, symbol i liczba miejsc po przecinku DAF oraz nazwa i symbol lockedDAF. Liczbę miejsc po przecinku lockedDAF przejmuje od DAF.
Zwraca
Adresy nowego DAF i nowego systemu kwitów.