Это моя функция в солидности
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,)
Есть ли разница?
Как функция знает, когда мы меняем положение входных параметров функции, которые мы отправляем
помогите пожалуйста понять логику
Даже несмотря на то, что у них одинаковые запутанные имена, они относятся к разным вещам.
Формат { key: value }
представляет собой формат web3 для предоставления дополнительных метаданных для функции. Они не передаются в качестве параметров функции, а обрабатываются внутри. Например, с помощью ключа from
можно определить, с какого из доступных счетов отправляется транзакция. Это значение не передается непосредственно в функцию, но транзакция создается из этой учетной записи.
Функция transferFrom
ожидает первый аргумент типа address
, и он должен быть предоставлен. Сигнатура функции не знает, с какой учетной записи происходит фактическая транзакция — это можно проверить позже в функции с помощью msg.sender
. Поэтому, если вы предоставите { from: fromAccount }
для вызова функции, fromAccount
он станет msg.sender
внутри функции.
РЕДАКТИРОВАТЬ
Кроме того, функция transferFrom
ожидает 3 параметра, но в первом примере вы передаете ей только два параметра. Функция не может каким-либо образом «пересопоставить» параметры из метаданных, поэтому вы получите ошибку, так как функции с вашей подписью (2 параметра) не существует.
эт
transferForm
наверное должно бытьtransferFrom