
搜索引擎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):每个人都可以在自己服务器上配置运行...

使用 The Graph 获取各大元宇宙项目交易信息
The graph 工作原理 Graph 根据subgraph描述(称为subgraph.graphq)学习什么以及如何索引以太坊数据。子图描述定义了subgraph感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。该流程遵循以下步骤:去中心化应用程序通过智能合约上的交易将数据添加到以太坊。智能合约在处理交易时发出一个或多个事件。Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。去中心化应用程序使用节点的GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复 (来自The ...

搜索引擎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):每个人都可以在自己服务器上配置运行...

使用 The Graph 获取各大元宇宙项目交易信息
The graph 工作原理 Graph 根据subgraph描述(称为subgraph.graphq)学习什么以及如何索引以太坊数据。子图描述定义了subgraph感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。该流程遵循以下步骤:去中心化应用程序通过智能合约上的交易将数据添加到以太坊。智能合约在处理交易时发出一个或多个事件。Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。去中心化应用程序使用节点的GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复 (来自The ...

Subscribe to Yooma

Subscribe to Yooma
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
注:本篇文章交互用到的合约以及 infura 的创建与项目链接在本篇文章中提到

infura截图

连接成功之后我们把本篇文章中的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以及abi与该合约建立连接
# address是合约地址 abi是该合约对应的abi
my_contract = w3.eth.contract(address='0xADD22a3efa6f22dd60DF65CDfE096da0366eE002', abi=abi_contract)
# 现在来测试获取到的该合约的信息
# ownerOf是合约中定义的方法,获取tokenId为1的owner地址,通过functions来调用它
print('token_id 1 owner: 'my_contract.functions.ownerOf(1).call())
# result
>>> token_id 1 owner: 0x60EA96f57B3a5715A90DAe1440a78f8bb339C92e
# 这个地址是在我部署该合约时mint tokenId为1的nft的钱包地址
# 证明获取该合约信息成功
上面获取合约信息成功,下面来给合约进行一次mint事件
接上面代码:
# 要给address去mint一个nft
address = '0x60EA96f57B3a5715A90DAe1440a78f8bb339C92e
# 生成nonce
nonce = w3.eth.getTransactionCount(address)
# mint token id 为 2 的nft,
# 通过functions调用mint

# buildTransaction构建交易字典,以此来传入合约中需要接受得msg.sender(address)
mint = my_contract.functions.mint(2).build_transaction({'from': address, 'nonce': nonce})
# 签名
sign = w3.eth.account.sign_transaction(mint, '钱包地址私钥,在metamask查看')
# 给链上发送这次mint
w3.eth.send_raw_transaction(sign.rawTransaction)
关于nonce:
为了防止交易重播,ETH(ETC)节点要求每笔交易必须有一个nonce数值。每一个账户从同一个节点发起交易时,这个nonce值从0开始计数,发送一笔nonce对应加1。当前面的nonce处理完成之后才会处理后面的nonce。
在 send_raw_transaction 后去goerli测试官网查看该合约会有一次新的mint记录


再来测试下给该nft设定一个user(租赁此nft的用户)

python:就像发送一次mint请求一样来setUser
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以及abi与该合约建立连接
# address是合约地址 abi是该合约对应的abi
my_contract = w3.eth.contract(address='0xADD22a3efa6f22dd60DF65CDfE096da0366eE002', abi=abi_contract)
# nft owner
address = '0x60EA96f57B3a5715A90DAe1440a78f8bb339C92e
# 生成nonce
nonce = w3.eth.getTransactionCount(address)
# 上面代码与上方的一样
# 通过chain.time(来获取链上时间)
from brownie import chain
# 调用setUser 给传入接收的值只有这里与mint是有区别的
# 1: nft tokenId
# 0x450AF1Ea236932c0e18B53BC1FeB15E47AA292df user地址
# 到期时间
# 到期后这个nft user地址自动清零
x = my_contract.functions.setUser(1, '0x450AF1Ea236932c0e18B53BC1FeB15E47AA292df', 10*60+chain.time()).build_transaction({'from': address, 'nonce': nonce})
signed_txn = w3.eth.account.sign_transaction(x, '钱包地址私钥,在metamask查看')
w3.eth.send_raw_transaction(signed_txn.rawTransaction)

此时在代码中查看下tokenId是1的nft的user
print(my_contract.functions.userOf(1).call())
# result
>>>0x450AF1Ea236932c0e18B53BC1FeB15E47AA292df
以上是使用web3.py与智能合约交互的方式,流程如此,如需进行Transfer事件或获取其他信息可以修改mint,ownerOf等(合约中定义的function以及event),也可以查阅官方文档找到更多的操作。
注:本篇文章交互用到的合约以及 infura 的创建与项目链接在本篇文章中提到

infura截图

连接成功之后我们把本篇文章中的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以及abi与该合约建立连接
# address是合约地址 abi是该合约对应的abi
my_contract = w3.eth.contract(address='0xADD22a3efa6f22dd60DF65CDfE096da0366eE002', abi=abi_contract)
# 现在来测试获取到的该合约的信息
# ownerOf是合约中定义的方法,获取tokenId为1的owner地址,通过functions来调用它
print('token_id 1 owner: 'my_contract.functions.ownerOf(1).call())
# result
>>> token_id 1 owner: 0x60EA96f57B3a5715A90DAe1440a78f8bb339C92e
# 这个地址是在我部署该合约时mint tokenId为1的nft的钱包地址
# 证明获取该合约信息成功
上面获取合约信息成功,下面来给合约进行一次mint事件
接上面代码:
# 要给address去mint一个nft
address = '0x60EA96f57B3a5715A90DAe1440a78f8bb339C92e
# 生成nonce
nonce = w3.eth.getTransactionCount(address)
# mint token id 为 2 的nft,
# 通过functions调用mint

# buildTransaction构建交易字典,以此来传入合约中需要接受得msg.sender(address)
mint = my_contract.functions.mint(2).build_transaction({'from': address, 'nonce': nonce})
# 签名
sign = w3.eth.account.sign_transaction(mint, '钱包地址私钥,在metamask查看')
# 给链上发送这次mint
w3.eth.send_raw_transaction(sign.rawTransaction)
关于nonce:
为了防止交易重播,ETH(ETC)节点要求每笔交易必须有一个nonce数值。每一个账户从同一个节点发起交易时,这个nonce值从0开始计数,发送一笔nonce对应加1。当前面的nonce处理完成之后才会处理后面的nonce。
在 send_raw_transaction 后去goerli测试官网查看该合约会有一次新的mint记录


再来测试下给该nft设定一个user(租赁此nft的用户)

python:就像发送一次mint请求一样来setUser
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以及abi与该合约建立连接
# address是合约地址 abi是该合约对应的abi
my_contract = w3.eth.contract(address='0xADD22a3efa6f22dd60DF65CDfE096da0366eE002', abi=abi_contract)
# nft owner
address = '0x60EA96f57B3a5715A90DAe1440a78f8bb339C92e
# 生成nonce
nonce = w3.eth.getTransactionCount(address)
# 上面代码与上方的一样
# 通过chain.time(来获取链上时间)
from brownie import chain
# 调用setUser 给传入接收的值只有这里与mint是有区别的
# 1: nft tokenId
# 0x450AF1Ea236932c0e18B53BC1FeB15E47AA292df user地址
# 到期时间
# 到期后这个nft user地址自动清零
x = my_contract.functions.setUser(1, '0x450AF1Ea236932c0e18B53BC1FeB15E47AA292df', 10*60+chain.time()).build_transaction({'from': address, 'nonce': nonce})
signed_txn = w3.eth.account.sign_transaction(x, '钱包地址私钥,在metamask查看')
w3.eth.send_raw_transaction(signed_txn.rawTransaction)

此时在代码中查看下tokenId是1的nft的user
print(my_contract.functions.userOf(1).call())
# result
>>>0x450AF1Ea236932c0e18B53BC1FeB15E47AA292df
以上是使用web3.py与智能合约交互的方式,流程如此,如需进行Transfer事件或获取其他信息可以修改mint,ownerOf等(合约中定义的function以及event),也可以查阅官方文档找到更多的操作。
No activity yet