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. Это позволяет перезаписывать ваши собственные ожидающие транзакции, которые используют тот же одноразовый номер.
Другие вопросы по тегам