Solidity
使用 ABIEncoderV2 時是否可以從內聯彙編 (Yul) 訪問結構欄位?
是否可以從 Yul 訪問 struct 欄位?理想情況下,它可能如下所示:
pragma solidity ^0.7.0; pragma experimental ABIEncoderV2; contract Sample { struct S { uint256 n; bytes b; } function foo(S memory s) external { uint256 len; assembly { len := mload(s.b); } } }
如果不是,那麼訪問
s.b
欄位的最佳方式是什麼?
- 在solidity中定義變數:
bytes memory localB = s.b;
- 別的辦法。
是的,通過使用
mload
操作碼:pragma solidity ^0.7.4; pragma experimental ABIEncoderV2; contract Sample { struct S { uint256 n; bytes b; } function foo(S memory s) external pure returns (uint256 _x, bytes memory _y) { assembly { _x := mload(s) _y := mload(add(s,0x20)) } } }
要在 Remix 中測試函式,您可以使用以下元組:
[1, "0xaa00ff"]
.