Ich habe einen Vertrag mit folgender Funktion:
function offerTokenTribute(address[] _tokenContractAddresses, uint256[] _tokenTributes) public {
require(_tokenContractAddresses.length == _tokenTributes.length);
Member storage member = members[msg.sender];
member.approved = false; // should be already, but lets be safe
for (uint8 i = 0; i < _tokenContractAddresses.length; i++) {
ERC20 erc20 = ERC20(_tokenContractAddresses[i]);
erc20.approve(this, _tokenTributes[i]);
member.tokenTributeAddresses.push(_tokenContractAddresses[i]);
member.tokenTributeAmounts.push(_tokenTributes[i]);
}
TokenTributeOffered(msg.sender, _tokenContractAddresses, _tokenTributes);
}
Das Problem ist, dass die erc20.approve
Funktion nicht im Namen des ursprünglichen msg.sender genehmigt wird, sie ändert msg.sender
sich zur Vertragsadresse (ich habe dies durch Überprüfen der Berechtigungen überprüft).
Gibt es eine Möglichkeit, dies von meinem Vertrag aus zu tun, oder ist die einzige Lösung, die Genehmigung außerhalb meines Vertrags aufzurufen (nicht ideal)?
Nein, daran führt kein Weg vorbei.
Es ist eine Sicherheitsfunktion, ein Vertrag kann sich nicht als ein anderes Konto ausgeben.
Davide C
Ismael