fromAccount и web3.js

Это моя функция в солидности

function transferForm(address _from, address _to, uint256 _value) public returns (bool success) {
}

Теперь я вызываю ту же функцию в тестовом файле для тестирования моего смарт-контракта.

tokenInstance.transferForm(spendingAccount,10,{from : fromAccount})

Я инициализировался из учетной записи в учетные записи [3]

Почему мы отправляем данные с помощью{from : fromAccount}

Почему мы не можем отправлять такие данные, как

tokenInstance.transferForm(from,spendingAccount,10,)

Есть ли разница?

Как функция знает, когда мы меняем положение входных параметров функции, которые мы отправляем

помогите пожалуйста понять логику

transferFormнаверное должно бытьtransferFrom

Ответы (1)

Даже несмотря на то, что у них одинаковые запутанные имена, они относятся к разным вещам.

Формат { key: value }представляет собой формат web3 для предоставления дополнительных метаданных для функции. Они не передаются в качестве параметров функции, а обрабатываются внутри. Например, с помощью ключа fromможно определить, с какого из доступных счетов отправляется транзакция. Это значение не передается непосредственно в функцию, но транзакция создается из этой учетной записи.

Функция transferFromожидает первый аргумент типа address, и он должен быть предоставлен. Сигнатура функции не знает, с какой учетной записи происходит фактическая транзакция — это можно проверить позже в функции с помощью msg.sender. Поэтому, если вы предоставите { from: fromAccount }для вызова функции, fromAccountон станет msg.senderвнутри функции.

РЕДАКТИРОВАТЬ

Кроме того, функция transferFromожидает 3 параметра, но в первом примере вы передаете ей только два параметра. Функция не может каким-либо образом «пересопоставить» параметры из метаданных, поэтому вы получите ошибку, так как функции с вашей подписью (2 параметра) не существует.

Спасибо. Но это немного сбивает с толку, функция ожидает три параметра, но мы даем только два параметра напрямую, тогда как третий параметр, который мы передаем в метаданных, должен вызывать ошибку, который используется внутренне правильно. поправьте меня, если я ошибаюсь
Извините, я тоже пропустил эту проблему. Теперь отредактировал мой ответ.
Спасибо Еще одна вещь, но то, как включен web3.js, я никогда не вводил, но в браузере мы используем метмаску для ввода, но как мы можем использовать вызовы web3.js здесь