
搜索引擎Typesense的使用
注: 使用语言 python一:Typesense介绍Typesense将数据保存在磁盘当中,建立的索引保存内存中 Typesense是一个开源的、有容错能力的搜索引擎,针对实时(通常低于 50 毫秒)搜索即键入体验和开发人员生产力进行了优化。 Typesense做了一个对于其他搜索引擎的对比。(文档版,表格版) 索引数据速度以及资源占用: 对于220万份食谱(一份食谱相当于下文中提到的一个document)在 Typesense 中进行索引时占用了大约 900MB 的 RAM(内存)花了 3.6 分钟索引所有 220 万条记录在具有 4 个 vCPU 的服务器上,Typesense 每秒能够处理104 个并发搜索查询,平均搜索处理时间为11毫秒。RAM(内存)方面:如果数据量为 X MB大小,则需要占用2X-3XRAM(2-3倍数据量大小的占用) 如需深入了解可以查阅官方文档二:Typesense的用法1:使用typesense有两种方法使用自带的云服务,配置运行简单(收费)在本地安装typesense,自己维护配置(本文使用这种方法)2:安装启动typesense(1):下载...

Mastodon 和 Nostr:两种不同的社交产品,一样的去中心化愿景
概述:本文将分析和讲解Mastodon和Nostr这两个社交媒体平台,重点关注它们的产品应用和技术层面,以了解它们如何实现去中心化社交,并探讨它们在这方面的优势。我们将深入了解它们的架构设计和实现思路,并比较它们在用户体验、隐私保护、安全性等方面的差异。通过本文的分析和总结,读者将更好地了解这两个平台,以及它们在去中心化社交方面的贡献和发展。MastodonMastodon(长毛象)成立于2016年,是由Eugen Rochko创建的一个开源的微博客(microblog)平台,旨在为用户提供去中心化、隐私保护的社交体验。首先对涉及到的一些名词进行简单解释:联邦(federation):联邦是去中心化的一种形式。在联邦中,不是所有人共同使用一个中心服务,而是使用多个不限人数的服务器。ActivityPub:Mastodon使用一种标准化的、开放的协议来实现站点之间的互动,这种协议叫做ActivityPub。任何通过ActivityPub实现互联的软件都可以与Mastodon无缝通信,就像Mastodon站点之间的通信一样。实例(instance):每个人都可以在自己服务器上配置运行...
使用web3.py与智能合约交互
注:本篇文章交互用到的合约以及 infura 的创建与项目链接在本篇文章中提到一:安装二:使用1:通过infura链接来与以太坊合约交互输出为True话代表链接成功infura截图https://<your-provider-url>连接成功之后我们把本篇文章中的abi与部署的合约地址用到这里 abi文件(rent_nft_test.json)在 brownie_test/build/contracts 中 那么如何获取到该合约中发生得mint/transfer等信息from web3 import Web3 import json # 首先通过infura节点链接 w3=Web3(Web3.HTTPProvider('https://<your-provider-url>')) # 合约abi文件 with open('./brownie_test/build/contracts/ERC4907.json', 'r') as f: abi_contract = json.loads(f.read())['abi'] # 与infura节点链接成功后 指定address...

The graph 工作原理
Graph 根据subgraph描述(称为subgraph.graphq)学习什么以及如何索引以太坊数据。子图描述定义了subgraph感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。

该流程遵循以下步骤:
去中心化应用程序通过智能合约上的交易将数据添加到以太坊。
智能合约在处理交易时发出一个或多个事件。
Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。
Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。
去中心化应用程序使用节点的GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复
(来自The graph官网)
1: The Graph
2: OpenSea api
3:Python
1:使用The Graph编写Subgraph来获取各个平台最新的 transfer 的parcel id, tx_hash等信息
2:使用python调用在 the graph 中编写的subgraph获取最新的 transfer 的 parcel id
3:通过opensea api 获取该 parcel id 的交易详细数据
在 The Graph Subgraph页面创建Subgraph

选择Indexed Chain(我这里选择以太坊主网)→ Subgraph名字 → continue

(进入创建的Subgraph页面右侧会有流程指南)
首先安装 the graph cli

命令执行成功后,输入graph,有以下提示代表安装成功。

在本地创建Subgraph项目(otherside是项目名字)


回车之后在选择Ethereum network这里选择mainnet (刚刚在The Graph官网创建的选择Ethereum Mainnet)

其余的默认即可。
创建项目成功之后进入到项目目录使用VSCode编辑代码


-- 整体编写分两步:
-- 第一步:只需要关心schema.graphql和subgraph.yaml两个文件的作用以及用法。
-- 第二步:需要知道 ./src/contract.ts 的作用以及用法
schema.graphql:
定义子图的schema。 GraphQL schema是使用 GraphQL 接口定义语言定义的。 需要具体了解GraphQL schema可以查看参考文档 GraphQL API 。
直白的讲,我们在该文件定义好每个实体(下图 Transfer和Parcel)之后,The Graph官网的项目中也就会暴露出我们代码中定义的实体

根据这些查询参数要获取想要的信息

schema.graphql在定义好之后只是一个用于我们查询的模板。但是数据从哪里来以及如何匹配,就需要用到subgraph.yaml 和 ./src/contract.ts
定义了subgraph索引的智能合约,这些合约中需要关注的事件,以及如何将事件数据映射到 Graph 节点存储并允许查询的实体。

(创世块的查找:在ethscan中输入otherside合约地址)


eventHandlers:
Transfer 对应abi中的Transfer事件

handleTransfer 对应 ./src/contract.ts中我们定义的function(在下文会提到),现在先写到这里
写好schema.graphql和subgraph.yaml之后回到终端执行graph codegen命令

最后一步来做数据的匹配

代码完成之后回到The Graph官网创建的项目中,继续右侧的流程,执行最后一步

之后在The Graph官网会看见自己的版本号
当进度条到100%后代表otherside从设置的创世块到目前最新的块的数据都已经匹配到,如果有新块生成同样也会自动匹配


至此 the graph 的 subgraph已经部署完成。
使用python来请求数据
python这里不多做解释,使用requests来请求接口
import requests
url = "创建的subgraph -->detail中的DEVELOPMENT QUERY URL"
query = """
{
transfers(orderBy: date, orderDirection: desc, first: 50){
id
date
parcel{
id
}
}
}
"""
requests_res = requests.post(url, json={'query': query})
使用 opensea api 获取交易的数据需要4个参数
token_id: parcel id (the graph 获取的 parcel id---例如上张图片中的 “74425”)
asset_contract_address: 平台的合约地址*(otherside:0x34d85c9cdeb23fa97cb08333b511ac86e1c4e258)*

event_type: 用于检索我们获取该parcel id什么类型的数据 (在the graph编写subgraph中获取的是transfer事件的信息,我们通过这个参数来检索获取交易的信息。)由于目的要获取交易数据,所以选择successful。

API-KEY: 需要向opensea平台申请!

调用方法同样使用python requests,再经过处理获取出buyer,seller,交易金额等数据 ,也可以从返回的数据中获取其他需要的数据。
由于部署了subgraph之后,会自动实时匹配链上新的块的信息。所以可以使用python写一个脚本,然后放到crontab中来定时调用该接口以获取新的transfer的parcel id,再用opensea event_type中的successful参数过滤出交易的信息(因为subgraph中定义的实体Transfer的id是txhash--唯一值,可以使用它来记录每一次取到最新值的位置)
注: 开发过程中参考的文档

The graph 工作原理
Graph 根据subgraph描述(称为subgraph.graphq)学习什么以及如何索引以太坊数据。子图描述定义了subgraph感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。

该流程遵循以下步骤:
去中心化应用程序通过智能合约上的交易将数据添加到以太坊。
智能合约在处理交易时发出一个或多个事件。
Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。
Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。
去中心化应用程序使用节点的GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复
(来自The graph官网)
1: The Graph
2: OpenSea api
3:Python
1:使用The Graph编写Subgraph来获取各个平台最新的 transfer 的parcel id, tx_hash等信息
2:使用python调用在 the graph 中编写的subgraph获取最新的 transfer 的 parcel id
3:通过opensea api 获取该 parcel id 的交易详细数据
在 The Graph Subgraph页面创建Subgraph

选择Indexed Chain(我这里选择以太坊主网)→ Subgraph名字 → continue

(进入创建的Subgraph页面右侧会有流程指南)
首先安装 the graph cli

命令执行成功后,输入graph,有以下提示代表安装成功。

在本地创建Subgraph项目(otherside是项目名字)


回车之后在选择Ethereum network这里选择mainnet (刚刚在The Graph官网创建的选择Ethereum Mainnet)

其余的默认即可。
创建项目成功之后进入到项目目录使用VSCode编辑代码


-- 整体编写分两步:
-- 第一步:只需要关心schema.graphql和subgraph.yaml两个文件的作用以及用法。
-- 第二步:需要知道 ./src/contract.ts 的作用以及用法
schema.graphql:
定义子图的schema。 GraphQL schema是使用 GraphQL 接口定义语言定义的。 需要具体了解GraphQL schema可以查看参考文档 GraphQL API 。
直白的讲,我们在该文件定义好每个实体(下图 Transfer和Parcel)之后,The Graph官网的项目中也就会暴露出我们代码中定义的实体

根据这些查询参数要获取想要的信息

schema.graphql在定义好之后只是一个用于我们查询的模板。但是数据从哪里来以及如何匹配,就需要用到subgraph.yaml 和 ./src/contract.ts
定义了subgraph索引的智能合约,这些合约中需要关注的事件,以及如何将事件数据映射到 Graph 节点存储并允许查询的实体。

(创世块的查找:在ethscan中输入otherside合约地址)


eventHandlers:
Transfer 对应abi中的Transfer事件

handleTransfer 对应 ./src/contract.ts中我们定义的function(在下文会提到),现在先写到这里
写好schema.graphql和subgraph.yaml之后回到终端执行graph codegen命令

最后一步来做数据的匹配

代码完成之后回到The Graph官网创建的项目中,继续右侧的流程,执行最后一步

之后在The Graph官网会看见自己的版本号
当进度条到100%后代表otherside从设置的创世块到目前最新的块的数据都已经匹配到,如果有新块生成同样也会自动匹配


至此 the graph 的 subgraph已经部署完成。
使用python来请求数据
python这里不多做解释,使用requests来请求接口
import requests
url = "创建的subgraph -->detail中的DEVELOPMENT QUERY URL"
query = """
{
transfers(orderBy: date, orderDirection: desc, first: 50){
id
date
parcel{
id
}
}
}
"""
requests_res = requests.post(url, json={'query': query})
使用 opensea api 获取交易的数据需要4个参数
token_id: parcel id (the graph 获取的 parcel id---例如上张图片中的 “74425”)
asset_contract_address: 平台的合约地址*(otherside:0x34d85c9cdeb23fa97cb08333b511ac86e1c4e258)*

event_type: 用于检索我们获取该parcel id什么类型的数据 (在the graph编写subgraph中获取的是transfer事件的信息,我们通过这个参数来检索获取交易的信息。)由于目的要获取交易数据,所以选择successful。

API-KEY: 需要向opensea平台申请!

调用方法同样使用python requests,再经过处理获取出buyer,seller,交易金额等数据 ,也可以从返回的数据中获取其他需要的数据。
由于部署了subgraph之后,会自动实时匹配链上新的块的信息。所以可以使用python写一个脚本,然后放到crontab中来定时调用该接口以获取新的transfer的parcel id,再用opensea event_type中的successful参数过滤出交易的信息(因为subgraph中定义的实体Transfer的id是txhash--唯一值,可以使用它来记录每一次取到最新值的位置)
注: 开发过程中参考的文档

搜索引擎Typesense的使用
注: 使用语言 python一:Typesense介绍Typesense将数据保存在磁盘当中,建立的索引保存内存中 Typesense是一个开源的、有容错能力的搜索引擎,针对实时(通常低于 50 毫秒)搜索即键入体验和开发人员生产力进行了优化。 Typesense做了一个对于其他搜索引擎的对比。(文档版,表格版) 索引数据速度以及资源占用: 对于220万份食谱(一份食谱相当于下文中提到的一个document)在 Typesense 中进行索引时占用了大约 900MB 的 RAM(内存)花了 3.6 分钟索引所有 220 万条记录在具有 4 个 vCPU 的服务器上,Typesense 每秒能够处理104 个并发搜索查询,平均搜索处理时间为11毫秒。RAM(内存)方面:如果数据量为 X MB大小,则需要占用2X-3XRAM(2-3倍数据量大小的占用) 如需深入了解可以查阅官方文档二:Typesense的用法1:使用typesense有两种方法使用自带的云服务,配置运行简单(收费)在本地安装typesense,自己维护配置(本文使用这种方法)2:安装启动typesense(1):下载...

Mastodon 和 Nostr:两种不同的社交产品,一样的去中心化愿景
概述:本文将分析和讲解Mastodon和Nostr这两个社交媒体平台,重点关注它们的产品应用和技术层面,以了解它们如何实现去中心化社交,并探讨它们在这方面的优势。我们将深入了解它们的架构设计和实现思路,并比较它们在用户体验、隐私保护、安全性等方面的差异。通过本文的分析和总结,读者将更好地了解这两个平台,以及它们在去中心化社交方面的贡献和发展。MastodonMastodon(长毛象)成立于2016年,是由Eugen Rochko创建的一个开源的微博客(microblog)平台,旨在为用户提供去中心化、隐私保护的社交体验。首先对涉及到的一些名词进行简单解释:联邦(federation):联邦是去中心化的一种形式。在联邦中,不是所有人共同使用一个中心服务,而是使用多个不限人数的服务器。ActivityPub:Mastodon使用一种标准化的、开放的协议来实现站点之间的互动,这种协议叫做ActivityPub。任何通过ActivityPub实现互联的软件都可以与Mastodon无缝通信,就像Mastodon站点之间的通信一样。实例(instance):每个人都可以在自己服务器上配置运行...
使用web3.py与智能合约交互
注:本篇文章交互用到的合约以及 infura 的创建与项目链接在本篇文章中提到一:安装二:使用1:通过infura链接来与以太坊合约交互输出为True话代表链接成功infura截图https://<your-provider-url>连接成功之后我们把本篇文章中的abi与部署的合约地址用到这里 abi文件(rent_nft_test.json)在 brownie_test/build/contracts 中 那么如何获取到该合约中发生得mint/transfer等信息from web3 import Web3 import json # 首先通过infura节点链接 w3=Web3(Web3.HTTPProvider('https://<your-provider-url>')) # 合约abi文件 with open('./brownie_test/build/contracts/ERC4907.json', 'r') as f: abi_contract = json.loads(f.read())['abi'] # 与infura节点链接成功后 指定address...
Share Dialog
Share Dialog

Subscribe to Yooma

Subscribe to Yooma
<100 subscribers
<100 subscribers
No activity yet