
solidity
文章平均质量分 62
余生·情诗
这个作者很懒,什么都没留下…
展开
-
Solidity应用:ERC721
ERC-721是一个流行的技术标准,基于ERC-721标准开发的代币合约被统称为"非同质化代币(Non-Fungible Tokens,缩写为NFT)",ERC-721代币相较于ERC-20代币最大的区别就是不可分割性和唯一性,其Token的最小单位为1,且每个Token都是唯一的。ERC-721标准提供了一套规则和准则,允许开发者在以太坊生态系统内以一致和可互操作的方式创建和管理NFT。原创 2023-09-01 11:50:25 · 665 阅读 · 0 评论 -
Solidity应用:ERC20
ERC20是一套基于以太坊网络的标准代币发行协议。有了ERC20,开发者们得以高效、可靠、低成本地创造专属自己项目的代币,是以太坊网络第一个真正意义上的应用。ERC20实现了代币转账的基本逻辑:账户余额、转账、授权转账、代币总供给、代币信息(可选):名称,代号,小数位数。合约只要继承并实现IERC20的所有接口就代表合约满足了ERC20协议的标准。原创 2023-08-10 22:41:46 · 819 阅读 · 2 评论 -
Solidity应用:验证签名
在以太坊的ECDSA标准中,被签名的消息是一组数据的keccak256哈希,为bytes32类型。我们可以把任何想要签名的内容利用abi.encodePacked()函数打包,然后用keccak256()计算哈希,作为消息。,该字符串实在EIP191提出的。EIP191提倡在消息前加上"\x19Ethereum Signed Message:\n32"字符,并再做一次keccak256哈希,作为以太坊签名消息。然后我们对比恢复出来的地址和小狐狸钱包签名的地址是否一致,即可验证签名是否有效。原创 2023-08-03 15:03:35 · 715 阅读 · 0 评论 -
Solidity进阶:自毁合约selfdestruct
selfdestruct是solidity内置函数,用来删除合约并将该合约剩余的ETH发送到指定地址。原创 2023-07-31 17:47:53 · 903 阅读 · 0 评论 -
Solidity进阶:通过合约部署合约
预测地址是通过当前工厂合约的地址+salt+被部署合约的bytecode来计算,这就意味着工厂合约地址不变、salt不变、被部署合约不变的情况下,新合约地址也不会变,所以相同的salt只能使用一次,否则会发生重复部署合约的情况。使用new在工厂合约部署合约,新的合约地址是通过工厂合约的地址和工厂合约对外发出交易的nonce值计算出来的。create2方法是使用工厂合约的地址加盐值去计算新合约的地址,所以新合约的地址在被部署前就可以计算出来。Remix验证:计算的地址与实际部署的地址一致。原创 2023-07-31 17:01:28 · 762 阅读 · 0 评论 -
Solidity进阶:哈希运算
对比上面两次结果发现虽然参数不一样但encodePacked编码后的结果一样,这样就会产生不一样的参数生成一样的哈希值,而encode不会存在这种情况,所以在hash运算时推荐使用abi.encode。哈希函数(hash function)是一个密码学概念,它可以将任意长度的消息转换为一个固定长度的值,这个值也称作哈希(hash)。在solidity中的哈希值为byte32定长字节类型,使用内部函数Keccak256加密。哈希的应用:获取唯一数据标识,签名运算。原创 2023-07-31 14:25:20 · 243 阅读 · 0 评论 -
Solidity进阶:库合约
库函数是一种特殊的合约,为了提升solidity代码的复用性和减少gas而存在,使用定义。库合约一般都是一些好用的函数合集。原创 2023-07-31 10:37:09 · 150 阅读 · 0 评论 -
Solidity进阶:call、delegatecall
前两节介绍了通过合约的源码和接口两种方法调用合约,现在使用call和delegatecall来调用。这两个函数都是低级函数,应谨慎使用。具体来说,任何未知的合约都可能是恶意的,我们在调用一个合约的同时就将控制权交给了它,而合约又可以回调合约,所以要准备好在调用返回时改变相应的状态变量(可参考), 与其他合约交互的常规方法是在合约对象上调用函数(x.f())。原创 2023-07-28 10:37:56 · 441 阅读 · 2 评论 -
Solidity进阶:抽象合约和接口
如果智能合约中未实现合约中的至少一个函数,即某个函数缺少主体{}中的内容,或者合约没有为其所有的基类合约构造函数提供参数时,则必须将合约标记为 abstract。如果我们知道一个合约实现了某接口,我们不需要知道它具体代码实现只需知道它的合约地址,用该接口就可以与它交互。接口基本上仅限于合约 ABI 可以表示的内容,编译接口可以得到合约的ABI,利用。接口类似于抽象合约,但是它们不能实现任何函数。工具也可以将ABI json文件转换为接口sol文件。标记,以便继承它的合约能够重写此函数。原创 2023-07-25 12:07:13 · 202 阅读 · 0 评论 -
Solidity进阶:调用其他合约
我们可以利用合约的地址和合约代码(或接口)来创建合约的引用:ContractName(_Address),其中ContractName是合约名,_Address是合约地址。然后用合约的引用来调用它的函数:ContractName(_Address).f(),其中f()是要调用的函数。我们先写一个简单的合约TargetContract来调用。原创 2023-07-23 19:20:33 · 332 阅读 · 0 评论 -
Solidity进阶:发送、接收ETH
call()没有gas限制,可以支持对方合约fallback()或receive()函数实现复杂逻辑。send()的gas限制是2300,足够用于转账,但对方合约的fallback()或receive()函数不能实现太复杂的逻辑。transfer()的gas限制是2300,足够用于转账,但对方合约的fallback()或receive()函数不能实现太复杂的逻辑。Solidity有三种方法向其他合约发送ETH,他们是:transfer(),send()和call(),其中call()是被鼓励的用法。原创 2023-07-23 00:30:46 · 587 阅读 · 0 评论 -
Solidity从入门到放弃:继承
继承是面向对象编程很重要的组成部分,可以显著减少重复代码。如果把合约看作是对象的话,solidity也是面向对象的编程,也支持继承。: 父合约中的函数,如果希望子合约重写,需要加上virtual关键字。:子合约重写了父合约中的函数,需要加上override关键字。原创 2023-07-22 18:58:21 · 144 阅读 · 0 评论 -
Solidity从入门到放弃:构造函数、修饰器和事件
事件是EVM的日志功能之上的抽象。事件在合约中可被继承。当他们被调用时,会使参数被存储到交易的日志中,不会存储在状态变量中,体现在区块浏览器交易记录的logs中。indexed标记的变量可以理解为检索事件的索引“键”,每个事件最多可以有三个带有indexed属性的参数,每个 indexed 变量的大小为固定的256比特。modifier的主要使用场景是运行函数前的检查,减少代码冗余。定义,每个合约可以定义一个,只在部署合约的时候自动运行一次。在函数中使用修饰器,如:只有合约部署可以修改owner。原创 2023-07-20 12:14:25 · 210 阅读 · 0 评论 -
Solidity从入门到放弃:报错控制
error是solidity 0.8版本新加的内容,方便且高效(省gas)地向用户解释操作失败的原因。人们可以在contract之外定义异常。// 自定义错误参数也可省略 error MyError(address caller , uint _i);} }原创 2023-07-19 15:54:08 · 202 阅读 · 0 评论 -
Solidity从入门到放弃:流程控制与循环
solidity中不支持死循环,支持continue和break中断循环。solidity中的if-else与js中类型,也支持三元运算。原创 2023-07-18 17:13:34 · 179 阅读 · 0 评论 -
Solidity从入门到放弃:数组、映射、结构体、枚举
1、映射的key只能是solidity默认类型,不能使用结构体,value可以使用结构体2、映射的存储位置必须是storage,因此可以用于合约的状态变量3、如果映射声明为public,那么solidity会自动给你创建一个getter函数,可以通过Key来查询对应的Value4、给映射新增的键值对的语法为_Var[_Key] = _Value,其中_Var是映射变量名,_Key和_Value对应新增的键值对。原创 2023-07-18 15:48:56 · 487 阅读 · 0 评论 -
Solidity从入门到放弃:函数
函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返回函数类型变量。函数类型有两类: - 内部(internal) 函数类型 - 外部(external) 函数类型。内部函数只能在当前合约内被调用(更具体来说,在当前代码块内,包括内部库函数和继承的函数中),因为它们不能在当前合约上下文的外部被执行。调用一个内部函数是通过跳转到它的入口标签来实现的,就像在当前合约的内部调用一个函数。:函数返回的变量类型和名称。原创 2023-07-11 17:24:11 · 113 阅读 · 0 评论 -
Solidity从入门到放弃:类型与变量
是全局范围工作的变量,都是solidity预留关键字。他们可以在函数内不声明直接使用,下面是一些常用的全局变量,完整的列表请看这个。:是仅在函数执行过程中有效的变量,函数退出后,变量无效。局部变量的数据存储在内存里,不上链,gas低。:是数据存储在链上的变量,所有合约内函数都可以访问 ,gas消耗高。算数运算符: +, -, 一元运算 -, +, *, /, %(取余),**(幂)比较运算符(返回布尔值):原创 2023-06-30 18:08:51 · 176 阅读 · 0 评论 -
Solidity从入门到放弃:第一个Solidity程序 HelloWeb3
Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。智能合约是管理以太坊状态里账户行为的程序。Solidity是一种针对Ethereum虚拟机(EVM)设计的语言,在部署合约时,应该尽量使用最新版本,因为新版本会有一些重大的新特性以及bug修复(除特殊情况)。原创 2023-06-27 16:38:25 · 306 阅读 · 0 评论 -
solidity从入门到放弃:开发环境搭建
是官方推荐的IDE,可在线使用,但是要使用本地工作区需要做一些配置。原创 2023-06-25 11:11:36 · 655 阅读 · 2 评论