Bitcoin Forum

Local => Кодеры => Topic started by: Alda Gordaya on July 02, 2011, 11:39:24 AM



Title: Об одной неотосланной транзации
Post by: Alda Gordaya on July 02, 2011, 11:39:24 AM
Клиент bitcoin запускался, но еще не докачал блоки или соединения не установил с пирами.
В это время была создана транзакция.

Потом биткоин-клиент был остановлен, транзакция не попала в сеть (что видно путем поиска хеша транзакции в blockexplorer.com и в списке неподтвержденных транзакций)

Как эту транзакцию убить, чтобы она не попала в сеть?


Title: Re: Об одной неотосланной транзации
Post by: LZ on July 02, 2011, 12:15:30 PM
Если действительно нужно предотвратить отправку перевода - обратитесь к m0Ray (https://forum.bitcoin.org/index.php?topic=8157.0).


Title: Re: Об одной неотосланной транзации
Post by: Dobrodav on July 03, 2011, 12:49:47 AM
А как же  флаг  -rescan, не поможет разве ?


Title: Re: Об одной неотосланной транзации
Post by: Lis on July 03, 2011, 04:55:07 PM
Клиент bitcoin запускался, но еще не докачал блоки или соединения не установил с пирами.
В это время была создана транзакция.

Потом биткоин-клиент был остановлен, транзакция не попала в сеть (что видно путем поиска хеша транзакции в blockexplorer.com и в списке неподтвержденных транзакций)

Как эту транзакцию убить, чтобы она не попала в сеть?

если еще актуально, в понедельник могу выложить исходник на python удаляющий не нужные транзакции из wallet.dat


Title: Re: Об одной неотосланной транзации
Post by: LZ on July 04, 2011, 04:01:51 PM
если еще актуально, в понедельник могу выложить исходник на python удаляющий не нужные транзакции
Было бы здорово. :D

А как же  флаг  -rescan, не поможет разве ?
Так как -purgetx m0Ray'я, на сколько знаю, не включен в основную ветку и не вызывается при опции -rescan,
то биткоин пересканирует блоки и отправит перевод, что в данном случае нужно наоборот предотвратить. :-\


Title: Re: Об одной неотосланной транзации
Post by: Lis on July 05, 2011, 03:04:54 PM
Code:
#!/usr/bin/env python

#Python 2.6.6
#[GCC 4.4.5] on linux2


from optparse import OptionParser
import bsddb.db

parser = OptionParser(version='Lis@20110605')
parser.add_option('-t', '--tx',    dest='tx',                                       help='remove tx')
parser.add_option('-s', '--show',  dest='show', default=False, action='store_true', help='print all tx')
parser.add_option('-d', '--dir',   dest='dir',   default='.bitcoin',                help='dir of wallet')
parser.add_option('-f', '--file',  dest='file',  default='wallet.dat',              help='name file wallet')
(options, args) = parser.parse_args()

_DIR_ = options.dir
_FILE_ = options.file
_SHOW_ = options.show
_TX_ = options.tx

if _TX_ and len(_TX_) != 64:
  exit('error: wrong tx flag')
 
if not _TX_:
  _SHOW_ = True

if _TX_:
  writable=True
else:
  writable=False

def revers(data):
  date_revers = ''
  for i in range(-1, -len(data), -2):
    date_revers += data[i-1] + data[i]
  return date_revers

try:
  db_env = bsddb.db.DBEnv(0)
  db_dir = _DIR_
  r = db_env.open(db_dir, (bsddb.db.DB_CREATE|bsddb.db.DB_INIT_LOCK|bsddb.db.DB_INIT_LOG|bsddb.db.DB_INIT_MPOOL|bsddb.db.DB_INIT_TXN|bsddb.db.DB_THREAD|bsddb.db.DB_RECOVER))
  db = bsddb.db.DB(db_env)
  flags = bsddb.db.DB_THREAD | (bsddb.db.DB_CREATE if writable else bsddb.db.DB_RDONLY)
  r = db.open(_FILE_, "main", bsddb.db.DB_BTREE, flags)
except:
  exit ('error: can not find file')

try:
  if _TX_:
    del_key = '027478' + revers(_TX_)
    db.delete(del_key.decode('hex'))
    db.sync()
except:
  exit ('error: can not find tx')

if _SHOW_:
  data = db.items()
  for i in range(len(data)):
    if ord(data[i][0][0]) == 2 and data[i][0][1:ord(data[i][0][0])+1] == 'tx':
      print i, 'http://blockexplorer.com/tx/' + revers(data[i][0][3:].encode('hex'))
     
db.close()

example:
# показать
./rm_tx.py -d /home/lis/.bitcoin -f wallet.dat -s
# удалить
./rm_tx.py -d /home/lis/.bitcoin -f wallet.dat -t abe3c7b00dc0101d004502b080007d5e9a009b390a00b76e000420fd272a23f9

если у кого есть винда затестируйте плз.

ВНИМАНИЕ!!!
ВЫ ИСПОЛЬЗУЕТЕ ПЛАГИН НА СВОЙ СТРАХ И РИСК, ДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ КОШЕЛЬКА ПЕРЕД ПРОВЕДЕНИЕМ ЭКСПЕРИМЕНТОВ НАД НИМ!!!
Код общественное достояние.


Title: Re: Об одной неотосланной транзации
Post by: mich on July 08, 2011, 07:51:01 AM
Спасибо, получилось удалить одну левую транзакцию.


Title: Re: Об одной неотосланной транзации
Post by: ne0n on July 11, 2011, 12:46:19 PM
А можно отменить отосланную, но еще не подтвержденную транзакцию и вернуть деньги?


Title: Re: Об одной неотосланной транзации
Post by: [Thor] on July 11, 2011, 01:09:31 PM
Нет, она уже расползлась по сети.


Title: Re: Об одной неотосланной транзации
Post by: rPman on July 11, 2011, 01:10:19 PM
А можно отменить отосланную, но еще не подтвержденную транзакцию и вернуть деньги?
Кажется невозможно, но обладая мощностями, сравнимыми с больше чем половина мощности всей сети продолжительное время, можно сначала сказать что ваша транзакция (изначально ошибочная) валидная - тем самым у клиентов будет расти количество у этой транзакции как у обычной..


Title: Re: Об одной неотосланной транзации
Post by: ne0n on July 11, 2011, 02:51:51 PM
Нет, она уже расползлась по сети.

В том то и дело что она еще дальше моего компьютера не ушла, вроде  :) Я не включал приложение и у транзакции до сих пор 0 подтверждений  :-\


Title: Re: Об одной неотосланной транзации
Post by: Vort on July 11, 2011, 02:57:33 PM
Нет, она уже расползлась по сети.
можно отправить ещё раз, с бОльшей комиссией
хотя, это, наверно, всё же не тот случай


Title: Re: Об одной неотосланной транзации
Post by: Lis on July 12, 2011, 07:40:27 AM
В том то и дело что она еще дальше моего компьютера не ушла, вроде  :) Я не включал приложение и у транзакции до сих пор 0 подтверждений  :-\
если этой транзакции до сих пор нет в BBE можешь смело удалять.


Title: Re: Об одной неотосланной транзации
Post by: ArsenShnurkov on October 22, 2011, 05:15:32 AM
если у кого есть винда затестируйте плз

Windows 7 x64, cygwin

работает отлично!