Index

Solidity

  1. types
  2. External
  3. Library
    1. self in Library
    2. using * for
    3. self example
  4. interfaces
  5. import
  6. msg.value
  7. Handling ether
  8. Erc20 token in contract
  9. assembly
  10. Enum
  11. memory, storage, calldata
  12. Array Pushing
  13. length in array
  14. Struct array
  15. mapping
  16. bytes and string
  17. uint to bytes32
  18. returns with name
  19. score voting
  20. Tests
    1. Async Tests
    2. Hooks

assembly


Assembly videos:

Introduction to Solidity Assembly:
https://youtu.be/BPdc_apZRWM?t=2997 (mload)


function testmloadExtraData(bytes calldata _extraData) external pure returns(uint96 data1, uint data2) {
                bytes memory exdata = _extraData;
        assembly { // solium-disable-line security/no-inline-assembly
                data1 := mload(add(exdata, 0x20))
                data2 := mload(add(exdata, 0x40))
            }
    }


If call data is accessed directly it gives following error:
TypeError: Call data elements cannot be accessed directly. Copy to a local variable first or use "calldataload" or "calldatacopy" with manually determined offsets and sizes.

For public visibility:


    function testmloadExtraData(bytes memory _extraData) public pure returns(uint96 data1, uint data2) {
        assembly { // solium-disable-line security/no-inline-assembly
                data1 := mload(add(_extraData, 0x20))
                data2 := mload(add(_extraData, 0x40))
            }
    }