substrate轻松学2:区块链与substrate

12 篇文章 6 订阅
3 篇文章 1 订阅

从2008年中本聪发布《比特币:一种点对点的电子现金系统》开始,区块链技术开始进入我们的世界,区块链防篡改、去信任等等概念更是被炒的热火朝天。那么什么是区块链,它能做什么?到底有没有前途?这不是我们这节要回答的问题(这个机灵是不是抖的很ok?😃)我们这节要讲的,是一个区块链系统应用的大体表现形式,有些概念或者表达可能不太准确,但是没有关系,这节的内容只是为了帮我们能更好的学习substrate而已。

1 区块链系统是什么样的

很多资料都会提到这点,区块链是一个分布式的数据库,本质是一个分布式的账本。既然是分布式的,那当然具备分布式的特征,既然是数据库,是账本,那么当然能够记录数据。关于区块链是怎样记账的文档很多,此处我们不再累述。

要学习substrate,区块链系统具体是怎么去信任、防篡改的,我们可以不用了解太深,但是区块链系统大概长什么样子,是必须要知道的。就像我们要用积木搭一个城堡,可以不用知道从头开始建城堡的实际步骤,但是城堡的大概样子还是要知道的,否则即使有积木也不知道怎么搭。

1.1 区块链的大体样貌

下图就是区块链系统的大体样貌(表现形式)。
在这里插入图片描述

从上图中,我们可以看出区块链的几个特点:

  • 是一个分布式的系统;
  • 每个节点都有一个账本;
  • 每个节点的账本都基本上按照同样的逻辑记账;
  • 用户可以访问其中的任何一个节点就可以访问系统。(为了好理解,这里全是全节点)

1.2 区块链程序的组织结构

上面我们是用户试图看到的区块链系统的表现形式,这里我们看看从代码实现层面区块链的组成。下面是以太坊的架构图:
在这里插入图片描述

以太坊很具有代表性,大部分的区块链通常都是这个架构(所以这张图要好好记住,比较有代表性)。不过我们放这张图的目的并不是为了后面实现这张图里类似的组件。

2 substrate与区块链开发

如果没有substrate,那么我们开发一条区块链基本上是要自己来实现网络、共识、交易池等等组件的,也就是前面区块链架构里面的那些东西。而substrate里面就是像提供积木一样提供了这些组件,然后我们可以像搭积木一样根据需求搭建出一条条的区块链。

因为要构成一条链,无非就是共识、网络、密码算法库、rpc这些东西,每个团队开发区块链的时候,可能用的东西都差不多,只有某些和自己特定业务相关的模块才会不一样。而substrate中已经提供了一些基础的东西以及一些写好的模块,开发者可以把现成的模块拿来用,只需要开发自己特定的逻辑就可以了。

阅读substrate轻松学系列其它文章:
substrate轻松学1:前言

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Substrate 区块链上调用 HTTP 可以通过使用 Substrate 提供的 `http` 模块来实现。`http` 模块允许你在 Substrate 运行时中发送 HTTP 请求并处理响应。 首先,你需要在你的 Substrate 运行时的 Cargo.toml 文件中添加 `http` 依赖: ```toml [dependencies] http = "0.2" ``` 接下来,你可以在你的 Substrate 运行时模块中使用 `http` 模块来发送 HTTP 请求。以下是一个简单的例子,演示如何使用 `http` 模块发送 GET 请求并处理响应: ```rust use http::Request; use http::Response; use http::header::HeaderValue; /// 发送 HTTP GET 请求并处理响应 fn send_http_request() { // 构建 HTTP 请求 let request = Request::builder() .uri("https://example.com") .header("User-Agent", HeaderValue::from_static("Substrate")) .body(()) .expect("failed to build request"); // 发送 HTTP 请求并获取响应 let response = request .send() .expect("failed to send request"); // 处理响应 match response.status().as_u16() { 200 => { // 响应状态码为 200 OK let body = response .into_body() .concat2() .wait() .expect("failed to read response body"); // 处理响应体 println!("Response body: {:?}", body); }, _ => { // 处理其他响应状态码 println!("Received non-200 response: {:?}", response.status()); } } } ``` 请注意,上述示例仅演示了如何发送简单的 GET 请求并处理响应。你可以根据你的需求自定义请求头、请求方法和请求体。此外,你还可以使用其他 HTTP 方法(如 POST、PUT 等)来发送不同类型的请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值