You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity开发:父合约ERC20Mod如何获取子合约的uint变量percentage?

解决方案:让父合约通过抽象函数访问子合约变量

因为Solidity中父合约无法直接访问子合约的状态变量,你可以通过抽象函数+子合约实现的方式解决,既保持两个合约分离,又能让ERC20Mod获取到Wiseth中的手续费百分比。

步骤1:在ERC20Mod.sol中定义抽象函数

修改ERC20Mod.sol,添加一个返回手续费百分比的抽象函数,由子合约负责实现:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract ERC20Mod is ERC20 {
    // 定义抽象函数,子合约需实现该函数返回手续费比例
    function getFeePercentage() public view virtual returns (uint256);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        // 通过抽象函数获取子合约中的手续费比例
        uint256 fee = (amount.mul(getFeePercentage())).div(10000);
        uint256 total = amount.sub(fee);

        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, total);
        // 补充:将手续费转入指定地址(如合约所有者),避免手续费凭空消失
        _transfer(from, owner(), fee);
        return true;
    }
}

步骤2:在Wiseth合约中实现抽象函数

修改wiseth_v1.sol,实现ERC20Mod中定义的抽象函数,返回自身的percentage变量:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./ERC20Mod.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Wiseth is ERC20Mod, Ownable {
    uint deployDate;
    uint daHour;
    bool isPassed;
    bytes32 num_type;
    uint public percentage;

    // 初始化ERC20代币的名称与符号
    constructor(string memory tokenName, string memory tokenSymbol) ERC20(tokenName, tokenSymbol) {}

    function setFirstPercentageFee(uint256 fee) external onlyOwner {
        // 添加手续费上限校验,防止设置过高比例
        require(fee <= 1000, "Fee cannot exceed 10%");
        percentage = fee;
    }

    // 实现父合约的抽象函数,返回当前手续费比例
    function getFeePercentage() public view override returns (uint256) {
        return percentage;
    }
}

额外提示

  1. 0.8.x版本的Solidity已内置溢出检查,无需再导入SafeMath库,代码中的using SafeMath for uint256可以直接删除。
  2. 手续费的接收地址可根据需求调整,比如改为指定的手续费归集地址,而非仅合约所有者。

内容的提问来源于stack exchange,提问作者solidity_tryharder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:25:31