首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用 Dapptools | 类似 MakerDAO 使用的代码

v=ZurrDzuurQs Dapptools 视频 项目设置 开发环境 首先,你需要一个代码编辑器,VSCode[15]的忠实粉丝。...为test_basic_fuzzing测试运行了1000条不同的路径,并找到了55这个异常值。这对于找到那些你可能没有想到的破坏合约的随机用例非常重要。...从 Openzeppelin 和外部合约导入 假设我们想使用 Openzeppelin 标准创建一个 NFT。可以使用dapp install命令安装外部合约或包。...NFT 合约 src 文件夹创建一个名为 NFT.sol 的新文件。...在这个配置文件,我们告诉它读取输出remappings.txt并将其用作“重新映射”。重新映射是我们 solidity 告诉导入的文件应该从哪里导入的方法。

86030

数百次采访后,总结了 2021 年最好用的区块链开发框架

他们的 Discord 也一直非常迅速地回答各种问题,因此如果你遇到了问题,总是很容易寻求帮助。...它带有一个 UI,这样你就可以 GUI 与区块链和合约交互。看来它有一段学习曲线,没有花足够的时间来克服障碍,但能看出它的潜力很大。...这就是为什么想把它放在这里的原因所在,因为觉得自己还有很多东西没能完全消化。 希望看到有更多人能尝试这个框架并意识到它的能力。由于我该项目上花费的时间有限,所以我觉得自己可能无法做到公正评价。...他们有一些默认选项,例如 ERC20 和 ERC721 工具,你可以在其中导入他们的合约并在几秒钟内建立一个令牌。...敢肯定它们问世都是很棒的工具,但是到了今天,它们不再获得支持或处于非活跃状态。下面的这些框架不值得你浪费精力去了解和尝试

56020
您找到你想要的搜索结果了吗?
是的
没有找到

NFT新手教程: 如何编写和部署NFT(第1部分)

第 10 步:编写我们的合约 现在我们的环境已经设置好了,接下来是更令人兴奋的事情。编写我们的智能合约代码! 在你喜欢的编辑器(我们喜欢VSCode[22])打开 my-nft 项目。...让我们逐行分解: 我们的智能合约的顶部,我们导入了三个OpenZeppelin[25]智能合约类: @openzeppelin/contracts/token/ERC721/ERC721.sol 包含...我们的导入语句之后,我们有了自定义的 NFT 智能合约,它出乎意料地短 -- 它只包含一个计数器、一个构造函数和一个函数!...当使用 hardhat-ethers 插件,ContractFactory 和合约实例默认连接到第一个签名者。...如果我们点击进入交易,我们会在To字段下看到我们的合约地址。 Etherscan上查看您的合约地址 耶~,你刚刚把你的 NFT 智能合约部署到了以太坊链上!

3.9K32

如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译

NFT 智能合约 在你第一次使用 solidity 开发一个智能合约部署区块链上,你可能会觉得有点难。...注:下面标题序号为了读者看的更清楚所以是自己所标注的 1.2 使用 OpenZeppelin 开发 ERC721 标准的智能合约 之前说过,本教程,你将会使用 OpenZeppelin 去此案一个只能合约...(其实这里不是很清楚啥意思) URI Storage 存储一个 URI 与 NFT 关联(这个需要我们传入的) 在当前教程,你应该不想创建一个 NFT 还有一些增发、销毁、暂停、投票之类需要“经济学...首先,你可能注意到了 OpenZeppelin Wizard 编辑器的顶部,有一个 “Open in Remix” 的按钮: 点击按钮后将会在浏览器打开一个新的页面。...NFT 使用到: 1.10 铸造你的 NFT 返回到 remix ,在你部署的合约之下,找到对应的方法列表: 橙色方法写入区块链的方法,蓝色方法读取区块链内容的方法。

1.2K60

安全的处理 ERC20 转账(解决非标准 ERC20 问题)

我们从最简单的开始,下面我们要处理一个非常普通的 token 交易,下面的代码会导入并直接使用 IERC20.sol。...0x 不会回退交易,而是返回 false,但是我们代码不管这个返回值。...本质上,任何人都可以与我们合约的interactWithToken交易,合约会认为成功交易了一个 token ,但实际上什么也没有做。很糟糕!...这样做的好处是,即使是像我们的第一个例子那样的代码,仍然可以安全地交易。这就是为什么 OpenZeppelin 的 ERC20 (代码[6])实现这样做,也是建议这样做的原因。...有一段时间,OpenZeppelin一个bug,他们失败的时候回退交易,但没有成功返回 true(即缺少返回值)。

1.8K20

创建并部署ERC20代币

Solidity ,都是用数据映射实现的。 第一个数据映射允许代币合约跟踪谁拥有代币。...我们的示例,我们将导入 OpenZeppelin 库,这个库实现了一些重要的安全检查并且容易扩展: $ npm install openzeppelin-solidity@1.12.0 + openzeppelin-solidity...当我们转移 1000 个 METoken ,我们调用transfer函数指定的值是 100000 如你所见,会话,accounts[0]现在有 20,999,000 个 MET,accounts...代币转移,实际没有交易发送给代币接收者,接收者的地址只是被添加到代币合约的映射。向一个地址发送以太币的交易会改变地址状态。转移代币到一个地址的交易只会改变代币合约的状态,而不是接收者地址的状态。...只有区块浏览器看到这些代币合约或者你的钱包查看你的地址,你才会看到这些余额。 代币的行为方式与以太币不同。以太币是由 send 函数发送并且由合约的 payable 函数或者外部地址接收。

1.2K30

第十课 Solidity语言编辑器REMIX指导大全

3.5.2 运行 3.5.3 调试 3.5.4 设置 3.5.5 分析 3.5.6 支持 3.2 文件浏览器 文件浏览器 1)增加新文件(Create new File) 点击浏览器上增加一个新的智能合约文件...一般操作,调试成功的代码需要在本地文件系统新建文件保存。Remix浏览器提供了一种方法,就是使用Remixd,允许保存和同步浏览器文件到你的本地计算机。...因为根据官网文档,笔者没有能够Windows 10系统或者Ubuntu安装成功Remixd,本文不再详细介绍该功能。有兴趣的朋友欢迎根据官网文档尝试使用REMIXD同步。...合约创建,需要参考左边构建函数定义(智能合约的同名函数为构建函数)的类型来输入参数。 25....4.3 import 导入依赖编译失败 提示内容: 编译一个智能合约,有以下依赖导入代码 import "./SafeERC20.sol"; import "../..

2.2K42

2022十大智能合约开发工具

此外,2020年和2021年,我们看到了无数的闪电贷攻击[23]、预言机操纵攻击等黑客行为[24],Defi领域造成了近数十亿 美元的损失。...Openzeppelin是一套已经写好的智能合约,所以你不需要重新发明轮子。项目中使用他们已经审计过的可扩展智能合约,为节省了无数的时间。无法强调Openzeppelin是多么的重要。...想在大约80%的教程都在以某种方式使用Openzeppelin。 智能合约要点总结 必须知道的 :Chainlink和Openzeppelin 你可以(而且可能应该)同时使用这两个东西。...Remix是一个认为每个人在开始时候都应该使用的工具,这样每个人在尝试分享想法都可以有一个共同认知。...有时,我会在讨论区中加入的问题的链接,以吸引更多的人关注它。但一个经验法则是,当我遇到问题,Stackoverflow或Stack Exchange ETH应该是最先寻找的地方之一。

1.9K30

【翻译】升级智能合约(Hardhat)

使用升级插件来升级合约 使用OpenZeppelin升级插件的deployProxy部署一个新的合约,该合约实例就可以实现可升级的功能。默认情况下,只有最初部署合约的地址才有权限执行升级操作。...我们的Box实例已经升级到了最新版本的代码,同时保持了它的状态和之前的地址。我们不需要在新的地址部署一个新的合约,也不需要手动将旧Box的value复制到新Box。...通过调用新的increment函数来尝试一下,并在检查value值。 需要指定我们部署Box合约的代理合约地址。...当创建一个新的可升级合约实例OpenZeppelin升级插件实际上部署了三个合约。 你写的合约,也就是所谓的包含逻辑的合约实现。 一个ProxyAdmin,作为代理的管理员。...这意味着,如果你已经合约声明了一个状态变量,你就不能删除它,不能改变它的类型,也不能在它之前声明其他变量。我们的Box例子,这意味着我们只能在value之后添加新的状态变量。

2.4K10

101项智能合约安全检查清单

这是由于v0.4.5引入的一个编译器错误,v0.6.8到了修复。...当使用 ABIEncoderV2 ,包含动态大小数组的结构体或数组的合约构造函数会回退或解码为无效数据。这是由于v0.4.16引入的编译器错误,v0.5.9到了修正。...当在外部函数调用或在abi.encode()中直接编码,包含结构体或其他静态大小数组的存储数组无法正确读取。这是由于v0.4.16引入的一个编译器错误,并在v0.5.10到了修复。...这是由于v0.6.9引入的一个编译器错误,v0.6.10到了修复。(参见这里[123]) 自由函数的重新定义。...当在一个源代码单元定义了两个或更多具有相同名称和参数类型的自由函数(合约之外的函数),或当一个导入的自由函数别名覆盖了另一个名称不同但参数类型相同的自由函数,编译器没有标记错误。

1.6K10

如何编写 NFT 智能合约

因此,本教程,我们将编写一个智能合约,允许任何人通过支付 Gas 从我们的藏品铸造一个 NFT。...编写智能合约 在这一节,我们将在Solidity[12]编写一个智能合约,允许任何人通过支付所需数量的以太币+Gas 来铸造一定数量的 NFT。...本教程,我们将把 1-3 设置为常数。换句话说,一旦合约被部署,我们将无法修改它们。我们将为baseTokenURI编写一个 setter 函数,允许合约的所有者(或部署者)需要修改它。...当我们把这个设置为baseTokenURIOpenZeppelin 的实现会自动推导出每个 token 的 URI。...一个明显的下一步是建立一个 web3 应用程序,让我们的用户可以直接从我们的网站上铸造 NFT。这将是另一个教程[19]的主题。 如果你已经走到了这一步,恭喜你!

1.1K70

使用 React 和 ethers.js 构建DApp

/fjun99/web3app-tutorial-using-ethers 特别感谢准备 webapp 代码库,Wesley 的Proof-of-Competence, POC[4]项目学到了很多。...尝试运行合约部署到进程的 Hardhat Network 本地测试网(进程模式)。...当我们刷新页面,没有当前账户,也没有显示余额。我们连接钱包后,余额被查询到并显示页面上。...我们可以 Node.js webapp 监听这个事件并更新页面显示。 任务 6.1: 了解智能合约事件 简单解释事件:当我们调用会智能合约的状态变化函数,有三个步骤: 第 1 步:链外调用。...当监听到一个事件,查询 currentAccount 的 token 余额并更新页面。 你可以页面上或在 MetaMask 从当前账户转账,你会看到页面事件发生正在更新。

5.2K30

以太坊开发工具及资源大全

用于 VSCode 的 Azure 开发套件[47] -VSCode 扩展,方便在 Visual Studio Code 创建智能合约并进行部署 测试区块链网络 ethnode[48] -运行以太坊节点...EthContract[106] -一组帮助 Elixir 查询智能合约的帮助方法 MESG[107] -MESG 服务,可根据其地址和 ABI 与任何以太坊合约进行交互。...npm 软件包, Truffle 测试 Solidity 智能合约。...对于可视化导入合约或在 Etherscan 上验证合约很有用 Sol-merger[230] - 将所有导入合并到单个文件(替代方案) RLP[231] - JavaScript 的递归长度前缀编码...Typescript 绑定 EthSum[240] - 一个简单的以太坊地址校验和工具 PHP based Blockchain indexer[241] - PHP 索引块或侦听的事件 Web3Model

2.3K10

2022-区块链开发工具库

Cryptotux - 准备 VirtualBox 中导入的 Linux 映像,包括上面提到的开发工具 OpenZeppelin Starter Kits - 一个多合一的入门盒,供开发人员快速启动他们的智能合约支持的应用程序...0xcert - 用于构建去中心化应用程序的 JavaScript 框架 OpenZeppelin SDK - OpenZeppelin SDK:一套工具,可帮助您开发、编译、升级、部署和与智能合约交互...Cobra - 一个快速、灵活和简单的以太坊智能合约开发环境框架,以太坊虚拟机(EVM)上测试和部署。 Epirus - 用于构建智能合约的 Java 框架。...Azure Blockchain Dev Kit for Ethereum for VSCode - VSCode 扩展,允许创建智能合约并将其部署 Visual Studio Code 测试区块链网络...好处包括微小的构建和完整的类型安全,包括与合同交互

1.6K20

Openzeppelin的三种代理模式

self, "UUPSUpgradeable: must not be called through delegatecall"); _; } // 注意这里的notDelegated,这个函数是升级父类...合约升级上,openzeppelin 的 mocks 里,有一个实现,可以校验升级的合约是否可回滚。...因为普通用户就直接在代理合约判断ifAdmin的时候就转到了逻辑合约里,而管理合约的调用,就会放行到代理合约直接执行。 管理合约 仅仅是回调参数传过来的 proxy 的同名函数。...Beacon 以上两种代理,都存在一种缺陷,就是如果要升级一批具有相同逻辑合约的代理合约,那么需要在每个代理合约都执行一遍升级(因为每个代理合约独立存储了_implementation)。...信标合约,就是将所有的具有相同逻辑合约的代理合约的_implementation 只存一份信标合约,所有的代理合约通过和信标合约接口调用,获取_implementation,这样,升级的时候,就可以只升级信标合约

1.7K20

开发人员最难掌握的Web3.0概念

因此,我们的可升级智能合约方案,当用户调用代理合约,会调用回退函数,然后使用代理合约的数据“委托”对逻辑合约定义的方法的调用。...有关详细示例,建议您阅读OpenZeplin 关于可升级智能合约的文档的这一页(https://docs.openzeppelin.com/learn/upgrading-smart-contracts...假设用户调用代理合约,然后调用逻辑合约。逻辑合约执行函数并将数据写回代理合约。到现在为止还挺好。 这就是它变得棘手的地方: 当逻辑合约尝试写入代理合约,它会在代理状态的范围内这样做。...我们使用以下变量定义了代理和逻辑合约。 代理将逻辑合约的地址存储一个存储槽。逻辑合约将“所有者”的地址存储在其第一个。两个变量的大小均为 32 字节。...如果逻辑合约被执行并写入“所有者”变量,它将在代理合约的上下文中执行。这意味着它会尝试写入代理合约的第一个存储槽。这将导致存储冲突。

89320

深入Solidity数据存储位置 - 存储

智能合约的存储是合约构建过程合约被部署)预置的。这意味着合约存储的布局合约创建就已经确定了。该布局是基于你的合约级变量声明而 "成型 "的,并且这种布局不能被未来的方法调用所改变。...存储槽的第一个项目被低阶对齐存储 因此,当变量小于 32 字节时,Solidity 尝试一个以上的变量打包到一个存储槽,如果它们能被容纳的话。因此,一个存储槽可以容纳一个以上的状态变量。...我们还可以看到,这两个值通过interpreter.evm.StateDB.SetState(...)写入合约存储,都将从栈取出的两个项目转换为bytes32值。...函数体的存储指针 当变量为基本类型,将存储变量赋值给局部变量(函数体定义的)总是复制。 然而,对于复杂或动态类型,规则有所不同。...每一行都写到了合约存储区。 一旦函数被执行,新的 Proposal(提案)将被保存在合约存储,并且这些变化将持续存在。 存储引用的底层发生了什么? 看一下下面的例子,类似的治理主题。

1.7K30

Foundry 教程: 用Solidity编写ERC-20测试用例

如果今天要开始一个新的项目,一定会用 Foundry 来尝试。 感谢devtooligan[5]提供的图片。 所以我们来实现一个 ERC-20 并写一些测试。...或者使用创建的模板,其中包含本帖中所有的示例代码,见最后的说明。 3. 实现一个 ERC-20 现在让我们创建一个 ERC-20 合约,并对其进行一些测试。.../contracts/ 现在使用 Openzeppelin 合约来创建一个新的合约,只要把现有的文件重命名为MyERC20.sol: // SPDX-License-Identifier: MIT pragma...创建一个测试基础设置 现在在文件MyErc20.t.sol,我们可以创建一个基础设置(Setup)。 foundry ,有一个setUp函数,可以定义它来使合约进入不同的状态并创建一些地址。...除了 ERC20 合约本身,我们还将从 forge-std、ds-test 和 utils 导入一些东西。

1.4K20
领券