
Solidity 笔记
文章平均质量分 76
个人学习笔记,欢迎交流指正~
JS.Huang
卷不动了,可以躺平吗
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Solidity】创建合约
# assembly create`create` 方法通常在内联汇编中使用,用于动态创建、部署新合约,并获取新合约地址。`create` 方法的语法:`create(v, p, n)`- `v`:要发送的以太数量(以 wei 为单位)- `p`:指向 Creation ByteCode 的内存指针- `n`:Creation ByteCode 的长度注意事项:1. Solidity 中一般用 `msg.value` 获取以太数量,但在内联汇编中要用 `callvalu原创 2024-08-21 21:03:30 · 1464 阅读 · 0 评论 -
【Solidity】安全与校验
# 信息传输发送方 A:1. 计算消息 message 的哈希值 H:`hash(message) = H`2. 私钥 privateKey ➕ 哈希值 H 🟰 签名 signature:`signature = sign(H, privateKey)`3. 将消息 message 和签名 signature 发送给 B接收方 B:1. 计算消息 message 的哈希值 H1:`hash(message) = H1`2. 公钥 publicKey ➕ 签名 signature原创 2024-08-21 21:02:14 · 1306 阅读 · 0 评论 -
【Solidity】合约交互
# Delegate Call在当前合约通过 delegatecall 可以借用其他合约的方法,以更新当前合约的状态变量:```soliditycontract Demo { uint public num; uint public value; address public sender; function setVars(uint _num) public payable { num += _num; value += msg原创 2024-08-21 21:01:12 · 1168 阅读 · 0 评论 -
【Solidity】合约交互基础
# 数据的编码与解码1. `abi.encode`:将给定的参数按照 ABI(应用二进制接口)规则编码成字节数组。编码后的数据总是 32 字节的倍数,不足 32 字节的部分会自动填充。适用于合约调用和数据传输。2. `abi.encodePacked`:与 `abi.encode` 类似。不同的是,它生成的字节数组是压缩过的,不会自动填充到 32 字节的倍数。适用于生成紧凑数据和哈希计算。3. `abi.decode`:将 `abi.encode` 返回的字节数组解码成原始数据。需要提供数据的类型信原创 2024-08-21 21:00:39 · 1197 阅读 · 0 评论 -
【Solidity】支付
# payable 修饰符以下函数需要使用 payable 修饰:① 需要接收以太币的函数;② 需要使用 `msg.value` / `callvalue()` 且可被外部访问的函数。```soliditycontract Demo { // 使用 payable 修饰构造函数, 使合约可以在部署时接收以太币 constructor() payable { require(msg.value > 0, "Must send some Ether"); }原创 2024-08-21 21:00:07 · 668 阅读 · 0 评论 -
【Solidity】继承
# 继承Solidity 中使用 `is` 关键字实现继承,子合约可以继承父合约的状态变量、函数、事件、装饰器:```soliditycontract Father { // 声明事件 event Log(string message, address sender); // 声明状态变量 uint public a = 10; address public owner = msg.sender; // 声明装饰器 modifier on原创 2024-08-18 22:56:04 · 655 阅读 · 0 评论 -
【Solidity】函数的使用
# 函数Solidity 函数的定义格式如下:```function函数名(参数类型1 参数名名称1, ...){internal|external|public|private}[pure|view|payable][returns (返回值类型1 [返回值名称1], ...)] { // 函数体}```# 构造函数构造函数仅在合约部署时调用一次,主要用于初始化状态变量。```soliditycontract Demo { addre原创 2024-08-18 22:54:33 · 367 阅读 · 0 评论 -
【Solidity】修饰符
# 访问修饰符- `private`:表示仅能在合约内部访问;可用于函数、状态变量- `internal`:表示能在合约内部或继承合约内部访问;可用于函数、状态变量- `public`:表示能在任何地方访问;可用于函数、状态变量- `external`:表示仅能在合约外部访问;仅可用于函数(但内部可以通过 `this.f()` 来调用)```soliditycontract Demo { uint private privateVar = 1; uin原创 2024-08-18 22:55:30 · 728 阅读 · 0 评论 -
【Solidity】位运算及其应用
# 位运算位运算是一种对二进制数据进行操作的技术。**常用的位运算符**:1. 与运算(AND)`a & b`:对应位都为 1 时,结果为 1,否则为 02. 或运算(OR)`a | b`:对应位只要有一个为 1,结果为 13. 异或运算(XOR)`a ^ b`:对应位不同,结果为 1,相同为 04. 非运算(NOT)`~a`:将每个位取反,0 变 1,1 变 05. 左移运算(Left Shift)`a原创 2024-08-27 23:41:05 · 682 阅读 · 0 评论 -
【Solidity】复杂类型相关操作
# 操作 Enum```soliditycontract Demo { enum State { PENDING, ACTIVE, INACTIVE } State private state; // 更新 state function updateState(State _state) public { state = _state; } // 重置 state fun原创 2024-08-18 22:48:21 · 321 阅读 · 0 评论 -
【Solidity】类型
# Value TypeValue Type (值类型) 的变量在赋值或作为函数参数传递时,会复制其数据的值。1. **布尔类型**:```soliditycontract Demo { bool public isActive; // 默认为 false}```布尔值可以进行以下运算:- 逻辑运算:`!` (逻辑非)、`&&` (逻辑与)、`||` (逻辑或)- 比较运算:`==` (等于)、`!=` (不等于)其中,`&&` 和 `||` 是短路运算符原创 2024-09-10 22:41:22 · 884 阅读 · 0 评论 -
【Solidity】变量 & 单位
# Variable**State Variable** (状态变量):状态变量是在合约内声明的变量,其数据存储在区块链上。```soliditycontract Demo { uint public count; // 声明状态变量 count}```**Local Variable** (本地变量):本地变量是在函数内声明的变量,其数据存储在内存中。函数执行完后,内存会被释放。```soliditycontract Demo { function calcula原创 2024-08-18 22:47:08 · 448 阅读 · 0 评论