WTF: Kontrola dostępu w jednej z kluczowych funkcji: require(msg.sender != owner()) (czyli każdy mógł sobie wywołać funkcję oprócz adresu zwracanego z owner() XD. Wszystko dokładnie na odwrót). I 730K $ ubyło.
Zamiast siedzieć teraz p--o pić jak co piątek, to ja zapisałem się na jeden ctf i siedziałem dzisiaj pół dnia nad jednym zadaniem. Kolega z teamu przyszedł i ogarnął to w pół godziny (・へ・).
Programista smart kontraktu nie wziął pod uwagę precyzji (ilości miejsc po przecinku) z jaką wyrażane są poszczególne tokeny. Funkcja 'mint' wydaje tokeny uniBTC w zamian za przetransferowany WETH (wrapped Ether). uniBTC można było zamienić na tokeny WBTC na giełdzie Uniswap (1 uniBTC : ~1 WBTC). Użytkownik zaciągnął 30 WETH pożyczki flashloan i wywołał wadliwą funkcję 'mint', gdzie ilość otrzymanych tokenów uniBTC obliczana jest w następujący sposób:
amount = 30e18 (30 tokenów WETH. 1 WETH z 18 miejscami po przecinku) / 1e10 ('exchange rate base'. Tutaj dzielenie traktuje się jak odejmowane miejsc po przecinku) = 30e8 (30 tokenów uniBTC . 1 uniBTC ma 8 miejsc po przecinku)
Czyli użytkownik otrzymał 30 uniBTC w zamian za 30 WETH (1:1). Następnie otrzymane tokeny uniBTC zostały wymienione na tokeny WBTC na Uniswap (na ~30 WBTC). Potem wystarczyło już tylko zamienić WBTC na WETH, spłacić pożyczkę flashloan i zgarnąć profit. W wyniku zamiany WBTC na WETH otrzymano ~680 tokenów WETH (cena rynkowa WBTC znacznie różni się od ceny WETH).
Chciałbym wejść w świat kryptowalut, blockchain jako programista. Aktualnie piszę w pythonie, ale pisałem w wielu językach. Który blockchain wybrać? Kiedyś myślałem o terra, teraz myślałem o solanie Macie materiały od których zacząć?
Czy waszym zdaniem blockchain jako technologia i ma przyszłość? Coraz częściej słyszę głosy, że blockchain to nic wyjątkowego i jest to trochę przerost formy nad treścią, decentralizacja jest w teorii a w praktyce już to nie wygląda tak idealnie.
Widzicie szansę na rozwój i czy warto iść w stronę blockchain developera?
ale to nie jest jakis rocket science, rob to za co ci placa i nie przepalaj czasu na rzeczy, ktorych byc moze kiedys uzyjesz. No chyba, ze jestes juniorem i szukasz pierwszej pracy, ale wtedy to na pewno nie blockchain. Poczekaj az pojdziesz do projektu i Twoj solution architect zapoda temat, zeby uzyc np. AWS Managed Blockchain, posiedzisz tydzien i bedziesz wiedzial ocb.
@wikwid: Z mojego doświadczenia powiem, ze tak warto. Kasa niezła i można się jeszcze trochę nachapac.
Co do samej technologi to jest to nie rozwiązuje żadnego problemu. No ale ludzie pakują kasę wiec ja osobiście korzystam i tez polecam, bo stawki sa godne. :)
Dziś czysto techniczny artykuł dla osób zaczynających swoją przygodę z solidity. Pokazuję jak umieścić array w structie oraz jak dobrać się do tej listy i zwrócić jej wartości.
Tak jak wczoraj zapowiadałem, dziś pierwszy artykuł wylądował na medium, dotyczy on gry on nazwie Ethernaut, która pozwala nam przetestować nasze umiejętności hakerskie oraz znajomość solidity.
Opisałem po krótce pierwsze zadanie wraz z rozwiązaniem. Większość przykładów (leveli) tam podanych przyczyniła się do strat liczonych w milionach dolarów.
Aktualnie jestem na etapie szukania pracy/przygotowywania się do rozmów o pracę na stanowisko solidity dev, czy ktokolwiek byłby zainteresowany rozwijaniem wiedzy z tej tematyki?
Planuję codziennie wrzucać krótkie artykuły na twittera, medium i reddita. Przy okazji mógłbym udostępniać je tutaj.
Tematyka to głównie Web3 (Python), solidity, podstawy MEV, trochę o stawianiu nodów, EVM i pokrewne.
P.S. Gdyby ktoś miał propozycję pracy w tej dziedzinie, również jestem chętny ( ͡° ͜ʖ ͡°)
Czy warto się uczyć Solidity, który jest tylko podobny do JS, a ma masę swoich zasad i udziwnień? Czy lepiej uczyć się Rust, na którym bazuje Solana i który ma być następcą C? #programowanie#solidity#blockchain
Zacząłem się uczyć tego języka, ale nie wiem, czy to nie strata czasu i czy faktycznie jest w tym przyszłość.
@SendMeAnAngel: porównujesz burgery i gruszki. Pewnie szedłbym w Rust, bo zapotrzebowanie na pewno będzie w przyszłości, choć raczej niskie; programiści to głównie web dev a tam w większości przypadków użycie rusta może być przesadą. Z solidity to nie wiem, ale wiązanie przyszłości z jedną technologią może być zgubne
Interesuję się tematyką blockchian/ kryptowaluty od 2-3 lat, ale nigdy nie kodowałem. Chodzi mi po głowie pomysł wyuczenia się kodowania i potem (oczywiście) próbowałbym gdzieś aplikować do pracy.
Czy w ogóle jest jakaś szansa dla mnie, czy traktować to raczej jako hobby? Z tego co widzę to wszędzie potrzebują doświadczonych programistów.
Z angielskim nie mam problemów, za granicą lepiej?
Przedwczoraj dropnął darmowy 30-godzinny kurs programowania w blockchainie od developera chainlinka. Poprzedni 4-godzinny kurs od niego był naprawdę spoko, więc na pewno spróbuję jeśli tylko będę miał chwilę czasu.
Zaczynam niedługo nową pracę i będę tam pracowała z blockchainem. Czy macie jakieś fajne kursy solidity i integracji smart contractów przez web3.js z angularem (raczej po angielsku)?
Dotychczas pracowałam jako pure FE, ale kilka lat temu bawiłam się chwilę solidity.
Od wczoraj mam 503 service temporarily unavailable gdy próbuję wyeksportować swoje kontrakty do Binance Smart Chain testnet, czy to tylko u mnie, czy coś się dzieje w sieci? Na dodatek dziwne rzeczy, zrevertowało mi kod, gdzie nie powinno w trakcie deploymentu, choć na lokalnej sieci development wszystko śmiga. ¯\\(ツ)\/¯
Dodatkowo jak wpiszę w cmd: npx truffle console
i podam sieć bsc testnet, to też sypie błędami 503.
@SupreminTHC: Jestem na sieci testnet binance (bo na mainie za te testy bym stówami płacił), próbuję wyeksportować kontrakty, bo chcę przetestować swój projekt, czy nie ma błędów w tym, co zakodziłem, ale ta sieć testowa wywala błędy 503 od wczoraj i się zastanawiam, czy tylko ja tak mam, czy to jest jakaś ogólna awaria.
@SupreminTHC: A chciałbyś jakieś specjalne funkcje? ( ͡° ͜ʖ ͡°) Na tę chwilę jest pobierana prowizja przy transferze, w zależności od tego, kto bierze udział od - do. Jeśli którąkolwiek ze stron jest router pancakeswap, to wyniesie 8%, jeśli mój kontrakt do reinwestycji to 2%, a wszystko inne (np. user to user) 12%. Podział prowizji wpisałem taki:
40% auto burn
30% permanent liquidity
30% reflection
Wszystko może się jeszcze zmienić, zależnie, co mi do głowy przyjdzie. A i token głównie opiera się na BUSD, a nie BNB. ¯\\(ツ)\/¯
Tylko, że mój projekt to nie jest po prostu token i yolo, róbta co chceta, bo będzie moon. Piszę platformę i właśnie ją testuję, na której użytkownicy będą mogli sami tworzyć coś ciekawego z wykorzystaniem tych tokenów i zakładam, że jeśli się przyjmie, będzie sporo transferów, więc i spory burn.
Gdyby ktoś był ciekaw, adres SafeMoon v2 to 0x42981d0bfbAf196529376EE702F2a9Eb9092fcB5 i w zasadzie dla przeciętnego użytkownika tyle powinno wystarczyć...
SafeMoon v2 to nie jeden, a dwa adresy, a więc dwa kontrakty. Pierwszy to ten właściwy, z którego wszyscy korzystają, jest to proxy, czyli baza danych, salda, adres do ciała i obsługa proxy. Drugi to ciało, czyli funkcje i obliczenia związane bezpośrednio z SM. Admin może upgradeować kontrakt i dzięki temu zmieniać mu ciało poprzez podmianę adresu kontraktu ciała w proxy. I taki upgrade już miał raz miejsce, gdy nie mieliśmy o tym zielonego pojęcia.
Nie tldr;
Czym jest kontrakt proxy?
To niewielki kontrakt, który zajmuje się przechowywaniem wszystkich danych (storage) i aktualizacją adresu proxy przez uprawnioną osobę, a ciało, tj. funkcje i obliczenia przechowuje inny kontrakt, proxy przyjmuje to ciało pod siebie, by działać do złudzenia jak ten kontrakt. Po co to? Ano, po to, by w przyszłości móc robić upgrade, dodawać nowe funkcje, ewentualnie naprawiać błędy wynikające ze złych obliczeń, czy korekty - wystarczy, że admin wprowadzi nowy adres ciała do proxy. Jest to rozwiązanie wprowadzone z tego względu, że domyślnie w sieci Ethereum i Binance Smart Chain kontrakty po wypuszczeniu są niezmienne (z wyjątkiem ich storage), nie da się robić aktualizacji, modyfikować funkcji, naprawiać błędów, czego przykładem było przymusowe przejście na V2.
Oczywiście trzeba liczyć się z tym, że admin teoretycznie może coś namieszać przy upgrade. Szansa jest raczej nikła, patrząc na to, jak wielki jest ten projekt, ale zawsze jest.
Patrząc tak ogólnie na kod v2, okazuje się, że w porównaniu do v1 trochę go poprzerabiali, tak na szybko zauważyłem, że dodali jakieś tiery, whitelisty, exclude from reward itp. Na razie jeszcze nie analizowałem tego kodu do końca, ale jest ciekawy. ( ͡° ͜ʖ ͡°)
Ogólnie projekt zmierza w ciekawą stronę - od teraz to nie jest stały i jednolity kontrakt, kod jest cały czas aktualizowany.
Notka na koniec - adres ciała służy jedynie do przekazania funkcji i obliczeń właściwemu kontraktowi proxy - nie uruchamiajcie pod nim funkcji, nic nie wpłacajcie, nie transferujcie, bo tylko zmarnujecie środki i czas, on powinien być pusty i służy tylko i wyłącznie jako instrukcja dla właściwego kontraktu. xd
Nie naganiam, nie odstraszam. Inwestujcie na własną odpowiedzialność, wpis został napisany jedynie w ramach ciekawostki. Życzę wam sukcesów w krypto w nowym roku.
@chlodna_kalkulacja: Jestem dumnym hodlerem od marca 2021. To jest ostatni gwizdek żeby wsiąść do pociągu. Żałuję jedynie, że jakieś 2 miesiące temu wymieniłem z 1000$ na shitcoiny, które padły na ryj xd
Czy jest tu jakiś wykopek, kryptowalutowicz, #programista15k#solidity co umiał by napisać np.
exploita do smart kontraktu, domyślam że co takiego to musiał bym rozumieć jak działa kod smart kontraktu, przeanalizować napisać linijke kodu i wiedzie gdzie i jak wstrzyknąć czy są jakieś książki na temat solidity w jezyku polskim do nauki ?
#kryptowaluty
@perendev: owasp top 10
edit czy tam dasp, dla ethereum
Nie wiem czy się analizuje to manualnie linijka po linijce, do tego są narzędzia bezpieczeństwa które wypluwają na jakie ataki jest narażony smart contract, ja używałem oyente, ale nie wiem czy teraz jest to dalej rozwijane, na pewno są rózne
@theromanpolan: Już nakupowali na ATH rok temu :) teraz potrzebują specjalisty od Solidity, żeby zrobić z nich CDP i wygenerować 21 mln newBTC z każdego CDP i sprzedać ryśkowi po 10K każdy.