【ERC20安全审计】——30、合约检测绕过漏洞刨析

文章前言

智能合约是区块链技术的重要应用之一,它能够实现去中心化的交易和智能化的合约执行,然而智能合约安全问题一直是困扰区块链行业的一个难题,本篇文章我们将主要介绍在合约中对于合约地址检查的方法以及其绕过方式,希望能够为读者提供有益的参考和借鉴

交互方式

在以太坊智能合约中交互的场景有内部交互和外部交互

内部交互

在以下示例代码中ContractA合约通过调用ContractB合约的getNumber函数来获取ContractB合约中保存的数字,可以看到在下面的代码中ContractA合约通过构造函数接收ContractB合约的实例,然后调用getNumberFromB函数来获取ContractB合约中保存的数字,这是一种典型的内部交互场景,调用者和被调用者都是智能合约

pragma solidity ^0.8.0;

contract ContractB {
    uint256 public number;

    function setNumber(uint256 _number) public {
        number = _number;
    }

    function getNumber() public view returns (uint256) {
        return number;
    }
}

contract ContractA {
    ContractB public contractB;

    constructor(ContractB _contractB) {
        contractB = _contractB;
    }

    function getNumberFromB() public view returns (uint256) {
        return contractB.getNumber();
    }
}
外部交互</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个 ERC20 合约的转移 owner 权限的代码示例: ```javascript // 导入 web3.js 库 const Web3 = require('web3'); // 设置 web3.js 连接到以太坊网络 const web3 = new Web3('https://ropsten.infura.io/v3/YOUR-PROJECT-ID'); // 设置 ERC20 合约地址和 ABI const contractAddress = '0x123456789abcdef123456789abcdef123456789'; const contractAbi = [/* ERC20 合约 ABI */]; // 通过私钥获取账号地址 const privateKey = '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'; const account = web3.eth.accounts.privateKeyToAccount(privateKey).address; // 创建 ERC20 合约实例 const contract = new web3.eth.Contract(contractAbi, contractAddress); // 转移 owner 权限 const newOwner = '0x987654321fedcba987654321fedcba987654321'; contract.methods.transferOwnership(newOwner).send({ from: account }) .then((receipt) => { console.log('Transaction receipt:', receipt); }) .catch((error) => { console.error('Error transferring ownership:', error); }); ``` 注意替换代码中的以下部分: - `YOUR-PROJECT-ID`:替换为您的 Infura 项目 ID - `0x123456789abcdef123456789abcdef123456789`:替换为您的 ERC20 合约地址 - `/* ERC20 合约 ABI */`:替换为您的 ERC20 合约 ABI - `0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef`:替换为您的私钥 - `0x987654321fedcba987654321fedcba987654321`:替换为您想要转移 owner 权限的地址 请注意,转移 owner 权限需要使用原 owner 的私钥进行签名,因此您需要确保私钥的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值