Solidity合约安全,常见漏洞(第四篇)权力过大的管理员仅仅因为一个合约有一个所有者或管理员,这并不意味着他们需要无限权力。考虑一个NFT。按理说,只有所有者才能从NFT销售中提取收益,但如果所有者的私钥被泄露,能够暂停合约(阻止转账)就会造成严重的破坏。一般来说,管理员的权限应该尽可能的小,以减少不必要的风险。使用Ownable2Step而不是Ownable这在技术上不是一个漏洞,但OpenZeppelinownable如果所有权被转移到一个不存在的地址,会导致合约所有权的丧失。Ownable2step要求接收者确认所有权。这可以防止意外地将所有权发送到一个错误的地址。四舍五入的错误So
solidity变量状态变量变量值永久保存在合约存储空间中的变量局部变量变量值仅在函数执行过程中有效的变量,函数退出后,变量无效全局变量保存在全局命名空间,用于获取区块链相关信息的特殊变量例子1状态变量//SPDX-License-Identifier:SimPL-3.0pragmasolidity^0.7.0;contractSolidityTest{uintstoredData;//状态变量constructor()public{storedData=10;//使用状态变量}}2局部变量//SPDX-License-Identifier:SimPL-3.0pragmasolidity^0.
此篇文章教你如何在部署合约前就可以确定合约地址一、合约源码让我们创建一个工厂合约,它包含两个合约。第一个是Demo合约,其中一个函数可以读取全县所有者的钱包地址。第二个合约是工厂合约,它可以在部署Demo合约前获取其合约地址。这个合约将使用Solidity文档中所说的CREATE2操作码:加“盐”的合约创建/create2。//SPDX-License-Identifier:MITpragmasolidity^0.8.0;contractContractDemo{addresspublicowner;//Onlyownerscancalltransactionsmarkedwiththismo
一个合约最多有一个receive函数,声明函数为:receive()externalpayable{…}不需要function关键字,也没有参数和返回值并且必须是 external 可见性和 payable修饰.它可以是virtual的,可以被重载也可以有修改器modifier。在对合约没有任何附加数据调用(通常是对合约转账)是会执行receive函数. 例如 通过.send()or.transfer()如果receive函数不存在, 但是有payable 的fallback回退函数那么在进行纯以太转账时,fallback函数会调用.如果两个函数都没有,这个合约就没法通过常规的转账交易接收以太
目录一、版本指令:pragmasolidity^x.x.xx;二、合约创建:contractxxx{...}三、状态变量四、无符号整数:uint五、数学运算(加减乘除、乘方)六、结构体:struct七、数组静态数组动态数组公共数组八、定义函数九、使用结构体和数组十、私有/公共函数十一、返回值:returns十二、函数的修饰符:view十三、函数修饰符:pure十四、散列函数Keccak256:字符串转256位16进制数字十五、类型转换十六、事件:event十七、Web3.js十八、地址:Address十九、映射:mapping二十、Msg.sender二十一、Require二十二、继承(Inh
Solidity智能合约入门Solidity是链上智能合约的开发语言,链上智能合约相当于传统行业的后端,链上应用基本都是由合约+前端组成的,虽然不推荐,但部分链上应用也会加入后端进行数据存储,以降低用户的使用成本。Solidity这门开发语言并不复杂,只需要您稍微有一点儿编程基础,英文词汇量达到中学生水平,都能看懂基本的合约代码逻辑即可。最开始强烈推荐先入门ERC20和ERC721,理解之后,再去看关联的ERC1155、ERC4907等以太坊标准,都不会觉得有什么理解上的太大压力。除此之外,以太坊标准ERC为开发者提供了大量开源的合约接口,开发者可轻松用于构建各类链上实用功能。Solidity
目录智能合约Solidity语言简介 Solidity语言特性智能合约智能合约的英文是SmartContract最早是尼克丶萨博在1995年就提出了智能合约的概念~就是将法律条文写成可执行代码VitalikButerin(V神)把它引入到以太坊中,表示以太坊程序能自动执行及无法被干预的特点。以太坊是区块链与智能合约的完美结合,通过编写智能合约可以实现强大的功能,实现去中心化的应用开发。 现在智能合约已经扩展到所有的区块链平台,很多时候人们把超级账本Hyperledger,EOS等区块链平台的程序也称为‘智能合约’智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转智能合约本身
目录智能合约Solidity语言简介 Solidity语言特性智能合约智能合约的英文是SmartContract最早是尼克丶萨博在1995年就提出了智能合约的概念~就是将法律条文写成可执行代码VitalikButerin(V神)把它引入到以太坊中,表示以太坊程序能自动执行及无法被干预的特点。以太坊是区块链与智能合约的完美结合,通过编写智能合约可以实现强大的功能,实现去中心化的应用开发。 现在智能合约已经扩展到所有的区块链平台,很多时候人们把超级账本Hyperledger,EOS等区块链平台的程序也称为‘智能合约’智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转智能合约本身
上文Web3叙述交易所授权置换概念编写transferFrom与approve函数我们写完一个简单授权交易所的逻辑但是并没有测试其实也不是我不想主要是交易所也没实例化现在也测试不了我们先运行ganache启动一个虚拟的区块链环境先发布在终端执行trufflemigrate如果你跟着我一步一步来的那编译应该就会通过的然后的话我们要将交易所的合约也创建一下在项目根目录下的contracts目录下创建一个文件叫Exchange.sol然后先编写出最基本的结构//SPDX-License-Identifier:GPL-3.0pragmasolidity>=0.4.160.9.0;import"@ope
Solidity中函数有三种装饰器,分别是pure、view和payable。使用装饰器可以轻松改变函数的行为。pure装饰器表示在函数中没有修改任何函数以外的变量,包括状态变量,只是单纯地进行了一个数值计算。函数的执行并不会消耗任何Gas,因为函数执行使用的是本地节点的CPU,所以不会消耗任何链上资源。contractHelloWorld{ functiontestPure(uint a,uintb)publicpurereturns(uint){ uintc; c=a+b; retur