智能合约-语法基础4

·  阅读 350

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

ABI 编码和解码函数

abi.decode(bytes memory encodedData, (...)) returns (...)
// ABI 解码给定的数据,而类型在括号中作为第二个参数给出。
例子:
(uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uintuint[2], bytes))
复制代码
abi.encode(...) returns (bytes memory)  // ABI 编码给定的参数
复制代码
abi.encodePacked(...) returns (bytes memory)
//对给定参数执行[打包编码]
请注意,打包编码可能不明确!
复制代码
   abi.encodeWithSelector(bytes4 selector, ...) returns (bytes memory)`: ABI 从第二个开始对给定的参数进行编码,并将给定的四字节选择器放在前面
复制代码
abi.encodeWithSignature(string memory signature, ...) returns (bytes memory)
相当于:
abi.encodeWithSelector(bytes4(keccak256(bytes(signature))), ...)
复制代码
abi.encodeCall(function functionPointer(...)returns (bytes memory)
functionPointer: ABI使用元组中的参数对调用进行编码。执行完整的类型检查
,确保类型与函数签名匹配。结果等于:
abi.encodeWithSelector(functionPointer.selector, (...))
复制代码

提示:这些编码函数可用于为外部函数调用制作数据,而无需实际调用外部函数。此外,它是一种计算结构化数据散列的方法

字节成员

bytes.concat(...) returns (bytes memory);
//将可变数量的字节和 bytes1, ..., bytes32 参数连接到一个字节数组
复制代码

字符串成员

string.concat(...) returns (string memory);
//将可变数量的字符串参数连接到一个字符串数组
复制代码

错误处理

Solidity 使用状态恢复异常来处理错误。这种异常将撤消对当前调用(及其所有子调用)中的状态所做的所有更改,并且还向调用者标记错误。

1、assert

assert(bool condition);
//如果条件不满足,则会导致 Panic 错误并因此状态更改恢复 - 用于内部错误,检查不变量
//正常的函数代码永远不会产生 Panic , 甚至是基于一个无效的外部输入时。
//如果发生了,那就说明出现了一个需要你修复的 bug。
//如果使用得当,语言分析工具可以识别出那些会导致 Panic的 assert 条件和函数调用。
复制代码

require

require(bool condition);
//如果条件不满足,则恢复 - 用于输入或外部组件中的错误。
//用于确认条件的有效性
//可以在后面加上返回的错误语句
require(bool condition, string memory message);
//如果条件不满足,则恢复 - 用于输入或外部组件中的错误。还提供错误消息。
复制代码

revert

revert();
//中止执行并恢复状态更改
//revert语句接受一个`自定义错误`作为不带括号的直接参数:
revert (string memory reason);
//提供解释性字符串
复制代码

目前我对solidity的错误处理机制就了解这些,后期会继续更改、深入。

分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改