自己服务器建网站 备案/seo技术蜘蛛屯

自己服务器建网站 备案,seo技术蜘蛛屯,美国做跟单社区的网站,网站域名买卖文章目录 单位和全局可用变量(Units and Globally Available Variables)特殊变量和函数1. 区块和交易属性2. ABI 编码和解码函数3. bytes 成员函数4. string 成员函数5. 错误处理6. 数学和加密函数7. 地址类型成员函数8. 与合约相关9. 类型信息 单位和全…

文章目录

  • 单位和全局可用变量(Units and Globally Available Variables)
    • 特殊变量和函数
      • 1. 区块和交易属性
      • 2. ABI 编码和解码函数
      • 3. bytes 成员函数
      • 4. string 成员函数
      • 5. 错误处理
      • 6. 数学和加密函数
      • 7. 地址类型成员函数
      • 8. 与合约相关
      • 9. 类型信息

在这里插入图片描述

单位和全局可用变量(Units and Globally Available Variables)

特殊变量和函数

1. 区块和交易属性

在全局命名空间中始终存在一些特殊变量和函数,主要用于提供区块链相关信息或作为通用工具函数。

  • blockhash(uint blockNumber) returns (bytes32):返回指定区块的哈希值,仅适用于最近 256 个区块;否则返回 0。
  • blobhash(uint index) returns (bytes32):返回当前交易中第 index 个 blob 的版本化哈希值。版本化哈希由 1 个字节的版本号(目前为 0x01)和 KZG 承诺的 SHA256 哈希的后 31 个字节组成(EIP-4844)。如果不存在该索引的 blob,则返回 0。
  • block.basefee (uint):当前区块的基础费用(EIP-3198 和 EIP-1559)。
  • block.blobbasefee (uint):当前区块的 blob 基础费用(EIP-7516 和 EIP-4844)。
  • block.chainid (uint):当前链的 Chain ID。
  • block.coinbase (address payable):当前区块矿工的地址。
  • block.difficulty (uint):当前区块的难度(仅适用于 Paris 之前的 EVM 版本)。在其他 EVM 版本中,它是 block.prevrandao 的废弃别名(EIP-4399)。
  • block.gaslimit (uint):当前区块的 gas 限制。
  • block.number (uint):当前区块的编号。
  • block.prevrandao (uint):由信标链提供的随机数(适用于 EVM >= Paris)。
  • block.timestamp (uint):当前区块的时间戳(自 Unix 纪元以来的秒数)。
  • gasleft() returns (uint256):返回当前交易中剩余的 gas。
  • msg.data (bytes calldata):完整的 calldata(调用数据)。
  • msg.sender (address):消息(当前调用)的发送者地址。
  • msg.sig (bytes4):calldata 的前 4 个字节(即函数标识符)。
  • msg.value (uint):随消息发送的 Wei 数量。
  • tx.gasprice (uint):交易的 gas 价格。
  • tx.origin (address):交易的原始发送者地址(完整调用链中的最初发起者)。

注意
1.msg 变量的动态性
msg.sender、msg.value 等 msg 成员的值会在每次外部函数调用时发生变化,包括调用库函数时。

2.区块和交易属性的限制
当合约在链下执行(如本地测试或模拟环境)时,不要假设 block. 和 tx. 具有特定的值,这些值取决于 EVM 实现。

3.不要依赖 block.timestamp 或 blockhash 作为随机数源
block.timestamp 和 blockhash 可能受到矿工的操纵,在某些应用中,恶意矿工可以重复计算直到获得有利的哈希值。当前区块的时间戳必须严格大于上一个区块的时间戳,但唯一的保证是它位于两个连续区块的时间戳之间。

4.blockhash 的可用性
由于可扩展性原因,并非所有区块的哈希值都可用,只有最近 256 个区块的哈希值可访问,超过该范围的值将返回 0。

5.废弃的函数和别名:
block.blockhash 在 Solidity 0.4.22 版本被弃用,并在 0.5.0 版本中移除。
msg.gas 在 Solidity 0.4.21 版本被弃用,并在 0.5.0 版本中移除(替换为 gasleft())。
now(block.timestamp 的别名)在 Solidity 0.7.0 版本中被移除。

2. ABI 编码和解码函数

  • abi.decode(bytes memory encodedData, (…)) returns (…):对给定的 encodedData 进行 ABI 解码,第二个参数括号内指定解码后的数据类型。示例:
    solidity
    (uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uint, uint[2], bytes));

  • abi.encode(…) returns (bytes memory):对给定的参数进行 ABI 编码。

  • abi.encodePacked(…) returns (bytes memory):对给定的参数进行紧凑编码(packed encoding)。注意:紧凑编码可能会导致数据歧义!

  • abi.encodeWithSelector(bytes4 selector, …) returns (bytes memory):以 selector 作为前缀,对后续参数进行 ABI 编码。

  • abi.encodeWithSignature(string memory signature, …) returns (bytes memory):等效于:
    solidity
    abi.encodeWithSelector(bytes4(keccak256(bytes(signature))), …)

  • abi.encodeCall(function functionPointer, (…)) returns (bytes memory):对函数指针 functionPointer 及其参数进行 ABI 编码,同时进行完整的类型检查,确保参数类型与函数签名匹配。结果等价于:
    solidity
    abi.encodeWithSelector(functionPointer.selector, (…))

注意
1.这些编码函数可用于构造外部函数调用的数据,而不实际调用该函数。
2.keccak256(abi.encodePacked(a, b)) 可用于计算结构化数据的哈希值。警告:不同的参数类型可能导致哈希碰撞,应谨慎使用。
3.详细的 ABI 编码规则和紧凑编码(tightly packed encoding)请参考 Solidity 文档。

3. bytes 成员函数

bytes.concat(…) returns (bytes memory):将多个 bytesbytes1bytes32 类型的参数连接成一个字节数组。

4. string 成员函数

string.concat(…) returns (string memory):将多个字符串参数连接成一个字符串。

5. 错误处理

  • assert(bool condition):如果条件不成立,会触发 Panic 错误并回滚状态更改 - 用于内部错误。

  • require(bool condition):如果条件不成立,回滚并撤销交易 - 用于输入错误或外部组件错误。

  • require(bool condition, string memory message):如果条件不成立,回滚并撤销交易,并提供错误消息 - 用于输入错误或外部组件错误。

  • revert():中止执行并回滚状态更改。

  • revert(string memory reason):中止执行并回滚状态更改,并提供一个解释字符串。

6. 数学和加密函数

  • addmod(uint x, uint y, uint k) returns (uint) :计算 (x + y) % k,其中加法是以任意精度执行的,不会在 2^256 上溢出。从版本 0.5.0 起,确保 k != 0。

  • mulmod(uint x, uint y, uint k) returns (uint):计算 (x y) % k,其中乘法是以任意精度执行的,不会在 2^256 上溢出。从版本 0.5.0 起,确保 k != 0。

  • keccak256(bytes memory) returns (bytes32):计算输入的 Keccak-256 哈希值。
    之前 keccak256 有一个别名叫 sha3,在版本 0.5.0 中已被移除。

  • sha256(bytes memory) returns (bytes32):计算输入的 SHA-256 哈希值。

  • ripemd160(bytes memory) returns (bytes20):计算输入的 RIPEMD-160 哈希值。

  • ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address):从椭圆曲线签名中恢复与公钥相关联的地址,如果发生错误则返回零。该函数参数对应于 ECDSA 签名的值:

    • r = 签名的前 32 字节
    • s = 签名的第二个 32 字节
    • v = 签名的最后 1 字节

    ecrecover 返回一个地址,而不是一个可支付地址。如果需要将资金转移到恢复的地址,可以通过 address payable 进行转换。

    进一步说明
    在使用 ecrecover 时需要注意,一个有效的签名可以被转换成另一个有效的签名,而无需了解对应的私钥。在 Homestead 硬分叉中,针对交易签名的问题(参见 EIP-2)已被修复,但 ecrecover 函数未做更改。通常这不会造成问题,除非你要求签名是唯一的,或者使用签名来识别项目。你可以使用 OpenZeppelin 的 ECDSA 辅助库,它是 ecrecover 的封装,避免了这个问题。

注意
在私有区块链上运行 sha256、ripemd160 或 ecrecover 时,可能会遇到 “Out-of-Gas” 错误。这是因为这些函数作为“预编译合约”实现,只有在接收到第一个消息后才真正存在(尽管它们的合约代码是硬编码的)。发送到不存在的合约的消息更昂贵,因此执行可能会出现 “Out-of-Gas” 错误。解决该问题的方法是,先向每个合约发送 Wei(例如 1),然后再在实际合约中使用它们。这个问题在主网或测试网上并不存在。

7. 地址类型成员函数

1.<address>.balance (uint256) 返回地址的余额,以 Wei 为单位。

2.<address>.code (bytes memory) 返回地址处的代码(可能为空)。

3.<address>.codehash (bytes32) 返回地址的代码哈希。

4.<address payable>.transfer(uint256 amount) 向地址发送指定的 Wei 数量,失败时回滚,转发 2300 gas 补助,不可调节。

5.<address payable>.send(uint256 amount) returns (bool) 向地址发送指定的 Wei 数量,失败时返回 false,转发 2300 gas 补助,不可调节。

6.<address>.call(bytes memory) returns (bool, bytes memory) 进行低级 CALL,带有给定的有效载荷,返回成功状态和返回数据,转发所有可用的 gas,可以调节。

7.<address>.delegatecall(bytes memory) returns (bool, bytes memory) 进行低级 DELEGATECALL,带有给定的有效载荷,返回成功状态和返回数据,转发所有可用的 gas,可以调节。

8.<address>.staticcall(bytes memory) returns (bool, bytes memory) 进行低级 STATICCALL,带有给定的有效载荷,返回成功状态和返回数据,转发所有可用的 gas,可以调节。

警告
1.尽量避免使用 .call(),因为它绕过了类型检查、函数存在性检查和参数打包。
2.使用 send 时有一些危险:当调用栈深度达到 1024 时,转账会失败(这可以被调用者强制),如果接收者没有足够的 gas,也会失败。因此,为了确保安全的以太币转账,始终检查 send 的返回值,使用 transfer 或更好的方式:使用一种模式,让接收者主动提取以太币。
3.由于 EVM 将对不存在的合约的调用视为始终成功,因此 Solidity 在执行外部调用时使用 extcodesize 操作码进行了额外检查。这确保了即将调用的合约实际上存在(它包含代码),否则会抛出异常。对地址而不是合约实例进行操作的低级调用不包括此检查(即.call()、.delegatecall()、.staticcall()、.send() 和 .transfer()),这使得它们在 gas 上更便宜,但也更不安全。

注意
1.在版本 0.5.0 之前,Solidity 允许通过合约实例访问地址成员,例如 this.balance。现在已被禁止,必须显式转换为地址:address(this).balance。
2.如果通过低级 delegatecall 访问状态变量,两个合约的存储布局必须一致,以便被调用合约能够正3.确按名称访问调用合约的存储变量。当然,如果传递存储指针作为函数参数(如高层库的情况),则存储布局不会一致。
4.在版本 0.5.0 之前,.call、.delegatecall 和 .staticcall 只返回成功状态,而不返回返回数据。
5.在版本 0.5.0 之前,有一个名为 callcode 的成员,它与 delegatecall 的语义略有不同。

8. 与合约相关

1.this (当前合约的类型):当前合约,可以显式转换为地址类型。

2.super:继承层次结构中上一级的合约。

3.selfdestruct(address payable recipient): 销毁当前合约,将其资金发送到给定的地址并结束执行。selfdestruct有一些继承自 EVM 的特性:

  • 接收合约的 receive 函数不会被执行。
  • 合约仅在交易结束时被真正销毁,并且回滚可能会“撤销”销毁操作。
  • 此外,当前合约的所有函数都可以直接调用,包括当前函数。

警告
1.从 EVM >= Cancun 开始,selfdestruct 将只会将账户中的所有以太币发送到给定的接收者,而不再销毁合约。然而,当 selfdestruct 在同一交易中被调用,并且创建了调用它的合约时,selfdestruct 会遵循 Cancun 硬分叉之前(即 EVM <= Shanghai)的行为,仍然会销毁当前合约,删除所有数据,包括存储键、代码和合约本身。详情请参见 EIP-6780。
2.新的行为是全网范围的变化,影响所有部署在以太坊主网和测试网的合约。需要注意的是,这一变化取决于合约部署链的 EVM 版本,编译合约时使用的 --evm-version 设置不会影响此行为。
3.此外,selfdestruct 操作码在 Solidity 版本 0.8.18 中已被弃用,按照 EIP-6049 的建议,弃用仍然有效,编译器会在使用时发出警告。在新部署的合约中强烈不建议使用,即使考虑到新的行为,未来 EVM 的更改可能会进一步减少该操作码的功能。

注意
在0.5.0版本之前,有一个名为suicide的函数,语义与selfdestruct相同。

9. 类型信息

表达式 type(X) 可用于检索关于类型 X 的信息。目前,支持此功能的类型有限(X 可以是合约类型或整数类型),但未来可能会扩展。

对于合约类型 C,以下属性可用:

  • type©.name:合约的名称

  • type©.creationCode:包含合约创建字节码的内存字节数组。可以在内联汇编中使用此字节码构建自定义创建例程,特别是通过使用 create2 操作码。该属性无法在合约本身或任何派生合约中访问,它会导致字节码被包含在调用站点的字节码中,因此像这样的循环引用是不可行的。

  • type©.runtimeCode:包含合约运行时字节码的内存字节数组。通常,这是合约 C 的构造函数部署的代码。如果 C 的构造函数使用了内联汇编,这可能与实际部署的字节码不同。还要注意,库在部署时会修改其运行时字节码,以防止常规调用。与 .creationCode 相同的限制也适用于此属性。

除了上述属性,以下属性适用于接口类型 I:

  • type(I).interfaceId:一个 bytes4 值,包含给定接口 I 的 EIP-165 接口标识符。此标识符是接口中所有函数选择器的 XOR,排除了所有继承的函数。

对于整数类型 T,以下属性可用:

  • type(T).min:类型 T 可表示的最小值。

  • type(T).max:类型 T 可表示的最大值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网红指路机器人是否支持环境监测功能?

嘿呀&#xff0c;你可知道&#xff1f;如今的叁仟网红指路机器人那可太牛啦&#xff01;它们可不单单局限于为行人指明方向&#xff0c;还纷纷兼职当起了 “环境小卫士”&#xff0c;为咱们的城市生活注入了前所未有的超智能便利。就拿那个依托叁仟智慧杆打造的数智指路机器人来…

Navicat导出mysql数据库表结构说明到excel、word,单表导出方式记录

目前只找到一张一张表导出的方式 使用information_schema传入表名查询 字段名根据需要自行删减&#xff0c;一般保留序号、字段名、类型、说明就行 SELECT COLUMNS.ORDINAL_POSITION AS 序号, COLUMNS.COLUMN_NAME AS 字段名, COLUMNS.COLUMN_TYPE AS 类型(长度), COLUMNS.N…

MySQL主从数据库搭建

此方案可适用于Centos 7、OpenEuler、Ubuntu操作系统。 在国产银河麒麟V10中,虚拟机中启动的麒麟系统使用当前方案并未遇到问题,但是在服务器上安装时,执行到初始化时出现了找不到依赖问题(目前已解决安装问题),后续我会继续更新该问题解决方案。 1. 创建主、从安装目录…

python系统之综合案例:用python打造智能诗词生成助手

不为失败找理由&#xff0c;只为成功找方法。所有的不甘&#xff0c;因为还心存梦想&#xff0c;所以在你放弃之前&#xff0c;好好拼一把&#xff0c;只怕心老&#xff0c;不怕路长。 python系列之综合案例 前言一、项目描述二、项目需求三、 项目实现1、开发准备2、代码实现 …

Java常用工具算法-1--哈希算法(MD5,SHA家族,SHA-256,BLAKE2)

1、概述 哈希算法&#xff08;Hash Algorithm&#xff09;&#xff0c;又称散列算法&#xff0c;是一种将任意长度的输入数据&#xff08;明文&#xff09;转换为固定长度的输出&#xff08;哈希值/摘要&#xff09;的数学算法。 哈希值通常被称为摘要&#xff08;Digest&…

OpenMCU(五):STM32F103时钟树初始化分析

概述 本文主要描述了STM32F103初始化过程系统时钟的初始化,主要描述了系统时钟的初始化&#xff0c;AHB总线时钟&#xff0c;APB总线时钟等的初始化。 硬件板卡3d图 时钟树 STM32F103的时钟树&#xff0c;如下所示: 时钟源选择 从STM32F103的时钟树框图&#xff0c;我们可以…

【qt】文件类(QFile)

很高兴你能看到这篇文章&#xff0c;同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 &#xff1a; https://www.yuque.com/alive-m4b9n 目录 QFile 主要功能QFile 操作步骤QFile 其他常用函数案例分析及实现功能一实现&#xff1a;打开文件并显示功能二实现:另…

基于AT89C52单片机的轮胎压力监测系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90545655?spm1001.2014.3001.5503 功能介绍&#xff1a; 采用MPX4115压力传感器进行轮胎压力检测&#xff1b;使用LCD液晶显示器显示轮胎压力&#xff1b;若压力过…

计算机网络 OSI参考模型

目录 OSS七层 OSI通信过程1 OSI通信过程2 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 OSS七层 OSI通信过程1 OSI通信过程2 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

2025年华为HCIP题库分享

1101、 【拖拽题】OPSF邻接关系建立的过程中需要使用不同的报文&#xff0c;那么请分别将以下各个状态和该状态使用的报文联系起来。 答题格式为&#xff1a;11 22 33 43 正确答案&#xff1a;【12】【21】【24】【33】 解析&#xff1a; 建立邻居关系 RouterA的一个连接到广…

linux--------------进程控制(上)

1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为⼦进程&#xff0c;⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;⾃进程中返回0&#xff0c;⽗进程返回⼦进程id…

windows免密SSH连接 ubuntu教程

文章目录 前情提要step1. 在windows下生成SSH密钥step2. SSH公钥copy到ubuntu的~/.ssh/authorized_keys内step3. 修改文件权限&#xff08;这一步完成后就可以实现免密SSH连接了&#xff09; 前情提要 ubuntu下安装SSH服务 sudo apt-get install openssh-serverwindows下安装…

《Linux运维实战:Ubuntu 22.04配置pam实现密码复杂度策略》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、背景信息 由于安全方面的考虑&#xff0c;先要求Ubuntu 22.04系统需配置密码复杂度策略&#xff0c;先要求如下&#xff1…

魔改chromium——基础环境搭建

谷歌chromium环境要求详细文档 软件和环境要求&#xff0c;必须安装&#xff0c;硬性要求 系统环境&#xff1a;Windows 10&#xff0c;内存最小8GB&#xff0c;推荐16GB&#xff0c;NTFS格式磁盘最少100GB空间Git版本&#xff1a;安装最新版本即可&#xff0c;Git桌面端下载…

电子文档安全管理系统V6.0接口backup存在任意文件下载漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 电子文档安全管理系统 V6.0 reso…

00.【Linux系统编程】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)

目录 一、华为云服务器免费体验申请 二、Xshell远程链接创建好的华为云服务器 2.1 下载Xshell 2.2 Xshell远程连接华为云服务器 一、华为云服务器免费体验申请 华为云官网 1. 进入华为云官网&#xff0c;最上面一栏点活动&#xff0c;并进入免费体验中心。 2. 找到含有“…

vs2022中使用spdlog、C++日志

spdlog::set_level(spdlog::level::info); // 只显示info及比info高级的信息&#xff0c;trace 和 debug 不显示 参考&#xff1a;Windows10中使用VS2022和Cmake编译构建C开源日志库-spdlog-腾讯云开发者社区-腾讯云 spdlog C日志管理 | 快速上手教程 - 知乎 1.按照上述步骤…

SOME/IP-SD -- 协议英文原文讲解10

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.5 Non…

Android OpenGLES 360全景图片渲染(球体内部)

概述 360度全景图是一种虚拟现实技术&#xff0c;它通过对现实场景进行多角度拍摄后&#xff0c;利用计算机软件将这些照片拼接成一个完整的全景图像。这种技术能够让观看者在虚拟环境中以交互的方式查看整个周围环境&#xff0c;就好像他们真的站在那个位置一样。在Android设备…

代码随想录算法训练营第三十二天 | 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯

509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;手把手带你入门动态规划 | LeetCode&#xff1a;509.斐波那契数_哔哩哔哩_bilibili 思路&#xff1a;输入&#xff1a;…