El Sistema operativo Blockchain del protocolo NEAR

(18 nL)
7 min read
To Share and +4 nLEARNs

En marzo de 2023, el Protocolo Near lanzó el Sistema Operativo Blockchain (BOS por sus siglas en inglés) para crear el punto de entrada ideal de la Web Abierta. La idea es tender un puente sin fisuras entre la Web2 y la Web3. Este artículo examinará de cerca el BOS y explicará cómo funciona.

¿Qué es la Web Abierta?

“La Web Abierta” es un término utilizado para describir el Internet cuando este se convierte en un recurso público global no supervisado por guardianes o supervisores. ¿Por qué es necesaria una web abierta?

  • Es necesaria para una libre expresión y una comunicación abierta.
  • Una web abierta es una internet del pueblo y para el pueblo. Permite a los individuos intervenir y contribuir positivamente en la sociedad.

Desde el principio, la visión de NEAR fue ayudar a facilitar la creación de la Web Abierta. Dado que la Web Abierta debe ser descentralizada, NEAR necesitaba crear una cadena de bloques escalable, de capa 1, que eliminara las complejidades. ¿Lo han conseguido? Vamos a verlo.

  • NEAR tiene un modelo de cuentas flexible y cuentas legibles por humanos.
  • El mecanismo de fragmentación Nightshade hace que NEAR sea extremadamente escalable.
  • NEAR también proporciona herramientas sofisticadas para ayudar a los creadores a desarrollar el protocolo.

Una vez sentadas las bases, NEAR necesita crear una estructura Web3 que ayude a agilizar la incorporación a la  Web Abierta tanto de los usuarios como de los desarrolladores.

¿Cómo logra el BOS una web abierta?

Piense en lo que hace un sistema operativo o “OS” (por sus siglas en inglés). Un OS permite a los usuarios interactuar con maquinaria sofisticada sin entrar en las complejidades. Abstraerse de las complejidades en segundo plano es crucial para la adopción masiva de la tecnología.

Ahora, extiende esa lógica a la Web3. Según Illia Polushkin, cofundador del Protocolo NEAR, BOS es una capa común para navegar y descubrir productos de la Web3. Además, el BOS será compatible con las cadenas del Protocolo Near y de la Máquina Virtual de Ethereum durante su lanzamiento. Imagínate una aplicación DeFi nueva y genial en Ethereum y conseguir usuarios de NEAR a través de BOS.

Creación de interfaces compuestas

Antes de seguir adelante, vamos a entender lo que es un frontend. Un frontend es la manera en que un usuario interactúa con la aplicación. Cuando se trata de dApps, la creación de una interfaz compuesta y descentralizada es necesaria. El propio ethos de la Web3 es la descentralización. Entonces, ¿por qué seguimos utilizando servicios centralizados para acceder a estos servicios? Confiar en estos intermediarios plantea varios problemas de seguridad.

BOS ayuda a añadir frontends compuestos a la estructura tecnológica y a integrar fácilmente a los usuarios en la Web3. En cuanto al potencial de BOS como frontend, Polushkin ha declarado:

“Los frontends compuestos descentralizados, como un marco, pueden funcionar con cualquier backend Web2 o Web3 y con cualquier billetera. En el futuro ofreceremos [el uso de] billeteras de una cadena para interactuar con otra a través de puentes sin fisuras.”

Los 3 pilares del BOS

El BOS está basado en tres pilares:

  • Pasarelas
  • Componentes
  • Blockchains

Pasarelas

Las pasarelas están diseñadas para poner a disposición de todo el mundo interfaces descentralizadas ejecutadas localmente. Una pasarela consta de una máquina virtual especialmente diseñada que carga y ejecuta interfaces para protocolos creados en Ethereum, L2 y otros L1 como NEAR. El código de estas interfaces se almacena en la blockchain de NEAR.

¿Cuál es la finalidad del sistema operativo Blockchain (BOS) del Protocolo Near? (elija todas las que correspondan)

Please select 2 correct answers

Correct! Wrong!

Componentes

Los componentes son frontends para app-layer, de protocolos en cadena como Lido, Uniswap y Aave. Los desarrolladores pueden ver el código de estas aplicaciones en una pasarela similar a la visualización de un contrato inteligente en Etherscan. Además, pueden bifurcar estas aplicaciones y desplegar sus propias versiones o incluso combinar componentes.

Blockchains

Los componentes pueden llamar a funciones de cualquier blockchain. Actualmente, todas las cadenas EVM/L2 y NEAR son compatibles. Además, el código fuente de los frontends (aplicaciones) se almacena en NEAR debido a su capacidad para almacenar HTML/CSS/JS a bajo coste.

El frontend del BOS de NEAR

Veamos cómo funciona el front-end en tiempo real. Visita alpha.near.org.

Pasted image 0

El frontend conecta a los usuarios con todas las posibilidades de la Web3 dentro del ecosistema. Cualquiera en el ecosistema de la Web Abierta puede crear sus propios frontends, compatibles con la blockchain que elija. Vamos a jugar con la interfaz y ver cómo funciona.

Cuando te desplaces hacia arriba, sitúa el cursor sobre “Discover” (Descubrir) y haz clic en “Components” (Componentes).

Pasted image 0

Los componentes son pequeñas aplicaciones que resuelven problemas específicos. Actualmente, tienes algunos componentes incorporados que puedes usar para construir el frontend. Aquí hay algunos componentes incorporados.

¿Cuál es la función de las pasarelas en el BOS?

Correct! Wrong!

Widget

Un widget es la unidad mínima de un frontend. Permite incluir un componente existente en el código, lo que permite crear aplicaciones complejas mediante la composición de componentes.

Código:

​​const user = "gagdiez.near";
const props = { name: "Learn NEAR" };

return (
  <>
    <div class="container min-vw-100">

       <h3> Widgets </h3>
      <p> Here is a Widget </p>
      <hr />

      <Widget src={`${user}/widget/Greetings`} props={props} />
    </div>
  </>
);

Salida:

Pasted image 0

Image Uploader (Cargador de imágenes)

El cargador de imágenes permite a los usuarios cargar directamente una imagen en el Sistema Interplanetario de Archivos (IPFS, por sus siglas en inglés).

Código:

State.init({
  img: null,
});

return (
  <div className='container row'>
    <div>
      Image upload: <br />
      <IpfsImageUpload image={state.img} />
    </div>
    <div>
      Raw State:
      <pre>{JSON.stringify(state)}</pre>
    </div>
    <div className='mt-2'>
      {state.img.cid && (
        <img
          src={`https://ipfs.near.social/ipfs/${state.img.cid}`}
          alt='uploaded'
        />
      )}
    </div>
  </div>
);

Salida:

Pasted image 0

Puedes usar el botón para subir una imagen:

Pasted image 0

Archivos

Archivos subidos con soporte para arrastrar y soltar.

Código:

State.init({ img: null });

const uploadFileUpdateState = (body) => {
  asyncFetch(
    "https://ipfs.near.social/add",
    {
      method: "POST",
      headers: { Accept: "application/json" },
      body
    }
  ).then(
    (res) => {
      const cid = res.body.cid;
      State.update({ img: { cid } });
    }
  )
};

const filesOnChange = (files) => {
  if (files) {
    State.update({ img: { uploading: true, cid: null } });
    uploadFileUpdateState(files[0]);
  }
};

return (
  <div className="d-inline-block">
    { state.img?
      <img class="rounded w-100 h-100"
        style={{ objectFit: "cover" }}
        src={`https://ipfs.near.social/ipfs/${state.img.cid}`}
        alt="upload preview" />
      : ""
    }
    <Files
      multiple={false}
      accepts={["image/*"]}
      minFileSize={1}
      clickable
      className="btn btn-outline-primary"
      onChange={filesOnChange}
    >
      { state.img?.uploading ? <> Uploading </> : "Upload an Image" }
    </Files>
  </div>
);

Salida:

Pasted image 0

Markdown

Un componente integrado que permite renderizar el Markdown.

Código:

const text = `
  #### Markdown Section
  Checkout Learn NEAR [here](https://learnnear.club/)
`;

return (
  <>
    <div class="container border border-info pt-3 min-vw-100 text-center">
      <Markdown text={text} />
    </div>
  </>
);

Salida:

Pasted image 0

OverlayTrigger

El widget OverlayTrigger permite a los desarrolladores mostrar texto o iconos superpuestos cuando el ratón pasa por encima de un elemento concreto.

Código:

State.init({
  show: false,
});

const handleOnMouseEnter = () => {
  State.update({ show: true });
};
const handleOnMouseLeave = () => {
  State.update({ show: false });
};

const overlay = (
  <div
    className='border m-3 p-3 rounded-4 bg-white shadow'
    style={{ maxWidth: "24em", zIndex: 1070 }}
    onMouseEnter={handleOnMouseEnter}
    onMouseLeave={handleOnMouseLeave}
  >
    This is the overlay Message
  </div>
);

return (
  <OverlayTrigger
    show={state.show}
    trigger={["hover", "focus"]}
    delay={{ show: 250, hide: 300 }}
    placement='auto'
    overlay={overlay}
  >
    <span
      className='d-inline-flex'
      style={{ backgroundColor: "gray", borderRadius: "10px", padding: "10px" }}
      onMouseEnter={handleOnMouseEnter}
      onMouseLeave={handleOnMouseLeave}
    >
      Place Mouse Over Me
    </span>
  </OverlayTrigger>
);

Salida:

Pasted image 0

InfiniteScroll

Este componente permite crear una página o elemento de desplazamiento infinito sencillo y ligero, ya que admite tanto elementos de ventana como elementos desplazables.

Código:

const allNumbers = Array.from(Array(100).keys())

State.init({
  displayNums: [],
  lastNumber: 0,
});

const loadNumbers = (page) => {
  allNumbers
    .slice(state.lastNumber, state.lastNumber + 10)
    .map((n) => numberToElem(n))
    .forEach((i) => state.displayNums.push(i));
  state.lastNumber += 10;
  State.update();
};

const numberToElem = (number) => <div> {number} </div>;

return (
  <div>
    <InfiniteScroll
      loadMore={loadNumbers}
      hasMore={state.displayNums.length < allNumbers.length}
    >
      {state.displayNums}
    </InfiniteScroll>
  </div>
);

Salida:

Una lista de carga infinita:

Pasted image 0

Typeahead

Este componente proporciona un campo de entrada de texto para seleccionar una opción de una lista de opciones. En pocas palabras, este componente se utiliza para crear funciones de autocompletado de texto.

Código:

const options = ["Apple", "Banana", "Cherry", "Durian", "Elderberry"];

return (
  <div class="container min-vh-100 min-vw-100">
    <Typeahead
      options={options}
      multiple
      onChange={(value) => {State.update({choose: value})}}
      placeholder='Choose a fruit...'
    />
    <hr />
    <p> Selected: {JSON.stringify(state.choose)} </p>
  </div>
);

Salida:

Pasted image 0

Este Typehead le permite elegir una fruta.

Pasted image 0

Styled Components

La herramienta Styled Components se utiliza para estilizar componentes React utilizando CSS-in-JS.

Código:

const Button = styled.button`
  /* Adapt the colors based on primary prop */
  background: ${(props) => (props.primary ? "palevioletred" : "white")};
  color: ${(props) => (props.primary ? "white" : "palevioletred")};

  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 10px;
`;

return (
  <div>
    <Button>White</Button>
    <Button primary>Red</Button>
  </div>
);

Salida:

Pasted image 0

ToolTip

Este componente permite a los desarrolladores añadir tool tips en determinados elementos. Solo hay que crear un botón y añadir un texto superpuesto como un tool tip.

Código:

return (
  <>
    {["top", "right", "bottom", "left"].map((placement) => (
      <div style={{ margin: "2.5rem 1rem", float: "left" }}>
        <OverlayTrigger
          key={placement}
          placement={placement}
          overlay={
            <Tooltip id={`tooltip-${placement}`}>
              Tooltip on <strong>{placement}</strong>.
            </Tooltip>
          }
        >
          <button variant="secondary">Tooltip on {placement}</button>
        </OverlayTrigger>
      </div>
    ))}
  </>
);

Salida:

Pasted image 0

Para finalizar

BOS ayuda a resolver los principales retos que plantea la creación de front-ends en la Web3, como el acceso, la seguridad, la composición y la agilidad. Con el BOS, los usuarios pueden ejecutar aplicaciones blockchain localmente, lo que ayuda a garantizar la robustez y la resistencia a la censura, manteniendo al mismo tiempo una experiencia fácil de usar.

Si quieres saber más sobre el frontend de BOS, lee la documentación aquí.

¿Qué es un widget en el BOS?

Correct! Wrong!

Generate comment with AI 2 nL
3

Deja un comentario


To leave a comment you should to:


Ir arriba
Report a bug👀