solidity 精简笔记

本文是关于Solidity编程语言的关键知识点总结,涵盖了数值类型如bool、uint、int和address,函数的定义与可见性,变量的存储属性,数组与结构体的使用,映射类型,变量初始化与删除,常数与不可变属性,控制流结构,构造函数与修饰器,事件,继承,抽象合约与接口,以及错误处理和库合约的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

solidity 精简笔记

一、三行框架

// SPDX-License-Identifier: MIT   
pragma solidity ^0.8.0;           
contract 合约名{
    ...;
}

二、数值类型 bool、uint、int、address、bytes32

1.布尔型 bool

    // 布尔型变量
    bool public _bool = true;

2.正整数 uint、整数 int

    // 正整数、整数定义
    uint public _uint = 1; // 正整数
    uint256 public _number = 20231024; // 256位正整数
    int public _int = -1; // 整数,包括负数,但负数很少用到
    
    // 整数运算
    uint256 public _number2 = 2**2; // 指数
    uint256 public _number3 = 7 % 2; // 取余数
    bool public _numberbool = _number2 > _number3; // 比大小
    
    // 科学计数法
    整10的数可以写成科学计数法的形式,如:1e18、1e9

3.地址类型 address

    // 地址定义
    address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
    address payable public _address1 = payable(_address); 
    
    // payable address,可以转账、查余额
    // balance
    uint256 public balance = _address1.balance; 
    // transfer
    address payable addr;
    addr.transfer(1);//合约向addr转账1wei
    
    address x = 0x123;
    address myAddress = this;
    if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);// 向 x 转账 10?

4.定长字节数组 bytes32

一个字节占两位16进制(8位2进制),字节乘2是16进制的位数

    // 固定长度的字节数组
    bytes32 public _byte32 = "MiniSolidity"; 
    bytes1 public _byte = _byte32[0]; //存储_byte32数组的第一个字节,即0x4d (0x是象征意义,代表十六进制)

三、函数 function、函数名(传入参数)、可见性、gas 节省支付性、returns (参数类型 参数名)

function 函数名(传入参数) 可见性 [gas 节省支付性] [returns(参数类型 参数名)]

//可见性:internal|external|public|private
//public 和 internal 相对更常用

//gas 节省支付性:pure|view|payable
//直接用 view 代替 pure

//函数传入参数是数组时,调用它时需要输入全部数组长度的元素,首元素注意强制类型转换
function f1(uint[3] memory) public view{
	...
}
function f2() public view{
	f1([uint(1),2,3]);
}

中括号部分可省略不写。

四、函数输出

主要还是用命名式返回,直接 returns(参数类型 参数名)

    // 命名式返回
    function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
        _number = 2;
        _bool = false; 
        _array = [uint256(3),2,1];
    }

五、变量存储属性(storage/memory/calldata) 与作用域分类(状态变量、局部变量、全局变量)

//变量存储属性的用法:
//变量类型 变量属性 变量名
uint[] x = [1,2,3]; //变量属性默认是storage
uint[] storage xStorage = x;
uint[] memory xMemory = x;

1.变量存储位置

  • storage 是默认属性,存在链上消耗gas
  • m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海阔平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值