EIP-712笔记
EIP-712使用详情利用签名技术我们可以实现一些功能例如白名单校验等。但是这种签名技术的应用场景比较简单,一般就是给一串字符串,或者一串哈希签名,如果我们想为更复杂的数据签名就无法实现了。 EIP-712出现是为了解决这个问题,利用EIP-712,我们可以对更大的数据集,例如对结构体进行签名。在Uniswap PancakeSwap等DEX在移除LP流动性的时候,我们需要先签名,然后再发送一笔交易移除流动性。正常情况下,其实我们先调用LP代币的授权方法,授权DEX合约可以转移LP,然后再去移除流动性。这种二合一的实现正是应用了EIP-712。他帮助我们只需要签名一次就可以将两部交易合并为一步交易,从而节省gas费用。基本结构EIP712Domain顾名思义,是一个与域 相关的结构体,总共包含五个字段:name 合约或者协议名称version 合约的版本chainId 合约部署的链Id,一般使用block.chainid 即当前链IdverifyingContract 签名的合约地址,一般用address(this)salt 随机数盐,一般不常用DOMAIN_SEPARATOR ...
EIP-712笔记
EIP-712使用详情利用签名技术我们可以实现一些功能例如白名单校验等。但是这种签名技术的应用场景比较简单,一般就是给一串字符串,或者一串哈希签名,如果我们想为更复杂的数据签名就无法实现了。 EIP-712出现是为了解决这个问题,利用EIP-712,我们可以对更大的数据集,例如对结构体进行签名。在Uniswap PancakeSwap等DEX在移除LP流动性的时候,我们需要先签名,然后再发送一笔交易移除流动性。正常情况下,其实我们先调用LP代币的授权方法,授权DEX合约可以转移LP,然后再去移除流动性。这种二合一的实现正是应用了EIP-712。他帮助我们只需要签名一次就可以将两部交易合并为一步交易,从而节省gas费用。基本结构EIP712Domain顾名思义,是一个与域 相关的结构体,总共包含五个字段:name 合约或者协议名称version 合约的版本chainId 合约部署的链Id,一般使用block.chainid 即当前链IdverifyingContract 签名的合约地址,一般用address(this)salt 随机数盐,一般不常用DOMAIN_SEPARATOR ...
NFT验证签名
NFT签名验证 在区块链中,区块链地址都分为私钥和地址。私钥可以生成地址,反过来,地址不能生成私钥。如何证明一个地址是属于某个人的,我们可以给他一段消息,让他用私钥对这段消息进行签名。拿到签名,再结合这个地址可以证明,这段信息是否是由这个地址对应的私钥签名,从而也就证明地址的所有权。 步骤 1 项目方的数据库中保存白名单用户 2 前端将地址发送给后端比对是否是白名单用户 3 是白名单用户则使用管理员私钥对这段地址进行签名 4 后端返回签名后的数据,前端将签名后的数据发送给合约验证 5 合约验证通过则用户可以mint Openzeppelin的ECDSA可以实现这个操作function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } 方法接收两个参数: ...
NFT验证签名
NFT签名验证 在区块链中,区块链地址都分为私钥和地址。私钥可以生成地址,反过来,地址不能生成私钥。如何证明一个地址是属于某个人的,我们可以给他一段消息,让他用私钥对这段消息进行签名。拿到签名,再结合这个地址可以证明,这段信息是否是由这个地址对应的私钥签名,从而也就证明地址的所有权。 步骤 1 项目方的数据库中保存白名单用户 2 前端将地址发送给后端比对是否是白名单用户 3 是白名单用户则使用管理员私钥对这段地址进行签名 4 后端返回签名后的数据,前端将签名后的数据发送给合约验证 5 合约验证通过则用户可以mint Openzeppelin的ECDSA可以实现这个操作function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } 方法接收两个参数: ...
Lens-core 学习笔记
lens v2代码浅析代码分析在大体业务上来说,Lens的业务逻辑有些类似于Twitter,主要包括了下面几个方面:profile ,一个地址可以有多个Profile,创建一个Profile就可以拥有一个对应NFT,类似于一个人可以拥有多个账户,可以指定默认ProfilePublication 发表内容Comment 对内容发表评论,也可以对评论发表评论Mirror 类似于转发功能Collect 将内容铸造为NFTFollow 关注其他Profile,关注后可以获得FollowNFT相对推特来说主要是多了Collect功能 用户的主要操作逻辑入口都是在 LensHub 合约中,其中也包含了许多setter 方法。主要是先逻辑是在 PublishLingogic 和 InteractionLogic 库合约中。Profilefunction createProfile( DataTypes.CreateProfileData calldata vars ) external override whenNotPaused returns (uint256) { //白名单内用户才能创...
Lens-core 学习笔记
lens v2代码浅析代码分析在大体业务上来说,Lens的业务逻辑有些类似于Twitter,主要包括了下面几个方面:profile ,一个地址可以有多个Profile,创建一个Profile就可以拥有一个对应NFT,类似于一个人可以拥有多个账户,可以指定默认ProfilePublication 发表内容Comment 对内容发表评论,也可以对评论发表评论Mirror 类似于转发功能Collect 将内容铸造为NFTFollow 关注其他Profile,关注后可以获得FollowNFT相对推特来说主要是多了Collect功能 用户的主要操作逻辑入口都是在 LensHub 合约中,其中也包含了许多setter 方法。主要是先逻辑是在 PublishLingogic 和 InteractionLogic 库合约中。Profilefunction createProfile( DataTypes.CreateProfileData calldata vars ) external override whenNotPaused returns (uint256) { //白名单内用户才能创...