Solidity. Смарт контракты и аудит
2.63K subscribers
246 photos
7 videos
18 files
555 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Функции ethers

Короче, нашел еще одну строку в коде, которая заставила задуматься. Теперь я иногда буду писать посты о функциях ethers, чтобы мы вместе могли их изучать и запоминать. Так или иначе они могут пригодиться нам в будущем.

Итак, вот эта строка:

const priceFeed = new ethers.Contract(addr, abi, provider)

Provider берется, как раз из функции прошлого поста: new ethers.providers.JsonRpcProvider(), поэтому рассмотрим их обе.

Информация взята и переведена из документации Ethers.

ethers.providers.JsonRpcProvider( [ urlOrConnectionInfo [ , networkish ] ] ) - в скобках указывается url (например, ссылка на узел) и сеть, при необходимости. Если ссылка не указана, то запрос будет отправлен на узел, используя eth_chainId с отсылкой к eth_networkId. По умолчанию используется "http://localhost:8545".

Также с JsonRpcProvider можно использовать ".connection" - для получения информации о провайдере, ".getSigner" - для получения пользователя, который управляет узлом, а если его нет, то вернется нулевой адрес, ".getUncheckedSigner" - для получения хеша транзакции, не дожидаясь дополнительной информации, ".listAccounts" - для получения списка адресов, которыми управляет провайдер, ".send" - для отправки сообщений на узел.

ethers.Contract( address , abi , signerOrProvider ) - подключение к конкретному контракту в сети Ethereum, где "adress" - подключаемый адрес контракта, "abi" - контракт с двоичным интерфейсом приложения, который описывает имеющиеся у него методы и события, "signerOrProvider" - аккаунт, от которого идет подключение, или провайдер (узел).

С ethers.Contract можно использовать ".attach(addressOrName)" - присоединяет новый адрес: это может быть полезно, когда есть несколько похожих копий контракта и вы хотите работать с каждым; ".connect(providerOrSigner)" - подключение аккаунта или узла, от которого будет выполнятся транзакция.

Так же с contract работают такие свойства, как: ".address" - возвращает адрес контракта, ".resolvedAddress" - возвращает промис контракта, к которому идет запрос: если address был указан в конструкторе. ".deployTransaction" - если объект контракта был результатом действия ContractFactory, то свойство покажет транзакцию, которая сделала деплой. ".signer" - вернет аккаунт, который был указан в конструкторе контракта.

Чуть больше прочитать про обе функции можно тут и тут.

#ethers #contract #JsonRpcProvider #provider
👍1
Повторение - мать учения

Очень часто в контрактах используются контракты от openzeppelin. Однако мы привыкли просто импортировать их, особо не задумываясь, какие функции и как они реализуют. Предлагаю сегодня, в свободное время, еще раз ка;дому просмотреть их контракты и вспомнить, как они работают.

В подборку я включил контракты, которые встречал в задачах и аудитах.  Сохраните себе или сделайте репост, чтобы не потерять.


Контракты ERC20

ERC20

IERC20

SafeERC20

ERC20Pausable

ERC20Burnable

ERC20Permit

ERC20Snapshot

IERC20Metadata

TokenTimelock


Контракты ERC721

ERC721

IERC721

IERC721Metadata

IERC721Receiver

ERC721Burnable

ERC721Enumerable

ERC721Pausable

ERC721Votes


Контракты ERC777

ERC777

IERC777

IERC777Recipient

IERC777Sender


Контракты ERC1155

ERC1155

IERC1155

IERC1155Receiver

ERC1155Burnable

ERC1155Pausable

IERC1155MetadataURI

ERC1155Receiver


Контракты контроля доступа

AccessControl

Ownable

Governor

Pausable

ReentrancyGuard


Прокси контракты

Proxy

BeaconProxy

UpgradeableBeacon

ProxyAdmin - transparent

TransparentUpgradeableProxy

Initializable

UUPSUpgradeable


Библиотеки

Address

Context

Counters

Create2

Strings

ECDSA

SafeMath

Этот пост просто, как напоминалка с быстрым доступом к контрактам. Не нужно искать в гугле или GitHub, кликните тут по ссылке и изучайте.

Советую прочитывать пару контрактов в день для повторения.

#openzeppelin #contract #lib
👍5