
搜索引擎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
opensea是NFT最大的交易市场,对于这个交易就比如生活中我们买了辆车,买了个房子,卖家放到交易市场出售,买家购买。但是生活中并不是单单的只有买房卖房,有钱人毕竟是少数,绝大部分人还是租房住,那么对于Voxels,Decentraland等等平台那些NFT的owner如何出租自己的NFT,一些可能会短时间用到这些NFT的用户又不能花昂贵的钱买过来用两天就放着,这里就涉及到了租赁的功能
介绍
首先看看什么是ERC-20
ERC -- Ethereum Request for Comment 的缩写,用于对代币和以太坊生态系统提出改进建议。
ERC-20 是加密货币行业中最流行的代币标准。一类相同的代币,一个简单的接口,允许开发者在以太坊区块链之上创建他们的代币。通俗的讲 ERC-20 代币就像我们生活中钞票一样,可互换代币具有等值单位的相同资产
其次
EIP-721 则是不可替代的代币标准,是一类独特的令牌(Token)。就像所有的房子,收藏品等都是不同的,都有唯一的。
生活中我们用人民币/美元等买房子/车,这里我们可以说用符合ERC-20标准的代币去买一个符合EIP-721协议的NFT (例如使用ETH/USDC购买Voxels/Decentraland中的一块土地),而这只购买,在购买之后NFT的owner也就改变,ERC-721中并没有实现可以租赁的功能
EIP-4400和EIP-4907就是基于ERC-721的扩展,增加角色来达到可租赁的目的
EIP-4400引入了consumer角色,对于引入这个角色需求也就源于这样一个事实。除了NFT的owner之外还可以有其他角色来对房子等NFT进行装饰使用,那么这个consumer被设置之后也就可以对该NFT进行使用装饰等操作
EIP-4400代码 增加了1个event和2个function分别是 :
当NFT的owner改变了consumer的时候发出,如果NFT的owner改变了那么consumer也就设置为空了
获取该NFT的consumer
更改NFT的consumer
/// @title EIP-721 Consumer Role extension
/// Note: the EIP-165 identifier for this interface is 0x953c8dfa
interface IEIP721Consumable /* is EIP721 */ {
/// @notice Emitted when `owner` changes the `consumer` of an NFT
/// The zero address for consumer indicates that there is no consumer address
/// When a Transfer event emits, this also indicates that the consumer address
/// for that NFT (if any) is set to none
event ConsumerChanged(address indexed owner, address indexed consumer, uint256 indexed tokenId);
/// @notice Get the consumer address of an NFT
/// @dev The zero address indicates that there is no consumer
/// Throws if `_tokenId` is not a valid NFT
/// @param _tokenId The NFT to get the consumer address for
/// @return The consumer address for this NFT, or the zero address if there is none
function consumerOf(uint256 _tokenId) view external returns (address);
/// @notice Change or reaffirm the consumer address for an NFT
/// @dev The zero address indicates there is no consumer address
/// Throws unless `msg.sender` is the current NFT owner, an authorised
/// operator of the current owner or approved address
/// Throws if `_tokenId` is not valid NFT
/// @param _consumer The new consumer of the NFT
function changeConsumer(address _consumer, uint256 _tokenId) external;
}
EIP-4907也引入了一个角色称为user,而且在这个基础之上增加了过期时间,当NFT租赁时间到期时会自动结束使用期限,不用第二次交易,这样就会节省gas费,而在之前的租赁当中NFT的owner要提交两笔链上交易,一笔在期限开始时将新地址列为新用户角色,另一笔在结束时收回用户角色
更新user
设置user
获取user
获取过期时间
在更新user和设置user的时候传入过期时间
interface IERC4907 {
// Logged when the user of an NFT is changed or expires is changed
/// @notice Emitted when the `user` of an NFT or the `expires` of the `user` is changed
/// The zero address for user indicates that there is no user address
event UpdateUser(uint256 indexed tokenId, address indexed user, uint64 expires);
/// @notice set the user and expires of an NFT
/// @dev The zero address indicates there is no user
/// Throws if `tokenId` is not valid NFT
/// @param user The new user of the NFT
/// @param expires UNIX timestamp, The new user could use the NFT before expires
function setUser(uint256 tokenId, address user, uint64 expires) external;
/// @notice Get the user address of an NFT
/// @dev The zero address indicates that there is no user or the user is expired
/// @param tokenId The NFT to get the user address for
/// @return The user address for this NFT
function userOf(uint256 tokenId) external view returns(address);
/// @notice Get the user expires of an NFT
/// @dev The zero value indicates that there is no user
/// @param tokenId The NFT to get the user expires for
/// @return The user expires for this NFT
function userExpires(uint256 tokenId) external view returns(uint256);
}
EIP-4400和EIP-4907的区别
相同点:
都是为了NFT的租赁而出现的
都是基于EIP721的扩展在此基础之上实现了新增的功能
都增加了一个使用者的角色,在EIP4400中称为consumer,在EIP4907中称为user,而这个对应的就是租赁者
在lender想租出自己的NFT,把NFT挂到租赁平台租出去时,lender的NFT会被转移到合约平台的合约地址当中,此时合约平台会再给lender增加可以操作此NFT的权限以便在有人租赁此NFT之前lender可以继续使用自己的NFT
不同点:
在增加使用者角色之上EIP4907又增加了一个userExpires,在租赁到期时间无需再进行第二次交易
LandWorks是基于EIP-4400租赁,而Double protocal是基于EIP-4907
这篇文章对于使NFT可租赁的方法进行了讲解
对于如何基于EIP-4907实现租赁,这篇文章做了讲解
opensea是NFT最大的交易市场,对于这个交易就比如生活中我们买了辆车,买了个房子,卖家放到交易市场出售,买家购买。但是生活中并不是单单的只有买房卖房,有钱人毕竟是少数,绝大部分人还是租房住,那么对于Voxels,Decentraland等等平台那些NFT的owner如何出租自己的NFT,一些可能会短时间用到这些NFT的用户又不能花昂贵的钱买过来用两天就放着,这里就涉及到了租赁的功能
介绍
首先看看什么是ERC-20
ERC -- Ethereum Request for Comment 的缩写,用于对代币和以太坊生态系统提出改进建议。
ERC-20 是加密货币行业中最流行的代币标准。一类相同的代币,一个简单的接口,允许开发者在以太坊区块链之上创建他们的代币。通俗的讲 ERC-20 代币就像我们生活中钞票一样,可互换代币具有等值单位的相同资产
其次
EIP-721 则是不可替代的代币标准,是一类独特的令牌(Token)。就像所有的房子,收藏品等都是不同的,都有唯一的。
生活中我们用人民币/美元等买房子/车,这里我们可以说用符合ERC-20标准的代币去买一个符合EIP-721协议的NFT (例如使用ETH/USDC购买Voxels/Decentraland中的一块土地),而这只购买,在购买之后NFT的owner也就改变,ERC-721中并没有实现可以租赁的功能
EIP-4400和EIP-4907就是基于ERC-721的扩展,增加角色来达到可租赁的目的
EIP-4400引入了consumer角色,对于引入这个角色需求也就源于这样一个事实。除了NFT的owner之外还可以有其他角色来对房子等NFT进行装饰使用,那么这个consumer被设置之后也就可以对该NFT进行使用装饰等操作
EIP-4400代码 增加了1个event和2个function分别是 :
当NFT的owner改变了consumer的时候发出,如果NFT的owner改变了那么consumer也就设置为空了
获取该NFT的consumer
更改NFT的consumer
/// @title EIP-721 Consumer Role extension
/// Note: the EIP-165 identifier for this interface is 0x953c8dfa
interface IEIP721Consumable /* is EIP721 */ {
/// @notice Emitted when `owner` changes the `consumer` of an NFT
/// The zero address for consumer indicates that there is no consumer address
/// When a Transfer event emits, this also indicates that the consumer address
/// for that NFT (if any) is set to none
event ConsumerChanged(address indexed owner, address indexed consumer, uint256 indexed tokenId);
/// @notice Get the consumer address of an NFT
/// @dev The zero address indicates that there is no consumer
/// Throws if `_tokenId` is not a valid NFT
/// @param _tokenId The NFT to get the consumer address for
/// @return The consumer address for this NFT, or the zero address if there is none
function consumerOf(uint256 _tokenId) view external returns (address);
/// @notice Change or reaffirm the consumer address for an NFT
/// @dev The zero address indicates there is no consumer address
/// Throws unless `msg.sender` is the current NFT owner, an authorised
/// operator of the current owner or approved address
/// Throws if `_tokenId` is not valid NFT
/// @param _consumer The new consumer of the NFT
function changeConsumer(address _consumer, uint256 _tokenId) external;
}
EIP-4907也引入了一个角色称为user,而且在这个基础之上增加了过期时间,当NFT租赁时间到期时会自动结束使用期限,不用第二次交易,这样就会节省gas费,而在之前的租赁当中NFT的owner要提交两笔链上交易,一笔在期限开始时将新地址列为新用户角色,另一笔在结束时收回用户角色
更新user
设置user
获取user
获取过期时间
在更新user和设置user的时候传入过期时间
interface IERC4907 {
// Logged when the user of an NFT is changed or expires is changed
/// @notice Emitted when the `user` of an NFT or the `expires` of the `user` is changed
/// The zero address for user indicates that there is no user address
event UpdateUser(uint256 indexed tokenId, address indexed user, uint64 expires);
/// @notice set the user and expires of an NFT
/// @dev The zero address indicates there is no user
/// Throws if `tokenId` is not valid NFT
/// @param user The new user of the NFT
/// @param expires UNIX timestamp, The new user could use the NFT before expires
function setUser(uint256 tokenId, address user, uint64 expires) external;
/// @notice Get the user address of an NFT
/// @dev The zero address indicates that there is no user or the user is expired
/// @param tokenId The NFT to get the user address for
/// @return The user address for this NFT
function userOf(uint256 tokenId) external view returns(address);
/// @notice Get the user expires of an NFT
/// @dev The zero value indicates that there is no user
/// @param tokenId The NFT to get the user expires for
/// @return The user expires for this NFT
function userExpires(uint256 tokenId) external view returns(uint256);
}
EIP-4400和EIP-4907的区别
相同点:
都是为了NFT的租赁而出现的
都是基于EIP721的扩展在此基础之上实现了新增的功能
都增加了一个使用者的角色,在EIP4400中称为consumer,在EIP4907中称为user,而这个对应的就是租赁者
在lender想租出自己的NFT,把NFT挂到租赁平台租出去时,lender的NFT会被转移到合约平台的合约地址当中,此时合约平台会再给lender增加可以操作此NFT的权限以便在有人租赁此NFT之前lender可以继续使用自己的NFT
不同点:
在增加使用者角色之上EIP4907又增加了一个userExpires,在租赁到期时间无需再进行第二次交易
LandWorks是基于EIP-4400租赁,而Double protocal是基于EIP-4907
这篇文章对于使NFT可租赁的方法进行了讲解
对于如何基于EIP-4907实现租赁,这篇文章做了讲解
No activity yet