¿Cómo implemento transferencias de tokens ERC20 con un botón sin ser el propietario del contrato?

Usando web3 y configurando metamask como el proveedor, quiero poder crear una función de depósito que tome el saldo actual de metamask de un usuario para un contrato ERC20 definido y les permita enviarlo a otra billetera. Este ejemplo usa ethjs como una biblioteca de conveniencia.

¿Cómo sabe la función de transferencia que queremos que la cuenta metamask del usuario sea el remitente cuando se hace clic en nuestro botón? Establecí la dirección del destinatario como Ownerwallet ya que eso se conoce con anticipación. ¿Web3 permite automáticamente que la función de transferencia de nuestro contrato sepa quién es el remitente (¿es la persona que llama a la función?).

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)
    });

Respuestas (1)

Después de buscar y probar variaciones, descubrí que si el propietario del contrato no es el mismo que las cuentas [0], entonces se necesita un punto de datos adicional en la llamada de transferencia para validar en Web3

Así que lo anterior funciona con esta modificación.

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