Имя метода передачи эфиров с параметрами вместо шестнадцатеричных данных

Я использую ethers для взаимодействия с контрактами на Ethereum. Вот как выглядит мой метод:

const tx = await signer
      .sendTransaction({
        to: contractAddress,
        value: ethers.utils.parseEther(price),
        data: hex,
        gasPrice: ethers.utils.parseUnits(gas, 9),
      })

И это работает нормально. Но каждый раз мне приходится искать Etherscan, чтобы найти hex транзакции и передать его параметру data. Можно ли просто передать имя метода из контракта и параметры вместо того, чтобы передавать это значение hex?

Может быть, в ethers есть какой-нибудь метод для кодирования этого метода с параметрами в шестнадцатеричное значение?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вам нужно, так это контракт ABI. Обычно он записывается как объект json, который вы можете импортировать в свой скрипт js, или он может быть написан так (удобочитаемый-ABI):

const contractABI = [
  "function foo(uint256 bar) external",
  // other functions or events ...
]

ABI содержит все (или некоторые) методы контракта и способы их кодирования/декодирования.

С помощью ABI вы можете создать объект контракта следующим образом:

const contract = new ethers.Contract(contractAddress, contractABI, provider);

который можно использовать для отправки транзакций следующим образом:

const my_bar = 123  // example
const tx = await contract.connect(signer).foo(my_bar, {
  value: ethers.utils.parseEther(price),
  gasPrice: ethers.utils.parseUnits(gas, 9),
})

Как получить контракт ABI? Как я могу импортировать его с помощью ethers?

Webby 09.05.2022 14:45

Вы можете импортировать его как любой объект в javascript. Если контракт, с которым вы хотите взаимодействовать, проверен на etherscan, вы найдете ABI под исходным кодом на той же странице.

RiccardoS 09.05.2022 17:01

я должен использовать Etherscan для этого? Я уже использую API-интерфейс Infura, теперь мне нужно будет использовать ключ API Etherscan, чтобы получить ABI?

Webby 11.05.2022 15:19

Его проще взять с сайта. Пример UniswapV2Router etherscan.io/адрес/…, вы нажимаете «Экспорт ABI»> «Формат JSON» и вставляете в файл

RiccardoS 11.05.2022 23:26

Мне нужно это в коде, а также мне нужно, чтобы это было просто и динамично, я не могу просто скопировать и вставить. Есть ли другой способ импортировать ABI или только через API?

Webby 13.05.2022 13:55

Полученный вами ABI можно использовать для всех контрактов с одним и тем же интерфейсом. Если вы взаимодействуете с сотнями различных интерфейсов контрактов, то использование etherscan API будет самым быстрым.

RiccardoS 13.05.2022 22:59

хорошо, я думал, что есть другие способы сделать это без каких-либо API-ключей и т. д., но я вижу, что должен использовать его, хорошо, спасибо

Webby 14.05.2022 13:18

Другие вопросы по теме