AZ
function packAddr(address a, address b, address c) public view returns(uint256 a1, uint256 b1) {
assembly {
a1 := add(shl(96,a),shr(80,b))
b1 := add(shl(176,b),c)
}
return(a1, b1);
}
function unpackAddr(uint256 a, uint256 b) public view returns(address a1, address b1, address c1) {
assembly {
a1 := shr(96,a)
b1 := add(shl(80,a),shr(176,b))
c1 := b
}
return(a1, b1, c1);
}
Как паковать средний адрес - тут уже как фантазия позволит, разбил пополам. Для tximput можно воспроизвести уже в оффчейне. 50 газа примерно едят вставки