solidity基础学习

本文详述了Solidity编程语言的基础,包括数据类型如数组、内存与存储、函数修饰符等,强调了view函数和事件在节省Gas上的作用。还介绍了开发环境的搭建,如Remix在线编辑器和VSCode插件,以及合约间的交互和DApp开发中的Gas优化策略。同时,提到了外部库如OpenZeppelin的Ownable合约和开发注意事项,如存储使用的谨慎和view函数的利用。
摘要由CSDN通过智能技术生成

0 参考来源

文档主要参考了https://cryptozombies.io的游戏dapp开发网站,一步步通过游戏来讲解solidity。

同时一些细节参考了网上的博客:
https://www.colabug.com/2416565.html
https://www.cnblogs.com/StephenWu/p/7096550.html
https://blog.csdn.net/liyuechun520/article/details/78408588
等等

附一些solidity和以太坊的参考资料:
official docs: http://www.ethdocs.org/en/latest
以太坊wiki:https://github.com/ethereum/wiki/wiki

以及github上的solidity指南合集:https://github.com/bkrem/awesome-solidity

1 solidity支持的数据类型

1.1 关键词罗列

string//字符串
uint //默认为uint256,还有uint8,uint128等等
int//默认为int256
[] //数组
struct //结构体
view //修饰函数,函数只读取数据不更改数据
pure //修饰函数,函数不访问应用中的数据,返回值完全取决于它的输入参数
mapping//映射:存储和查找数据所用的键-值对
address//地址
bytesN//N取1到32的任意整数值,默认的byte表示bytes1
require//限制条件,require使得函数在执行过程中,当不满足某些条件时抛出错误,并停止执行,个人感觉类似assert断言
inheritance//继承,合约可以访问被继承合约中定义的public函数
storage//永久存储在区块链中的变量
memory//临时变量,当外部函数对某合约调用完成时,内存型变量即被移除
//大多数时候你都用不到这些关键字,默认情况下 Solidity 会自动处理它们。 状态变量(在函数之外声明的变量)默认为“存储”形式,//并永久写入区块链;而在函数内部声明的变量是“内存”型的,它们函数调用结束后消失。
//有时,也需要手动声明存储类型,主要用于处理函数内的 _ 结构体 _ 和 _ 数组 _ ,用以标识指针指向的是原始上链数据还是副本

internal//类似private,但是合约可以访问父合约中定义的internal函数
external//与public类似,但是这些函数只能在合约之外调用
constructor()//0.4.22及以后采用此作为构造函数
modifier//函数修饰符,修饰函数,它不能像函数那样被直接调用,只能被添加到函数定义的末尾,用以改变函数的行为,在其他语句执行前,先检查先验条件,给继承这个函数的modifier的对应函数加一个特定约束,在继承的函数体将在_特殊符号的位置被插入
now//当前unix时间戳(自1970年1月1日以来经过的秒数)

Solidity 定义的函数的属性默认为公共。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。

在 Solidity 中,有一些全局变量可以被所有函数调用, msg.sender,它指的是当前调用者(或智能合约)的 address

Solidity 并不支持原生的字符串比较, 我们只能通过比较两字符串的 keccak256 哈希值来进行判断

1.2 参数类型细节

1.2.1 数组

https://www.jianshu.com/p/5ca861cce245

1.2.2 memory storage

引用类型的变量在传值时需要memory或storage关键词,一般用于结构体struct、数组或者mapping当中,具体而言,就是传入的值是一个副本还是原始参数。
例如:

struct Zombie {
    uint a;
    bool b;
}
function modify(Zombie storage _zombie) internal {
    _zombie.a = 6;//这样就修改了传入对象的原始值
}
function fake_modify(Zombie memory _zombie) internal {
    _zombie.a = 5;//这样只是修改了临时变量的值
}

注:函数参数如果为storage类型时,函数的类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值