Llamadas entre Contratos en NEAR: Cross Contract Call (XCC)
Clase 6 de 7 • Curso de Desarrollo en Blockchain con NEAR
Cross Contract Call (XCC) - Llamada entre contratos
Permite llamar al método de un contrato desde otro contrato.
- El estado de la transacción es determinado por el estado del primer método llamado.
- Los métodos llamados por XCC deben llevar gas adjunta.
- Aunque el usuario no adjunte tokens para un método payable el contrato puede hacerlo, y serán descontados de su propia cuenta.
Ejemplo de contrato:
import { NearBindgen, near, call, view } from 'near-sdk-js' @NearBindgen({}) class HelloNear { greeting: string = "Hello"; @view({}) // This method is read-only and can be called for free get_greeting(): string { return this.greeting; } @call({}) // This method chândes the state, for which it cost gas set greeting({ greeting }: { greeting: string }) : void { // Record a log permanently to the blockchain! near. log(`Saving greeting ${greeting}`): this.greeting = greeting; const promise = near.promiseBatchCreate(near. signerAccountId()); near.promiseBatchActionTransfer (promise, BigInt (1000000000000000000000000)) ; } }
Acá puedes conocer el contrato inteligente Cross Contract Call.
- La ejecución de un metodo en NEAR integre o no un XCC tiene un maximo de gas a gastar de 300TGas. Eso equivale al procesamiento que la red puede hacer por transacción, recordando que en algún lugar del mundo una máquina está ejecutando nuestra transacción.
- Cuando se despliega un contrato inteligente, el tamaño de este se utiliza para tomar cuanto cuesta desplegarlo, por eso la necesidad de que al serializar y deserializar sea lo más pequeño posible.
- NEAR utiliza borsh como medio para serializar y deserializar.
- También pueden utlizar las promesas para ejecutar una transacción extra al ejecutar un metodo. Como Issac hizo en el ejemplo que al guardar un mensaje ejecutaba una transacción de transfer de un NEAR.
- Las XCC y promise podemos verlas como “necesito hacer esta otra transacción mientras estoy ejecutando un metodo”.
- ¿Al desplegar un contrato desde un contrato, puedo inicializar ese contrato con ciertos datos en la llamada de creación, o debo hacerlo llamando al contrato recién creado? O cuando necesitamos información de otro contrato inteligente para ejecutar nuestra transacción.
- Aquí está la documentación de como funciona el gas, las Unit Gas y mucho más.
- En paralelo a esto como nuestros contratos almacenan información y una cantidad equivalente de tokens en el contrato para asegurar su almacenamieto en la red.
Factory Pattern
Patrón de fábrica es un patrón que utiliza métodos de "fábrica" para la creación de objetos.
Meme Museum (usado por near.academy)
El contrato del Museo usa llamadas entre contratos para desplegar contratos de Meme.
Staking Pool (usado por Near Staking)
Staking Pool Factory utiliza llamadas entre contratos para desplegar contratos de Staking Pool.
SputnikDAO (usado para crear DAOs en NEAR)
SputnikDAO Factory utiliza llamadas entre contratos para desplegar contratos de SputnikDAO.
Linkdrop
Un linkdrop es un tipo de contrato que transfiere algo de valor (por ejemplo: tokens, NFTs) entre un remitente y un receptor utilizando algún lugar para almacenarlos (por ejemplo: un escrow/garantía) mientras se espera a que el receptor lo reclame.
Multisig
Un contrato multifirma es uno que require que más de una cuenta apruebe una transacción antes de que esta se ejecute.
Sharding
El algoritmo de sharing usado por NEAR se llama Nightshade.