web3 вызывает функцию контракта Solidity с дополнительным параметром?
В примере http://truffleframework.com/tutorials/pet-shop есть следующий контракт и функция adopt(uint petId)
имеет только один параметр.
contract Adoption {
address[16] public adopters;
function adopt(uint petId) public returns (uint) {
require(petId >= 0 && petId <= 15);
adopters[petId] = msg.sender;
return petId;
}
function getAdopters() public returns (address[16]) {
return adopters;
}
}
Тем не менее, в коде JavaScript app.js
, handleAdopt
вызовите функцию контракта, используя следующий код.
App.contracts.Adoption.deployed().then(function(instance) {
adoptionInstance = instance;
return adoptionInstance.adopt(petId, {from: account});
})
Функция вызывается с дополнительным объектом {from: account}
, Зачем? И этот параметр отбрасывается в коде солидности?
Кстати, есть неопределенная глобальная переменная web3
? Назначается ли значение расширением MetaMask?
1 ответ
Это transactionObject
который описывает общую информацию обо всех транзакциях вызовов (лимит газа, цена, количество эфира для отправки и т. д.). Отправленный вами код JS использует библиотеку web3. Это не прямой вызов API контракта. Библиотека web3 преобразует его в RPC. transactionObject
приходит после всех параметров контракта. Есть еще один параметр, после которого следует обратный вызов с результатами контрактного вызова (см. Здесь).
Это все варианты transactionobject
описано в документах:
- from: String - Адрес отправляющей учетной записи. Использует свойство web3.eth.defaultAccount, если не указано.
- to: String - (необязательно) Адрес назначения сообщения, оставленный неопределенным для транзакции создания договора.
- value: Number | String | BigNumber - (необязательно) Значение, переданное для транзакции в Wei, а также эндаумент, если это транзакция создания контракта.
- gas: Number | String | BigNumber - (необязательно, по умолчанию: To-Be-Defined) Количество газа, используемого для транзакции (неиспользованный газ возвращается).
- gasPrice: Number | String | BigNumber - (необязательно, по умолчанию: To-Be-Defined). Цена газа для этой транзакции в wei по умолчанию равна средней цене газа в сети.
- data: String - (необязательно) Либо байтовая строка, содержащая связанные данные сообщения, либо, в случае транзакции создания контракта, код инициализации.
- nonce: Number - (необязательно) Целое число от nonce. Это позволяет перезаписывать ваши собственные ожидающие транзакции, которые используют тот же одноразовый номер.