Come effettuare una chiamata delegata alla funzione di approvazione del token ERC20 esterno?

Aug 23 2020

Quello che vorrei fare è qualcosa del genere:

function testCall(uint amount) public virtual returns (bool) {
address tta = address(0xE7B6....);    
    
(bool success, bytes memory result) = tta.delegatecall(abi.encodeWithSignature("approve(address, uint256)", address(this), amount));
return success;
}

Gli sguardi di token come questo (ha la funzione approvare)

Tuttavia, ogni volta che la funzione viene eseguita, viene ripristinata con un errore .

Che cosa sto facendo di sbagliato?

Quello che devo fare è lasciare che l'utente approvi il contratto per fare un transferFromeseguendo testCall()prima la funzione del contratto .

Risposte

1 ShaneFontaine Aug 23 2020 at 04:26

Stai aggiungendo uno spazio nella tua funzione che produce una firma del metodo diversa.

> provider.eth.abi.encodeFunctionSignature('approve(address, uint256)')
0x8b069f2a

provider.eth.abi.encodeFunctionSignature('approve(address,uint256)')
0x095ea7b3

Se rimuovi lo spazio, dovrebbe funzionare!