RPC URL -адреса: мост Дапп -Блоккхайн

RPC URL -адреса: мост Дапп -Блоккхайн

24 июня 2025 г.

Когда DAPP (децентрализованное приложение) разговаривает с блокчейном, подобным Ethereum, он использует интерфейс JSON-RPC. По сути, URL-адрес RPC является веб-адресом конечной точки JSON-RPC узла. Это URL-адрес сервера (обычно конечная точка HTTPS), который ваш DAPP вызывает для извлечения данных в цепочке или протолкнуть транзакции.

Например, Infura и GetBlock обычно используются узлы, которые дают вам URLhttps://mainnet.infura.io/v3/YOUR-API-KEYили<https://go.getblock.io/<ACCESS-TOKEN>/>Полем На заднем плане эти URL -адреса указывают на полный узел Ethereum, который действительно обращается к блокчейну. То есть библиотека вашего DAPP Web3 (Ethers.js, Web3.JS и т. Д.) делает JSON-RPC «вызовы удаленной процедуры» через этот URL-адрес блокчейн. URL -адрес RPC является буквально сетевым адресом для вызова конечной точки RPC в среде Web3.

Поскольку это сетевой запрос, вы можете (и должны) выбрать достойного поставщика RPC. Общественные конечные точки, такие как GetBlock или The CloudFlare Ethereum Gateway, позволяют вам вызывать цепочки Ethereum или EVM без необходимости вашего собственного узла. Например, QuickStart от Infura показывает сгибание кhttps://mainnet.infura.io/v3/<YOUR-API-KEY>Для Ethereum Mainnet. Использование публичных RPC (или наличие собственного узла) гарантирует, что ваш DAPP всегда сможет читать последние блоки и отправлять транзакции.

Идентификаторы цепей: поиск каждой сети

Идентификатор цепи-это уникальный номер, который идентифицирует EVM-совместимую цепь. Каждая сеть (Ethereum Mainnet, Polygon, Arbitrum и т. Д.) Имеет конкретный идентификатор цепи, чтобы кошельки и транзакции знали, какую цепочку они используют. На практике идентификатор цепи выпекается в подписи транзакций (после EIP-155 Ethereum). Это останавливает транзакцию от одной цепочки от воспроизведения на другой, несмотря на то, что адреса, которые выглядят в одном и том же формате на разных цепях. То есть, добавив идентификатор цепи в подписанную транзакцию, атаки воспроизведения через цепи предотвращаются.

В конфигурации сети в Metamask вы поставляете идентификатор цепи и URL -адрес RPC вручную. Например, окно «Добавить сеть» от Metamask имеет сетевой URL (конечная точка RPC) и идентификатор цепочки (числовое идентификатор для использования при подписании транзакций в указанной сети). Эти два поля сообщают Metamask, куда отправлять ваши вызовы, а какую цепочку сигнализируют в подписях. Если они не соответствуют фактической сети, вы получите ошибки или даже подписывают транзакции в неправильной цепочке.

Идентификаторы цепей для крупных сетей включают:

  • Ethereum Mainnet - ID цепочки 1
  • Полигон (POS) - ID цепочки 137
  • Arbitrum One - ID цепочки 42161
  • Оптимизм Mainnet - ID цепочки 10
  • BNB Smart Chain - Id Chain 56
  • Avalanche C-Chain-ID Chain 43114

Все эти цифровые идентификаторы используются внутри узлов и кошельков. Например, страница Alchemy's Chain Connect показывает «ID 1 цепочки» для Ethereum и «ID 10 цепочки 10» для оптимизма с их URL -адресами RPC. Когда вы переключаете или настраиваете сети, этот идентификатор - то, как все знают, о каком блокчейне вы говорите.

Почему они имеют значение: правильные сети, безопасность и поддержка с несколькими цепками

Важно, чтобы URL -адрес RPC и идентификатор цепи правильно устанавливались в любом DAPP. Наличие неправильного RPC или сетевого идентификатора может заставить ваше приложение для чтения неверных данных или даже попытки отправить транзакции на неправильную блокчейн. В качестве иллюстрации, указывая на многоугольный RPC, но с идентификатором цепи Ethereum (или наоборот) заставит Metamask отображать предупреждение «Неправильный идентификатор цепи». Практически говоря, URL -адрес RPC и ID цепочки гарантируют, что ваш DAPP разговаривает с правильной сетью.

Кроме того, идентификатор цепи на транзакциях (в соответствии с EIP-155) предотвращает принятие подписанной транзакции на одной цепи на другую. Это защита от воспроизведения, как это делает Ethereum. Без идентификатора цепочки передача токена Ethereum может быть воспроизводится между, скажем, Ethereum Classic или боковой цепью с теми же форматами сетевых адресов. С идентификатором цепи каждая подпись связана с одной сетью. «Важно отслеживать идентификатор сетевой цепочки пользователя, потому что все запросы RPC отправляются в в настоящее время подключенную сеть». На практике DAPPS всегда должен получатьchainId(например, черезethereum.request({ method: 'eth_chainId' })), чтобы они могли определить, в какой сети они находятся.

Для DAPPS на нескольких цепях эти данные еще более важны. Такое приложение, как UNISWAP, работающий как на Ethereum, так и на Polygon, должен будет изменять URL -адреса RPC и подписать правильный идентификатор цепочки всякий раз, когда пользователь меняет сети. Metamask испускает аchainChangedСобытие, когда пользователь меняет сети, и DAPPS обычно слушает это, чтобы перезагрузить или воссоздать соединения. Одним словом, контроль над конечными точками RPC и идентификаторами цепей является основой безопасного подключения вашего переднего конца к любому блокчейну EVM.

Как Metamask использует URL -адреса RPC и идентификаторы цепей

Metamask (и аналогичный) MUXS URL -адрес RPC и идентификатор цепи внутренне, чтобы установить сеть. Когда DAPP звонитwindow.ethereum.request(…), Metamask инициирует запрос JSON-RPC на URL SET RPC. Он использует идентификатор цепочки во время подписания сообщений и транзакций. Пользовательский интерфейс Metamask действительно показывает эти поля при добавлении сети:

Как показывает этот скриншот, Metamask будет отображатьСетевой URLиЦепочкаполя.Сетевой URLURL, который Metamask будет использовать для доступа к сети, иЦепочкаэто идентификатор цепи, который Metamask будет использовать для подписи транзакций для сети. Другими словами, как только вы одобряете этот диалог, Metamask точно знает, с каким узлом можно поговорить (через URL RPC) и с какой цепью сигнализировать в сигнатурах транзакции (через идентификатор цепи).

Программно, DAPPS может запросить идентификатор цепи и обрабатывать изменения сети. Руководства по разработчикам Metamask рекомендуют использоватьeth_chainIdМетод RPC и прослушиваниеchainChangedСобытие для обнаружения, когда пользователь переключает сети. Например, можно сделать:

const chainId = await ethereum.request({ method: 'eth_chainId' });
ethereum.on('chainChanged', (newChainId) => { window.location.reload(); });

Это гарантирует, что ваш код всегда знает текущий идентификатор цепочки и воссоединяется, если он меняется. Вся эта логика основана на том, чтобы правая конечная точка RPC и идентификатор цепи, настроенные в Metamask.

Общие конечные точки RPC и идентификаторы цепей

Вот некоторые типичные сети, их идентификаторы цепей и пример публичных URL -адресов RPC:

  • Ethereum mainnet- идентификатор цепи1Полем Общественные RPC: infura athttps://mainnet.infura.io/v3/YOUR-PROJECT-IDили получить блокhttps://go.getblock.io/<your_access_token>Полем (Вы должны заменитьYOUR-PROJECT-ID/YOUR-ACESS-TOKENс вашими полномочиями.)
  • Полигон Пос- идентификатор цепи137Полем Примеры RPC: например,https://polygon-mainnet.infura.io/v3/YOUR-PROJECT-IDИли получить блокhttps://go.getblock.io/<your_access_token>
  • Арбит один- идентификатор цепи42161Полем Пример RPC: алхимияhttps://arb-mainnet.g.alchemy.com/v2/YOUR-API-KEY(или публичные конечные точки арбитра).
  • Оптимизм Mainnet- идентификатор цепи10Полем Пример RPC: getBlockhttps://go.getblock.io/<your_access_token>, или официальный оптимизмhttps://mainnet.optimism.ioПолем
  • BNB Smart Chain - Id Chain Id56Полем (RPChttps://bsc-dataseed.binance.org/)
  • Avalanche C-Chain-Id Chain Id43114(RPChttps://api.avax.network/ext/bc/C/rpc)

Каждая из этих сетей может быть добавлена ​​в кошельки, такие как Metamask, поставляя URL -адрес RPC и идентификатор цепи. Веб -сайты любятЦепный списокСоберите проверенные списки этих деталей для многих сетей - именно та информацию Metamask предлагает вам проверить, не соответствует ли что -то «не совсем».

Советы по пользовательским сетям и местной разработке

Вот что я рекомендую:

  • Проверьте сетевые данные. Преподавать URL -адрес RPC и идентификатор цепочки против официальной документации или списков сообщества (например, цепного списка). Metamask фактически способствует проверке идентификатора цепи, который искал в цепном списке (chailid.network) убедиться, что это правильно.

  • Десятичный V Hex. Идентификаторы цепей могут быть указаны в десятичной (137) или шестнадцатеричной (0x89) форме. Metamask предпочитает принимать оба, но использует оба последовательно. Например, идентификатор цепочки по умолчанию Hardhat составляет 1337 десятичного цвета (0x539 Hex). Если вы измените одно, не изменяя другое, Metamask будет жаловаться на несоответствие.

  • Настройте локальные узлы правильно. Для локальных цепочек DEV (Ganache, Hardhat и т. Д.) Убедитесь, что ваш идентификатор цепочки узлов идентичен тому, что у вас есть Metamask для использования. В качестве примера, если вы используете Hardhat Node по умолчанию, у вас будет установлен Metamaskhttp://127.0.0.1:8545С идентификатором цепи 1337. Пользователи Ganache обычно видят идентификаторы цепочки 1337 или 5777; Вы можете запустить Ganache с помощью пользовательского--chainIdФлаг, чтобы соответствовать хардхату, если это необходимо. Другие идентификаторы цепи приводят к хардхатским сбоям.

  • Переключение сетей вручную в коде. Использоватьprovider.getNetwork()илиethereum.request({method: 'eth_chainId'})Чтобы получить текущий идентификатор цепи во время выполнения. Слушайте Metamask'schainChangedсобытие и перезагрузить или перенастроить приложение при его запусках. Это делает ваш DAPP всегда осознавать, с какой сетью он общается после того, как пользователь изменил цепочки.

  • Будьте осторожны с повторными атаками при тестировании. При тестировании на нескольких цепях (например, локальная вилка Mainnet и Testnet) всегда подписывайте транзакции с идентификатором правой цепи. Идентификатор цепочки в EIP-155-это то, что делает транзакцию действительной только в своей цепочке назначения, поэтому выбор неправильного, который будет аннулировать вашу подпись.

Осторожно установив URL -адрес RPC и идентификатор цепи, вы подключаете свой DAPP к правой блокчейне. Это позволяет избежать мелкозернистых ошибок (например, отправка токенов в неправильную сеть или оставляя себя открытыми для повторения атак) и обеспечивает бесшовную многоцелевую совместимость. Короче говоря, подумайте об URL RPC как «какой узел» и идентификатор цепи как «какой мир»-оба являются критическими частями информации об соединении для любого совместимого с Эфириумом DAPP.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE