Estoy desarrollando una DApp en Kovan Network en Remix y tengo problemas para entender el problema. Estoy tratando de llamar al contrato Wrapped Ether (WETH: https://kovan.etherscan.io/address/0xd0a1e359811322d97991e03f863a0c30c2cf029c ) desde mi propio contrato (para envolver/desenvolver automáticamente el éter que depositan mis usuarios).
Cuando estoy llamando al contrato de Etherscan a través de Metamask, puedo depositar y retirar WETH sin ningún problema.
Sin embargo, el problema surge cuando trato de 'depositar' (con mi función wrapETH) y luego 'retirar' WETH a través de mi contrato. Me di cuenta del problema cuando mis intentos de retiro siempre se revertían. Me di cuenta de que la transacción de depósito siempre estuvo pendiente en Remix, aunque la transacción se extrajo en su página etherscan (por ejemplo: https://kovan.etherscan.io/tx/0xe815da928878318b9e8eff18eb8ae353ebc0e8db9cd8fb2b39ca2b55f13d06f9 ), y que pude ver el Evento y verificar mi saldo en la página WETH. La transacción en sí tampoco apareció en la página WETH. Otra cosa extraña en esta transacción pendiente son los 'datos de entrada' que son ilegibles en comparación con otras transacciones.
¿Alguien sabe lo que está sucediendo y por qué hay una diferencia entre llamar al contrato WETH desde Etherscan (nuevamente, donde la transacción se extrae y registra directamente) y no desde mi contrato?
Aquí están las funciones a las que llamo (con solo las útiles)
WETH9_ WETHContract = WETH9_(0xd0a1e359811322d97991e03f863a0c30c2cf029c);
function depositETH() public payable{
}
function wrapETH(uint256 _amount) public{
WETHContract.deposit.value(_amount)();
}
function withdrawETH(uint256 _amount) public{
WETHContract.withdraw(_amount);
}
Gracias
La transacción está funcionando como se esperaba.
El seguimiento de paridad de su contrato lo muestra llamando al contrato WETH. Su transacción también genera el Deposit
evento por el valor de la transacción. Si va a la página de lectura del contrato WETH y consulta el saldo de 0xf2a800fa540060384ed4d778db7cafdf477df2ec
, obtendrá un saldo WETH adecuado.
La única diferencia estaría en quién recibe el WETH. Cuando usa Metamask para llamar directamente al contrato WETH, WETH se enviará a la cuenta de propiedad externa que inició la transacción.
Cuando revisa su contrato, su WETH se acredita a su contrato, ya que en lo que respecta a WETH, es msg.sender
su contrato.
Debe mantener un libro mayor interno dentro de su contrato de saldos de usuario. Cuando llame a la función de retiro, el éter llegará a su contrato y deberá reenviarlo al usuario.
Luis Fournier
Raghav Sood
Luis Fournier