ContractsinSolidityaresimilartoclassesinobject-orientedlanguages.Theycontainpersistentdatainstatevariables,andfunctionsthatcanmodifythesevariables.Callingafunctiononadifferentcontract(instance)willperformanEVMfunctioncallandthusswitchthecontextsuchthatstatevariablesinthecallingcontractareinaccessibl
相关合约TokenX.sol//SPDX-License-Identifier:MITpragmasolidity^0.8.0;import"@openzeppelin/contracts/token/ERC20/ERC20.sol";contractTokenXisERC20{constructor(uint256initialSupply)publicERC20("Web03","W03"){_mint(msg.sender,initialSupply);}stringpublicconstanturl='web03.cn';}部署合约部署TokenX.sol地址:0x38451d7BC8
0x01重入本质调用外部合约或将Ether发送到地址的操作需要合约提交外部调用,这些外部调用可能被攻击者劫持,迫使合约执行进一步的代码导致重新进入逻辑。0x02前置知识我们需要先知道以下几种函数的区别.transfer():发送失败则回滚交易状态,只传递2300Gas供调用,防止重入。.send():发送失败则返回false,只传递2300Gas供调用,防止重入。.call():发送失败返回false,会传递所有可用Gas给予外部合约fallback()调用;可通过{value:money}限制Gas,不能有效防止重入。payable标识符在函数上添加payable标识,即可接受Ether
文章目录第一章生成蚂蚁的房子实战第二章mapping+identityMapping(映射)Identity(标识)实战第三章msg.sender全局函数实战第四章require实战第五章增加一些属性实战第六章Storage与Memory实战接下来我们需要给我们的小蚂蚁建造一个属于他的小窝,让小蚂蚁有个自己的家。第一章生成蚂蚁的房子小蚂蚁出生了,快来给它建造一所房子,给小蚂蚁一个安心的家。实战参照上面生成蚂蚁的例子,我们还需要给蚂蚁生成房子。定义一个事件叫做NewHouse。它有4个参数:houseId(uint)带indexed属性,name(string),existGoods(uint)
Solidity简介以太坊拥有多种高级语言,可用于编写智能合约,每种语言都受到另一种广泛使用的语言的启发。最流行的一种叫做Solidity,它基于JavaScript。由于Solidity是迄今为止最成熟的以太坊语言,因此它是社区大力鼓励开发人员现在使用的语言。Solidity是一种语法类似JavaScript的高级语言。它被设计成以编译的方式生成以太坊虚拟机代码。使用它很容易创建用于投票、众筹、封闭拍卖、多重签名钱包等等的合约。编译环境Remix在线编译器: http://remix.app.hubwiz.com/VScode编译器也行,其插件: 第一
Chainlink开发者社区发布了一个关于全栈web3,solidity和区块链开发的完整视频教程。本视频教程由Chainlink开发者大使PatrickCollins讲解。教程由浅入深讲解了区块链的基础知识,智能合约基础以及流行的开发工具。视频内容覆盖广泛,不论是初学者还是资深工程师,都会从中学习到很多知识。这个长达30+小时的视频教程由18节课组成,会让对Web3感兴趣的开发者从零到一百完整学习相关技术。不管你之前是否有开发经验,都可以跟着课程,深入学习课程内容来将自己培养成为一名专业的Web3软件工程师。你可以在这里观看完整视频:https://www.bilibili.com/vide
生活本来就是平凡琐碎的,哪有那么多惊天动地的大事,快乐的秘诀就是不管对大事小事都要保持热情目录一、Solidity的特殊变量(全局)二、Solidity的不可变量immutable的赋值方式 三、Solidity的事件与日志事件和日志加深理解四、Solidity的异常处理1.require()2.assert()3.revert()4.三者使用例子5.require、assert、revert区别6require、assert使用场景7.抛弃的异常语句和其他新增的异常语句 五、Solidity工厂合约 一、Solidity的特殊变量(全局)特殊变量,是全局可用的变量,提供关于区块链的信息。下面
Solidity的基本类型布尔(bool):可能的取值为字符常量值true或false整型(int/uint):分别表示有符号和无符号的不同位数的整型变量;支持关键字uint8到uint256(无符号,从8位到256位)以及int8到int256,以8位为步长递增·定长浮点型(fixed/ufixed):表示各种大小的有符号和无符号的定长浮点型;在关键字ufixedMxN和fixedMxN中,M表示该类型占用的位数,N表示可用的小数位数·地址(address):存储一个20字节的值(以太坊地址大小)·定长字节数组:关键字有bytes1,bytes2,bytes3,…,bytes32·枚举(en
使用OpenZeppelin和Ethers.js在Solidity中使用ECDSA验证链下结果和白名单介绍作为一名区块链开发者或该领域的热衷者,我们应该对以太坊的高gas问题并不陌生。以太坊的价格坚挺在3000美元区域,而Gas价格平均上涨50-70Gwei,每笔交易的Gas费用越来越贵,一次简单的转账大约需要4美元。有一个解决gas问题的方法,就是把这个计算放到链下,让服务器来做这个工作。许多在线ECDSA教程涉及到数学的使用,关于s,r,v的一些东西,我们所有的开发人员都同意,其是无聊的,并且很难在没有bug的情况下实现。因此,在本文中,我们将使用OpenZeppelin和Ethers.j
前言这是自己初学区块链的时候模仿着github的链接:link这个项目做的图书管理系统,在原基础上就是做了小的修改,功能分为管理员和学生。个人感觉在目前适合solidity初学者的免费项目很少,通过这个项目能较快上手。本人目前也就是新手,代码尽量做了许多注释方便理解,博客中的介绍难免会有错误的地方,请谅解。我上传到了gitee,如果觉得有用希望给个star。https://gitee.com/Ilovesandwich/ethereum_library_dapp.git环境搭建整个项目是用的私有链,不用去考虑添加虚拟机搭建多个节点,因此非常容易快速上手。要做的首先就是安装环境了,安装node.