Interconectar contratos
Una invocación entre contratos es un tipo potente (aunque costoso) de interacción de 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 dirección separado, lo que significa que no comparten ningún dato más que lo que se pasó en la invocación. Mientras que una invocación de contrato típicamente 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 haciendo una llamada de función Rust a f::invoke
.
Algunos contratos, como el contrato de token, 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) {
está exportado como
pub use crate::contract::initialize::invoke as initialize;
Esta función es luego llamada fácilmente por el contrato de fondos de liquidez.