
Фреймворк протокола прикладного уровня для доверительного сквозного шифрованного взаимодействия в гетерогенных сетях, обеспечивающий единообразное обнаружение сервисов и маршрутизацию на уровнях TCP, HTTP и блокчейна.
Попробуйте сейчас: https://hstp.ai
npx hstp;
Протокол направлен на разработку абстракции прикладного уровня для Hyper Service Transfer Protocol.
HSTP — это рекурсия, как и природа HSTP. Этот протокол реализует себя как интерфейс. На каждом устройстве, подключённом к интернету, существует экземпляр HSTP. Поэтому принятие протокола не требуется. HSTP уже работает поверх интернета. Нам только сейчас удалось объяснить протокол через протоколы в гетерогенных сетях. Поэтому не сравнивайте с web2, web3 или наоборот.
HSTP — это интерфейс представления приложений для гетерогенных сетей.
Интерфейс HSTP обязывает реализовать набор методов для возможности взаимодействия с другими узлами сети. Таким образом, сервисы, клиенты и другие узлы могут общаться друг с другом доверительным, сквозным зашифрованным способом. При этом разрешение узлов основано на алгоритме поиска кратчайшего пути, который я написал.
Время для истории!
Краткий обзор
Представьте, что живут мама и папа, и они счастливы. У них родился ребёнок! Внезапно маме нужно регулярно принимать таблетки для лечения болезни. Таблетка — яд для ребёнка. Ребёнок плачет, мама звонит папе, потому что он единственный, кому она доверяет помочь малышу. Но папа иногда не может быть дома, ему нужно чем-то кормить ребёнка. Папа слышал, что у одного молочника свежее и качественное молоко по низкой цене. Папа решает поговорить с молочником, молочник доставляет молоко папе, папа приносит молоко маме. Мама даёт молоко ребёнку. Ребёнок счастлив и засыпает, мама видит, что ребёнок счастлив.
Семья никогда не покупала молоко на стороне, это первый раз, когда они покупают молоко для ребёнка: (Мама не знает номера молочника, молочник не знает домашнего адреса)
По шагам:
0) - Ребёнок хочет пить молоко.
1) - Ребёнок плачет маме.
2) - Мама видит, что ребёнок плачет.
3) - Мама проверяет холодильник. Мама видит, что молока нет. (Мама доверяет только папе)
4) - Мама звонит папе.
5) - Папа звонит молочнику.
6) - Молочник доставляет молоко папе.
7) - Папа доставляет молоко маме.
8) - Мама даёт молоко ребёнку.
9) - Ребёнок пьёт молоко.
10) - Ребёнок счастлив.
11) - Ребёнок спит.
12) - Мама видит, что ребёнок счастлив и спит.
13) - Чтобы снова связаться с молочником, мама просит папу сказать молочнику, чтобы он сохранил адрес дома и номер мобильного телефона мамы.
14) - Мама звонит папе.
15) - Папа звонит молочнику.
16) - Молочник сохраняет адрес дома и номер мобильного телефона мамы.
Ой, на следующий день ребёнок просыпается и снова плачет,
0) - Ребёнок хочет пить молоко.
1) - Ребёнок плачет маме.
2) - Мама видит, что ребёнок плачет.
3) - Мама проверяет холодильник. Мама видит, что молока нет. (Мама доверяет, что папа изначально принял правильное решение, дав адрес молочнику, и молочник изначально принял правильное решение, сохранив адрес дома и номер телефона мамы.)
4) - Мама звонит молочнику (Мама доверяет только решению папы)
5) - Молочник доставляет молоко маме.
6) - Мама даёт молоко ребёнку.
7) - Ребёнок пьёт молоко.
8) - Ребёнок счастлив.
9) - Ребёнок спит.
10) - Мама видит, что ребёнок счастлив и спит.
11) - Мама счастлива и теперь доверяет молочнику.
этот документ, который вы читаете, является манифестом для интернет-сообщества, чтобы соединять людей, доверяя сервису, который обслуживает клиента, и доверие может поддерживаться только предоставлением качественных услуг. доверие — ключ, но для выживания его недостаточно. услуга должна быть надёжной, последовательной, дешёвой. иначе люди решат больше к вам не обращаться.
Итак, это просто, правда? Так легко понять, кто эти люди в истории?
также,
Ребёнок в надёжных руках. Не о чем беспокоиться. Они любят тебя, ты поймёшь, когда вырастешь и у тебя будет свой ребёнок.
// Техническое объяснение шагов скоро, но оно не такое сложное, как кажется.
HSTP — это интерфейс, набор методов, которые должны быть реализованы на прикладном уровне. Интерфейс используется для взаимодействия с другими узлами сети. Интерфейс предназначен для использования в гетерогенной сети.
HSTP должен быть реализован на любом уровне сетевых устройств/среды.
Узел HSTP может быть TCP-сервером, HTTP-сервером, статическим файлом или контрактом в любой цепочке. Один узел HSTP может вызывать любой другой узел HSTP. Таким образом, узлы могут свободно вызывать друг друга, проверять состояние своих систем и общаться между собой.
HSTP уже реализован на уровне языка, людьми для людей. Английский — наиболее распространённый язык на Земле. JavaScript, возможно, также является наиболее распространённым языком для браузерных сред. Solidity — для EVM-совместимых цепочек, hyperbees — для TCP-сетей и т.д.
Интерфейс HSTP должен применяться между любыми устройствами/сетями, подключёнными к HSTP.
Бесконечные возможности масштабирования: Любое устройство с TCP может общаться с любым другим устройством с TCP через HSTP. Это означает, что любой веб-браузер является сервером другого узла HSTP, и любой веб-браузер может вызывать любой другой веб-браузер.
Универсальный интерфейс представления приложений: HSTP — это универсальный интерфейс, набор методов, которые должны быть реализованы на прикладном уровне.
Гетерогенные сети: Любому участнику сети разрешается делиться ресурсами с другими участниками сети. Ресурсами могут быть процессор, память, хранилище, сеть и т.д.
Объединение версий веба Поскольку технологии блокчейна называют web3, люди начали обсуждать различия между вебами. Сравнение — это поведение, свойственное мышлению, основанному на инкрементной числовой системе образования. Какой лучше? Никакой. Мы должны создавать системы, которые могут общаться по единому протоколу, а внутри службы могут быть любыми. HSTP нацелен на это.
Интерфейс реестра Интерфейс реестра предназначен для использования на TCP-уровне, чтобы можно было регистрировать узлы верхнего уровня в сети. Первая реализация TCP-ретранслятора HSTP будет разрешать hstp/
Реестр состоит из двух частей интерфейса:
Реализация реестра требует два узла HSTP:
Интерфейс маршрутизатора
Для демонстрационных целей мы будем использовать следующий пример на 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;
}
}
Интерфейс 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);
}
Пример узла HSTP
Узел HSTP имеет доступ к вызову родительского маршрутизатора через метод super.reply(name, operation, payload). Узел HSTP также может вызывать дочерние узлы, вызывая this.query(payload) или this.mutation(payload).
Узел HSTP может быть смарт-контрактом, веб-браузером или устройством с TCP.
Узел обладает полной возможностью добавлять новые узлы HSTP в сеть или в себя как подсервисы.
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);
}
}
Предложение для Ethereum пока в черновике, но протокол имеет эталонную реализацию Todo.sol.
Вы можете протестировать HSTP и попробовать его на Remix прямо сейчас.
// 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