
Subscribe to Yooma

Subscribe to Yooma
Share Dialog
Share Dialog

搜索引擎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 ...
<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