Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Ochrona
description: Kwestie bezpieczeństwa dla deweloperów Ethereum
description: "Kwestie bezpieczeństwa dla deweloperów Ethereum"
lang: pl
---

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
---
title: Kompilowanie inteligentnych kontraktów
description: Wyjaśnienie, dlaczego należy skompilować inteligentne kontrakty i co faktycznie robi kompilacja.
title: "Kompilowanie inteligentnych kontraktów"
description: "Wyjaśnienie, dlaczego należy skompilować inteligentne kontrakty i co faktycznie robi kompilacja."
lang: pl
incomplete: true
---

Musisz skompilować swój kontrakt, aby aplikacja internetowa i maszyna wirtualna Ethereum (EVM) mogły ją „zrozumieć”.

## Warunki wstępne {#prerequisites}
## Wymagania wstępne {#prerequisites}

Przed zapoznaniem się z informacjami o kompilacji pomocny może być nasz artykuł o [inteligentnych kontraktach](/developers/docs/smart-contracts/) i [Maszynie Wirtualnej Ethereum (EVM)](/developers/docs/evm/).
Przed przeczytaniem o kompilacji, pomocne może okazać się zapoznanie z naszym wprowadzeniem do [inteligentnych kontraktów](/developers/docs/smart-contracts/) i [Wirtualnej Maszyny Ethereum](/developers/docs/evm/).

## Maszyna Wirtualna Ethereum (EVM) {#the-evm}
## EVM {#the-evm}

Aby [EVM](/developers/docs/evm/) mogła uruchomić kontrakt, musi on być zapisany jako **kod bajtowy**. Kompilacja zamienia to:
Aby [EVM](/developers/docs/evm/) mogła uruchomić Twój kontrakt, musi on być w postaci **kodu bajtowego**. Kompilacja zamienia to:

```solidity
pragma solidity 0.4.24;

contract Greeter {

function greet() public constant returns (string) {
function greet() public view returns (string memory) {
return "Hello";
}

Expand All @@ -33,13 +33,17 @@ contract Greeter {
PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900
```

## Aplikacje webowe {#web-applications}
Są to tak zwane **kody operacyjne**. Kody operacyjne EVM są niskopoziomowymi instrukcjami, które może wykonać Wirtualna Maszyn Ethereum (EVM). Każdy kod operacyjny reprezentuje konkretne działanie, na przykład działania arytmetyczne, działania logiczne, manipulacje danymi, kontrolę przepływu itp.

Kompilator zwróci również **interfejs binarny aplikacji (ABI)**, którego potrzebujesz, aby aplikacja zrozumiała kontrakt i wywołała jego funkcje.
[Więcej o kodach operacyjnych](/developers/docs/evm/opcodes/)

## Aplikacje internetowe {#web-applications}

Kompilator zwróci również **binarny interfejs aplikacji (ABI)**, którego potrzebujesz, aby Twoja aplikacja zrozumiała kontrakt i wywołała jego funkcje.

ABI jest plikiem JSON, który opisuje wdrożony kontrakt i jego funkcje inteligentnego kontraktu. Pomaga to zmniejszyć różnicę pomiędzy web2 a web3

[Biblioteka klienta JavaScript](/developers/docs/apis/javascript/) odczyta **ABI** w celu wywołania inteligentnego kontraktu w interfejsie aplikacji internetowej.
[Biblioteka klienta JavaScript](/developers/docs/apis/javascript/) odczyta **ABI**, aby umożliwić Ci wywołanie Twojego inteligentnego kontraktu w interfejsie Twojej aplikacji internetowej.

Poniżej znajduje się ABI dla kontraktu z tokenem ERC-20. ERC-20 to token, który możesz wymieniać na Ethereum.

Expand Down Expand Up @@ -270,9 +274,9 @@ Poniżej znajduje się ABI dla kontraktu z tokenem ERC-20. ERC-20 to token, któ

## Dalsza lektura {#further-reading}

- [Specyfikacja ABI](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _ Solidity_
- [Specyfikacja ABI](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _ Solidity_

## Powiązane tematy {#related-topics}

- [Biblioteki JavaScript](/developers/docs/apis/javascript/)
- [Maszyna Wirtualna Ethereum](/developers/docs/evm/)
- [Biblioteki klienta JavaScript](/developers/docs/apis/javascript/)
- [Wirtualna Maszyna Ethereum](/developers/docs/evm/)
Original file line number Diff line number Diff line change
@@ -1,19 +1,76 @@
---
title: Kompozycyjność kontraktów inteligentnych
description:
title: "Kompozycyjność kontraktów inteligentnych"
description: "Dowiedz się, w jaki sposób inteligentne kontrakty można łączyć niczym klocki Lego, aby tworzyć złożone aplikacje zdecentralizowane (dapps) poprzez ponowne wykorzystywanie istniejących komponentów."
lang: pl
incomplete: true
---

## Krótkie wprowadzenie {#a-brief-introduction}

Inteligentne kontrakty są publiczne w Ethereum i można je uznać za otwarte API. Nie musisz pisać własnego inteligentnego kontraktu, aby zostać programistą aplikacji dapp, po prostu musisz wiedzieć, jak się nim posługiwać. Na przykład możesz użyć istniejących inteligentnych kontraktów [Uniswap](https://uniswap.exchange/swap), zdecentralizowanej giełdy, aby obsłużyć całą logikę wymiany tokenów w swojej aplikacji – nie nie trzeba zaczynać od zera. [Sprawdź niektóre z ich kontraktów](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts).
Inteligentne kontrakty są publiczne w Ethereum i można je uznać za otwarte API. Nie musisz pisać własnego inteligentnego kontraktu, aby zostać programistą aplikacji dapp, po prostu musisz wiedzieć, jak się nim posługiwać. Na przykład możesz użyć istniejących inteligentnych kontraktów [Uniswap](https://uniswap.exchange/swap), zdecentralizowanej giełdy, aby obsłużyć całą logikę wymiany tokenów w swojej aplikacji – nie musisz zaczynać od zera. Sprawdź niektóre z ich kontraktów [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) i [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts).

## Czym jest łatwość łączenia się w większe struktury? {#what-is-composability}

Łatwość łączenia się w większe struktury to łączenie osobnych komponentów w celu stworzenia nowych systemów i rezultatów. W dziedzinie tworzenia oprogramowania, łatwość łączenia się w większe struktury oznacza, że programista może ponownie użyć istniejących komponentów oprogramowania, aby zbudować nową aplikację. Dobrym sposobem na zrozumienie łatwości łączenia się w większe struktury jest wyobrażenie sobie elementów możliwych do połączenia jako klocków lego. Każdy klocek lego może być połączony z innym, pozwalając na budowanie złożonych struktur poprzez łączenie różnych klocków lego.

W Ethereum każdy inteligentny kontrakt jest jak taki klocek lego — możesz użyć inteligentnego kontraktu z innego projektu, jako klocków do swojego projektu. To oznacza, że nie musisz poświęcać czasu na ponowne wynajdywanie koła i ciągłe rozpoczynanie od nowa.

## Jak działa łatwość łączenia się w większe struktury? {#how-does-composability-work}

Inteligentne kontrakty Ethereum są jak publiczne interfejsy API, więc każdy może wchodzić z nimi w interakcję lub zintegrować je ze swoją dapką, aby rozszerzyć jej funkcjonalność. Łatwość łączenia w większe struktury inteligentnych kontraktów jest oparta na trzech zasadach: modularności, autonomii oraz wykrywalności:

**1. Modularność**: jest to umiejętność poszczególnych komponentów do wykonywania określonych zadań. W Ethereum każdy inteligentny kontrakt ma określone zastosowanie (jak w przykładzie Uniswap).

**2. Autonomia**: Komponowalne komponenty muszą mieć możliwość niezależnego działania. Każdy inteligentny kontrakt Ethereum jest samorealizujący i może działać bez konieczności polegania na innych częściach systemu.

**3. Wykrywalność**: Programiści nie mogą wywoływać zewnętrznych kontraktów ani integrować bibliotek oprogramowania w aplikacjach, jeśli te pierwsze nie są publicznie dostępne. Inteligentne kontrakty są z założenia otwarte; każdy może wywołać inteligentny kontrakt lub rozwidlić bazę kodu.

## Korzyści z kompozycyjności {#benefits-of-composability}

### Krótszy cykl deweloperski {#shorter-development-cycle}

Kompozycyjność zmniejsza ilość pracy, którą programiści muszą wykonać podczas tworzenia [dapek](/apps/#what-are-dapps). [Jak ujął to Naval Ravikant:](https://twitter.com/naval/status/1444366754650656770) "Otwarte oprogramowanie oznacza, że każdy problem musi zostać rozwiązany tylko raz."

Jeśli jest taki inteligentny kontrakt, który rozwiązuje jeden problem, to inni programiści mogą użyć go ponownie, aby nie musieć rozwiązywać tego samego problemu. Tym sposobem programiście mogą wziąć istniejące biblioteki i rozszerzyć je o dodatkowe funkcje, aby tworzyć nowe dapki.

### Większa innowacyjność {#greater-innovation}

Łatwa możliwość łączenia w większe struktury stwarza warunki do innowacji oraz eksperymentowania, ponieważ programiści mogą dowolnie używać, modyfikować, duplikować i integrować kod open-source, aby tworzyć oczekiwane rezultaty. W wyniku tego zespoły programistyczne poświęcają mniej czasu na podstawowe funkcje i mogą przeznaczyć go na eksperymentowanie z nowymi możliwościami.

### Lepsze wrażenia użytkownika {#better-user-experience}

Współpraca pomiędzy komponentami ekosystemu Ethereum poprawia doświadczenie użytkownika. Użytkownicy mają dostęp do większej liczby funkcji, kiedy dapki integrują zewnętrzne inteligentne kontrakty niż w rozdrobnionym ekosystemie, którego aplikacje nie mogą się ze sobą komunikować.

Posłużymy się przykładem z arbitrażu handlowego, aby zilustrować korzyści tej współpracy:

Jeśli token ma wyższą cenę na `exchange A` niż na `exchange B`, możesz wykorzystać różnicę w cenie, aby osiągnąć zysk. Możesz to jednak zrobić tylko wtedy, gdy masz wystarczająco dużo kapitału, aby sfinansować transakcję (tzn. kupić token na `exchange B` i sprzedać go na `exchange A`).

W przypadku, kiedy nie posiadasz wystarczających środków, aby sfinansować tę transakcję, może ci się przydać błyskawiczna pożyczka. [Błyskawiczne pożyczki](/defi/#flash-loans) są wysoce techniczne, ale podstawowa idea polega na tym, że można pożyczyć aktywa (bez zabezpieczenia) i zwrócić je w ramach _jednej_ transakcji.

Wracając do naszego pierwotnego przykładu, trader arbitrażowy może wziąć dużą pożyczkę błyskawiczną, kupić tokeny na `exchange B`, sprzedać je na `exchange A`, spłacić kapitał + odsetki i zatrzymać zysk, a wszystko to w ramach tej samej transakcji. Ta skomplikowana logika wymaga połączenia wywołań wielu kontraktów, co nie byłoby możliwe, gdyby nie istniała współpraca pomiędzy inteligentnymi kontraktami.

## Przykłady kompozycyjności w Ethereum {#composability-in-ethereum}

### Wymiana tokenów {#token-swaps}

Jeśli stworzysz dapkę, która wymaga, aby transakcje były opłacone za pomocą ETH, możesz pozwolić użytkownikom płacić innymi tokenami ERC-20 poprzez zintegrowanie logiki wymiany tokenów. Kod automatycznie skonwertuje token użytkownika do ETH, zanim kontrakt wykona wywołaną funkcję.

### Zarządzanie {#governance}

Tworzenie dedykowanych systemów zarządzania dla [DAO](/dao/) może być drogie i czasochłonne. Zamiast tego możesz użyć zestawu narzędzi open-source do zarządzania, takiego jak [Aragon Client](https://client.aragon.org/), aby uruchomić swoje DAO i szybko utworzyć ramy zarządzania.

### Zarządzanie tożsamością {#identity-management}

Zamiast budować niestandardowy system uwierzytelniania lub opierać się na scentralizowanych dostawcach, można zintegrować narzędzia zdecentralizowanej tożsamości (DID), aby obsługiwać uwierzytelnianie dla użytkowników. Przykładem jest [SpruceID](https://www.spruceid.com/), zestaw narzędzi open-source, który oferuje funkcję "Zaloguj się za pomocą Ethereum", która pozwala użytkownikom uwierzytelniać tożsamość za pomocą portfela Ethereum.

## Powiązane samouczki {#related-tutorials}

- [Kompozycyjność kontraktu: elementy konstrukcyjne inteligentnych kontraktów Ethereum](https://medium.com/decentlabs/contract-composability-the-building-blocks-of-ethereum-smart-contract-development-bdf3219ffeb9/)
- [Szybkie rozpoczęcie tworzenia frontendu aplikacji dapp za pomocą create-eth-app](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _— omówienie korzystania z create-eth-app do tworzenia aplikacji z zastosowaniem popularnych inteligentnych kontraktów._
- [Rozpocznij tworzenie frontendu dapki za pomocą create-eth-app](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– Omówienie, jak używać create-eth-app do tworzenia aplikacji z popularnymi, gotowymi inteligentnymi kontraktami._

## Dalsza lektura {#further-reading}

_Znasz jakieś zasoby społeczności, które Ci pomogły? Wyedytuj tę stronę i dodaj je!_
_Znasz jakieś zasoby społeczności, które Ci pomogły? Edytuj tę stronę i dodaj je!_

- [Kompozycyjność to innowacja](https://a16zcrypto.com/posts/article/how-composability-unlocks-crypto-and-everything-else/)
- [Dlaczego kompozycyjność ma znaczenie dla Web3](https://hackernoon.com/why-composability-matters-for-web3)
- [Czym jest kompozycyjność?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.)
Loading