Wpis z mikrobloga

#programowanie #solidity #ethereum
Tak się zastanawiam, jak to jest z tym tworzeniem tokena.
1. Załóżmy, że chcę stworzyć własny token, którego będzie 100'000 sztuk.
2. Przypiszę całą ilość do adresu kontraktu.
3. Napiszę funkcję do wydobywania tokena, czyli ten kontrakt będzie taką kopalnią w której będą te tokeny.
Funkcja po wywołaniu będzie dodawała do konta osoby wywołującej tą funkcję jakąś ilość tokenów, niech ta ilość będzie zdefiniowana w parametrze wejściowym:
Pseudokod:

function KopToken( address kto, uint ilosc )
{ balances[kto] += ilosc; }

4. Chcę do tego napisać aplikację, gdzie po wciśnięciu odpowiedniego przycisku będzie się wywoływała funkcja KopToken.
Do tego momentu jest wszystko ok, i teraz nie wiem czy moje założenia są błędne czy czegoś jeszcze nie rozumiem.
5. Skoro każdy może wejść w interakcję bezpośrednio z kontraktem (poprawcie jeśli błędne założenie) to może wywołać funkcję KopToken poza moją aplikacją i wówczas będzie mógł tych moich wypuszczonych tokenów pozyskać całą pulę.
Jak się przed tym zabezpieczyć?
  • 20
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@kopytko1234: Ogólne założenie jest takie, że ktoś te tokeny kupuje za ETH, więc jak kupi to kupi, jak nie to nie. Jak robi transfer to ze swojego konta na czyjeś, nie odwrotnie ( ͡° ͜ʖ ͡°), więc transfer jest zazwyczaj używany jako część sprzedaży/wymiany między kontami. Czyli używasz transferu jako część logiki w której ktoś przykładowo wpłaca ETH na kontrakt, a w zamian otrzymuje transferem określoną
  • Odpowiedz
@CodexGigas: właśnie chodzi o zabezpieczenie żeby wałków nie było ;P
@xDrope: czy public czy external to różnicy nie robi, a w standardzie erc20 jest funkcja transfer. Ale widze ze jest tez cos takiego jak allowance ale musze ogarnac jak to dziala. A taki kontrakt z pseudo-kopalnią da się zrobic by byl bezpieczny?
Chyba na takiej zasadzie działa bitradio. Slucha sie muzyki i co jakis czas sie dostaje tokeny
  • Odpowiedz
@CodexGigas: ERC20 źle zabezpieczony jest prosty do obrobienia ( ͡° ͜ʖ ͡°)

@kopytko1234: W standardzie ERC20 jest funkcja transfer i jest wbudowana w solidity metoda Transfer. W ERC20 dzieje się dokładnie logika publiczna w funkcji transfer, która przyjmuje jako parametry kwotę i konto docelowe. Konto osoby korzystającej z funkcji jest odczytywane z msg.sender, środki są zmniejszane na koncie sendera o podaną kwotę, a potem
  • Odpowiedz
@xDrope: wlasnie o to chodzi by zrobic erc20 token ktory nie bylby prosty do obrobienia ;)
Jest jesscze funkcja transferFrom gdzie jest uzyty mapping allowed. Ale nie ogarnalem jeszcze jak on dziala.
A co do pseudo-kopalni to tak jak opisalem w pierwszym poscie. Smart contract mialby jedna funkcje KopToken i tam by sie okreslalo ile sie kopie. W sumie nawet nie musialby byc w parametrze adres kto kopie bo byloby
  • Odpowiedz
@kopytko1234: allowed to tablica dwuwymiarowa stworzona dwoma zagnieżdżonymi mappingami ( ͡° ͜ʖ ͡°). allowed[jeden adres][drugi adres] = kwota. Jak chcesz mieć coś takiego jak opisujesz to używasz modifiera na funkcji, a modifiera ustawiasz tak, że sprawdza czy funkcja jest wywołana przez admina określonego w konstruktorze. Kontrakt będzie bezpieczny, ale wtedy pozostaje kwestia hackowania strony w której trzeba posługiwać się kontem admina kontraktu - stajesz się oraclem
  • Odpowiedz
@xDrope:
To że to tablica dwuwymiarowa to widzę :P ale w jakim celu jest stworzona to jeszcze nie ogarniałem.
A co do pseudo-kopalni to chciałbym żeby każdy kto kliknie przycisk na mojej stronie dostał token.
Na przykład logujesz się poprzez metamask (jak w kryptokotach), wciskasz przycisk na stronie i dostajesz token.
Do tego timeout na 5 minut na przykład, że znów po 5 minutach można kliknąć, to mogłoby być sprawdzane po
  • Odpowiedz
@CodexGigas: Możliwe, że moja firma niedługo będzie obsługiwać ICO i będziemy takie rzeczy robić, ale póki co jestem zawalony robotą - dlatego siedzę na mirko ( ͡° ͜ʖ ͡°). Etherdelta powinna Ci pozwolić wypuścić token, ale mają ograniczone możliwości, a nazwa ani skrót tokenu nie są gwarantowane w Ethereum, więc nazwa może być taka sama dla kilku tokenów ( ͡° ʖ̯ ͡°)

@kopytko1234: poczytaj, to
  • Odpowiedz
@xDrope: Przelogowywanie się w metamask nie robi problemu, bo nowy adres to tak jakby inne konto, nie chodzi o sprawdzanie IP z którego ktoś się loguje. Ważne by była unikalnośc adresu eth.

Jeśli chodzi o cooldown to w kryptokotach jest zrobiony tak:

function _isReadyToGiveBirth(Kitty _matron) private view returns
  • Odpowiedz
1. Teoretycznie tak, w praktyce googluj, bo nie tak łatwo to zaplanować. Teoretycznie to można przejąć połowę minerów i fałszować transakcje i na btc i na eth ( ͡° ͜ʖ ͡°)

2. Gas kosztują funckcje zmieniające stan kontraktu. View i pure o ile się czegoś nie spieprzy są darmowe. Eventy też chyba miały być darmowe finalnie. Czyli odczytywanie storage kontraktu jest za darmo, a to drugie z logiką przyniosło library w solidity,
  • Odpowiedz
@xDrope:
Ad. 1. To akurat bardziej skomplikowana rzecz i w kotach też się tym nie martwili, więc póki co można to pominąć ( ͡° ͜ʖ ͡°)
Ad. 2. Ale np funkcja GiveBirth w kotach zmienia stan kontraktu, więc ktoś za to płaci, i pytanie - kto, ile i jak? Podobnie jak z aukcjami w kotach, samo wystawienie aukcji też zmienia stan kontraktu, więc pewnie i wystawienie aukcji kosztuje gas.
Ad. 3.
  • Odpowiedz
2. Tak. Jak klepniesz w ogarniętym środowisku kontrakt to powie Ci ile na co gasu. U kotów też da się to dokładnie policzyć/sprawdzić.

3. Raczej chodzi o kolejną rzecz do zabezpieczenia, bo dałoby się zerować gas. Pewnie powstałąby conajmniej jedna nowa podatność z fallbackami.

4. No to luzik. Na tym poziomie jest łatwiej i bezpieczniej.

5. Koszt mógłby być baardzo duży przy dużej bazie - storage przy każdej nowej instancji kosztuje gas,
  • Odpowiedz
Jak masz województwa i gminy to wrzucasz na starcie dwuwymiarową tablicę najlepiej niedynamiczną z nazwami województw, a drugi wymiar gminy żeby mieć np. województwa['mazowieckie'] = ['gmina','gmina','gmina']. W funkcji z view możesz loopować po nich za darmo. Natomiast każda zmiana storage zeżre dużo gasu przy takiej bazie.


@xDrope: Właśnie chodzi o takie zesłownikowanie bazy danych, żeby potem służyła za szablon tylko do pobierania.
A co do tych tablic to jak widzisz
  • Odpowiedz