Bitcoin Forum

Local => Майнеры => Topic started by: OZR on December 01, 2013, 12:07:57 AM



Title: Нужна помощь с пылью. Error. Transaction too large.
Post by: OZR on December 01, 2013, 12:07:57 AM
Хрен его знает, куда запихнуть эту тему.

Code:
Quarkcoin - Error. Transaction too large.
Send Coins - Error: Transaction creation failed!

Пыль. Очень много маленьких транзакций с p2pool. С каждым новым переводом средств сумма доступная к переводу уменьшается. Кошелёк зависает минут на 5 при каждом переводе на очень мощном компьютере, но потом всё же отправляет. Такими темпами перевод можно делать до конца года. И есть подозрение, что он вообще потом не захочет отправлять, потому что сумма комиссии за перевод будет превышать доступную сумму.

P.s - если я правильно понимаю данную проблему, то мне необходимо провести эту транзакцию, обработав необходимые мне блоки в соло, т.к сеть их не может принять из-за большого размера. Но тут много технических деталей, в которых я слабо понимаю. MAX_BLOCK_SIZE_GEN ...


Title: Re: Нужна помощь с пылью. Error. Transaction too large.
Post by: RoadTrain on December 01, 2013, 01:13:29 AM
Неясно, сколько всего выходов и какого они размера в среднем.
listunspent что говорит?


Title: Re: Нужна помощь с пылью. Error. Transaction too large.
Post by: OZR on December 01, 2013, 01:31:12 AM
5 597 512 байт в текстовом файле.
174 751 строка.

"scriptPubKey" : "не уверен, что его можно выкладывать в открытый доступ", а поиск и замену сейчас сделать нет возможности, так что лог выложить пока не могу... Формат лога прост до безобразия. Не понятно только значение vout. И чем мне это сможет помочь.

В среднем что-то вроде этого:

Code:
{
"txid" : "[delete]",
"vout" : 17,
"address" : "[delete]",
"account" : "",
"scriptPubKey" : "[delete]",
"amount" : 2.54284000,
"confirmations" : 201593
},

Минимальный amount 0.71634000 . Многовато для пыли...

Ах да, при отправке вручную из командной строки:

Code:
Transaction too large (code -4)

offtopic: недавно в сети bitcoin прошла транзакция на сумму чуть больше 100 000 BTC за один раз и при этом без комиссии. Я не понимаю, как её вообще возможно отправить. Сеть не должна была позволить ей пройти из-за размера. Либо выходит, что они были сгенерированы одними из самых первых, когда вход был чрезвычайно большой. Но в этом случае выходит, что криптовалюты не приспособлены для действительно крупных переводов людям, которые имеют средства, но ещё не пользуются криптовалютами. Либо есть какой-то альтернативный способ передачи, о котором я не знаю. Для меня застряла очень вкусная сумма, которая для серьёзных дядей ничего не стоит... Впервые всерьёз задумался о протоколе. И ладно, я его разберу в течение нескольких месяцев. Не технари этим заниматься не будут. И рухнет курс к чёртовой бабушке.

Я уже второй день трахаюсь с переводом. И такими темпами ещё трахаться и трахаться. Здесь же на бирже ситуация может меняться в течение пары часов. Утром - золото. Вечером - черепки. Привет антилопе.

Основной вопрос. Продолжать переводить малыми транзакциями ещё чёрт знает сколько времени? При этом есть риск, что потом транзакции совершить будет невозможно, а собрать пыль будет в разы сложнее. И в сети действительно застрянет бабло и про него можно забыть. Или думать над способом, как собрать пыль и молиться, чтобы бабло не стало за это время черепками?



Title: Re: Нужна помощь с пылью. Error. Transaction too large.
Post by: RoadTrain on December 01, 2013, 02:32:38 AM
Максимальный размер транзакции в биткоин - 100кб, если не ошибаюсь. Этого достаточно, чтобы склеить десятки входов.

В вашем случае я бы написал скрипт для склейки, с использованием raw transactions. Только надо быть осторожным с расчётом выходов.

Либо отправлять по-маленьку на какую-нибудь биржу, потом вывести оттуда всё.

vout - это номер выхода в транзакции, которая вам отправила деньги.

Транзакции до 10кб могут быть отправлены без комиссии (при определенных условиях), а вообще в кварке какие комиссии?


Title: Re: Нужна помощь с пылью. Error. Transaction too large.
Post by: Ross_ua on December 01, 2013, 09:14:13 AM
Максимальный размер транзакции в биткоин - 100кб, если не ошибаюсь. Этого достаточно, чтобы склеить десятки входов.

250кб вроде
если я правильно курил доки


Title: Re: Нужна помощь с пылью. Error. Transaction too large.
Post by: OZR on December 01, 2013, 11:42:17 AM
Скрипт на отправку заглох сразу.

Code:
sendtoaddress <quarkcoinaddress> <amount> [comment] [comment-to]

Quarkcoind.exe при любых вариантах написания шлёт на.
Code:
error: {"code":-4,"message":"Insufficient funds"}

И какие нафиг комменты он от меня хочет?

Debug window в QT в этом плане более мягок. Отправка происходит без указания [comment] и [comment-to]. Но так же зависает на N минут. Комиссию снимает автоматически, ничего подтверждать не надо. Сколько не понятно.

----

Варианты, которые вижу:

- Создать транзакцию максимальным размером 100-250 кб? И желательно, чтобы я её сразу обработал просчётом блока, не дожидаясь пока в сети кто-то этим займётся. *Мозг взорвался на этом моменте, как это сделать*
- Всё же родить скрипт, который заспамит кошелёк получателя много раз монетками по одной.
- Выводить вручную несколько тысяч операций из listunspent... *так есть шансы не управиться и до нового года*

---

Я правильно понимаю, что мои дальнейшие действия сводятся к

Code:
createrawtransaction [{"txid":txid,"vout":n},...] {address:amount,...}

Значения я беру из listinspent и создаю большую строчку длинной те самые 100-250кб?
А второе значение оставить таким {address:amount} с адресом, на который и будет проходить склейка? Или уже существующем адресе?

Затем мы её отправляем (куда? на свой существующий адрес, или на свой новый адрес? на биржу поидее нельзя, т.к они не смогут её склеить, или принять)
Code:
signrawtransaction <hex string> [{"txid":txid,"vout":n,"scriptPubKey":hex},...] [<privatekey1>,...] [sighash="ALL"]
БЛЕАТЬ

либо
Code:
sendrawtransaction <hex string>
Тут попроще, но всё равно не ясно откуда брать значение <hex string>.

Декодировать строку поидее не понадобится, и после этого останется только
Code:
getrawtransaction <txid> [verbose=0]
Где, txid мы получаем в одной из предыдущих двух строк, но что такое verbose?

Это и есть склеивание? И клеить я могу по максимальному размеру транзакции? Но тогда не понимаю каким образом резкое уменьшение amount будет мешать процессу.

SOS.





Title: Re: Нужна помощь с пылью. Error. Transaction too large.
Post by: RoadTrain on December 02, 2013, 01:38:41 AM
Можете склеивать выходы из listunspent, пока клиент не скажет, что transaction too large.
Запомните это количество, и в следующий раз клейте не больше него.
Главное правильно рассчитайте выходную сумму (как сумму всех входов - комиссия).
Можете отправлять сразу на биржу, ничего страшного.

Если вы майните в соло, настройте демон на включение бесплатных транзакций
Code:
-blockminsize=500000

Вот как я клеил в новакоине
Code:
<?php

require_once 'jsonRPCClient.php';

$bitcoin = new jsonRPCClient('http://login:password@127.0.0.1:8344/');

$value 0;
$inputs = array();

$unspent $bitcoin->listunspent(0);

foreach (
$unspent as $output)
{
if (count($inputs) < 50
{
$inputs[] = $output;
$value += $output['amount'];
}
}

$outputs = array(
'address' => $value,
);

$rawtx $bitcoin->createrawtransaction($inputs$outputs);
$signed $bitcoin->signrawtransaction($rawtx$inputs);
print_r($bitcoin->decoderawtransaction($signed['hex']));
//print_r($bitcoin->sendrawtransaction($signed['hex'])); 
50 - сколько входов склеивать в транзакции
address - куда отправлять монеты
Смотрим, всё ли верно, потом убираем // с последней строки и запускаем снова - транзакция отправляется.