...:require('@openzeppelin/hardhat-upgrades'); 来注册插件,在添加了这行代码之后再次运行测试脚本(npx hardhat test)的时候,之前所有的正常通过的测试突然都报错: TypeError: (0 , ethers_1.getAddress) is not a function 我甚至还没来得及编写部署...
...eDelta.sol](https://learnblockchain.cn/article/13618):BalanceDelta 定义了记账余额变化量的类型 * [PoolId.sol](https://learnblockchain.cn/article/13641):如何定义 `PoolId` 类型,并通过 PoolIdLibrary 库实现将 PoolKey 结构体转换为池子唯一 ID >- 原文链...
...被排队和可以被执行之间存在延迟。这种机制通常用于去中心化治理,以提高安全性并提供透明度,允许利益相关者在变更执行之前观察并对其做出反应。TimelockController 使用以下 `AccessControl` 设置: - **Proposer(提案者)** 角色...
...托 [EIP-7702](https://learnblockchain.cn/docs/eips/EIPS/eip-7702) 引入了一种新的交易类型 ( `0x4`),它授予 [外部拥有账户 (EOA,Externally Owned Accounts)](https://ethereum.org/en/developers/docs/accounts/) 将执行委托给智能合约的能力。 这对于使传统的 EVM ...
...约是UniversalRouter,我已经通过abi将transaction.input解码出来了 解析代码如下: ```js import InputDataDecoder from 'ethereum-input-data-decoder'; import { ethers } from 'ethers' const provider = new ethers.InfuraProvider('goerli', 'xxxxxxxxxxxxxxxxxxxxxx'); const transac...
...ps://learnblockchain.cn/article/727)的 ERC1155,AccessControl都实现了``supportsInterface``函数,如果你的合约同时继承这两个合约,需要重写此函数。 ## 定义2个基类`BaseContact1`和 ```BaseContact2```, 使用`virtual`关键字。 ``` contract BaseContact1 {...
## **簡介** [EIP-1153](https://eips.ethereum.org/EIPS/eip-1153) 新增了transient storage,是EVM除了 `storage`、 `memory`、 `calldata` 之外新的儲存空間, 可以透過兩個新的EVM opcode `tstore`、 `tload` 做儲存和讀取,儲存的行為和storage相同,是將 `boolean`...
...是用无头浏览器通过操作dapp页面进行自动化交易。用到了puppeteer和@chainsafe/dappeteer两个库; puppeteer:无头浏览器 @chainsafe/dappeteer: 是封装好的在无头浏览器操作MataMask插件的库 以下是示例代码 ``` const puppeteer = require('puppe...
## 智能合约中的缺失或不当输入验证 了解在 Solidity 中不当输入验证如何导致攻击。探索保护智能合约和防止安全风险的最佳实践。 在 [Solidity](https://learnblockchain.cn/article/13659) 中,用户或外部合约通过调用函数与智能合约...
...讲一讲攻击手法。 攻击者在某交易所前端文件中发现了转账时所调用的API接口。按照流程,用户验证身份通过后调用此API转账,但由于验证在前,转账在后,两者并非同时进行,导致攻击者直接调用转账API接口发起转账可以...
...用Uniswap要怎么实现以及到底要授权哪些地址(我都授权了都不行),最好是Pair Swap、Universal Router Execute这种方式,谢谢。如果有用,另有谢意。 1. 个人试过下面这种UniswapV2交易方法,地址已授权合约使用代币,还是会出现错...
...alance().accounts({ acct: pubkey }).rpc(); }); }); ``` 本例引入了 UncheckedAccount,与此前文章有所不同。 --- ## **什么是 UncheckedAccount?** UncheckedAccount 是 Anchor 中的账户类型,指示不对账户的所有权进行检查。 ### **背景** - 默...
...参数数据,因为静态数据的长度在编译的时候就已经确定了,其长度已经被写死字节码中,所以在calldata中只需要存放参数的值即可。而对于动态数据,其长度在编译的时候尚不得知,所以动态参数数据长度和参数值都会被存放...