Если присвоить переменной
gasLimit, реальное значения
(GAS LIMIT), то транзакция выполняется успешно.
Проблема скорее всего в эмуляторе
Ganache v1.2.2так как метод:
gasLimit, err := client.EstimateGas(context.Background(), ethereum.CallMsg{
To: &toAddress,
Data: data,
})
возвращяет 0, вместо положенного лимита который был внесен в контракт.