Solidity

我可以從另一個合約更改已部署合約中映射變數的狀態嗎?

  • May 5, 2020

我正在呼叫我的AirToken contractHotel contract的 addCoin 和 subCoin 函式。

這是 AirToken 合約和酒店合約中 addCoin 和 subCoin 的函式定義

function addCoin(address addr, uint256 amount) public
   {
       balances[addr] += amount;
   }

   function subCoin(address addr, uint256 amount) public
   {
       balances[addr] -= amount;
   }

下面幾行是我呼叫addCoinsubCoin的****忠誠度合約交換功能

(bool success1,bytes memory returnData1)= fromContractAddress.call(abi.encodePacked(bytes20(keccak256("subCoin(address,uint256)")),tokenOwner,exchangeAmount));
       require(success1);
(bool success2,bytes memory returnData2)= toContractAddress.call(abi.encodePacked(bytes20(keccak256("addCoin(address,uint256)")),tokenOwner,exchangeAmount));
       require(success2);

這些行沒有給出任何錯誤,但是如果addCoinsubCoin已成功執行,餘額不會更新。

你的函式的雜湊是:

bytes32 hash = keccak256("subCoin(address,uint256)");

這意味著您的功能選擇器是:

bytes4 selector = bytes4(uint256(hash) >> 224);

所以我會嘗試替換這個:

abi.encodePacked(bytes20(hash), tokenOwner, exchangeAmount)

有了這個:

abi.encodeWithSelector(selector, tokenOwner, exchangeAmount)

引用自:https://ethereum.stackexchange.com/questions/83047