— Как это работает?
— Как я могу ее использовать?
— Работает автономно для поддержки кошельков и другого программного обеспечения
— Трассировка стека Solidity
— Автоматические сообщения об ошибках
— Форкинг сети
— Режимы майнинга
— Ведение журнала
— учебники по hardhat , hardhat 教程
— Контакт 联系方式
- — Как он работает?
- — Как я могу ее использовать?
- — Запуск в автономном режиме для поддержки кошельков и другого программного обеспечения
- — Трассировка стека Solidity
- — Автоматические сообщения об ошибках
- — Форкинг основной сети
- — Режимы майнинга
- — Ведение журналов
- — hardhat Учебники , hardhat 教程
- — Контакт 联系方式
— Как он работает?
Он запускается как внутренний или автономный демон, обслуживая запросы JSON-RPC и WebSocket.
По умолчанию он добывает блок с каждой транзакцией, которую получает, по порядку и без задержек.
Его поддерживает реализация EVM @ethereumjs/vm
, та же, что используется в ganache, Remix и Ethereum Studio.
— Как я могу ее использовать?
По умолчанию, если вы используете Hardhat, то вы уже используете Hardhat Network.
Когда Hardhat выполняет ваши тесты, сценарии или задачи, автоматически запускается узел Hardhat Network в процессе, и все плагины Hardhat (ethers.js, web3.js, Waffle, Truffle и т.д.) будут подключаться непосредственно к провайдеру этого узла.
Нет необходимости вносить какие-либо изменения в ваши тесты или скрипты.
Сеть Hardhat Network — это просто еще одна сеть. Если вы хотите быть явным, вы можете выполнить, например, npx hardhat run --network hardhat scripts/my-script.js
.
— Запуск в автономном режиме для поддержки кошельков и другого программного обеспечения
В качестве альтернативы, сеть Hardhat Network может работать в автономном режиме, чтобы к ней могли подключаться внешние клиенты. Это может быть MetaMask, ваш Dapp front-end или скрипт. Чтобы запустить Hardhat Network таким образом, выполните следующие действия:
$ npx hardhat node
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/
Accounts
========
Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
Account #1: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH)
Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
...
Это запустит Hardhat Network и откроет ее как JSON-RPC и WebSocket сервер.
Затем просто подключите свой кошелек или приложение к http://127.0.0.1:8545
.
Если вы хотите подключить Hardhat к этому узлу, вам просто нужно запустить его, используя --network localhost
.
— Трассировка стека Solidity
Сеть Hardhat Network имеет первоклассную поддержку Solidity. Она всегда знает, какие смарт-контракты выполняются, что именно они делают и почему они терпят неудачу.
Если транзакция или вызов завершились неудачно, Hardhat Network выдаст исключение. Это исключение будет иметь комбинированный стек-трейс JavaScript и Solidity: стек-трейс, который начинается в JavaScript/TypeScript до вашего вызова контракта и продолжается в полном стеке вызовов Solidity.
Это пример исключения Hardhat Network с использованием TruffleContract
:
Error: Transaction reverted: function selector was not recognized and there's no fallback function
at ERC721Mock.<unrecognized-selector> (contracts/mocks/ERC721Mock.sol:9)
at ERC721Mock._checkOnERC721Received (contracts/token/ERC721/ERC721.sol:334)
at ERC721Mock._safeTransferFrom (contracts/token/ERC721/ERC721.sol:196)
at ERC721Mock.safeTransferFrom (contracts/token/ERC721/ERC721.sol:179)
at ERC721Mock.safeTransferFrom (contracts/token/ERC721/ERC721.sol:162)
at TruffleContract.safeTransferFrom (node_modules/@nomiclabs/truffle-contract/lib/execute.js:157:24)
at Context.<anonymous> (test/token/ERC721/ERC721.behavior.js:321:26)
Последние две строки соответствуют тестовому коду JavaScript, который выполнил неудачную транзакцию. Остальное — это трассировка стека Solidity. Таким образом, вы будете точно знать, почему ваши тесты не проходят.
— Автоматические сообщения об ошибках
Hardhat Network всегда знает, почему ваша транзакция или вызов не прошли, и использует эту информацию, чтобы облегчить отладку ваших контрактов.
Если транзакция завершилась неудачно без причины, Hardhat Network создаст четкое сообщение об ошибке в следующих случаях:
-
Вызов неоплачиваемой функции с помощью ETH
-
Отправка ETH на контракт без оплачиваемой функции возврата или получения
-
Вызов несуществующей функции при отсутствии функции обратного вызова
-
Вызов функции с неправильными параметрами
-
Вызов внешней функции, которая не возвращает нужное количество данных
-
Вызов внешней функции на неконтрактном счете
-
Невозможность выполнить внешний вызов из-за его параметров (например, попытка отправить слишком много ETH)
-
Вызов библиотеки без
DELEGATECALL
-
Неправильный вызов предварительно скомпилированного контракта
-
Попытка развернуть контракт, превышающий ограничение на размер байткода, установленное EIP-170
— Форкинг основной сети
Hardhat Network имеет возможность копировать состояние блокчейна mainnet в вашу локальную среду, включая все балансы и развернутые контракты. Это известно как «форк mainnet».
В локальной среде, форкнутой из mainnet, вы можете выполнять транзакции для вызова развернутых в mainnet контрактов или взаимодействовать с сетью любым другим способом, который вы использовали бы в mainnet. Кроме того, вы можете делать все, что поддерживается не форкнутой Hardhat Network: просматривать журналы консоли, получать трассировку стека или использовать учетные записи по умолчанию для развертывания новых контрактов.
В целом, Hardhat Network можно использовать для форка любой сети, а не только mainnet. Более того, Hardhat Network можно использовать для форка любого EVM-совместимого блокчейна, а не только Ethereum.
Есть и другие вещи, которые можно делать с форком Hardhat Network. Ознакомьтесь с нашим руководством, чтобы узнать больше.
— Режимы майнинга
Hardhat Network может быть настроена на автоматический майнинг блоков, сразу после получения каждой транзакции, или на интервальный майнинг, при котором новый блок майнится периодически, включая как можно больше отложенных транзакций.
Вы можете использовать один из этих режимов, оба или ни один из них. По умолчанию включен только автоматический режим.
Если ни один из режимов майнинга не включен, новые блоки добываться не будут, но вы можете вручную добывать новые блоки, используя метод evm_mine
RPC. При этом будет сгенерирован новый блок, который будет включать как можно больше отложенных транзакций.
Более подробную информацию о режимах майнинга и поведении mempool смотрите в разделе Режимы майнинга.
— Ведение журналов
Hardhat Network использует свою инфраструктуру трассировки, чтобы предложить богатый логгинг, который поможет вам в разработке и отладке смарт-контрактов.
Например, успешная транзакция и неудачный вызов будут выглядеть следующим образом:
eth_sendTransaction
Contract deployment: Greeter
Contract address: 0x8858eeb3dfffa017d4bce9801d340d36cf895ccf
Transaction: 0x7ea2754e53f09508d42bd3074046f90595bedd61fcdf75a4764453454733add0
From: 0xc783df8a850f42e7f7e57013759c285caa701eb6
Value: 0 ETH
Gas used: 568851 of 2844255
Block: #2 - Hash: 0x4847b316b12170c576999183da927c2f2056aa7d8f49f6e87430e6654a56dab0
console.log:
Deploying a Greeter with greeting: Hello, world!
eth_call
Contract call: Greeter#greet
From: 0xc783df8a850f42e7f7e57013759c285caa701eb6
Error: VM Exception while processing transaction: revert Not feeling like it
at Greeter.greet (contracts/Greeter.sol:14)
at process._tickCallback (internal/process/next_tick.js:68:7)
Это логирование включено по умолчанию при использовании узла Hardhat Network (т.е. npx hardhat node
), но отключено при использовании встроенного провайдера Hardhat Network. Смотрите конфигурацию сети Hardhat Network, чтобы узнать больше о том, как управлять ее протоколированием.
— hardhat Учебники , hardhat 教程
CN 中文 Github hardhat 教程 : github.com/565ee/hardhat_CN
CN 中文 CSDN hardhat 教程 : blog.csdn.net/wx468116118
EN 英文 Github hardhat Tutorials : github.com/565ee/hardhat_EN
— Контакт 联系方式
Домашняя страница : 565.ee
GitHub : github.com/565ee
Электронная почта : 565.eee@gmail.com
Facebook : facebook.com/565.ee
Twitter : twitter.com/565_eee
Telegram : t.me/ee_565