¿Pueden los contratos inteligentes realizar transacciones en nombre de la persona que llama?

Quiero hacer un contrato inteligente que abarque otros contratos inteligentes.

En algunos de estos contratos, el usuario debe enviar la transacción por sí mismo. ¿Es posible hacer que un contrato inteligente envíe transacciones en nombre de la persona que llama?

Respuestas (1)

Algo así como.

Sí, los contratos pueden enviar mensajes a otros contratos. Pueden hacerlo porque una cuenta de propiedad externa firmó una transacción. Por ejemplo (simplificado):

contract Helper {    

// a bunch of initialization stuff ... 

function doStuff() public {
      contractA.aFunction();
      contractB.anotherFunction();
    }
}

En el contexto de contractAy contractB, el msg.senderes Helper, no el firmante de la transacción enviada a Helper.doStuff().

Helperno puede hacerse pasar por el firmante original por la misma razón que Alice no puede gastar el dinero de Bob. Desde la perspectiva de contractAy contractB, Helperes solo otro usuario sin (más precisamente, muy pocas) propiedades distintivas.

Hay algunos patrones comunes para trabajar dentro de estas limitaciones. Por ejemplo, puede funcionar como un agente de depósito en garantía, por lo que los usuarios realmente transfieren los activos que desean que el contrato administre por ellos.

Si en realidad está escribiendo contractAy contractBluego tiene más control sobre el diseño, entonces puede pasar la dirección del usuario en:

En contratoA...

  function aFunction(address user) public onlyAuthorized {
    // In this context, "msg.sender" is the calling contract and there is access control so only the trusted contract has this privilege.
    // address "user" is the user the trusted contract passed in which could be the original signer.
  }

Espero eso ayude.