Saltar al contenido principal

Contrato cruzado

Una invocación entre contratos es un tipo de interacción poderosa (aunque costosa) con contratos. Una invocación de contrato es similar a iniciar un nuevo proceso porque el código que se ejecuta estará en un espacio de direcciones separado, lo que significa que no comparten ningún dato excepto el que se pasó en la invocación. Aunque una invocación de contrato normalmente transfiere el control a un contrato diferente, es posible transferir el control al contrato que se está ejecutando actualmente. Independientemente de si el contrato que recibe el control es un contrato diferente o el contrato que se está ejecutando actualmente, el valor devuelto por get_invoking_contract será el valor anterior de get_current_contract. Una invocación de contrato solo puede acceder a los métodos públicos de un contrato.

Si un contrato contiene una función pública f, entonces invocar f se puede hacer llamando a la función Rust f::invoke.

Algunos contratos, como el contrato de tokens, solo exportan las funciones de invocación de contrato. Al hacerlo, pueden asignar nombres amigables a esas funciones. Por ejemplo, initialize

#[contractimpl(export_if = "export")]
impl TokenTrait for Token {
fn initialize(e: Env, admin: Identifier, decimal: u32, name: Binary, symbol: Binary) {

se exporta como

pub use crate::contract::initialize::invoke as initialize;

Esta función luego es fácilmente llamada por el contrato del pool de liquidez.