к тому же надо при проектировании учитывать ограничения на размер контракта и требуемый газ на вызов функции, где-то разделять функции на несколько этапов чтобы меньше газа жрало и всё вмещалось
да надо бы самому написать, хз по годным статьям) если кратко то библиотеку можно вызывать как отдельный контракт через public функции или как внутренние методы которые добавляются в вызываемые контракт при модификаторе internal. storage модификаторы у аргументов позволяют передавать сложные структуры в функцию для изменения данных по ссылке