在数学运算过程中假如超过了长度则值会变成该类型的最小值,如果小于了该长度则变成最大值数据上溢uint8numA=255;numA++; uint8的定义域为[0,255],现在numA已经到顶了,numA++会使num变成0(由于256已经超过定义域,它会越过256,变成0),即数据发生上溢(越过上边界,叫上溢)。255-->256-->0上溢。数据下溢uint8numB=0;numB--;numB本身是低水位线,现在numB--会使num变成255(由于-1已经超过定义域,所以它会越过-1,变成255),即数据发生下溢(越过下边界,叫下溢)。0–>-1-->255下溢。 可以通过引用Op
//solidityfunctionadd(uint256a,uint256b)internalpurereturns(uint256){uint256c=a+b;assert(c>=a);returnc;}基本上add只是像+一样对两个uint相加,但是它用一个assert语句来确保结果大于a。这样就防止了溢出。assert和require相似,若结果为否它就会抛出错误。assert和require区别在于,require若失败则会返还给用户剩下的gas,assert则不会。所以大部分情况下,你写代码的时候会比较喜欢require,assert只在代码可能出现严重错误的时候使用,比如uint
注:由于是付费专栏内容,若有错误请及时联系@1_bit,博客链接:https://blog.csdn.net/A757291228,或在文章下留言,收到后将会对错误进行改正,若是版本更新导致的问题也希望大家对错误进行提交,尽力去保证付费用户该得到的权益。友情提示:本系列文章读者最好学过一门编程语言,面向对象语言更佳文章还在持续更新中…未完本专栏将会实战NFT,带读者走进web3世界,完成一个NFT项目。《实战NFTweb3solidity(新版本0.8.+)》一、solidity基础二、solidity基础进阶(2.1)——library库合约二、solidity基础进阶(2.2)——库合约的
如何使用Solidity创建NFT提供技术支持SinaVisitorSystem构建和创建NFT的光荣指南,ERC-721标准,用于创建收藏品、艺术品和任何类型的链上独特资产。照片由AntonMaksimovjuvnsky在Unsplash上拍摄。NFT(Non-FungibleTokens)是智能合约领域的热门新秀。如果说2020年是DeFi之年,那么至少2021年初属于NFT。NFT是一种类似于ERC20的代币标准。不可替代的代币意味着它是独一无二的代币,没有其他类似的代币。这与可替代的ERC20截然不同。Fungible的意思是“可替换的”或“可互换的”。例如,无论您使用哪种美元钞票,您
目录合约间转账合约的继承合约间转账用到address类型的transfer方法话不多说,先上代码//SPDX-License-Identifier:GPL-3.0pragmasolidity>=0.6.20.9.0;contractInfoFeed{functioninfo()publicpayablereturns(uint256ret){return42;}functiongetBalance()publicviewreturns(uint){returnaddress(this).balance;}}contractConsumer{fallback()externalpayable{}
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编译器也行,其插件: 第一