Imagine que Alice llama a un método de contrato C1 y ese método llama a otro método en el contrato C2.
Regularmente msg.sender
es igual a la Cuenta Alice en el método C1. Y msg.sender
es igual a la dirección del contrato C1 en el método C2.
Me gustaría saber si es posible llamar a C2 de tal manera que msg.sender
siga siendo la dirección de Alice en lugar de la dirección de C1. Y que C2 puede acceder a las variables de estado de C2.
He intentado usar delegatecall
y callcode
, pero esas funciones parecen que C2 solo tiene acceso al estado C1 pero no al estado C2. Supongo que esas convocatorias están más preparadas para las bibliotecas.
Sería bueno tener un ejemplo de esta llamada.
He intentado usar delegar llamada y código de llamada, pero esas funciones parecen que C2 solo tiene acceso al estado C1 pero no al estado C2.
Correcto.
Si desea el estado de C2, puede usar tx.origin
o hacer que el método de C2 tome un address _caller
(ejemplo) adicional de que C1 pasa la dirección de Alice. C2 luego usa _caller
en lugar de msg.sender
.
Usar tx.origin
significa que Alice no puede ser un contrato y ¿Cómo hago que mi DAPP sea "a prueba de serenidad"? sugiere evitar el uso de tx.origin
.
Si todo lo que desea saber es el autor de la transacción original (a diferencia de la llamada actual), simplemente puede consultar en tx.origin
lugar de msg.caller
.
usuario2284570
usuario2284570
ismael
usuario2284570