基本定义本节是我们合约的开头,我们首先来介绍下合约的文件结构。一个单个合约文件的结构需要清晰、有条理,便于阅读、理解和维护。文件头部声明SPDX-License标识符用于声明合约的许可证类型(MIT、Apache-2.0等)。
Solidity是一种面向对象的编程语言,它支持合约之间的继承。继承允许一个合约获取另一个合约的所有非私有属性和函数,这样就可以重复使用代码,降低重复工作量。继承关键字在Solidity中,继承是通过is关键字来实现的。
在Solidity中,payable关键字用于标识可以接收以太币的函数或地址。只有带有payable关键字的函数才能接收以太币转账。默认情况下,地址类型是不可支付的,也就是说,你不能直接向一个普通的地址类型发送以太币。为了发送以太币,我们需要将地址转换为payable地址。这样可以防止意外
在Solidity中,回退函数(fallbackfunctions)是在合约接收到以太币或调用不存在的函数时触发的特殊函数。自Solidity0.6.0版本起,回退函数分为两种:fallback函数和receive函数。
在Solidity中,Ownable合约是一种设计模式,用于管理合约的所有权。它通常提供了一些基础功能,如只允许合约所有者执行某些操作,转移合约所有权等;这种权限管理合约在以太坊主网或者其他链的主网上经常会看到。
在Solidity中,错误处理和控制报错是智能合约开发中的关键部分。Solidity提供了几种机制来控制错误和异常:require:用于检查条件是否为真,如果条件为假,则会抛出异常并回滚交易。assert:用于检查不应该为假的条件,用于捕捉代码中的严重错误。
在Solidity中,工厂合约是一种设计模式,用于创建和管理多个实例合约。通过一个工厂合约,你可以集中管理合约的创建逻辑,方便地部署多个合约实例,跟踪它们的地址,并对它们进行管理。工厂合约模式在开发去中心化应用(DApps)时非常有用,尤其是在需要频繁创建和销毁合约实例的场景下。
在Solidity中的继承这篇文章中,我介绍了solidity中关于继承的相关概念和例子。本篇文章,我们来一起探讨一个更加复杂的话题多线继承。基本概念Solidity支持多线继承,即一个合约可以同时继承多个基类合约。这可以使合约代码更加简洁,更容易复用代码
在Solidity中的继承和Solidity中的多线继承这两篇文章中,我们已经学习了Solidity关于继承的相关知识点,这篇文章,我们再聊一个更细致的话题:如何运行父级函数的构造函数。
在Solidity中,向其他合约或地址发送主币(ETH)有三种主要方法:transfer、send、call; 这三种方法各有自己的特点,并且在Gas消耗上也有不同
在Solidity中,call和staticcall是用于与其他合约进行交互的低级函数。这些函数允许合约调用其他合约的函数,发送以太币,以及检查其他合约的状态。
在Solidity中,接口(interface)和抽象合约(abstractcontract)都是用来定义合约的抽象行为,它们有相似之处,但也有一些关键的区别。下面是它们的用法、区别和联系。接口(Interface)接口是合约的一个非常简单的抽象,定义了合约应当实现的外部函数签名,但不包括
delegatecall是Solidity中的一种低级函数调用方法,它允许一个合约以调用者(caller)的上下文(context)执行另一个合约的代码。这意味着被调用的合约中的msg.sender、msg.value和存储都会是调用合约的上下文。
Solidity中,自毁合约(Self-DestructContract)是一种能够销毁自身并将剩余的以太币(Ether)发送到指定地址的智能合约。自毁合约通过调用selfdestruct函数实现,这个函数会删除合约的代码和存储,从而释放网络资源。
在Solidity中,view和pure是用于修饰函数的两个关键字,它们表明了函数对区块链状态的修改程度
在前面的系列文章中,我们已经学习了solidity的一些基础概念和知识,单纯的知识点学习起来比较枯燥,这一节我们会通过一个简单的示例来将这些知识整合起来。我们期望实现一个名为Bank的合约。
在手把手教你实现Bank智能合约这篇文章中,我们认真拆解了需求,罗列了相关的知识点,已经实现了基于权限控制的存款和取款逻辑。这篇文章,我们会提升难度,不仅仅要实现功能,还要思考怎么合理的去设计一个合约。
在手把手教你实现BigBank文章中,我们实现了一个稍微复杂点的存款、取款业务。但是聪明的你可能发现了,我们的BigBank虽然名字中带有big,但是有一个明显的缺点:它只能存入和取出ETH原生代币,面对广大的符合ERC20标准的Token却无能为力。
为什么会有ERC1363标准?我们知道,ERC20是用于在以太坊区块链上创建和管理代币的流行标准。它定义了一组函数和事件,用于转账、批准和查询代币余额。虽然ERC20标准已经成功用于创建各种代币,但它也存在一些已知的缺点和漏洞,这些漏洞被黑客利用,盗取了很多代币,让项目损失惨重。
ERC191是以太坊上的一个代币标准提案,全称是"EthereumRequestforComment191"。
CREATE2是Solidity中的一个操作码,用于创建新的智能合约。它是在以太坊的君士坦丁堡硬分叉中引入的。
智能合约从技术角度实现了"codeislaw",在智能合约的世界里,代码本身就是法律规则的体现。这一理念的核心是,智能合约是自执行的协议,由编写好的代码直接控制,无需中介或第三方干预。
基本概念:在Solidity中,函数的可见性(Visibility)定义了谁可以访问该函数。主要有四种可见性修饰符:private(私有)、internal(内部)、public(公共)和external(外部)。
掌握8种常见的合约设计模式
区块链技术的兴起正在重塑着多个行业,而智能合约是构建分布式应用的核心基石。Solidity作为以太坊生态中主流的智能合约编程语言,其重要性不言而喻。
本专栏将全面分享Solidity编程的各种知识和技巧,以期帮助开发者们更高效、更安全地编写智能合约。
Rust从入门到进阶
Ethernaut闯关攻略:从入门到精通智能合约开发
手把手带你实现Uniswap
密码学和网络安全
Next.js开发指南,手把手教你掌握Dapp全栈开发
带你走进web3钱包
带你走进Gin框架