视频参考: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 代码相关推荐

  1. 个人生活助手app_“3·15可信赖应用白名单”发布 360旗下多款APP获评甲级认证

    ANVA发布"3·15可信赖应用白名单" 审核严格仅20个APP获甲级认证 近日,中国反网络病毒联盟(ANVA)公布了2019年"移动互联网自律白名单",(简称 ...

  2. vb.net 判断是否为ip 正则_PHP实现IP白名单

    有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...

  3. android 11.0app应用卸载白名单

    1.概述 在11.0定制化开发中,客户需求要实现应用卸载白名单功能,用来管理第三方app卸载功能,需要在白名单之中的应用可以卸载,其他的app不准卸载,实现一个管理第三方app卸载的功能,这需要从ap ...

  4. 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 ...

  5. 剑网3 插件 取得服务器信息,《剑网3》插件认证资料及接口白名单表

    <剑网3游戏插件认证规则> 前言: 感谢众位作者付出宝贵的才华与时间来开发<剑网3>游戏插件. 为保证<剑网3>游戏插件的质量与安全性,我们将针对游戏插件的功能.代 ...

  6. 白名单 权限认证方法

    针对,MVC,模块,控制器 这类框架 思路: 1:系统是否需要认证(配置文件 可设置), 2:改模块,是否在(不需要认证的模块中(配置文件)) 3:模块 不存在 不需要认证的模块数组中,或者 模块,存 ...

  7. Edge 浏览器有秘密白名单,允许 Facebook 运行 Flash 代码

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Microsoft Edge 浏览器包含了一个秘密的白名单,允许 Facebook 运行 Adobe Flash 代码.白名单允许 Face ...

  8. 微信代码错误:40164,加入白名单仍不起作用。

    项目场景: 微信公众号项目需要进行消息推送,测试的时候遇见微信代码错误:40164,未将ip加入白名单的问题,特此记录. 问题描述: 如果所述,我将报错的ip地址加入白名单之后,进行消息推送,仍然报错 ...

  9. Eginx配置(SSL,令牌登录认证,IP白名单,代理转发)

    一般需要对接银行的接口,都需要用前置机,在前置机上安装银行的客户端(CBS).我们接口调用的实际是前置机上的http服务. 为了数据安全,一般会把前置机的网络和服务器的网络处理成同一个内网,防止数据被 ...

最新文章

  1. swift3.0友盟分享
  2. 小猿圈Linux学习-Linux种搜索的命令
  3. kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局
  4. 作业帮云原生降本增效实践之路
  5. golang清空切片
  6. unity功能开发——好友系统
  7. 几款免费且实用的项目管理工具
  8. win10 SystemParametersInfo 设置屏保 不好使_火爆抖音的旋转时钟屏保,超酷超炫的...
  9. AntD Pro v5记录-布局
  10. Win7下chm文件打不开的解决办法
  11. 销售业务处理流程之 分期收款
  12. 如何用ChemDraw实现3D建模
  13. C程序设计语言之第1章 导言
  14. 牛客网-腾讯编程校招真题 编码 Java
  15. SQL Server数据库开发
  16. 图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)
  17. 【讨论】品质因数,-从二阶传递函数分析自然谐振频率的含义。
  18. 数学公式 —— 向量
  19. 中国城市信息化50强发布 邯郸位居二十,排名不低呀,
  20. python when函数_python函数练习

热门文章

  1. 初等数论——欧几里得算法
  2. 7-45 航空公司VIP客户查询 (25 分)
  3. 测试过程bug积累-搜索推荐
  4. 详解CAN总线:CAN总线报文格式—帧间隔
  5. 具有黑马潜质的电影都有哪些特色?
  6. 酸奶界的苹果Chobani冲刺纳斯达克,能否撑起百亿美元估值?
  7. 【转】Linux那些事儿之我是Hub(7)蝴蝶效应
  8. 机器学习中的MR和MRR
  9. ant-design 引入样式及配置 babel-plugin-import 按需加载
  10. Docker Desktop for Windows 安装过程整理