Cómo obtener las entradas y salidas de un bitcoin bloque más rápido, utilizando JSON RPC o similar

En la actualidad, me lleva casi 1,5 horas para obtener todas las entradas y salidas de un bitcoin bloque de enero de uso de JSON RPC. A este ritmo, va a tomar una cantidad significativa de tiempo para ir todo el camino de regreso a génesis. Estoy empezando a pensar que estoy usando mal la llamada a la API, o haciendo algo mal. Yo estaría enormemente agradecido si alguno de ustedes podría revisar las llamadas que estoy usando actualmente (pegar a continuación), y tal vez de decirme qué estoy haciendo mal, o si bitcoind es el cliente apropiado para esto.

de bitcoinrpc.authproxy de importación AuthServiceProxy, JSONRPCException
importación de json
las solicitudes de importación
importación pprint
el tiempo de importación
importación os


objectivestart_time=tiempo.tiempo()
pp= pprint.PrettyPrinter(sangría=4)



rpc_user='n'
rpc_password='n'

url=("http://%s:%[email protected]"%(rpc_user, rpc_password))


def req(payload):
 las solicitudes de devolución.post(url,datos=json.vertederos(de la carga)).json()


def BlockHash_JsonRPCpayload(número):
dic={

"jsonrpc":"2.0",
 el "método": "getblockhash",
 "params": [número] ,
 "id": 1 

}
 retorno (dic)


def Block_JsonRPCpayload(h):
dic={

"jsonrpc":"2.0",
 el "método": "getblock",
 "params": [str(h)] ,
 "id": 1 

}
 retorno (dic)


def rawtx_JsonRPCpayload(tx):
dic={

"jsonrpc":"2.0",
 el "método": "getrawtransaction",
 "params": [tx, True] ,
 "id": 1 

}
 retorno (dic)

def rawvin_JsonRPCpayload(tx,vin):
block_payload={

"jsonrpc":"2.0",
 el "método": "getrawtransaction",
 "params": [tx,1] ,
 "id": 1 

}

solicitud=req(block_payload)
valor=request['resultado']['vsal'][int(vin)]['valor']


 return float(valor)

BTC_dic={}


hash_payload=[]
start_time=tiempo.tiempo()

block_start=481101
block_end=490000
start=block_start
final= block_start

mientras que el final < block_end:
block_tries=0
 mientras que la Verdadera: 
 probar: 

final=inicio+100
hash_payload=[]
 print ( 'inicio', 'fin', inicio, fin )
 for i in range(inicio,final):
hash_payload.append(BlockHash_JsonRPCpayload(i))


start_time=tiempo.tiempo()
 print ( 'marca de 1 ')
 hash_response=solicitudes.post(url, datos=json.vertederos(hash_payload)).json()
 print('tiempo para obtener el hash de lote", inicio, "_", fin, el tiempo.time()-start_time)
 print ( 'el éxito en la obtención de los valores hash de los rangos', inicio, "_ ", final )

tiempo.el sueño(0.4)

block_payload=[]
 porque yo en hash_response:
h=i['resultado']
block_payload.append(Block_JsonRPCpayload(h))
start_time=tiempo.tiempo()
block_response=solicitudes.post(url,datos=json.vertederos(block_payload)).json()
 print ( 'tiempo para obtener el bloque de lote", inicio, "_", fin, el tiempo.time()-start_time)
 print ( 'el éxito en la obtención de bloques para los rangos', inicio, "_ ", final )

tiempo.el sueño(0.4)



 for i in range(len(block_response)):


bloque=block_response[i]['resultado']

altura=bloque['altura']
 print('llegar', len(bloque['tx']),'las transacciones para el bloque' de altura)
BTC_dic[altura]=bloque
tx_payload=[]
 para transmisión en bloque['tx']:
tx_payload.append(rawtx_JsonRPCpayload(tx))

try_errors=0
 mientras que la Verdadera:
probar:
 #print ( len(tx_payload), el número de transacciones en el bloque ' de altura)
start_time=tiempo.tiempo()
transacción=solicitudes.post(url,datos=json.vertederos(tx_payload)).json()
tiempo.el sueño(0.5)
 #print ('tiempo para obtener tx', tiempo.time()-start_time)
 print ( 'el éxito en la obtención de las transacciones para el bloque' de altura )
excepto:
try_errors+=1
 print ( '!! Trate de error !!')
 de impresión ( try_errors, 'transacción intenta un bloque de altura", altura)
tiempo.sleep(3)
continuar

romper


 for i in range(len(transacción)):


tx_result=la transacción[i]['resultado']
vin=tx_result['vin']
vsal=tx_result['vsal']



probar:
tasas=0
 for j in range(len(vsal)):
 honorarios -= tx_result['vsal'][j]['valor']

 for j in range(len(vin)):

vsal=vin[j]['vsal']
txid=vin[j]['txid']

vin_error=0
 mientras que la Verdadera:
probar:
valor=rawvin_JsonRPCpayload(txid,vsal)
excepto:
 print ( '!! vin error !!')
 print ( 'intento', vin_error )
vin_error+=1

tiempo.el sueño(0.4)
continuar
 romper 

tarifas+=valor
tx_result['vin'][j]['valor']=valor



tx_result['honorarios']=tarifas
excepto:
 tx_result['vin'][0]['valor']='No hay Entradas (se acaba de generar Monedas)'
tx_result['honorarios']=0


BTC_dic[altura]['tx'][i]=tx_result



 si len(BTC_dic) >= 100:
 print ( 'len BTC_dic =', len(BTC_dic))


 para el bloque en BTC_dic:
block_fee=0
 transacciones= BTC_dic[bloque]['tx']


#pp.pprint(transacciones)
 para j en las transacciones:
cuota=j['honorarios']
block_fee+=tasa de
 BTC_dic[bloque]['bloque de tarifas']=block_fee



block_array=[]
 para el bloque en BTC_dic:
block_array.append(bloque)


nombre_archivo='jcampbell_btc_txdata'+str(min(block_array))+'_'+str(max(block_array))+'.json'
 print ('guardar', nombre_archivo, "tiempo", el tiempo.time()-objectivestart_time)

 con open(nombre_archivo, 'w') como outfile:
json.dump(BTC_dic,outfile)
BTC_dic={}




inicio=fin



excepto:
block_tries+=1
 de impresión(block_tries, 'intenta obtener datos para la gama de bloques ', inicio,"_",final)
tiempo.sleep(5)
continuar
 romper 




para el bloque en BTC_dic:
block_fee=0
 transacciones= BTC_dic[bloque]['tx']


#pp.pprint(transacciones)
 para j en las transacciones:
cuota=j['honorarios']
block_fee+=tasa de
 BTC_dic[bloque]['bloque de tarifas']=block_fee





block_array=[]
para el bloque en BTC_dic:
block_array.append(bloque)


nombre_archivo='jcampbell_btc_txdata'+str(min(block_array))+'_'+str(max(block_array))+'.json'
print ('guardar', nombre_archivo, "tiempo", el tiempo.time()-objectivestart_time)
con open(nombre_archivo, 'w') como outfile:
json.dump(BTC_dic,outfile)

De fondo

Si queremos BTC para ir a la corriente dominante, necesitamos una mejor manera de mostrar la Actividad Económica. Necesito que usted me ayude a probar que Bitcoin es más que un instrumento especulativo.

Yo vengo de la academia (de la Economía, específicamente), y a menudo me resulta difícil describir de manera convincente a mis pares el crecimiento del ecosistema Bitcoin en los números que traducir al valor económico.

Dado el rápido crecimiento de este mercado ha experimentado, cuando la gente piensa acerca de Bitcoin, el precio es a menudo la primera cosa que viene a la mente. Para aquellos de nosotros que por algún tiempo han estado investigando Bitcoin, seis mil dólares por bitcoin es, indiscutiblemente, una increíble indicador de popularidad. Sin embargo, necesitamos una mejor métrica para mostrar la realidad de la actividad económica, que también ha aumentado considerablemente en el último par de años. Si Bitcoin es un peer-to-peer electronic cash system, necesitamos un mejor indicador de BTC volumen entre las redes de pares. He comenzado a hacer la investigación sobre Bitcoin Días Destruida, pero a menudo me encuentro esta métrica difícil de ser explicado, ya que no precisa de respuestas a la pregunta: ¿cuánto valor se intercambian dentro de la red?

Entiendo que con toda exactitud la respuesta a esta pregunta es casi imposible debido a Bitcoin del UTXO modelo, pero necesitamos más estimaciones. Blockchain.info proporciona estima que el volumen de transacciones por día, pero las muestras aleatorias he procesado indican que su metodología subestima significativamente el volumen. Después de meses de pruebas en muestras aleatorias y buscando manualmente en direcciones, creo que he desarrollado una metodología más exacta de calcular la cadena de volumen. I plan para compartir esta metodología con la comunidad una vez que puedo probar mi hipótesis utilizando fuller bloques, pero ahora el reto es obtener todas las entradas y salidas de la más reciente bloques.

Yo creo que una más realista estimación del volumen respaldado por una revisado metodología de aumentar el interés de la academia y añadir credibilidad a la de la red Bitcoin. Si usted no está familiarizado con JSON RPC, les agradecería si pudieran por favor upvote este post para que más gente la vea.

Gracias.

-JC

+438
sharkin 31 mar. 2013 4:44:10
25 respuestas

Ayuda,

Soy nuevo a estacar el uso de crypto moneda de carteras.

Tengo que descargar el Dogecoin Núcleo de la Cartera de 1.10 y Cifrar el Monedero Opción está en gris. ¿Cómo puedo cifrar esta cartera de estacas, por favor? Tengo otras carteras para otras cripto monedas que son todos estaca bien.

Gracias de antemano.

Declan

+941
Raisins 03 февр. '09 в 4:24

Estoy jugando con el formato raw de las transacciones. Es fácil mandar a dos firmaron las transacciones válidas al mismo tiempo desde la misma salida a diferentes direcciones (haciendo un doble-pasar ataque). Mi duda es: si hago pruebas como esta, va a la red p2p de bitcoin será la bandera de mi nodo / IP como "mala" o puedo hacerlo normalmente sin ningún tipo de consecuencias? Por supuesto que no estoy atacando a nadie, quiero hacer pruebas con mi carteras / sistema para ver el comportamiento.

+897
David Peretiatko 9 ago. 2015 17:35:35

Yo soy poco confundido acerca de la transacción de difusión en internet.¿Cómo funciona un minero saber que una transacción ha sido difundido? La red internet es muy grande.O ¿cómo puede mi cliente bitcoin recoge los bloques transmitidos?

+789
GollyJer 4 jul. 2016 1:42:33

Para entender mejor multisig direcciones y transacciones, es útil leer BIP 0013 y crear una multisig dirección utilizando https://coinb.in/multisig/

Si quiero crear un multisig que requiere las firmas de 2 de los 3 siguientes pubkeys:

04c96a8b79aff49f36766b7827308bb5d6dc031e4e9112b785201a9a61821d2a336dbb7fa69f44c2dc76dee8fa7ed8fee2958f4a86a3dbb7ebf3eeb790cd464db9
04fd6c4db8841f7370a0cdc464a58b3e2a0da5b6566e0502a9cf583360bcdd16e8453a0a8da0fba0ff26e40c1f8c55f8cd0ad61988b7d4418b504264be8a9cef59
04c41b31403f24ef79e9c7dcfb67ea0341fcb986e9555123b022258a92d2bade3674574bf3de7affe93706399d9eb76d04f05213cda8b8e8bb8541533c39f244a9

El resultado multisig script es este: (desglosado por código de operación)

52 OP_2, lo que significa que se necesitan dos firmas
41 empuje 65 bytes
04c96a8b79aff49f36766b7827308bb5d6dc031e4e9112b785201a9a61821d2a336dbb7fa69f44c2dc76dee8fa7ed8fee2958f4a86a3dbb7ebf3eeb790cd464db9
41 empuje 65 bytes
04fd6c4db8841f7370a0cdc464a58b3e2a0da5b6566e0502a9cf583360bcdd16e8453a0a8da0fba0ff26e40c1f8c55f8cd0ad61988b7d4418b504264be8a9cef59
41 empuje 65 bytes
04c41b31403f24ef79e9c7dcfb67ea0341fcb986e9555123b022258a92d2bade3674574bf3de7affe93706399d9eb76d04f05213cda8b8e8bb8541533c39f244a9
53 OP_3, es decir, hay tres claves públicas
ae OP_CHECKMULTISIG se describe en https://en.bitcoin.it/wiki/Script

Y la página me dice que la dirección es 3K6sEDqXaSFKjcq8PUKNsGbxXjBR8QmBwr

El hash de esta secuencia de comandos, junto con un número de versión (para hacer que el carácter de inicio 3) y la suma de comprobación (para asegurarse de que un misentering de datos no es probable que pase) es lo que hace la multisig dirección:

base58-codificar: [un byte versión][20 bytes hash][4 bytes suma de comprobación]

Usted puede verificar esto mediante la comparación de la hash160 valor que se muestra en https://blockchain.info/address/3K6sEDqXaSFKjcq8PUKNsGbxXjBR8QmBWr y el resultado de la siguiente corto programa de C#: ambos son befcdceed8cbf0d74d9d58bf8e30ce027e8a9b56

var datos = new byte[] { 0x52, 0x41, 0x04, 0xc9, 0x6a, 0x8b, 0x79, 0xaf, 0xf4, 0x9f, 0x36, 0x76, 0x6b, 0x78, 0x27, 0x30, 0x8b, 0xb5, 0xd6, 0xdc, 0x03, 0x1e, 0x4e, 0x91, 0 x 12, 0xb7, 0x85, 0x20, 0x1a, 0x9a, 0x61, 0x82, 0x1d, 0x2a, 0x33, 0x6d, 0xbb, 0x7f, 0xa6, 0x9f, 0x44, 0xc2, 0xdc, 0x76, 0xde, 0xe8, 0xfa, 0x7e, 0xd8, 0xfe, 0xe2, 0x95, 0x8f, 0x4a, 0x86, 0xa3, 0xdb, 0xb7, 0xeb, 0xf3, 0xee, 0xb7, 0x90, 0xcd, 0x46, 0x4d, 0xb9, 0x41, 0x04, 0xfd, 0x6c, 0x4d, 0xb8, 0x84, 0x1f, 0x73, 0x70, 0xa0, 0xcd, 0xc4, 0x64, 0xa5, 0x8b, 0x3e, 0x2a, 0x0d, 0xa5, 0xb6, 0x56, 0x6e, 0x05, 0x02, 0xa9, 0xcf, 0x58, 0x33, 0 x 60, 0xbc, 0xdd, 0x16, 0xe8, 0x45, 0x3a, 0x0a, 0x8d, 0xa0, 0xfb, 0xa0, 0xff, 0 x 26, 0xe4, 0x0c, 0x1f, 0x8c, 0x55, 0xf8, 0xcd, 0x0a, 0xd6, 0x19, 0x88, 0xb7, 0xd4, 0x41, 0x8b, 0x50, 0x42, 0x64, 0xbe, 0x8a, 0x9c, 0xef, 0x59, 0x41, 0x04, 0xc4, 0x1b, 0x31, 0x40, 0x3f, 0x24, 0xef, 0x79, 0xe9, 0xc7, 0xdc, 0xfb, 0x67, 0xea, 0x03, 0x41, 0xfc, 0xb9, 0x86, 0xe9, 0x55, 0x51, 0x23, 0xb0, 0x22, alt + 0x25, 0x8a, 0x92, 0xd2, 0xba, 0xde, 0x36, 0x74, 0x57, 0x4b, 0xf3, 0xde, 0x7a, 0xff, 0xe9, 0x37, 0x06, 0x39, 0x9d, 0x9e, 0xb7, 0x6d, 0x04, 0xf0, 0x52, 0x13, 0xcd, 0xa8, 0xb8, 0xe8, 0xbb, 0x85, 0x41, 0x53, 0x3c, 0x39, 0xf2, 0x44, 0xa9, 0x53, 0xae, };
var sha256 = Sistema.De seguridad.La criptografía.HashAlgorithm.Crear("SHA256");
var maduro = Sistema.De seguridad.La criptografía.HashAlgorithm.Crear("RIPEMD160");
La consola.WriteLine(cadena.Join("", maduro.ComputeHash(sha256.ComputeHash(datos)).Seleccione(x=>x.ToString("X2"))).ToLower());

Entonces, cuando usted quiere pagar esa dirección, se utiliza pagar-para-script-hash de salida en lugar de un pay-to-pubkey-hash.

+776
mesmerakyns 30 dic. 2016 2:54:53

La mayoría de los grandes de uso de los servicios una fracción de la cartera del sistema donde el dinero se divide en una pequeña "caliente" de la cartera que se hace día a día de la actividad, y un "frío" billetera en la que se almacena la mayor parte del dinero fuera de línea y detrás de la seguridad física. Un frío cartera puede ser tanto físicamente protegido, y han dividido a los gastos de la responsabilidad entre los diversos partidos para evitar el hurto interno. Esto tiene la ventaja de minimizar las pérdidas en caso de que el hot wallet está en peligro, pero se demora cantidades muy elevadas de las tasas de retira como hay un elemento humano (posiblemente varias) en la cadena. Hay un trade-off con la cantidad de dinero que usted tiene en que lado de la división, más caliente en el monedero tiene un riesgo más alto de internet dirigidos robos, pero con mayor comodidad.

La mayoría de las empresas no revelar cómo hacen sus llaves, pero se puede asumir que ellos están endurecidos BIP32 niño claves, de forma individual o producido Bitcoin direcciones de hecho en un sistema dedicado. Generalmente en este tipo de configuración de todo el mundo va a utilizar el estándar RNG /dev/urandom que es un criptográficamente segura generador de números aleatorios, diseñado explícitamente para esta tarea.

+701
545455 16 nov. 2018 23:24:28

Estoy tratando de escribir un bot para uso en Bittrex con nodeJs, pero la documentación es muy pobre. Mi problema es que me gustaría ser capaz de comprar la última preguntar, como cuando en la web, haga clic en la oferta la opción de pedir, de este modo la compra es inmediata. Para el desarrollo de la bot estoy usando: https://github.com/n0mad01/node.bittrex.api He intentado:

 bittrex.buyLimit({ mercado: 'BTC-ETH', cantidad: 0.001, tasa de: "solicitud"}, function (data) {
 la consola.log("Respuesta:" +datos);
})

pero no acepta la tasa de "pedir", ¿hay alguna manera esto se puede hacer?

+689
PronenkoS 31 dic. 2016 8:40:09

He importado todas mis claves privadas (incluyendo las de cambio de direcciones) a Andreas Schildbach del Bitcoin Wallet de bitcoin-qt y mi saldo sigue siendo cero. Esto no está de acuerdo con Blockchain, lo que muestra claramente distinto de cero saldo final. ¿Cuál es la razón y cómo puedo solucionarlo?

+647
cvatajmariaj 4 abr. 2011 21:29:06

Estoy jugando con Bitcoin-qt. Quiero recorrer todos los bloques y de todas sus transacciones.

Hasta ahora he sido capaz de obtener una lista de todos los tx en los bloques que quiero. Ahora quiero obtener información acerca de la transacción: Cantidad, confirmaciones y así sucesivamente.

Sin embargo, cuando uso el gettransaction método de la Bitcoin-qt API, parece que sólo se puede obtener de las transacciones de mi propio bolsillo.

Por ejemplo, yo no puedo decir, porque me sale el error "no Válido o no-cartera de id de transacción (código -5) ":

gettransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098

Sin embargo, cuando tengo un TX de uno de mis propias transacciones, puedo obtener una respuesta correcta.

Mi código

public void AddBtcTransaction(cadena hash)
{
 List<string> parámetros = new List<string>();
los parámetros.Agregar(hash);

 var datos = RequestServer("gettransaction", parámetros);
 int i = 0;
}

 public string RequestServer(cadena methodName, List<string> parámetros)
{
 cadena de respVal = cadena.Vacío;

 var rawRequest = GetRawRequest();
 JObject joe = new JObject();
 joe.Add(new JProperty("jsonrpc", "1.0"));
 joe.Add(new JProperty("id", "1"));
 joe.Add(new JProperty("método", methodName));

 JArray props = new JArray();
 foreach (var parámetro en los parámetros)
{
props.Agregar(parámetro);
}

 joe.Add(new JProperty("params", props));

 // serializar json para la solicitud de
 string s = JsonConvert.SerializeObject(joe);
 byte[] byteArray = Codificación.UTF8.GetBytes(s);
 rawRequest.ContentLength = byteArray.Longitud;
 Secuencia de flujo de datos = rawRequest.GetRequestStream();
 flujo de datos.Escribir(byteArray, 0, byteArray.Longitud);
flujo de datos.Close();

 StreamReader streamReader = null;
trate de
{
 WebResponse webResponse = rawRequest.GetResponse();

 streamReader = new StreamReader(webResponse.GetResponseStream(), true);

 respVal = streamReader.ReadToEnd();
 var datos = JsonConvert.DeserializeObject(respVal).ToString();
 los datos de retorno;
}
 catch (Exception exp)
{

}
finalmente
{
 si (streamReader != null)
{
 streamReader.Close(); 
}

}
 devuelve la cadena.Vacío;
}

 privado HttpWebRequest GetRawRequest()
{

 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Crear(ServerIp);
 webRequest.Credentials = new NetworkCredential(nombre de Usuario, Contraseña);
 /// importante, de lo contrario el servicio no puede desirialse su solicitud correctamente
 webRequest.ContentType = "application/json-rpc";
 webRequest.Method = "POST";

 volver webRequest;
}

Ninguna idea acerca de cómo me gustaría obtener información acerca de las transacciones fuera de mi cartera?

+641
user216568 31 oct. 2018 22:47:26

Puedes ver esta entrada en el FAQ con respecto a este problema. Se trata de varias posibilidades.

+616
Kozuch 28 ago. 2015 14:52:34

Mira un bloque en un bloque explorer.

enter image description here

Aquí el Prev_Hash es llamado 'Bloque Anterior' y el Tx_Root se llama 'Merkle Root'.

Para más información técnica, echa un vistazo a la Documentación del Protocolo.

+593
Walter White 25 mar. 2010 21:46:38

He configurado el grande (8x) de la GPU de la imagen en AWS a 2,60/hora. Corrí va unas horas después de la instalación y extrae nada.

Esta fue mi primera incursión en la minería.

Dada esta configuración, estoy en mejor posición para unirse a una piscina? Y lo de la piscina debo unirme? (Algunas piscinas recompensa es el más grande contribuyente y otros de pago de las acciones.)

+550
Reza Farshi 29 ago. 2015 8:34:35

De vez en cuando, me paso en un artículo como este: Olvidar Bitcoin -- ¿Cuál Es el Blockchain y por Qué Te importa?.

He estado escuchando un montón de aportación sobre las empresas para empezar a utilizar el Blockchain de la tecnología para la contabilidad, por ejemplo, pero sin hacer uso de Bitcoin en todo.

Me pregunto: ¿cómo es posible separar ambas cosas?

Quiero decir, el objetivo de Satoshi Nakamoto fue la creación de una moneda descentralizada que suprimiría la necesidad de una persona de confianza de la tercera parte, que opera a través de la Blockchain.

El aspecto principal de la Blockchain es que es una red descentralizada, trabajando en un peer-to-peer, sin servidores, no clientes, sólo compañeros. La única razón por la que alguien podría contribuir a la construcción de la Blockchain es la recompensa en forma de bitcoins minados.

Cómo puede una empresa hacer uso de la Blockchain? ¿Cómo podría pagar a alguien para hacer su libro de mantener (o lo que sea) sin pagos en cripto-moneda?

Veo que esto podría ser una más amplia la pregunta, pero yo me daría por satisfecho con sólo un ejemplo de cómo podría ser posible el uso de la tecnología Blockchain sin Bitcoin (o similar cripto-monedas).

+512
Romashka 14 abr. 2017 14:05:46

Muy pocos bitcoin direcciones mapa para direcciones con cualquier minúscula letra inicial (después de la 1) o cualquier letra mayúscula que viene después de Q en el alfabeto. Todos los bitcoin-base-58 codificación de caracteres antes de Q y excepto el 1 al menos casi igual de frecuentes, y todos los que después de Q tan bien, pero son mucho menos frecuentes, con Q ser entre y 1 siendo menos frecuente. Esto es debido al azar que se generan dirección que usted puede utilizar es esencialmente una base de 58 número de lo que no es sólo una casi distribuidos al azar hash, pero también tiene una cierta estructura dada por la versión de bytes.

Usted no tiene que hacer cualquier base-58 de conversión para obtener las probabilidades. He utilizado el vanitygen herramienta para darme las estimaciones para el (inverso) probabilidad de que un generada aleatoriamente la dirección termina en una ranura empezando con 1P, 1T, 1R, etc.

ACTUALIZACIÓN:

En realidad, es divertido hacer una base rápida-58 cálculo. Pública dirección bitcoin es una base-58 codificación de 25 bytes binarios, de los cuales el primero es cero y completamente codificado en la partida "1" de una dirección. El resto se basa en un hash criptográfico y, por tanto, uniformemente distribuidos entre 0 y 256^24 - 1, que es de aproximadamente 23.34 * 58^32. Si el número de direcciones es de 58^32 o mayor, tenemos 33 símbolos después de la inicial "1" en su dirección bitcoin, y sólo la primera el 23 de símbolos (símbolos "2" a través de "Q" desde el símbolo "1" es especial, lo que significa un cero en bitcoin-base-58) puede ocurrir como segundo símbolo en su dirección bitcoin.

Sólo en el caso excepcional (probabilidad 1/23.34) que la dirección necesita menos símbolos puede incluso conseguir un segundo a otro de los personajes de "2" a través de "Q", y luego de obtener una distribución uniforme entre todos los de la base-58 símbolos, excepto a "1", que, de nuevo, es especial.

+448
Cornell Lewis 15 ago. 2019 17:14:04

Namecoin es mejor que Bitcoin para esto.

He aquí un proyecto que soporta la carga de archivos y la descarga de archivos desde el namecoin blockchain:

https://github.com/runn1ng/namecoin-files

+399
user106734 16 may. 2011 10:50:56

Cuando se crea una transacción, debe especificar la ubicación de los bitcoins están gastando han llegado, así como demostrar que es permitido pasar de ellos. Que se conoce como una entrada a la transacción. Las entradas se refieren a las salidas de las transacciones anteriores, que todavía no han pasado, llamado UTXOs (el saldo de transacciones de salidas). Cada UTXO debe ser gastado todos a la vez, usted no puede parcialmente pasar uno, cuando se utiliza como entrada para una transacción. Lo que generalmente se necesita para elegir un UTXO que es mayor que la cantidad que usted está tratando de gastar y, a continuación, enviar de vuelta algunos cambios para hacer la diferencia. Que es lo que la segunda salida que ve es, es el cambio de ser enviado de vuelta a su cartera. Vea también:

+393
NataliSt 13 ago. 2016 8:00:24

El servicio de bits son un campo en la versión del método que indican lo que los servicios de un nodo soporta. Estos servicios son características que un nodo apoya y le dice a los otros nodos que se conectan a lo que puede o no puede ser capaz de solicitar desde el nodo. También indican lo que el nodo puede recibir.

Por ejemplo, si un nodo tiene la NODE_SEGWIT servicio conjunto de bits, entonces cuando otro nodo se conecta a ella y ver NODE_SEGWIT, ellos saben que pueden enviar segwit bloques y transacciones a ese nodo, y puede esperar recibir segwit bloques y transacciones a partir de ese nodo. Si no ven que NODE_SEGWIT, luego de conocer a la franja de segwit bloques y transacciones de sus testigos antes de enviar la transacción a ese nodo.

+333
Max Langerak 25 abr. 2015 5:38:57

A nivel técnico, esto es posible. Usted puede recuperar BTC de un centro de intercambio de información de la dirección mediante la importación de la clave privada en un centro de intercambio de información de cartera.

Sin embargo, para muchos de los intercambios, los sistemas de seguridad no permiten la eliminación de claves privadas (por ejemplo, puede ser bloqueado en un HSM, o atado a través de otros controles de seguridad). Ellos también no permiten la firma de arbitraria de transacciones en algunos casos, la prevención de la recuperación manual.

Su única opción es llegar a Kraken y a solicitud de ellos para acceder a las claves privadas de alguna manera y firmar una transacción que envía el BTC de vuelta a la dirección de control. Puede que no sea posible con su instalación, pero es su mejor (y único) curso de acción.

+270
MEDVEED 31 oct. 2014 10:01:54

En contraste, el Bitcoin Core Desarrolladores están considerando la limitación de bloques más pequeños (300 KB).

Primero de todo, para estos tipos de cambios, Bitcoin Core sólo combina las cosas con muy amplio consenso. Hubo una propuesta de 300kB bloques por un desarrollador individual, que creo que todo el mundo considera ser muy controversial.

Además, este tipo de cambios no son propuestas para el cambio de Bitcoin Core del comportamiento y de la bifurcación de descuento. Son propuestas de cambio de Bitcoin, y eso no es algo que se decidió por los autores de una pieza de software.

Entonces, para responder a tu pregunta:

El (colección de) económicamente relevante nodos en la red de determinar la red de reglas. Yo digo económicamente relevante, porque alguien corriendo 1000 nodos en un clúster, y hacer nada pero conectarse a la red de relevo y de las transacciones y los bloques no va a afectar a cualquiera. Yo también digo colección, porque estoy ignorando la cuestión de cómo los nodos operadores de llegar a un acuerdo.

Los mineros de trabajo es la construcción de bloques que cumplan esas normas. Pueden elegir no hacerlo, pero sus bloques serán rechazados por la red, si lo hacen, y que van a perder sus ingresos a partir de ellas.

Sin embargo, los mineros siempre puede elegir para hacer cumplir las reglas adicionales en la parte superior de los exigidos por la red. Ese es el primer paso hacia una suave horquilla, pero no es suficiente. Es sólo una colusión de los mineros acordar entre sí para construir solo en la parte superior de otros bloques que satisfacen algún criterio adicional. Incluso podría hacer esto sin decirle a nadie.

Que no es todavía una softfork, debido a que podría fácilmente de acuerdo para dejar de hacer algo como esto. Para hacer que sea un éxito softfork, económicamente relevante nodos en la red, necesario para iniciar la ejecución de las mismas reglas al mismo tiempo. Que es lo que hace que el cambio de la cerradura en. Porque si los nodos están en eso, los mineros no pueden vuelta - hacerlo sería invalidar sus bloques, o provocar una irreconciliables de la horquilla en la cadena. BIP9 es un mecanismo para permitir a los mineros para coordinar la activación de una nueva característica, y tener plena nodos activar simultáneamente.

Así que en resumen: softforks están sujetas a una mayoría de la hashrate más significativo de la adopción de ejecución de código en la relevancia económica de los nodos. Los desarrolladores de software en particular no directamente de control, pero, obviamente, tienen una influencia proporcionando los medios para implementar el software.

Descargo de responsabilidad: yo soy un Bitcoin Core developer.

+250
sanea sokol 17 oct. 2017 20:52:33

Yo no estoy familiarizado acerca de cómo ejecutar en windows, pero para Ubuntu 12.04 me puede ayudar a usted primero debe quitar la basura de la conf archivo que debe estar ubicado en ~/.bitcoin carpeta con el nombre de bitcoin.conf con sólo texto siguiente :

servidor=1
daemon=1
rpcuser=cualquiera
rpcpassword=cualquiera

^^ es suficiente

ahora para hacer bitcoind para responder llamadas RPC debe tener jsonRPCClient archivos en su computadora no estoy familiarizado con ruby, pero aún https://github.com/Textalk/json-rpc-client-ruby este enlace te puede dar una idea de cómo hacerlo. Espero que esto le ayudará a lograr lo que usted está buscando. Y el bono de respuesta en linux puedes usar netstat -ntpl para tener una vista detallada sobre el programa que está utilizando el puerto que

+172
Hakan Baba 24 dic. 2013 11:19:59

Buena idea sobre cómo almacenar en Satoshis. Con nada que ver con el dinero, que desea evitar la flota debido a errores de redondeo. La mejor manera de hacerlo sería a analizar el valor de Satoshis como una cadena, entonces simplemente poner un decimal de 8 dígitos de la final para obtener el valor de Satoshis.

función convertToBTC(satoshis){
 var satoshi_string = satoshis.toString();
 var len_satoshi = satoshi_string.longitud;
 si (len_satoshi < 9){
 concat_string = concat_zeroes(9 - len_satoshi, satoshi_string);
}
 var btc_len = concat_string.longitud;
 var decimal_place = btc_len-8;
 var bitcoin_string = concat_string.slice(0,decimal_place).concat('.').concat(concat_string.slice(decimal_place, btc_len));
 volver bitcoin_string;
}

función concat_zeroes(num_zeroes, cadena1){
mientras(num_zeroes){
 cadena1 = '0'.concat(cadena1);
 num_zeroes -= 1;
}
 volver cadena1;
}
+89
Jacob Du 12 jul. 2017 21:08:57

Base en los enlaces https://github.com/bitcoin/bitcoin/blob/fcbc8bfa6d10cac4f16699d6e6e68fb6eb98acd0/src/main.h#L392 y ¿Cuáles son las teclas que se utilizan en el blockchain levelDB (es decir, lo que son la clave:los pares de valores)? Yo simplemente debe leer en los resultados como varints. Así que escribió algunos de Python de código que se muestra a continuación. Pero yo no obtener los resultados que yo esperaba.

A continuación es mi código para decodificar la información del archivo con el número de archivo 0. Analizar a través de mi blk00000.dat y se encontró que el primer bloque fue la génesis de bloque y el último bloque bloque 177 con blockhash 00000000480c9799dd2b35009ff1833f69690f76c26a9bea7e00cd0042f67db1.

nBlocks parece correcto con 134 bloques que era la cantidad de bloques que he encontrado en blk00000.dat. nHeightFirst mira a la derecha con el valor 0, pero me nHeightLast no es de 177. nSize y nUndoSize dont look de la derecha, ya que no coincide con el tamaño del archivo que se encuentra en la terminal de hacer

ls -l ~/.bitcoin/bloques/blk00000.dat

y

ls -l ~/.bitcoin/bloques/rev00000.dat

También la nTimeFirst no coincide con la marca de tiempo de la génesis de bloque. Y nTimeLast no coincide con la marca de tiempo del bloque de 177, que me pareció ser el bloque con la mayor marca de tiempo en blk00000.dat. ¿Qué estoy haciendo mal?

importación plyvel
blockIndexDB = plyvel.DB('/home/chris/.bitcoin/bloques/index')
resultado = blockIndexDB.get(b ° f\x00\x00\x00\x00')

# valor de resultado de leveldb
# resultado = b'\x86\xa8%\xbe\xfe\xf4E\x88\xa5\xa7}\x00\x86\xa8r\x83\xc9\xfd\xd5)\x83\xec\xd3\xa1N'
# hexString = b'86a825befef44588a5a77d0086a87283c9fdd52983ecd3a14e'

nBlocks = int.from_bytes(resultado[0:1], byteorder='poco')
print('nBlocks', nBlocks)
de impresión(nBlocks == 134)

s = int.from_bytes(resultado[1:2], byteorder='poco')
# print('s', s)
nSize = int.from_bytes(resultado[2:6], byteorder='poco')
print('nSize', nSize)
de impresión(nSize == 134216389) # blk00000.dat tamaño de archivo

s = int.from_bytes(resultado[6:7], byteorder='poco')
# print('s', s)
nUndoSize = int.from_bytes(resultado[7:11], byteorder='poco')
print('nUndoSize', nUndoSize)
de impresión(nUndoSize == 19502205) # rev00000.dat tamaño de archivo

nHeightFirst = int.from_bytes(resultado[11:12], byteorder='poco')
print('nHeightFirst', nHeightFirst)
de impresión(nHeightFirst == 0)
nHeightLast = int.from_bytes(resultado[12:13], byteorder='poco')
print('nHeightLast', nHeightLast)
de impresión(nHeightLast == 177)

s = int.from_bytes(resultado[15:16], byteorder='poco')
# print('s', s)
nTimeFirst = int.from_bytes(resultado[16:20], byteorder='poco')
print('nTimeFirst', nTimeFirst)
de impresión(nTimeFirst == 1231006505) # el bloque 0 de marca de tiempo

s = int.from_bytes(resultado[20:21], byteorder='poco')
# print('s', s)
nTimeLast = int.from_bytes(resultado[21:], byteorder='poco')
print('nTimeLast', nTimeLast)
# 177 bloque es el último bloque en blk00000.archivo dat
de impresión(nTimeLast == 1231736557) # 177 bloque de marca de tiempo
+73
James Young 8 sept. 2019 4:46:42

He leído mucho acerca de la ruta de la seda y todavía estoy seguro de qué es. Fui a http://silkroadmarket.org pero sólo dice que el sitio está caído.

+49
user70743 17 jul. 2013 18:12:52

Estoy tratando de entender cómo bitcoin funciona técnicamente. Entiendo que el blockchain, firmas digitales, etc ... yo estoy más interesado en lo que sucede a una transacción una vez que se "creó".

Supongamos que Bitcoin sólo contiene una transacción por bloque (para simplificar). Básicamente:

  1. alguien crear una transacción con su cartera
  2. esta transacción debe ser validado (comprobación de entradas, firma digital, etc ...
  3. una prueba de trabajo debe ser calculada sobre el hash del bloque de
  4. el bloque se agrega a la blockchain

Así que yo sé que los mineros son responsables de venir con la prueba de trabajo. Mis preguntas son:

  • ¿cómo un nodo de difusión de una transacción a los mineros ? Es parte del protocolo P2P ?
  • ¿minero de verificación de la transacción (firma digital, entradas, etc ...) ?
  • ¿minero enviar directamente los bloques de la blockchain ?

Esta parte es todavía confuso para mí cualquier ayuda punteros del artículo sería genial :)

Actualización:

En una red P2P, los nodos no está conectado a todos los otros nodos. Así que digamos que la red se parece a esto:

el nodo 1 <-> nodo2 <-> nodo3 (1 y 2 están conectados directamente, y 2 y 3 están conectados directamente. 1 y 3 están conectados a través de 2)

Cuando el nodo1 quiere transmitir una transacción para la validación, sólo de difusión para el nodo2. A continuación, el nodo2 , eventualmente, puede transmitirlo a nodo3 para darle la oportunidad de validar el nodo1's de la transacción.

Pero, puesto que estamos en una red de confianza, nada de prevenir el nodo2 para validar la transacción, sin que nunca se transmitía a nodo3 y por lo tanto, manteniendo la minería de honorarios por sí mismo.

También podríamos imaginar que el nodo1 nunca emisión es sin confirmar la transacción, hacer el trabajo de minería a sí mismo y sólo de difusión de la validación de bloque, por lo que conseguir un "combinado" en el blockchain.

¿Cómo funciona Bitcoin frente a esta situación ?

+27
Kaprizon 25 mar. 2010 9:31:56

De acuerdo a esta respuesta: https://bitcoin.stackexchange.com/a/58908/41513 una Bizantino Tolerante a Fallos (BFT) del consenso de umbral es de 1/3.

Por otro lado, hay una creencia común de que Bitcoin red es segura hasta la mayoría de minería de poder (es decir, más de la 1/2) es honesto, que significa Bizantino Tolerante a Fallos umbral de Bitcoin red es 1/2.

Que el umbral es la correcta? 1/3 o 1/2 ?

+20
ExceLL 3 dic. 2011 7:57:49

Un realista bitcoin miner acabados de una unidad de trabajo en menos de un segundo y bloques sólo se encuentran cada diez minutos. Para interrumpir una unidad de trabajo aumentaría la eficacia de la minería por algo parecido a un 0,1% en el mejor. El hardware adicional necesario para apoyar este tipo de interrupción en un realista plataforma de extracción no justificaría la mejora de rendimiento que puede obtener.

Sin embargo, todavía es beneficioso para cambiar a una nueva unidad de trabajo tan pronto como sea posible cuando un nuevo bloque que se encuentra. Pero en los modernos sistemas de minería, esto se lleva a cabo en un nivel superior, normalmente en algún lugar entre el minero del extremo de la conexión a la minería de la piscina y la minería de hardware en sí.

Usted puede pensar que el software de control de el real de la minería de hardware tener un "grande" de la unidad de trabajo y, a partir de él, repartir "menor" de las unidades de trabajo individuales de minería de unidades de hardware. Cuando un nuevo bloque, el software presenta un nuevo "gran" unidad de trabajo de la minería de la piscina y cuando la minería de las necesidades de hardware de una nueva más pequeña unidad de trabajo, se obtiene de la nueva gran unidad de trabajo. Es contraproducente, porque las pequeñas unidades de trabajo ya son tan pequeñas (típicamente sólo un par de miles de millones de operaciones de hash) para intentar interrumpir ellos.

+11
LarsH 16 may. 2010 18:56:56

Mostrar preguntas con etiqueta