в название попал)
Есть вот такой примерный код:
tx, txErr := b.Contract.ChangeName(opts, "kek")
return b.ProcessTx(tx, txErr)
...где
b - моя структурка,
b.Contract - не моя структурка (кодогенерация)
b.ProcessTx - проверяет транзакцию на наличие ошибки, ждёт пока она смайнится и тд. Можно назвать это как "постхук".
И захотелось мне делать вызов контракта не снаружи, а внутри самого b.ProcessTx ибо есть вероятность, что в разных горутинах возникнет одновременный вызов контракта и жопа будет, а писать лок на каждый божий внешний вызов контракта нехочецца, хочецца один раз в одном месте.
Вопрос: могу ли я прокинуть вызов b.Contract.ChangeName(opts, "kek") в b.ProcessTx как вот асинхронный callback в пайтоне? Там если не напишешь "await" перед корутиной, то она не вызовется, это будет как "функция с вшытими в неё аргументами", вот хочу примерно такое. Но чет погуглил и ничерта не нашёл, но придумал немного костыльный варик - пропихивать вызов контракта в анонимную функцию, а аргументы брать из замыкания:
name := "kek"
b.ProcessTx(
func() (*types.Transaction, error) {
return b.Contract.ChangeName(opts, name)
})
но не оч нравится этот варик, громоздкий наверное, может можно это все красиво как-то обернуть шоб не так громоздко было?)
ну вы можете сам метод ChangeName как аргумент впихнуть в ProcessTx
Не получится( у меня этих методов куча, с разной сигнатурой(
Тогда просто func() error пихайте
https://go.dev/play/p/2wpglOTiJy-
Стоп, а чем отличается мой варик от этого?) ну там еще и транза возвращается помимо ошибки, но это такое
Сори, не увидел. Тогда это самый адекватный вариант
Эх, ладно, тогда попробую этим вариком, пасибо)
Обсуждают сегодня