概述: 重入攻击是由于智能合约调用了外部不安全合约,或者对外发送以太币,使得合约的外部调用能够被劫持,导致合约内的方法被外部合约递归调用形成重入攻击有如下条件: 1、调用了外部不安全合约 2、使用了不安全的转账方式,未进行gas限制。 3、状态变量修改在合约交互之后如下为漏洞合约+攻击合约:```//SPDX-License-Identifier:MITpragmasolidity^0.8.3;contractEtherStore{//漏洞合约 receive()externalpayable{} constructor()payable{} mapping(address=>u
相关合约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
重点推荐: 中金深入解读Web3:以DAO为道,生态共荣Web3启示录:DAOs网络如何实现去中心化的治理(理论与方案)国人DAO大败局:放心吧!我们都实现不了去中心化自治必读:DAO渗透互联网(上篇):Web3.0的新组织范式DAO渗透互联网(下篇):“未来组织”的玩家手册DAO:人类协作的新疆域【机制篇】《双代币声誉系统:让杰出贡献者"名利双收"》《BanklessDAO初体验:八小时工作制真能日赚5000元吗?》《评估一个DAO好坏的9个健康指标》English【工具篇】《自下而上的薪资发放工具Coordinape》《如何实现一个DAO投票社区?Snapshot》《DAO工具篇:管理DA
前言很多做区块链技术的朋友对智能合约应该是熟悉的,应该也常听到,智能合约一旦发布上链便不可更改的技术性质。这是正确的,合约发布后,该合约本身的逻辑就固定了,无法再更改了,但我们却可以通过一些技术手段来调整合约的逻辑,从而实现可变合约的效果,本文便来简单讨论这些技术手段,主要是:多重合约与代理合约这两块。本文会基于RemixIDE来给出合约的效果,你可以基于【搭建RemixIDE本地开发环境】一文,搭建与我一样的开发环境。写到一半,发现内容比较多,分成上、下两篇来发,上篇主要讨论多重合约这种实现方式。多重合约合约间的调用要比较好的理解多重合约,你需要理解合约间是如何相互调用这一基础知识。这里,我
01目的本文档介绍了工程化开发智能合约项目的工程树目录,介绍了各个文件夹及文件的含义和用途。本文档将沿用之前文章中实现的地址簿合约内容,以初始化项目为例展开介绍,适合刚接触合约开发的开发人员用来了解智能合约项目,帮助其快速了解以及上手智能合约。02智能合约介绍区块链作为一种分布式可信计算平台,去中心化是其最本质的特征。每笔交易的记录不可篡改地存储在区块链上。智能合约中定义可以在区块链上执行的动作action和交易transaction的代码。可以在区块链上执行,并将合约执行状态作为该区块链实例不可变历史的一部分。因此,开发人员可以依赖该区块链作为可信计算环境,其中智能合约的输入、执行和结果都是
0x01重入本质调用外部合约或将Ether发送到地址的操作需要合约提交外部调用,这些外部调用可能被攻击者劫持,迫使合约执行进一步的代码导致重新进入逻辑。0x02前置知识我们需要先知道以下几种函数的区别.transfer():发送失败则回滚交易状态,只传递2300Gas供调用,防止重入。.send():发送失败则返回false,只传递2300Gas供调用,防止重入。.call():发送失败返回false,会传递所有可用Gas给予外部合约fallback()调用;可通过{value:money}限制Gas,不能有效防止重入。payable标识符在函数上添加payable标识,即可接受Ether
目录1.选择智能合约语言1.1Solidity1.2Vyper1.3Move1.4Rust2.部署和测试框架2.1概览2.2Remix2.3Truffle2.4Hardhat2.5其他框架3.前端工具3.1入门3.2Web3.js/Ethers.js3.3脚手架3.4Moralis4.钱包4.1小狐狸钱包(MetaMask)4.2多签钱包4.3冷钱包5.区块浏览器6.测试网与水龙头7.Web3基础设施前言从底层的区块链基础设施到建立在其之上的应用层的智能合约生态,Web3领域已经发展的相当之快。基于智能合约,我们可以构建出各种各样的dApp(去中心化应用),比如DeFi、GameFi、NFT、
目录1. Ganache本地区块链1.1 主界面1.2 设置2. 开发智能合约2.1 初始化项目2.2 添加package.json文件2.3添加智能合约源文件2.4 编译项目3. 部署智能合约到Ganache3.1 更新配置文件3.2 创建迁移脚本 3.3 执行迁移命令1. Ganache本地区块链首先启动Ganache,创建本地的以太坊区块链网络。1.1 主界面本地区块链可以模拟公共区块链,开发人员可以在本地区块链上测试智能合约。打开Ganache,界面如下图所示:本地区块链缺省有10个外部账号,每个账号都有100个假的以太币,这些可以通过设置改变。Ganache界面中有下面几个主要页面:
MarriageEvidence结婚证书合约案例分析一、合约场景分析二丶基础合约介绍1.角色合约(1)功能说明(2)接口说明(3)使用说明2.存证合约(1)功能说明(2)接口说明(3)使用说明三丶业务合约介绍1.结婚证书合约(1)功能说明(2)接口说明(3)使用说明一、合约场景分析谨以白头之约书向鸿笺,好将红叶之盟载明鸳谱。三千年来,结婚证书的形式一直在变化,但我们相信,它承载的美好爱情和对幸福婚姻生活的向往从未变过。使用区块链技术,让结婚证书上链,定格在区块链的历史长河中——永存。源码贡献者:github:Blockchain_Key源码分析者:github:Blockchain_Key源码
文章目录第一章生成蚂蚁的房子实战第二章mapping+identityMapping(映射)Identity(标识)实战第三章msg.sender全局函数实战第四章require实战第五章增加一些属性实战第六章Storage与Memory实战接下来我们需要给我们的小蚂蚁建造一个属于他的小窝,让小蚂蚁有个自己的家。第一章生成蚂蚁的房子小蚂蚁出生了,快来给它建造一所房子,给小蚂蚁一个安心的家。实战参照上面生成蚂蚁的例子,我们还需要给蚂蚁生成房子。定义一个事件叫做NewHouse。它有4个参数:houseId(uint)带indexed属性,name(string),existGoods(uint)