开发以太坊智能合约-发布合约[4] 第四节:使用 hardhat 开发以太坊智能合约-验证合约[5] 一、概述 在我们将真正的合约部署到正式区块链网络上之后, 在区块链浏览器里查看我们的合约,它应该是这样显示的...为了增强用户对于项目的信任,我们需要将我们合约的源代码进行公布,接下来,我们就讲解,如何使用 hardhat 进行合约的验证 二、准备工作 1、申请区块链浏览器账号 我们使用区块链浏览器提供的 api...1、发布测试合约 准备工作已经完成,接下来,让我们进入真正的验证合约流程,首先,我们先在 matic 测试网创建一个合约,还是使用 Lock.sol 这个合约来创建(如何部署合约,可以看上一篇教程[发布合约...,已经创建成功了,我们点开 Contract 选项卡看一下 可以看出来,合约发布成功了,但是源代码看不到,接下来让我们来使用 hardhat 进行合约验证 2、合约验证 我们先来看一下官网关于合约验证这块是如何操作的...,我们完成了合约的验证流程,到此,hardhat 的教程就结束了,后面我会推出更多智能合约相关的课程,感兴趣的同学关注一下吧 参考资料 [1] 全干攻城尸: https://learnblockchain.cn
[5] 第 3 篇:存储布局是如何工作的?...更确切地说,复制智能合约代码从Stack(2)个字节到Stack(2)+Stack(1)个字节。看一下堆栈,这是位于0x22(=34 的十进制)和(22+3f=61,即 97 的十进制)之间的代码。...我们的空闲内存指针仍然被设置,但之后并没有对msg.value进行任何验证,EVM 直接进入构造器代码,随后复制/返回智能合约代码,这些代码将被部署到区块链上。...c0-80 并验证它是否等于 40。...: https://learnblockchain.cn/article/4927 [6] 第3篇:存储布局是如何工作的?
译文出自:登链翻译计划[1] 译者:翻译小组[2] 校对:Tiny 熊[3] 简介 在之前的教程中,我们向你展示了如何使用我们的生成艺术库[4]来创建一个头像集合[5],生成符合要求的 NFT 元数据...因此,在本教程中,我们将编写一个智能合约,允许任何人通过支付 Gas 从我们的藏品中铸造一个 NFT。...智能合约的开发和部署可能是非常昂贵的,而且在安全缺陷和 bug 方面也不宽容。 设置本地开发环境 我们将使用 Hardhat,一个行业标准的以太坊开发环境,来开发、部署和验证我们的智能合约。...编写智能合约 在这一节中,我们将在Solidity[12]中编写一个智能合约,允许任何人通过支付所需数量的以太币+Gas 来铸造一定数量的 NFT。...进入testnets.opensea.io[17]并搜索你的合约地址。 这就是我们的藏品的模样: 在 Etherscan 上验证合约代码 在 etherscan 上验证我们的合约。
通过智能合约能够实现: · 自动、公正地执行合约; · 无需中间人的介入。 在执行合约时,如果无需获得另一方的信任,那么事情的效率会更高。 那么,智能合约究竟是什么?...智能合约并不智能 “智能”似乎指合约天生具有智能性,但并非如此。智能合约的智能体现在,执行合约无需另一方的合作。确保合约的执行是智能合约的强大之处。 ?...智能合约并不简单 由于以太坊的大热,人们错误地以为智能合约只存在于以太坊中,这并不对。 从2009年开始,比特币就有智能合约语言Script。而智能合约实际出现在1995年,早于比特币。...那么比起普通合约,智能合约更容易使用吗? 例如,智能合约能用于房地产吗? 通过智能合约,Alice可以证明房子的所有权。Bob可以通过付钱给Alice购买房子。...当Alice将房子转让给Bob时,智能合约需要知道房子发生了转让。有几种方法可以做到这一点,但都面临相同的问题,现实世界中,必须有信任的第三方来进行验证。 例如,房子可以表现为以太坊上不可替代的代币。
背景 比如现在有一个需求、我需要通过外部合约获取BRC20 token的总交易量。那么我需要在brc20的转账函数里面做一些调整,主要是两个函数内统计转移量。然后再提供外部获取函数。...] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } // 添加一个视图函数,允许其他合约读取..._allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); } } 3、外部合约调用示例...external view returns (uint256); } contract queryErc20 { Iquery public factory; //注入合约
示例用法 假设想要从合约中获取 pledgeMap 的所有键值对,可以这样调用函数: MappingIteration myContract = new MappingIteration(); myContract.addEntry
你有没有考虑过如何审计一个智能合约来找出安全漏洞? 你可以自己学习,或者你可以使用这份便利的一步步的指南来准确地知道在什么时候该做什么,并对合约进行审计。...让我们直接开始审计合约吧: 如何审计一个智能合约 为了教会你如何进行审计,我会审计我自己写的一份合约。这样,你可以看到可以由你自行完成的真实世界的审计。...审计概览和优良特性: 快速查看将被审计的智能合约并找到良好的实践。 对合约的攻击: 在本节中,你将讨论对合约的攻击以及会产生的结果。这只是为了验证它实际上是安全的。...审计总结: 你对合约的看法和关于审计的最终结论。 将这份结构说明保存在一个安全的地方,这是你安全地审计智能合约时需要做的全部内容。它将确实地帮助你找到那些难以发现的漏洞。...做了较多的检查来验证bet函数的使用是合适的。 只有在下注数达到最大条件时才安全地生成赢家号码。 3、对合约进行的攻击 为了检查合约的安全性,我们测试了多种攻击,以确保合约是安全的并遵循了最佳实践。
用myetherwallet之前,请先看看 https://zhuanlan.zhihu.com/p/36105871 看完应该会知道如何安全的使用 myetherwallet 了....开始 本次我们玩的合约是 https://ropsten.etherscan.io/address/0x39171828d0c6d072c19f5d32900e30343c296f38 确定合约是在哪个网...获取合约地址 合约地址还是很简单就能知道的 如本次我们要玩的网址是https://ropsten.etherscan.io/address/0x39171828d0c6d072c19f5d32900e30343c296f38...(这就是ABI) 如果打开没有的话,则说明这个合约没有开源.. ?...复制上你合约地址 与 合约ABI ,然后点击Access ? 选则你要调用的方法 ? (本次我们选择 batchTransfer) 输入你的参数 ? 本次我们的参数 如上图所示...
这是一篇比较完整的评估智能合约安全的文章。...进行攻击漏洞的的测试 分析上述的文档中的相关攻击手段是否会在当前的合约中被触发。 漏洞细节的发现和一些注意事项 在这一步,重点讨论漏洞的严重级别,并且依照漏洞的验证级别提供不同的修复建议。...分析失败处理的部分 合约在事件触发失败的的时候如何响应,如一些bug或者发生漏洞?检查合约是否会暂停或者资金是否有管理的风险。 分析代码的通用性 所有的使用到的库或者工具是否已经安装到了最新的版本?...所以无论如何对于之前没有经过审计的代码的使用必须非常的消息谨慎,如果一些经过了非常严格审计的代码是可以正常使用的。 分析外部调用 状态是否在外部调用以后发生改变?...简单地说,所有整数的除法都是四舍五入的整数。如果这样会导致问题,那就用乘法来代替。 如果以太被强行发送会发生什么?
智能合约的交互必须遵循ABI 规范,这是一套规则和定义,用于规范以太坊生态系统中的智能合约通信。 在这篇博客中,我将以简化的方式介绍,根据 ABI 规范,必须如何提交数据给区块链,以触发智能合约。...然后,我将谈论用不同方法从链下和链上调用智能合约函数。 介绍 在我们开始之前,我将简单地说明我将在这篇博客中使用哪些工具。...ABI 规范 ABI 规范指出了在调用智能合约函数时如何构建发送到 "交易"中作为 "data" 的字节数据。字节数据包含 2 个主要部分: 函数选择器:前 4 个字节。...有两种可能的情况,你要么有智能合约 JSON ABI,要么没有。 有智能合约 JSON ABI 智能合约 JSON ABI 是一个 JSON 文件,在你构建智能合约时由 solidity 编译器生成。...Send the message (bool success, bytes memory data) = contractAddress.call(AbiData); 警告 需要注意的是,不管你与智能合约的交互方式如何
然后执行下面的命令: 请将make -j2中的2改成CPU的核心的数量,以加快编译速度 编译tinypy 这里的tinypy是精简版的python,在libraries/tinypy下,用于运行python智能合约...--debug 进入调试模式,在这个模式下有许多针对调试的调整,如支持在智能合约代码里设置断点调试程序,如块产生不再有会产生超时异常,执行智能合约也不会有时间限制等等。...接下来看下如何执行命令: 执行下面的命令设置python环境变量,请将/dev/pyeos修改成正确的pyeos代码所在目录 cd 到build/programs,用下面的命令创建data-dir目录:...genesis.ini自动创建创世块 plugin 用于指定要加载的插件 接下来在build/programs目录执行下面的命令来启动应用程序 如果你看到类似下面的输出,那么程序就运行成功了 下篇来介绍下如何在
本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用。...让 java 程序可以和我们的智能合约愉快的交互起来~ 一、什么是 web3j web3j是一个高度模块化、响应式、类型安全的Java和Android库,用于与智能合约交互,并与Ethereum网络的客户端...credentials, BigInteger.valueOf(200000), BigInteger.valueOf(20000000)); 2.验证合约是否可用...命令: contract.isValid(); 实例:验证已部署的智能合约是否可用 System.out.println(compute_sol_compute.isValid()); 3.调用智能合约...最后,可以拿回本次智能合约执行的结果。
beneficiary = beneficiaryAddress; auctionEndTime = block.timestamp + biddingTime; } block.timestamp 向合约提供当前区块的时间戳...external则表示这个方法是在外部被调用的,也就是被合约的用户通过接口调用。逻辑上也不复杂,pendingReturns会记录所有出价成功的人(注意不是拍卖成功)和他们的总出价。...这样验证了我们前面的内容。
智能合约部署后就不能变更(设计上的不变性)。另一方面,软件质量在很大程度上取决于迭代升级和修补源代码的能力。...在这篇文章中,我们将学习: 1.为什么我们需要升级智能合约?2.了解升级是如何进行的?3.使用OpenZeppelin CLI[1]轻松编写/管理“可升级”智能合约。...为什么我们需要升级智能合约 默认情况下,以太坊中的智能合约是不可变的。一旦创建了它们,就无法对其进行更改,从而有效地充当了参与者之间牢不可破的合约(Tiny熊注:指因为不变性提供了参与者的信任)。...有很多例子,其中价值数百万美元的以太币被盗/被黑客入侵[4],如果我们可以更新智能合约,则可能可以阻止这些损失。 升级是如何进行的 我们可以通过几种方式升级合约。...CLI不仅管理合同升级,而且还管理编译,交互和源代码验证。升级库仅负责创建和升级。该库也不会跟踪已经部署的合同,也不会像CLI那样运行任何初始化程序或验证存储空间。
如果mapping的值为地址则可通过与0地址比较来判断是否优质。 前一种情况并不存在面向编程语言中的空指针异常的问题。
本文作者:powervip[1] 以太坊智能合约升级 在以太坊[2]智能合约的开发过程中,对于一些复杂的合约开发,要开发出完美没有bug的智能合约[3],要求是相当高的。...即使编写出来的智能合约能完美没有bug,也很难保证以后的需求和应用业务逻辑一成不变。所以,在开发智能合约的同时,就要考虑好以后的合约更新和升级问题。...思路 以太坊智能合约的更新和升级,其中一种思路就是:在智能合约的编写过程中,要做到数据和应用逻辑的分离。简单来说,就是把数据和应用逻辑分别放在2个独立的合约里(本文称之为数据合约和业务合约)。...Solidity[4]有三种合约间的调用方式 call、delegatecall 和 callcode。其中,delegatecall可作为智能合约升级的一个较好的途径。...powervip: https://learnblockchain.cn/people/5018 [2] 以太坊: https://learnblockchain.cn/article/1201 [3] 智能合约
本文作者: aisiji[1] 本文通过编写一个有漏洞的合约,分析如何攻击、预防并修复漏洞。 Source: Undraw[2] 以太坊智能合约的一个特点——可以调用和利用来自外部合约的代码。...合约通常要处理 ether,经常会转移 ether 到各种外部用户地址。这些操作需要合约提交外部调用。...重入(reentrancy)这个词就来自外部恶意合约在有漏洞的合约调用函数,并且重新执行代码路径。...最后的结果是,除了 1 ether 不能提取,攻击者一笔交易从EtherStore合约提取了其他所有 ether。 如何避免漏洞 有很多常用技术可以帮助我们在合约中避免潜在的重入漏洞。...transfer 函数在外部调用时只发送 2300 gas,这不足以让目标地址/合约调用另一个合约(即,重入发送合约)。
引言:Gas费用与智能合约经济性 在以太坊平台上,每一笔交易和智能合约执行都需消耗Gas,其费用直接关联到交易的复杂度和资源占用。...uint256: 256位无符号整数,这是以太坊智能合约中最常用的数据类型,因为它直接映射到以太坊虚拟机(EVM)的基本字大小。...兼容性和标准化:考虑与其他智能合约、库或标准的兼容性,以太坊生态系统中uint256的广泛使用是为了最大化兼容性。...uint类型选择的重要性 uint(无符号整数)作为智能合约中处理数值的核心数据类型,其大小选择直接影响到存储和计算的效率。...结论 精选用uint类型大小,是提升以太坊智能合约Gas效率的有效手段之一。通过精确匹配数据需求、优化运算结构,并兼顾兼容性考量,开发者可以在不牺牲功能性的前提下,显著减少合约的Gas消耗。
forge init myrepo 然后就可以继续编译和测试智能合约了 forge build forge test 注意测试是如何通过的,还得到了测试交易的 Gas 成本 ---- 如何使用 Hardhat...如果代码库包含许多不同的智能合约,可以使用--match-contract将单个合约和它的依赖关系分离出来,甚至可以使用--match-test命令行选项进行特定测试。...Foundry 也可以用来部署并与智能合约交互。...私钥不应该包含 0x 前缀,否则你会得到一个错误 "Invalid character ‘x’ at position 1(无效字符'x'在位置 1)" 我们还可以使用 forge 命令在 etherscan 上验证合约...inspect src/MyContract.sol abi 注意任何 ABI 都可以转换为接口并直接在 solidity 中使用:https://gnidan.github.io/abi-to-sol/ 如果合约已经被验证
上一篇文章我们实现了一个简单的open auction,本篇我们来讨论下如何实现一个blind auction。 盲拍有个核心问题就是如何保证数据的安全性,而区块链的加密特性正是解决该问题的关键。...就是如何防止竞拍人在赢得拍卖后不发送他们的货币,也就是防止他们乱喊价。在公开拍卖的场景是不存在这个问题的,因为公开拍卖是真实的以太币转移,在区块链上是公开的,不可篡改也没法抵赖。
领取专属 10元无门槛券
手把手带您无忧上云