Solidity
Solidity Assembly 基本呼叫數據返回 4 個字節
我寫了一個小測試腳本來看看 callData 在混音中是如何工作的。該腳本如下所列:
contract Assem { uint256 public count; function callData() public pure returns(bytes4) { assembly { calldatacopy(0x0, 0, 4) return (0x0, 4) } } }
程式碼拋出錯誤:
error: Failed to decode output: Error: data out-of-bounds (length=4, offset=32, code=BUFFER_OVERRUN, version=abi/5.1.2)
我對 return(0x0,32) 進行了更改,它似乎工作正常。
contract Assem { uint256 public count; function callData() public pure returns(bytes4) { assembly { calldatacopy(0x0, 0, 4) return (0x0, 32) } } }
我不確定它為什麼以這種方式工作。我相信我只從callData複製了0~4個字節,怎麼會變成32個字節?
Remix 預計契約將遵循ABI 規範。在規範的一部分中,所有小於 32 字節的數據都必須填充到 32 字節。
合約實際上返回了 4 個字節,而 remix 不知道只用 4 個字節做什麼,因為它需要 32 個字節。它將通過刪除填充來修剪這 32 個字節。