Wie implementiere ich ERC20-Token-Transfers mit einer Schaltfläche, während ich nicht Vertragseigentümer bin?

Mit web3 und dem Festlegen von Metamask als Anbieter möchte ich in der Lage sein, eine Einzahlungsfunktion zu erstellen, die das aktuelle Metamask-Guthaben eines Benutzers für einen definierten ERC20-Vertrag verwendet und es ihm ermöglicht, dieses an eine andere Brieftasche zu senden. Dieses Beispiel verwendet ethjs als praktische Bibliothek.

Woher weiß die Übertragungsfunktion, dass das Metamask-Konto des Benutzers der Absender sein soll, wenn auf unsere Schaltfläche geklickt wird? Ich habe die Empfängeradresse als Ownerwallet festgelegt, da dies im Voraus bekannt ist. Lässt Web3 automatisch zu, dass die Übertragungsfunktion aus unserem Vertrag weiß, wer der Absender ist (Funktionsaufrufer?).

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

Antworten (1)

Nach dem Suchen und Ausprobieren von Variationen stellte ich fest, dass, wenn der Vertragsinhaber nicht mit accounts[0] identisch ist, ein zusätzlicher Datenpunkt im Übertragungsaufruf erforderlich ist, um in Web3 zu validieren

Das obige funktioniert also mit dieser Modifikation.

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