白名单认证 solidity 代码
视频参考:https://www.youtube.com/watch?v=vYwYe-Gv_XI
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
// 0. message to sign
// 1. hash(message)
// 2.sign(hash(message),private key) | offchain
// 3. ecrecover(hass(message),signature) == signer
contract verifyWhiteList{
function verify(
address _signer,
string memory _message,
bytes memory signature
) public pure returns (bool) {
bytes32 messageHash = getMessageHash( _message);
bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
return recoverSigner(ethSignedMessageHash, signature) == _signer;
}
function getMessageHash(
string memory _message
) public pure returns (bytes32) {
return keccak256(abi.encodePacked(_message));
}
function getEthSignedMessageHash(bytes32 _messageHash)
public
pure
returns (bytes32)
{
/*
Signature is produced by signing a keccak256 hash with the following format:
"\x19Ethereum Signed Message\n" + len(msg) + msg
*/
return
keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)
);
}
function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature)
public
pure
returns (address)
{
(bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);
return ecrecover(_ethSignedMessageHash, v, r, s);
}
function splitSignature(bytes memory sig)
internal pure returns (
bytes32 r,
bytes32 s,
uint8 v
)
{
require(sig.length == 65, "invalid signature length");
assembly {
/*
First 32 bytes stores the length of the signature
add(sig, 32) = pointer of sig + 32
effectively, skips first 32 bytes of signature
mload(p) loads next 32 bytes starting at the memory address p into memory
*/
// first 32 bytes, after the length prefix
r := mload(add(sig, 32))
// second 32 bytes
s := mload(add(sig, 64))
// final byte (first byte of the next 32 bytes)
v := byte(0, mload(add(sig, 96)))
}
// implicitly return (r, s, v)
}
}
白名单认证 solidity 代码相关推荐
- 个人生活助手app_“3·15可信赖应用白名单”发布 360旗下多款APP获评甲级认证
ANVA发布"3·15可信赖应用白名单" 审核严格仅20个APP获甲级认证 近日,中国反网络病毒联盟(ANVA)公布了2019年"移动互联网自律白名单",(简称 ...
- vb.net 判断是否为ip 正则_PHP实现IP白名单
有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...
- android 11.0app应用卸载白名单
1.概述 在11.0定制化开发中,客户需求要实现应用卸载白名单功能,用来管理第三方app卸载功能,需要在白名单之中的应用可以卸载,其他的app不准卸载,实现一个管理第三方app卸载的功能,这需要从ap ...
- XSS网站攻击以及Netty单双向认证和设置白名单
目录 技术分享之Java安全... 1 一. XSS攻击... 1 1.1 简述... 1 1.2 实例... 1 1.2.1 反射型 XSS. 1 1.2.2 存储型XSS. 4 1.2.3 DOM ...
- 剑网3 插件 取得服务器信息,《剑网3》插件认证资料及接口白名单表
<剑网3游戏插件认证规则> 前言: 感谢众位作者付出宝贵的才华与时间来开发<剑网3>游戏插件. 为保证<剑网3>游戏插件的质量与安全性,我们将针对游戏插件的功能.代 ...
- 白名单 权限认证方法
针对,MVC,模块,控制器 这类框架 思路: 1:系统是否需要认证(配置文件 可设置), 2:改模块,是否在(不需要认证的模块中(配置文件)) 3:模块 不存在 不需要认证的模块数组中,或者 模块,存 ...
- Edge 浏览器有秘密白名单,允许 Facebook 运行 Flash 代码
开发四年只会写业务代码,分布式高并发都不会还做程序员? Microsoft Edge 浏览器包含了一个秘密的白名单,允许 Facebook 运行 Adobe Flash 代码.白名单允许 Face ...
- 微信代码错误:40164,加入白名单仍不起作用。
项目场景: 微信公众号项目需要进行消息推送,测试的时候遇见微信代码错误:40164,未将ip加入白名单的问题,特此记录. 问题描述: 如果所述,我将报错的ip地址加入白名单之后,进行消息推送,仍然报错 ...
- Eginx配置(SSL,令牌登录认证,IP白名单,代理转发)
一般需要对接银行的接口,都需要用前置机,在前置机上安装银行的客户端(CBS).我们接口调用的实际是前置机上的http服务. 为了数据安全,一般会把前置机的网络和服务器的网络处理成同一个内网,防止数据被 ...
最新文章
- swift3.0友盟分享
- 小猿圈Linux学习-Linux种搜索的命令
- kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局
- 作业帮云原生降本增效实践之路
- golang清空切片
- unity功能开发——好友系统
- 几款免费且实用的项目管理工具
- win10 SystemParametersInfo 设置屏保 不好使_火爆抖音的旋转时钟屏保,超酷超炫的...
- AntD Pro v5记录-布局
- Win7下chm文件打不开的解决办法
- 销售业务处理流程之 分期收款
- 如何用ChemDraw实现3D建模
- C程序设计语言之第1章 导言
- 牛客网-腾讯编程校招真题 编码 Java
- SQL Server数据库开发
- 图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)
- 【讨论】品质因数,-从二阶传递函数分析自然谐振频率的含义。
- 数学公式 —— 向量
- 中国城市信息化50强发布 邯郸位居二十,排名不低呀,
- python when函数_python函数练习