立即尝试:https://hstp.ai
npx hstp;
该协议旨在为超服务传输协议开发一种应用层抽象。
HSTP 是一种递归,正如 HSTP 的本质。该协议将自身实现为一个接口。在每个连接到互联网的设备上,都存在一个 HSTP 实例。因此无需采用。HSTP 已经运行在互联网之上。我们现在才刚刚实现了在异构网络上通过协议解释协议。所以不要将其与 web2、web3 或类似事物进行比较。
HSTP 是用于异构网络的应用表示接口。
HSTP 接口强制实现一组方法,以便能够与网络中的其他节点通信。这样,服务、客户端和其他节点可以通过基于信任、端到端加密的方式相互通信。届时,节点解析基于我编写的最快路径解析算法。
讲故事时间!
一个小概述
想象一下,我们处于一个妈妈和爸爸幸福生活的情景中。 他们生了一个宝宝! 突然,妈妈需要定期吃药来治疗一种疾病。药片对宝宝有毒。宝宝哭了,妈妈打电话给爸爸,因为他是唯一可信赖的能帮助宝宝的人。但爸爸有时不能待在家里,他需要做点什么来喂养宝宝。爸爸听说有个送奶工有新鲜优质的牛奶,价格低廉。爸爸决定试着和送奶工谈谈,送奶工把牛奶送到爸爸那里,爸爸把牛奶带给妈妈。妈妈把牛奶给宝宝。宝宝现在开心了,宝宝睡着了,妈妈看到宝宝开心。
这家人从未从外面买过牛奶,这是他们第一次为宝宝买牛奶: (妈妈不知道送奶工的电话,送奶工不知道家庭地址)
步骤如下:
0) - 宝宝想喝奶。
1) - 宝宝向妈妈哭。
3) - 妈妈看到宝宝在哭。
4) - 妈妈检查冰箱。妈妈看到奶没了。(妈妈只信任爸爸)
5) - 妈妈打电话给爸爸。
6) - 爸爸打电话给送奶工。
7) - 送奶工把牛奶送到爸爸那里。
8) - 爸爸把牛奶送到妈妈那里。
9) - 妈妈把奶给宝宝。
10) - 宝宝喝奶。
11) - 宝宝开心了。
12) - 宝宝睡了。
13) - 妈妈看到宝宝开心地睡着了。
14) - 为了能再次联系送奶工,妈妈让爸爸告诉送奶工,她希望送奶工保存家庭地址和妈妈的手机号码。
15) - 妈妈打电话给爸爸。
16) - 爸爸打电话给送奶工。
17) - 送奶工保存了家庭地址和妈妈的手机号码。
哎呀,第二天宝宝醒来又哭了,
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 连接的设备都可以通过 HSTP 与任何其他 TCP 连接的设备对话。这意味着任何 web 浏览器都是另一个 HSTP 节点的服务端,并且任何 web 浏览器都可以调用任何其他 web 浏览器。
统一的应用程序表示接口: HSTP 是一个统一接口,即一组必须由应用层实现的方法。
异构网络: 网络的任何参与者都允许与其他参与者共享资源。资源可以是 CPU、内存、存储、网络等。
Web 版本的融合 由于区块链技术被称为 web3,人们开始讨论不同 web 版本之间的差异。比较是递增数值系统教育思维的一种行为。哪个更好:都不是。我们必须构建能够通过统一协议对话的系统,底层服务可以是任何东西。HSTP 的目标正是如此。
注册接口 注册接口设计用于 TCP 层,以便在网络中注册顶级 tld 节点。HSTP TCP 中继的第一个实现将解析 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);
// 向树的上层和下层遍历。
// 尝试为给定操作找到最近的路径。
// 如果路由在 HSTP 节点上注册,则从子节点回复。
// 如果节点本身没有该路由,则询问父节点。
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";
// 链上服务的无状态超服务传输协议。
// 将在 EIP-4337 最终阶段时实现。
// 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 节点可以是智能合约、web 浏览器或 TCP 连接的设备。
节点完全有能力向网络添加更多 HSTP 节点,或者作为子服务添加到自身。
HSTP HSTP
/ \ / \
HSTP HSTP HSTP
/ \
HSTP HSTP
/ /
HSTP HSTP
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "hstp/HSTP.sol";
// 链上服务的无状态超服务传输协议。
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;
}
// 覆盖 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);
}
}
以太坊提案目前是草稿,但该协议已有参考实现 Todo.sol。
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "hstp/HSTP.sol";
// 链上服务的无状态超服务传输协议。
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;
}
// 覆盖 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 通用公共许可证 V3