5

Łańcuchy bloków, takie jak Ethereum, wykorzystują język oparty na rejestrze stosu na swoich maszynach wirtualnych przetwarzających umowy inteligentne. Ten model jest bardzo wygodny, ponieważ zapewnia prosty mechanizm mierzenia ilości pracy wymaganej do uruchomienia programów: wystarczy naprawić koszt każdej operacji pierwotnej i sumy.Jak dokładnie zmierzyć wysiłek wymagany do skrócenia okresu λ?

Załóżmy, że zamiast maszyn wirtualnych, blockchain zawierający inteligentne kontrakty używał funkcjonalnego języka programowania, takiego jak rdzeń Haskella. Czy istnieje prosty, dokładny sposób mierzenia ilości pracy wymaganej do wykonania programu funkcjonalnego - pamiętając, że węzły są w stanie wykorzystać dowolną strategię oceny, więc taki pomiar musi być uniwersalny.

+3

Taki środek nie może być niezależny od strategii oceny. Najbardziej niższa ocena ograniczy warunki do normalnej formy, która najgłębiej nie będzie. Na przykład 'const() (fix id)'. W przypadku oceny najbardziej zewnętrznej termin ten zostanie zredukowany do postaci normalnej w jednym kroku. Przy najgłębszej ocenie to wykona nieskończoną pętlę 'fix id', więc koszt będzie nieskończony. 'fix' pochodzi z' Data.Function'. – jpath

+0

Tak naprawdę to byłby niezależny od strategii oceny, jeśli zdefiniujesz go jako minimalną liczbę kroków, aby zredukować termin do normalnej formy w stosunku do wszystkich możliwych strategii oceny. Byłoby to jednak równe liczbie kroków potrzebnych przy leniwej ewaluacji i nie sądzę, aby był to przydatny środek dla jakiejkolwiek innej strategii oceny. – jpath

+0

Po kroku mam na myśli zastosowanie abstrakcji lambda do ** jednego argumentu lub zastosowanie operacji pierwotnej jej argumentów. – jpath

Odpowiedz

1

"po prostu ustal koszt dla każdej operacji pierwotnej i sumy" nie jest łatwe. Sieć blockchain dynamicznie określa prawdziwą wartość tokena dla dowolnej wartości, jaką zapewnia minimum tokena. Na przykład gaz jest warty tego, co świat chce zapłacić za to, aby użyć go jako jednostki obliczeniowej na światowym komputerze. Aby dokładnie zmierzyć wysiłek wydany przez sieć w celu zapewnienia wartości jednostkowej tokenu, potrzebujemy algorytmu DMMS (jak opisano w dokumencie sidechains), który jest tylko dowodem pracy blockchain.

Każda operacja pierwotna wymaga własnego łańcucha blokującego, aby jej wartość została dokładnie określona. Kiedy wiele tokenów jest zaimplementowanych w jednym bloku blokowym, np. Dla kolorowych/niestandardowych monet, nie może dokładnie zmierzyć wartości jednostki.

W przypadku języka funkcjonalnego, można by sobie wyobrazić blokadę seplenienia z 7 prymitywami Paula Grahama zaimplementowanymi jako kod operacyjny (interpretator oparty na stosie jest nieistotny), który byłby kompletny, ale będzie cierpieć z powodu problemu z określeniem prawdziwej wartości każdego kodu operacyjnego; najtańszy będzie zawsze nadużywany, jak widać na ethereum (taniość samobójcy była spamem).

W celu uzyskania funkcjonalnego kompletnego łańcucha blokującego potrzebna jest sieć oplotowa złożona z 7 bloków blokowych, z których każdy niezależnie określa prawdziwą wartość wysiłku wymaganego dla tego podstawowego obliczenia.

Osoby, które mają alternatywę dla dowodu pracy, nie zgadzają się z powyższymi. Kryptowaluta to nowa dziedzina, a matematyka nie jest wystarczająco dojrzała, aby ktokolwiek mógł wysuwać konkretne roszczenia.