Openzeppelin[2]: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/proxy 有三种代理模式 : 透明代理: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/proxy/transparent UUPS: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/proxy/utils 信标代理: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/proxy/beacon UUPS 图如下 用户和代理合约交互
https://eips.ethereum.org/EIPS/eip-712 [11] CrossChainEnabled.sol: https://github.com/OpenZeppelin/openzeppelin-contracts /crosschain/CrossChainEnabled.sol [12] AccessControlCrossChain.sol: https://github.com/OpenZeppelin/openzeppelin-contracts ://docs.openzeppelin.com/contracts/4.x/api/crosschain [14] 这里的合约代码: https://github.com/OpenZeppelin/openzeppelin-contracts tunnel/FxBaseRootTunnel.sol [17] CrossChainEnabledPolygonChild.sol: https://github.com/OpenZeppelin/openzeppelin-contracts CrossChainEnabledPolygonChild.sol [18] AccessControlCrossChain.sol: https://github.com/OpenZeppelin/openzeppelin-contracts
test 是不会有变化的,需要加参数 -vvvvvvvvvvvvvv v 越多日志越详细,很 unix 如下: 加入依赖 如果需要安装依赖包,像这样 forge install openzeppelin/openzeppelin-contracts src = 'src' out = 'out' libs = ['lib'] remappings = ['ds-test/=lib/ds-test/src/,'@openzeppelin=lib/openzeppelin-contracts /'] 改好后像这样: remappings = ['@ds-test=lib/ds-test/src/','@openzeppelin=lib/openzeppelin-contracts/']
怎样安全的处理 ERC20 转账 // 不正确的版本 import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master SafeERC20 的实现基本上就是像上面的 Uniswap 版本一样,你可以像下面这样用它: import "https://github.com/OpenZeppelin/openzeppelin-contracts /blob/master/contracts/token/ERC20/SafeERC20.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts etherscan.io/address/0xe41d2489571d322189246dafa5ebde1f4699f498#code [6] 代码: https://github.com/OpenZeppelin/openzeppelin-contracts
OpenZeppelin/openzeppelin-contracts[1] Stars: 22.8k License: MIT OpenZeppelin Contracts 是一个用于安全智能合约开发的库 其核心优势和主要功能包括: 提供高质量、支持多语言的正文仿宋解决方案 改刻自民国活字南宋,保留了其独特气质与趣味 削弱笔画对比度,规整了字形结构与版面效果 相关链接 [1] OpenZeppelin/openzeppelin-contracts : https://github.com/OpenZeppelin/openzeppelin-contracts [2] redis/go-redis: https://github.com/redis
安装依赖编写 ERC20 合约,我们需要借助 OpenZeppelin,使用下面的命令安装依赖: $ forge install OpenZeppelin/openzeppelin-contracts $ forge remappings > remappings.txtforge install 命令会自动安装最新版的 OpenZeppelin/openzeppelin-contracts 库到
例如,对于 OpenZeppelin,[25],我们将使用: dapp install OpenZeppelin/openzeppelin-contracts 你应该会在 lib 文件夹中看到一个名为 openzeppelin-contracts的新文件夹。 所以我们创建了一个名为 remappings.txt 的文件并添加: @openzeppelin/=lib/openzeppelin-contracts/ ds-test/=lib/ds-test/src 例如在remapping.txt我们看到: @openzeppelin/=lib/openzeppelin-contracts/ 这意味着我们告诉 dapptools,当它编译一个文件时,如果它在 import 语句中看到@openzeppelin/,它应该在lib/openzeppelin-contracts/中查找文件。
示例目录结构:project├── contracts├── lib│ ├── forge-std│ └── openzeppelin-contracts├── script├── src└── test在这种情况下,你需要在 remappings.txt 文件中添加一行来配置 OpenZeppelin 的重映射:@openzeppelin/=lib/openzeppelin-contracts
参考链接 https://github.com/ethereum/solidity/issues/1760 https://github.com/OpenZeppelin/openzeppelin-contracts
v4.5.0 $ forge update foundry-rs/forge-std 现在将该库添加到现有的remappings[8]文件中: forge-std/=lib/forge-std/src/ openzeppelin-contracts /=lib/openzeppelin-contracts/contracts/ 现在使用 Openzeppelin 合约来创建一个新的合约,只要把现有的文件重命名为MyERC20.sol: // SPDX-License-Identifier : MIT pragma solidity >=0.8.0; import {ERC20} from "openzeppelin-contracts/token/ERC20/ERC20.sol";
blog.premint.xyz/p/july-17-2022-incident-update [39] ERC165Checker: https://github.com/OpenZeppelin/openzeppelin-contracts /security/advisories/GHSA-qh9x-gcfh-pcrw [40] SignatureChecker: https://github.com/OpenZeppelin/openzeppelin-contracts
依次类推,可知授权用户B可以销毁被授权用户A所有的资产 安全建议 采用OpenZeppelin官方标准 https://github.com/OpenZeppelin/openzeppelin-contracts
记得是因为fork了OpenZeppelin/openzeppelin-contracts的项目,之后就被GitHub 要求强制开启 2FA 双重身份验证了,一拖再拖,再过几天帐户操作将受到限制了,只能去搞一下了 我是在fork了OpenZeppelin/openzeppelin-contracts的项目,之后就被GitHub 要求强制开启 2FA 双重身份验证了,如下 GitHub users are now
Approval(owner, spender, value) 接口作用域、接口参数类型、接口返回值类型、参数与返回值个数等具体信息如下: https://github.com/OpenZeppelin/openzeppelin-contracts indexed spender, uint256 value); } ERC-20 ERC-20是对IERC-20接口的实现,具体代码如下所示: https://github.com/OpenZeppelin/openzeppelin-contracts 参考链接 https://docs.openzeppelin.com/contracts/4.x/api/token/erc20 https://github.com/OpenZeppelin/openzeppelin-contracts /blob/master/contracts/token/ERC20/IERC20.sol https://github.com/OpenZeppelin/openzeppelin-contracts/
参考资料 深入以太坊 , Part 2[20] Solidity 文档:状态变量在储存中的布局 g[21] openzeppelin-contracts/StorageSlot.sol[22] Solidity protocol/pool/PoolStorage.sol [13] 来源:OpenZeppelin Github代码库,ERC20.sol: https://github.com/OpenZeppelin/openzeppelin-contracts =KDGCQ4OwQ47e2NACgQ8WWg [16] 来源:OpenZeppelin Github资源库中的Timer.sol: https://github.com/OpenZeppelin/openzeppelin-contracts Solidity 文档:状态变量在储存中的布局g: https://learnblockchain.cn/docs/solidity/internals/layout_in_storage.html [22] openzeppelin-contracts /StorageSlot.sol: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/
// contracts/Example.sol pragma solidity ^0.6.0; import "github.com/OpenZeppelin/openzeppelin-contracts // contracts/Example.solpragma solidity ^0.6.0; import "github.com/OpenZeppelin/openzeppelin-contracts // contracts/Example.solpragma solidity ^0.6.0; import "github.com/OpenZeppelin/openzeppelin-contracts initializer修饰符,该修饰符可以解决以下问题: // contracts/Example.solpragma solidity ^0.6.0; import "github.com/OpenZeppelin/openzeppelin-contracts 您需要特别注意手动调用所有父合约的初始化函数initializers: // contracts/Example.solpragma solidity ^0.6.0; import "github.com/OpenZeppelin/openzeppelin-contracts
.├── foundry.toml # 项目的配置入口├── lib/ # 依赖库目录,用于存放外部依赖(比如 openzeppelin-contracts)├── README.md
1 ether); }}运行测试:# 如果没有安装 openzepplin ,需要先安装➜ tutorial git:(main) ✗ forge install OpenZeppelin/openzeppelin-contracts
——使用了 2 个主要库 前端:https://github.com/miguelmota/merkletreejs Solidity:https://github.com/OpenZeppelin/openzeppelin-contracts
auto_detect_remappings = trueremappings = ["@chainlink/=lib/chainlink/"]工作原理:递归扫描 libs 目录生成路径映射(如 @openzeppelin/=lib/openzeppelin-contracts