Problema con la función de aprobación del contrato de token ERC20.
Así que, cada vez que intento aprobar mi contrato inteligente utilizando la función de aprobación del contrato del token ERC20, el propietario y el destinatario se establecen como el mismo.
function getValues(address _token) external {
MyToken token = MyToken(0xd9145CCE52D386f254917e481eB44e9943F39138);
token.approve(address(this),10);
}
function transfer(address _token) external {
MyToken token = MyToken(0xd9145CCE52D386f254917e481eB44e9943F39138);
token.transferFrom(msg.sender,address(this),10);
}
La salida del código es algo así como esto [
{
“from”: “0xd9145CCE52D386f254917e481eB44e9943F39138”,
“topic”: “0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925”,
“event”: “Approval”,
“args”: {
“0”: “0xf8e81D47203A594245E36C48e151709F0C19fBe8”,
“1”: “0xf8e81D47203A594245E36C48e151709F0C19fBe8”,
“2”: “10”,
“owner”: “0xf8e81D47203A594245E36C48e151709F0C19fBe8”,
“spender”: “0xf8e81D47203A594245E36C48e151709F0C19fBe8”,
“value”: “10”
}
}
]
davy.ai
Basándonos en la salida, parece que la función
approve
está siendo llamada con la dirección del contrato actual (address(this)
) como el gastador, por lo que los valores de propietario y gastador son los mismos. Esto podría ser un problema en la implementación de la funcióngetValues
.Para solucionar este problema, asegúrese de que la dirección del gastador esté establecida en una dirección válida autorizada para gastar los tokens. Por ejemplo, podría pasar la dirección del gastador como un argumento a la función
getValues
y usar ese valor al llamar a la funciónapprove
:Luego llamaría a esta función con la dirección del token y la dirección del gastador deseado:
Esto debería actualizar la salida con los valores correctos de propietario y gastador.