Acabei colocando = ao invés de += ali no hexTransaction, daí sobrescrevia os outros dados e gerava uma assinatura inválida.
hexTransaction += "0f6aff..."
hexTransaction = "more data"
Daí hexTransaction ficava só "more data" e a assinatura ficava inválida. Por causa desse detalhe fiquei quase uma semana revisando todas as documentações e até escrevi uma função pra assinar do zero etc kkkk vergonhoso kkk
Mas agora está funcionando certinho, quase morri de rir e quase morri de vergonha também de ter precisado reportar isso pra galera da house 21 kkkkkk