
Anwendungsschicht-Protokollframework für vertrauensbasierte, Ende-zu-Ende-verschlüsselte Kommunikation über heterogene Netzwerke, das einheitliche Dienstentdeckung und Routing auf TCP-, HTTP- und Blockchain-Ebenen ermöglicht.
Jetzt testen: https://hstp.ai
npx hstp;
Das Protokoll zielt darauf ab, eine Abstraktionsschicht auf Anwendungsebene für das Hyper Service Transfer Protocol zu entwickeln.
HSTP ist eine Rekursion, so wie die Natur von HSTP. Dieses Protokoll implementiert sich selbst als Schnittstelle. Auf jedem mit dem Internet verbundenen Gerät gibt es eine HSTP-Instanz. Deshalb ist keine Adoption erforderlich. HSTP läuft bereits oben auf dem Internet. Wir haben es jetzt nur geschafft, das Protokoll über Protokolle in heterogenen Netzwerken zu erklären. Vergleichen Sie es daher nicht mit Web2, Web3 oder umgekehrt.
HSTP ist eine Anwendungsrepräsentationsschnittstelle für heterogene Netzwerke.
Die HSTP-Schnittstelle erzwingt die Implementierung einer Reihe von Methoden, um mit anderen Knoten im Netzwerk kommunizieren zu können. So können Dienste, Clients und andere Knoten auf vertrauensbasierte, Ende-zu-Ende-verschlüsselte Weise miteinander kommunizieren. Die Knotenauflösung basiert auf dem schnellsten Pfadauflösungsalgorithmus, den ich geschrieben habe.
Märchenzeit!
Ein kleiner Überblick
Stellen Sie sich vor, wir befinden uns in der Situation, dass eine Mutter und ein Vater ein glückliches Leben führen. Sie bekamen ein Baby! Plötzlich musste die Mutter regelmäßig Tabletten einnehmen, um eine Krankheit zu heilen. Die Pille ist ein Gift für das Baby. Das Baby weint und die Mutter ruft den Vater an, weil er die einzige vertrauenswürdige Person ist, die dem Baby helfen kann. Aber der Vater kann manchmal nicht zu Hause bleiben, er muss etwas tun, um das Baby zu füttern. Der Vater hört, dass ein Milchmann frische und hochwertige Milch zu einem niedrigen Preis hat. Der Vater beschließt, mit dem Milchmann zu sprechen, der Milchmann liefert die Milch an den Vater, der Vater bringt die Milch zur Mutter. Die Mutter gibt dem Baby die Milch. Das Baby ist jetzt glücklich und schläft, die Mutter sieht, dass das Baby glücklich ist.
Die Familie hat noch nie Milch von außerhalb gekauft, dies ist das erste Mal, dass sie Milch für das Baby kaufen: (Mama kennt die Nummer des Milchmanns nicht, der Milchmann kennt die Hausadresse nicht)
As steps:
0) - Baby wants to drink milk.
1) - Baby cries to the mom.
3) - Mom see the baby is crying.
4) - Mom checks the fridge. Mom sees the milk is empty. (Mother is only trusting the Father)
5) - Mom calls the father.
6) - Father calls the milkman.
7) - Milkman delivers the milk to father.
8) - Father delivers the milk to mom.
9) - Mom gives the milk to the baby.
10) - Baby drinks the milk.
11) - Baby is happy.
12) - Baby sleeps.
13) - Mother see the baby is happy and sleeps.
14) - In order to be able to contact the milkman again, the mother asks the father to tell her that she wants the milkman to save the address of the house and the mobile phone of the mother.
15) - Mother calls the father.
16) - Father calls the milkman.
17) - Milkman saves the address of the house and the mobile phone of the mother.
Oops, tomorrow baby wakes up and cries again,
0) - Baby wants to drink milk.
1) - Baby cries to the mom.
2) - Mom see the baby is crying.
3) - Mom checks the fridge. Mom sees the milk is empty. (Mother is trusting the Father had right decision in the first place by giving the address to the milkman, and the milkman had right decision in the first place by saving the address of the house and the mobile phone of the mother.)
4) - Mother calls the milkman (Mother is trusting the Father's decision only)
5) - Milkman delivers the milk to mom.
6) - Mom gives the milk to the baby.
7) - Baby drinks the milk.
8) - Baby is happy.
9) - Baby sleeps.
10) - Mother see the baby is happy and sleeps.
11) - Mother is happy and the mother trust the milkman now.
Dieses Dokument, das Sie lesen, ist ein Manifest für die Internetmenschen, um andere Menschen zu verbinden, indem sie darauf vertrauen, dass der Dienst den Client bedient, und das Vertrauen kann nur durch die Bereitstellung guter Dienste aufrechterhalten werden. Vertrauen ist der Schlüssel, aber nicht genug zum Überleben. Der Dienst muss zuverlässig, konsistent und billig sein. Sonst entscheiden sich die Leute, dich nicht mehr zu fragen.
Also, es ist einfach, oder? Es ist so einfach zu verstehen, wer sind diese Leute in der Geschichte?
außerdem,
Baby ist in sicheren Händen. Keine Sorge. Sie lieben dich, du wirst es verstehen, wenn du erwachsen bist und ein Kind hast.
// Technische Schritterklärung folgt, aber nicht so schwer, wie Sie sehen.
HSTP ist eine Schnittstelle, eine Reihe von Methoden, die von der Anwendungsschicht implementiert werden müssen. Die Schnittstelle wird verwendet, um mit anderen Knoten im Netzwerk zu kommunizieren. Die Schnittstelle ist für die Verwendung in einem heterogenen Netzwerk ausgelegt.
HSTP soll auf jeder Schicht von netzwerkverbundenen Geräten/Umgebungen implementiert werden.
Ein HSTP-Knoten kann ein TCP-Server, HTTP-Server, eine statische Datei oder ein Vertrag in einer beliebigen Chain sein. Ein HSTP-Knoten kann jeden anderen HSTP-Knoten aufrufen. Da die Knoten sich also frei gegenseitig aufrufen können, können sie ihren Systemstatus überprüfen und miteinander kommunizieren.
HSTP ist bereits auf Sprachebene implementiert, von Menschen für Menschen. Englisch ist die am weitesten verbreitete Sprache auf der Erde. JavaScript könnte auch die am weitesten verbreitete Sprache für Browserumgebungen sein. Solidity ist für EVM-basierte Chains, hyperbees für TCP-basierte Netzwerke usw.
Die HSTP-Schnittstelle soll zwischen allen HSTP-verbundenen Geräten/Netzwerken angewendet werden.
Unendliche Skalierungsoptionen: Jedes TCP-verbundene Gerät kann mit jedem anderen TCP-verbundenen Gerät über HSTP sprechen. Das bedeutet, dass jeder Webbrowser ein Server eines anderen HSTP-Knotens ist und jeder Webbrowser jeden anderen Webbrowser aufrufen kann.
Einheitliche Anwendungsrepräsentationsschnittstelle: HSTP ist eine einheitliche Schnittstelle, eine Reihe von Methoden, die von der Anwendungsschicht implementiert werden müssen.
Heterogene Netzwerke: Jeder Teilnehmer des Netzwerks darf seine Ressourcen mit den anderen Teilnehmern des Netzwerks teilen. Die Ressourcen können CPU, Speicher, Festplatte, Netzwerk usw. sein.
Konjugation der Webversionen Da die Blockchain-Technologien als Web3 bezeichnet werden, begannen die Leute über die Unterschiede zwischen den Webs zu diskutieren. Vergleichen ist ein Verhalten der Denkweise inkrementeller numerischer Systeme. Welches ist besser: keines von beiden. Wir müssen Systeme bauen, die in einem einheitlichen Protokoll sprechen können, darunterliegende Dienste können alles sein. HSTP zielt darauf ab.
Registry-Schnittstelle Die Registry-Schnittstelle ist für die Verwendung auf der TCP-Schicht ausgelegt, um Top-Level-TLD-Knoten im Netzwerk registrieren zu können. Die erste Implementierung des HSTP-TCP-Relays wird hstp/ auflösen.
Die Registry hat zwei Teile der Schnittstelle:
Für die Registry-Implementierung werden zwei HSTP-Knoten benötigt:
Router-Schnittstelle
Zu Demonstrationszwecken verwenden wir das folgende Solidity-Beispiel:
// 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-Schnittstelle
// 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);
}
Beispiel HSTP-Knoten
Ein HSTP-Knoten hat Zugriff auf den übergeordneten Router über die Methode super.reply(name, operation, payload). Ein HSTP-Knoten kann auch untergeordnete Knoten aufrufen, indem er die Methoden this.query(payload) oder this.mutation(payload) aufruft.
Ein HSTP-Knoten kann ein Smart Contract, ein Webbrowser oder ein TCP-verbundenes Gerät sein.
Der Knoten hat die volle Fähigkeit, dem Netzwerk oder sich selbst weitere HSTP-Knoten als Unterdienste hinzuzufügen.
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);
}
}
Der Ethereum-Vorschlag ist jetzt ein Entwurf, aber das Protokoll hat eine Referenzimplementierung Todo.sol.
Sie können HSTP jetzt testen und auf Remix ausprobieren.
// 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