Skip to content

Web3-Octopus is a framework to interact with any blockchain easily

License

Notifications You must be signed in to change notification settings

vapaee/web3-octopus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Web3 Octopus

This framework is still in development.

Web3 Octopus es un framework en TypeScript diseñado para facilitar el manejo de múltiples conexiones activas con diferentes blockchains simultáneamente. Cuenta con una arquitectura pensada para la incorporación de nuevas funcionalidades en forma de plugins, de manera tal que el desarrollador final pueda tomar sólo los módulos que le interesa usar y armar su propia versión de Octopus.

Arquitectura

Web3 Octopus es un framework que, en su capa más abstracta, se basa en tres conceptos bien diferenciados y comunes a todas las blockchains: Autenticación, Network y Módulos.

  • Autenticación: Se encarga de la identificación del usuario, el login y la firma de transacciones. Proporciona métodos para saber si el usuario está autenticado, obtener su dirección o ID y sus datos ampliados dependiendo de la blockchain.
  • Network: Representa los datos específicos de la blockchain, incluyendo su identificación (id, nombre, título, system coin), lista de tokens y endpoints. Gestiona la información sobre los contratos y tokens que existen en la red, permitiendo obtener datos actualizados y relevantes. Es responsable de proveer la abstracción de los contratos a partir de su ABI. Es decir, un objeto interactivo que abstrae la forma de interactuar con el contrato real y extraer datos públicos de él.
  • Servicios: Son abstracciones de funcionalidades cuya implementación se basa fuertemente en la interacción con los contratos sobre la blockchian. Se encargan de obtener los datos de donde sea necesario tomarlos y dejarlos disponibles para el desarrollador, usando observers tanto para disparar acciones internas como para proveer hacia afuera datos siempre actualizados. También suelen abstraer la complejidad que suele haber en sistemas que tinen varios contratos desplegados sobre una o más blockchians.

Esta arquitectura pretende establecer las bases para una solución uniforme en el ecosistema crypto y así permitirle a los desarrolladores crear y publicar módulos bien específicos de su negocio y beneficiarse de todos los módulos ya creados por la comunidad.

Veamos un ejemplo de uso final configurando WEb3 Octopus para interactuar cuatro blockchains distintas:

// import the main class from the core
import {
    Web3Octopus,                          // the main class
    W3oIServices,                         // interface that includes the snapshot function
} from '@vapaee/w3o-core';

// import the classes to support Ethereum/EVM networks
import {
    EthereumNetwork,                      // extends W3oNetwork
    EthereumTokensService,                // extends W3oService
    EthereumBalancesService,              // extends W3oService
    EthereumMetamaskAuth,                 // extends W3oAuthenticator
    EthereumBraveAuth,                    // extends W3oAuthenticator
    EthereumWalletConnectAuth,            // extends W3oAuthenticator
} from '@vapaee/w3o-ethereum';

// import the classes to support Antelope (EOSIO) networks
import {
    AntelopeNetwork,                      // extends W3oNetwork
    AntelopeTokensService,                // extends W3oService
    AntelopeBalancesService,              // extends W3oService
    AntelopeAnchorAuth,                   // extends W3oAuthenticator
} from '@vapaee/w3o-antelope';

// import the configuration for each of the four Telos networks
import {
    TelosEvmConfigJSON,                   // contains the mainnet evm network configuration JSON
    TelosEvmTestnetConfigJSON,            // contains the testnet evm network configuration JSON
    TelosZeroConfigJSON,                  // contains the mainnet native network configuration JSON
    TelosZeroTestnetConfigJSON,           // contains the testnet native network configuration JSON
} from '@vapaee/w3o-telos';

// import the configuration just for EOS networks
import {
    EOSConfigJSON,                        // contains the mainnet native network configuration JSON
} from '@vapaee/w3o-eos';

// ---- Create the main class instance ----
// the developer user may be creative and create his own service schema
interface IMyServices extends W3oIServices {
    evm: {
        tokens: EthereumTokensService;     // extends W3oService
        balances: EthereumBalancesService; // extends W3oService
    },
    zero: {
        tokens: AntelopeTokensService;     // extends W3oService
        balances: AntelopeBalancesService; // extends W3oService
    },
    example: ExampleService;               // extends W3oService, user module
    foo: FooService;                       // extends W3oService, user module
}
const octopus = new Web3Octopus<IMyServices>();

// ---- Register Telos EVM support ----
const telosEvmSupportSettings: W3oNetworkSupportSettings<IMyServices> = {
    // Network type
    type: 'ethereum',
    // list of supported wallets for Ethereum-like networks
    auth: [
        new EthereumMetamaskAuth(octopus),
        new EthereumBraveAuth(octopus),
        new EthereumWalletConnectAuth(octopus)
    ],
    // list of supported Ethereum-like networks
    networks: [
        new EthereumNetwork(TelosEvmConfigJSON, octopus),
        new EthereumNetwork(TelosEvmTestnetConfigJSON, octopus)
    ]
}
octopus.addNetworkSupport(telosEvmSupportSettings);

// ---- Register Telos/EOS support ----
const telosEosSupportSettings: W3oNetworkSupportSettings<IMyServices> = {
    // Network type
    type: 'antelope',
    // list of supported wallets for Antelope networks
    auth: [
        new AntelopeAnchorAuth(octopus)
    ],
    // list of supported Antelope networks
    networks: [
        new AntelopeNetwork(TelosZeroConfigJSON, octopus), 
        new AntelopeNetwork(TelosZeroTestnetConfigJSON, octopus), 
        new AntelopeNetwork(EOSConfigJSON, octopus), 
        new AntelopeNetwork(EOSTestnetConfigJSON, octopus)
    ]
}
octopus.addNetworkSupport(telosEosSupportSettings);

// ---- Register the services ----
// paths must match the keys in the IMyServices interface
const services = [
    new EthereumTokensService('evm.tokens', octopus),
    new EthereumBalancesService('evm.balances', octopus),
    new AntelopeTokensService('zero.tokens', octopus),
    new AntelopeBalancesService('zero.balances', octopus),
    new ExampleService('example', octopus),
    new FooService('foo', octopus)
];
octopus.registerServices(services);
octopus.init({
    multisession: true, // if false, W3oSessionManager we maitain always one open session and logout the user if the network changes
});

export function getOctopus(): Web3Octopus<IMyServices> {
    return octopus;
}

Luego desde cualquier otro lado del proyecto podemos hacer lo sigueinte

// ejemplo de uso desde otro archivo
import { getOctopus } from '...';

getOctopus().services.evm.tokens.updateTokenList()
getOctopus().services.foo.bar();

Dependencias

  • rxjs: Todos los datos internos se manejarán como observables, lo que facilita la gestión de estados reactivos y asincrónicos dentro del framework.
  • typescript: Proporciona un entorno de desarrollo robusto y agnóstico al framework, asegurando que Web3 Octopus pueda integrarse fácilmente con otras tecnologías y herramientas de desarrollo.

Clases Principales

# Entidad Tipo Rol
1 W3oNetworkType Tipo Define los tipos de redes blockchain soportadas. Ejemplos: "ethereum"
2 W3oNetworkName Tipo Representa el nombre identificador de una red blockchain.
3 W3oAddress Tipo Representa la dirección o ID del usuario en una blockchain.
4 W3oError Clase Clase para manejar errores específicos dentro del framework, con un mensaje, código y payload.
5 W3oAuthenticator Clase abstracta Proporciona métodos para autenticación de usuarios, gestión de cuentas y firma de transacciones.
6 W3oTransaction Interfaz Representa una transacción en la blockchain, su implementación específica depende de la subclase.
7 W3oTransactionResponse Clase Maneja la respuesta de una transacción firmada, incluyendo el hash y la espera de la recepción de la transacción.
8 W3oTransactionReceipt Interfaz Representa el recibo de una transacción, se especificará más adelante.
9 W3oAccount Clase Maneja los datos de una cuenta de usuario en la blockchain, proporcionando métodos para acceder a su dirección y tomar una captura de su estado.
10 W3oNetwork Clase abstracta Representa una red blockchain, proporciona métodos para obtener información sobre la red, contratos y tokens.
11 W3oNetworkLinks Interfaz Define enlaces útiles para una red específica, como el explorador, puente, ecosistema, sitio web y monedero.
12 W3oContractManager Clase Gestiona los contratos dentro de una red, con caché interno y API para agregar, obtener y listar contratos.
13 W3oContractABI Interfaz Define la interfaz del ABI (Application Binary Interface) de un contrato, se especificará en cada implementación.
14 W3oToken Clase Representa un token en la blockchain, proporcionando métodos para obtener su información como símbolo, decimales, precio en USD, etc.
15 W3oContract Clase Representa un contrato en la blockchain, proporciona métodos para obtener su ABI y tomar una captura de su estado.
16 W3oNetworkManager Clase Gestiona las redes registradas en el framework, permitiendo actualizar su estado y acceder a la red actual.
17 W3oNetworkSupportFactory Clase Proporciona soporte para una familia de redes, manejando la autenticación y configuración específica de cada red.
18 W3oNetworkSupportSettings Interfaz Define la configuración de soporte, incluyendo autenticadores y configuraciones de red.
19 W3oAuthenticatorSettings Interfaz Define la configuración específica para autenticadores, será utilizada en la configuración del soporte de redes.
20 W3oNetworkSettings Interfaz Define la configuración específica para redes, incluyendo nombre, ID de cadena, nombre para mostrar y enlaces útiles.
21 W3oService Clase Representa un servicio en el framework, encapsula la interacción con un grupo de contratos, puede tener un estado interno y debe implementar un método init para inicializar su estado.
22 W3oSessionManager Clase Gestiona las sesiones en el framework, permitiendo crear, eliminar, recuperar y cambiar la sesión activa.
23 W3oSession Clase Representa una sesión específica, manteniendo los datos relevantes para la cuenta y red asociadas, con métodos para almacenar y recuperar datos adicionales.
24 Web3Octopus Clase Clase principal del framework, actúa como punto de entrada, inicializa redes y módulos, y maneja las sesiones.

About

Web3-Octopus is a framework to interact with any blockchain easily

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published