MetaMask + Truffle Ошибка неверного адреса

Я настраиваю dApp (трюфельный фреймворк) с договором условного депонирования, который удерживает деньги от покупателя продукта до того, как он будет передан продавцу. Когда пользователь нажимает «заказать», я могу выполнить eth.sendTransaction от покупателя к контракту. Я хочу, чтобы платеж был выпущен, когда пользователь нажимает «полученный товар», и я не могу вызвать функцию, которая освобождает платеж продавцу от web3js. Я получаю эту ошибку:

Error: invalid address
    at inputAddressFormatter

Это потому, что MetaMask не позволяет контракту (поскольку он не импортирован как учетная запись) выполнять передачу? Если да, то что мне следует изменить в моем контракте?

Вот мой код контракта:

  function EscrowPayment(address _seller){
    // constructor
    buyer = msg.sender;
    seller = _seller;
  }

  function getSeller() constant returns(address) {
    return seller;
  }

  function () payable{

  }

  function payoutToSeller() payable {
      seller.transfer(this.balance);
  }

В качестве примечания, я могу вызвать payoutToSeller() через консоль трюфеля, и это работает.

Ответы (1)

Эта ошибка обычно означает, что вы указали отправителю неверный адрес. Это может произойти, потому что:

  • Пользователь не разблокировал ни одну учетную запись для отправки (пустой массив учетных записей)
  • Вы не используете внедренного провайдера web3 для запроса текущих учетных записей и, следовательно, фактически не просматриваете учетные записи MetaMask.

Вы можете увидеть несколько примеров правильного определения учетных записей в этом руководстве: https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#partly_sunny-web3---ethereum-browser-environment-check

Спасибо за информацию! Итак, что я пытаюсь сделать, это получить контракт, чтобы отправить его баланс продавцу (который находится в контракте). Я не уверен, как импортировать контракт в качестве учетной записи в метамаску, или если это вообще приемлемо. Итак, если я не импортирую, значит ли это, что я не могу выполнить это действие через web3?
Это совсем другой вопрос, и он касается некоторых основ взаимодействия с контрактами. Я рекомендую пройти полное руководство, подобное этому: karl.tech/learning-solidity-part-1-deploy-a-contract .