【问题标题】:Call function on another contract failed另一个合约的调用函数失败
【发布时间】:2018-10-31 10:18:03
【问题描述】:

我正在研究 Solidity。

测试网TT3代币生成没问题,但TT3Token_Test失败。 (TT3Token和TT3Token_Test已经部署到同一个钱包地址)

https://ropsten.etherscan.io/tx/0x4099019ecc47640dc7d3ceb3de3d50759f4e5ebc6d730410cda992c97d78ea10

不知道为什么。

(我使用 remix 将其部署到 ropsten)


pragma solidity ^0.4.23;

import "./StandardToken.sol"; // openzeppelin

contract TT3Token is StandardToken {
    string public constant name = "TT3Token";
    string public constant symbol = "TT3";
    uint8 public constant decimals = 18;
    uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));

    constructor() public {
        totalSupply_ = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
        emit Transfer(0x0, msg.sender, INITIAL_SUPPLY);
    }

    function sendTest(address _to, uint256 _value) public {
        transfer(_to, _value);
    }
}

contract TT3Token_Test {
    constructor() public {
        address r = 0xEcA254594c5bBCCEBc321e9252cc886cE37Be914;

        TT3Token token = TT3Token(msg.sender);
        token.sendTest(r, 99 * (10 ** uint256(18)));
    }
}

【问题讨论】:

标签: token ethereum solidity erc20


【解决方案1】:

TT3Token token = TT3Token(msg.sender) 没有意义,除非是 TT3Token 合约本身正在创建一个新的 TT3Token_Test 部署(未在您的代码中显示)。 msg.sender 是发起交易的地址(EOA 账户)。它应该是您部署的TT3Token 合约的地址。

此外,代币归部署TT3Token 合约的地址所有。您需要将令牌从同一帐户转移到TT3Token_Test 地址,才能成功调用sendTest

【讨论】:

  • TT3Token 和 TT3Token_Test 已部署到同一个钱包地址。
  • TT3令牌的拥有者是否无法从TT3Token_Test调用sendTest?
  • 现在,发布的代码失败了,因为msg.sender 表示的地址上没有sendTest 方法。那是你钱包的地址,而不是部署合约的地址。
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 2020-03-15
  • 2021-08-25
  • 2021-03-06
  • 1970-01-01
  • 2022-10-25
  • 2019-02-23
  • 2022-01-16
相关资源
最近更新 更多