Custom button block doesn’t work

I’d recommend looking at how the existing Button component works to get a sense of how Gutenberg does things. Specifically it uses a <RichText/> component (instead of a native <input>) which allows you to specify the tag name while also supporting user input.

Generally I’d advice against using <input> elements whenever possible. WordPress makes available a ton of components that can dramatically simplify your work.

For block styles, you may want to look at the styles attribute you can add to a block’s definition. It will automatically create the UI necessary for a user to switch styles and output CSS classes to the block for styling. It may not match exactly what you have (e.g. btn btn-primary), but it will line up with the “proper” way of doing things in Gutenberg (e.g. is-style-primary).