Solidity
我可以從另一個合約更改已部署合約中映射變數的狀態嗎?
我正在呼叫我的AirToken contract和Hotel 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; }
下面幾行是我呼叫addCoin和subCoin的****忠誠度合約交換功能
(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);
這些行沒有給出任何錯誤,但是如果addCoin和subCoin已成功執行,餘額不會更新。
你的函式的雜湊是:
bytes32 hash = keccak256("subCoin(address,uint256)");
這意味著您的功能選擇器是:
bytes4 selector = bytes4(uint256(hash) >> 224);
所以我會嘗試替換這個:
abi.encodePacked(bytes20(hash), tokenOwner, exchangeAmount)
有了這個:
abi.encodeWithSelector(selector, tokenOwner, exchangeAmount)