
Marco de protocolo de capa de aplicación para comunicación cifrada de extremo a extremo basada en confianza a través de redes heterogéneas, permitiendo el descubrimiento y enrutamiento uniforme de servicios en capas TCP, HTTP y blockchain.
Pruébalo ahora: https://hstp.ai
npx hstp;
El protocolo tiene como objetivo desarrollar una abstracción de capa de aplicación para el Protocolo de Transferencia de Servicio Hyper.
HSTP es una recursión como naturaleza de HSTP. Este protocolo se implementa a sí mismo como una interfaz. En cada dispositivo conectado a Internet, hay una instancia de HSTP. Por eso no se necesita adopción. HSTP ya está ejecutándose sobre Internet. Ahora hemos logrado explicar el protocolo sobre protocolos en redes heterogéneas. Por eso no lo compares con web2, web3 o viceversa.
HSTP es una interfaz de representación de aplicaciones para redes heterogéneas.
La interfaz HSTP obliga a implementar un conjunto de métodos para poder comunicarse con otros nodos en la red. Así, los servidores, clientes y otros nodos pueden comunicarse entre sí de forma basada en confianza y cifrada de extremo a extremo. Con el tiempo, la resolución de nodos se basa en el algoritmo de resolución de ruta más rápida que escribí.
¡Hora del cuento!
Un pequeño resumen
Imagina que estamos en la situación de una madre y un padre que viven una vida feliz. ¡Tuvieron un bebé! De repente, la madre necesitaba tomar pastillas regularmente para curar una enfermedad. La pastilla es un veneno para el bebé. El bebé llora y la madre llama al padre porque es la única persona de confianza para ayudar al bebé. Pero el padre a veces no puede quedarse en casa, necesita hacer algo para alimentar al bebé. El padre oye que un lechero tiene leche fresca y de alta calidad a bajo precio. El padre decide intentar hablar con el lechero, el lechero entrega la leche al padre, el padre lleva la leche a la madre. La madre da la leche al bebé. El bebé ahora está feliz y se duerme, la madre ve que el bebé está feliz.
La familia nunca compra leche del exterior, esta es la primera vez que compran leche para el bebé: (Mamá no conoce el número del lechero, el lechero no conoce la dirección de la casa)
Como pasos:
0) - El bebé quiere beber leche.
1) - El bebé llora a la mamá.
3) - Mamá ve que el bebé llora.
4) - Mamá revisa la nevera. Mamá ve que la leche está vacía. (Mamá solo confía en el papá)
5) - Mamá llama al papá.
6) - Papá llama al lechero.
7) - Lechero entrega la leche al papá.
8) - Papá entrega la leche a mamá.
9) - Mamá le da la leche al bebé.
10) - El bebé toma la leche.
11) - El bebé está feliz.
12) - El bebé duerme.
13) - Mamá ve que el bebé está feliz y duerme.
14) - Para poder contactar nuevamente al lechero, la mamá le pide al papá que le diga que quiere que el lechero guarde la dirección de la casa y el teléfono móvil de la mamá.
15) - Mamá llama al papá.
16) - Papá llama al lechero.
17) - Lechero guarda la dirección de la casa y el teléfono móvil de la mamá.
Vaya, al día siguiente el bebé se despierta y vuelve a llorar,
0) - El bebé quiere beber leche.
1) - El bebé llora a la mamá.
2) - Mamá ve que el bebé llora.
3) - Mamá revisa la nevera. Mamá ve que la leche está vacía. (Mamá confía en que el papá tomó la decisión correcta la primera vez al dar la dirección al lechero, y el lechero tomó la decisión correcta la primera vez al guardar la dirección de la casa y el teléfono móvil de la mamá.)
4) - Mamá llama al lechero (Mamá solo confía en la decisión del papá)
5) - Lechero entrega la leche a mamá.
6) - Mamá le da la leche al bebé.
7) - El bebé toma la leche.
8) - El bebé está feliz.
9) - El bebé duerme.
10) - Mamá ve que el bebé está feliz y duerme.
11) - Mamá está feliz y ahora confía en el lechero.
este documento que estás leyendo es un manifiesto para que las personas de internet se conecten con otras personas confiando en que el servicio sirve al cliente y la confianza solo se puede mantener proporcionando buenos servicios. la confianza es la clave, pero no es suficiente para sobrevivir. el servicio debe ser confiable, consistente, barato. de lo contrario, las personas decidirán no pedirte nuevamente.
Entonces, es fácil, ¿verdad? Es muy simple de entender, ¿quiénes son esas personas en la historia?
además,
El bebé está en manos de confianza. No hay nada de qué preocuparse. Te aman, lo entenderás cuando crezcas y tengas un hijo.
// Explicación técnica de los pasos próximamente, pero no es tan difícil como parece.
HSTP es una interfaz, que es un conjunto de métodos que deben ser implementados por la capa de aplicación. La interfaz se utiliza para comunicarse con otros nodos en la red. La interfaz está diseñada para ser utilizada en una red heterogénea.
HSTP debe implementarse en cualquier capa de dispositivos/entornos conectados en red.
Un nodo HSTP podría ser un servidor TCP, un servidor HTTP, un archivo estático o un contrato en cualquier cadena. Un nodo HSTP puede llamar a cualquier otro nodo HSTP. Así, los nodos pueden llamarse libremente entre sí, pueden verificar su estado del sistema y pueden comunicarse entre sí.
HSTP ya está implementado a nivel de lenguaje, por personas y para personas. El inglés es el idioma más adoptado en la Tierra. JavaScript también podría ser el idioma más adoptado para entornos de navegador. Solidity es para cadenas basadas en EVM, hyperbees para redes basadas en TCP, etc.
La interfaz HSTP debe aplicarse entre cualquier dispositivo/red conectado a HSTP.
Opciones de escalado infinitas: Cualquier dispositivo conectado por TCP puede hablar con cualquier otro dispositivo conectado por TCP a través de HSTP. Esto significa que cualquier navegador web es un servidor de otro nodo HSTP, y cualquier navegador web puede llamar a cualquier otro navegador web.
Interfaz uniforme de representación de aplicaciones: HSTP es una interfaz uniforme, que es un conjunto de métodos que deben ser implementados por la capa de aplicación.
Redes heterogéneas: Cualquier participante de la red puede compartir los recursos con otros participantes de la red. Los recursos pueden ser CPU, memoria, almacenamiento, red, etc.
Conjugación de versiones web Dado que las tecnologías blockchain se denominan web3, la gente comenzó a discutir sobre las diferencias entre las webs. Comparar es un comportamiento de la mentalidad de la educación en sistemas numéricos incrementales. ¿Cuál es mejor? Ninguno. Tenemos que construir sistemas que puedan hablar en un protocolo uniforme; los servicios subyacentes pueden ser cualquier cosa. HSTP apunta a eso.
Interfaz de registro La interfaz de registro está diseñada para usarse en la capa TCP, para poder registrar nodos tld de nivel superior en la red. La primera implementación del relé TCP HSTP resolverá hstp/
El registro tiene dos partes de la interfaz:
La implementación del registro necesita dos nodos HSTP:
Interfaz de enrutador
Con fines de demostración, utilizaremos el siguiente ejemplo en solidity:
// SPDX-License-Identifier: GNU-3.0-or-later
pragma solidity ^0.8.0;
import "./HSTP.sol";
import "./ERC165.sol";
enum Operation {
Query,
Mutation
}
struct Response {
uint256 status;
string body;
}
struct Registry {
HSTP resolver;
}
// HSTP/Router.sol
abstract contract Router is ERC165 {
event Log(address indexed sender, Operation operation, bytes payload);
event Register(address indexed sender, Registry registry);
mapping(string => Registry) public routes;
function reply(string memory name, Operation _operation, bytes memory payload) public virtual payable returns(Response memory response) {
emit Log(msg.sender, _operation, payload);
// Traverse upwards and downwards of the tree.
// Tries to find the closest path for given operation.
// If the route is registered on HSTP node, reply from children node.
// If the node do not have the route on this node, ask for parent.
if (routes[name]) {
if (_operation == Operation.Query) {
return this.query(payload);
} else if (_operation == Operation.Mutation) {
return this.mutation(payload);
}
}
return super.reply(name, _operation, payload);
}
function query(string memory name, bytes memory payload) public view returns (Response memory) {
return routes[name].resolver.query(payload);
}
function mutation(string memory name, bytes memory payload) public payable returns (Response memory) {
return routes[name].resolver.mutation(payload);
}
function register(string memory name, HSTP node) public {
Registry memory registry = Registry({
resolver: node
});
emit Register(msg.sender, registry);
routes[name] = registry;
}
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(HSTP).interfaceId;
}
}
Interfaz HSTP
// SPDX-License-Identifier: GNU-3.0-or-later
pragma solidity ^0.8.0;
import "./Router.sol";
// Stateless Hyper Service Transfer Protocol for on-chain services.
// Will implement: EIP-4337 when it's on final stage.
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4337.md
abstract contract HSTP is Router {
constructor(string memory name) {
register(name, this);
}
function query(bytes memory payload)
public
view
virtual
returns (Response memory);
function mutation(bytes memory payload)
public
payable
virtual
returns (Response memory);
}
Ejemplo de nodo HSTP
Un nodo HSTP tiene acceso para llamar al enrutador padre mediante el método super.reply(name, operation, payload). Un nodo HSTP también puede llamar a nodos hijos llamando a los métodos this.query(payload) o this.mutation(payload).
Un nodo HSTP puede ser un contrato inteligente, un navegador web o un dispositivo conectado por TCP.
El nodo tiene plena capacidad de agregar más nodos HSTP a la red o a sí mismo como subservicios.
HSTP HSTP
/ \ / \
HSTP HSTP HSTP
/ \
HSTP HSTP
/ /
HSTP HSTP
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "hstp/HSTP.sol";
// Stateless Hyper Service Transfer Protocol for on-chain services.
contract Todo is HSTP("Todo") {
struct ITodo {
string todo;
}
function addTodo(ITodo memory request) public payable returns(Response memory response) {
response.body = request.todo;
return response;
}
// Override for HSTP.
function query(bytes memory payload)
public
view
virtual
override
returns (Response memory) {}
function mutation(bytes memory payload)
public
payable
virtual
override
returns (Response memory) {
(ITodo memory request) = abi.decode(payload, (ITodo));
return this.addTodo(request);
}
}
La propuesta de Ethereum es un borrador por ahora, pero el protocolo tiene una implementación de referencia Todo.sol.
Puedes probar HSTP y probarlo en remix ahora.
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "hstp/HSTP.sol";
// Stateless Hyper Service Transfer Protocol for on-chain services.
contract Todo is HSTP("Todo") {
struct TodoRequest {
string todo;
}
function addTodo(TodoRequest memory request) public payable returns(Response memory response) {
response.body = request.todo;
return response;
}
// Override for HSTP.
function query(bytes memory payload)
public
view
virtual
override
returns (Response memory) {}
function mutation(bytes memory payload)
public
payable
virtual
override
returns (Response memory) {
(TodoRequest memory todoRequest) = abi.decode(payload, (TodoRequest));
return this.addTodo(todoRequest);
}
}
GNU GENERAL PUBLIC LICENSE V3