
Framework de protocolo de camada de aplicação para comunicação criptografada ponta a ponta baseada em confiança em redes heterogêneas, permitindo descoberta e roteamento uniformes de serviços nas camadas TCP, HTTP e blockchain.
Experimente agora: https://hstp.ai
npx hstp;
O protocolo visa desenvolver uma abstração de camada de aplicação para o Hyper Service Transfer Protocol.
HSTP é uma recursão como natureza do HSTP. Este protocolo se implementa como uma interface. Em todo dispositivo conectado à internet, existe uma instância do HSTP. Por isso, a adoção não é necessária. O HSTP já está rodando sobre a internet. Acabamos agora de conseguir explicar o protocolo sobre protocolos em redes heterogêneas. É por isso que não compare com web2, web3 ou vice-versa.
HSTP é uma interface de representação de aplicação para redes heterogêneas.
A interface HSTP exige a implementação de um conjunto de métodos para se comunicar com outros nós na rede. Assim, servidores, clientes e outros nós podem se comunicar entre si de forma confiável e criptografada ponta a ponta. A resolução de nós é baseada no algoritmo de resolução de caminho mais rápido que escrevi.
Hora da história!
Uma pequena visão geral
Pense que estamos na situação de uma mãe e um pai que vivem uma vida feliz. Eles tiveram um bebê! De repente, a mãe precisou tomar pílulas regularmente para curar uma doença. A pílula é um veneno para o bebê. O bebê está chorando e a mãe chama o pai porque ele é a única pessoa de confiança para ajudar o bebê. Mas o pai às vezes não pode ficar em casa, ele precisa fazer algo para alimentar o bebê. O pai ouviu que um leiteiro tem leite fresco e de alta qualidade por um preço baixo. O pai decide tentar falar com o leiteiro, o leiteiro entrega o leite ao pai, o pai leva o leite para a mãe. A mãe dá o leite ao bebê. O bebê está feliz agora e o bebê dorme, a mãe vê que o bebê está feliz.
A família nunca comprou leite de fora, esta é a primeira vez que compram leite para o bebê: (Mamãe não sabe o número do leiteiro, o leiteiro não sabe o endereço da casa)
Como etapas:
0) - O bebê quer beber leite.
1) - O bebê chora para a mãe.
3) - Mamãe vê o bebê chorando.
4) - Mamãe verifica a geladeira. Mamãe vê que o leite acabou. (Mãe confia apenas no Pai)
5) - Mamãe liga para o pai.
6) - Papai liga para o leiteiro.
7) - Leiteiro entrega o leite ao pai.
8) - Papai entrega o leite para a mãe.
9) - Mamãe dá o leite ao bebê.
10) - O bebê bebe o leite.
11) - O bebê está feliz.
12) - O bebê dorme.
13) - Mamãe vê que o bebê está feliz e dorme.
14) - Para poder contatar o leiteiro novamente, a mãe pede ao pai que diga a ela que quer que o leiteiro salve o endereço da casa e o telefone celular da mãe.
15) - Mamãe liga para o pai.
16) - Papai liga para o leiteiro.
17) - Leiteiro salva o endereço da casa e o telefone celular da mãe.
Ops, no dia seguinte o bebê acorda e chora novamente,
0) - O bebê quer beber leite.
1) - O bebê chora para a mãe.
2) - Mamãe vê o bebê chorando.
3) - Mamãe verifica a geladeira. Mamãe vê que o leite acabou. (Mãe confia que o Pai tomou a decisão certa ao dar o endereço ao leiteiro, e o leiteiro tomou a decisão certa ao salvar o endereço da casa e o telefone celular da mãe.)
4) - Mamãe liga para o leiteiro (Mãe confia apenas na decisão do Pai)
5) - Leiteiro entrega o leite para a mãe.
6) - Mamãe dá o leite ao bebê.
7) - O bebê bebe o leite.
8) - O bebê está feliz.
9) - O bebê dorme.
10) - Mamãe vê que o bebê está feliz e dorme.
11) - Mamãe está feliz e agora confia no leiteiro.
este documento que você está lendo é um manifesto para as pessoas da internet se conectarem a outras pessoas confiando que o serviço atende o cliente, e a confiança só pode ser mantida prestando bons serviços. confiança é a chave, mas não é suficiente para sobreviver. o serviço tem que ser confiável, consistente, barato. caso contrário, as pessoas vão decidir não pedir a você novamente.
Então, é fácil, certo? É tão simples de entender, quem são essas pessoas na história?
também,
O bebê está em mãos confiáveis. Não se preocupe. Eles amam você, você entenderá quando crescer e tiver um filho.
// Explicação técnica em etapas em breve, mas não é tão difícil quanto parece.
HSTP é uma interface, que é um conjunto de métodos que devem ser implementados pela camada de aplicação. A interface é usada para se comunicar com outros nós na rede. A interface foi projetada para ser usada em uma rede heterogênea.
O HSTP deve ser implementado em qualquer camada de dispositivos/ambientes conectados à rede.
Um nó HSTP pode ser um servidor TCP, servidor HTTP, arquivo estático ou contrato em qualquer blockchain. Um nó HSTP é capaz de chamar qualquer outro nó HSTP. Assim, os nós podem se chamar livremente, verificar o status do sistema e se comunicar entre si.
HSTP já está implementado em nível de linguagem, por pessoas para pessoas. O inglês é o idioma mais adotado no planeta. JavaScript também pode ser a linguagem mais adotada para ambientes de navegador. Solidity para blockchains baseadas em EVM, hyperbees para redes TCP, etc.
A interface HSTP deve ser aplicada entre quaisquer dispositivos/redes conectados ao HSTP.
Opções de escalonamento infinito: Qualquer dispositivo conectado por TCP pode conversar com qualquer outro dispositivo conectado por TCP via HSTP. Isso significa que qualquer navegador web é servidor de outro nó HSTP, e qualquer navegador web pode chamar qualquer outro navegador web.
Interface de representação de aplicação uniforme: HSTP é uma interface uniforme, que é um conjunto de métodos que devem ser implementados pela camada de aplicação.
Redes heterogêneas: Qualquer participante da rede pode compartilhar recursos com outros participantes. Os recursos podem ser CPU, memória, armazenamento, rede, etc.
Conjugação das versões web Como as tecnologias de blockchain são chamadas de web3, as pessoas começaram a discutir as diferenças entre as webs. Comparar é um comportamento da mentalidade do sistema numérico incremental. Qual é melhor: nenhuma delas. Temos que construir sistemas que possam conversar em um protocolo uniforme, os serviços subjacentes podem ser qualquer coisa. HSTP visa isso.
Interface de Registro A interface de Registro foi projetada para uso na camada TCP, para poder registrar nós de domínio de alto nível na rede. A primeira implementação do relay TCP HSTP resolverá hstp/
O registro tem duas partes da interface:
A implementação do registro precisa de dois nós HSTP:
Interface de Roteador
Para fins de demonstração, usaremos o seguinte exemplo em 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;
}
}
Interface 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);
}
Exemplo de Nó HSTP
Um nó HSTP tem acesso para chamar o roteador pai usando o método super.reply(name, operation, payload). Um nó HSTP também pode chamar nós filhos chamando this.query(payload) ou this.mutation(payload).
Um nó HSTP pode ser um contrato inteligente, um navegador web ou um dispositivo conectado por TCP.
O nó tem capacidade total de adicionar mais nós HSTP à rede ou a si mesmo como subserviços.
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);
}
}
A proposta para Ethereum está em rascunho agora, mas o protocolo tem uma implementação de referência Todo.sol.
Você pode testar o HSTP e experimentar no remix agora.
// 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