Используя 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)
});
После поиска и опробования вариантов я обнаружил, что если владелец контракта не совпадает с account[0], то в вызове передачи необходима дополнительная точка данных для проверки в Web3.
Так что вышеописанное работает с этой модификацией.
ContractInstance.transfer(mySecondEthAddress, el('#depositAmount').value, {from: accounts[0], gas:300000})