Gdyby ktoś był ciekaw, adres…

Gdyby ktoś był ciekaw, adres SafeMoon v2 to 0x42981d0bfbAf196529376EE702F2a9Eb9092fcB5 i w zasadzie dla przeciętnego użytkownika tyle powinno wystarczyć…

ALE

Dla ciekawskich warto zaznaczyć, że ten kontrakt to proxy, wszystko wskazuje na to, że to TransparentUpgradeableProxy z biblioteki OpenZeppelin, która została zaudytowana i jest uważana za wolną od błędów.
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/transparent/TransparentUpgradeableProxy.sol

tldr;

pokaż spoiler 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.

pokaż spoiler 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.

Na Bscscan SM widzimy jedynie kod proxy. Są tam też opcje Read as proxy i Write as proxy, gdzie mamy interakcje z ciałem kontraktu.
https://bscscan.com/address/0x42981d0bfbaf196529376ee702f2a9eb9092fcb5#code

Możemy tam też ściągnąć poprzez „Proxy Contract Verification Page” adres kontraktu ciała.

I teraz ciekawostka. Safemoon v2 już przeszedł upgrade, o który nie mieliśmy pojęcia. ( ͡° ͜ʖ ͡°)

Poprzedni adres ciała proxy:
0x41757e1eEF1e5BF4fd3Cf6D281dDec203945FF13

Nowy i aktualny adres ciała proxy:
0xa4DaEc0177676772A8f2000276e04F8379cC3aB9

Można przejrzeć, co uległo zmianie:
https://www.diffchecker.com/wpcoB5Ak

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.

#safemoon #kryptowaluty #bsc #ciekawostki #solidity