Как реализовать передачу токенов ERC20 с помощью кнопки, не будучи владельцем контракта

Используя web3 и установив метамаску в качестве провайдера, я хочу иметь возможность создать функцию депозита, которая берет текущий баланс метамаски пользователя для определенного контракта ERC20 и позволяет отправлять его на другой кошелек. В этом примере ethjs используется в качестве удобной библиотеки.

Как функция передачи узнает, что мы хотим, чтобы учетная запись метамаски пользователя была отправителем при нажатии нашей кнопки. Я установил адрес получателя как Ownerwallet, так как он известен заранее. Позволяет ли Web3 автоматически передавать функции из нашего контракта информацию об отправителе (вызывающем функцию?).

var Web3 = require('web3');
var web3;

//metamask 
  if (typeof window.web3 !== 'undefined' && typeof window.web3.currentProvider !== 'undefined') {
    var eth = new Eth(web3.currentProvider);
  } else {}

var TokenContractAddress = "0x...";
var Token = eth.contract(TokenABI, { from: accounts[0], gas: 3000000 });
var ContractInstance = Token.at(TokenContractAddress);

var OwnerWallet = "0x1...";  

el('#depositTokens').addEventListener('click', function(){
   ContractInstance.transfer(OwnerWallet, el('#depositAmount').value)
    });

Ответы (1)

После поиска и опробования вариантов я обнаружил, что если владелец контракта не совпадает с account[0], то в вызове передачи необходима дополнительная точка данных для проверки в Web3.

Так что вышеописанное работает с этой модификацией.

ContractInstance.transfer(mySecondEthAddress, el('#depositAmount').value, {from: accounts[0], gas:300000})