Монолитная Встроенная Сборка: Как хранить адреса, как в abi.encode

#assembly #decode #solidity #encode #inline-assembly

Вопрос:

у меня есть короткий вопрос, касающийся хранения адресов в памяти встроенной сборки.

У меня есть пример, работающий для единиц измерения, но я не уверен, как использовать его с адресами. Например, я хочу хранить 4 единицы измерения и 4 адреса в одном байте.

Пример рабочего кодирования только для uints:

     assembly {
        let y := 0
        mstore(0x20, _d)
        mstore(0x18, _c)
        mstore(0x10, _b)
        mstore(0x8, _a)
        x := mload(0x20)
    }
}
 

и для расшифровки:

 function decode(bytes32 x) internal pure returns (uint64 a, uint64 b, uint64 c, uint64 d) {
    assembly {
        d := x
        mstore(0x18, x)
        a := mload(0)
        mstore(0x10, x)
        b := mload(0)
        mstore(0x8, x)
        c := mload(0)
    }
}
 

Спасибо за вашу помощь.