Author

Topic: Transações (Read 2086 times)

legendary
Activity: 1386
Merit: 1000
English <-> Portuguese translations
March 19, 2014, 10:51:44 AM
#11
Eu gosto de programação, mas só sei php.
Não existe uma documentação explicando cada função do código?

No máximo a whitepaper do Bitcoin tem isso.
Mas vale lembrar que isso é tudo em cima da carteira bitcoin-qt, outras carteiras podem tratar diferente, e umas até te permitem priorizar quais entradas usar.
sr. member
Activity: 375
Merit: 254
March 19, 2014, 08:15:55 AM
#10
Eu gosto de programação, mas só sei php.
Não existe uma documentação explicando cada função do código?
sr. member
Activity: 315
Merit: 250
March 18, 2014, 10:12:37 PM
#9
Estou assumindo que voce está falando da carteira 'padrao': bitcoin-qt

E não é tao simples assim... Smiley

Para selecionar quais coins usar, o QT faz uma sequencia de tentativas filtrando primeiro apenas Outputs (moedas que voce recebeu) de transacoes com mais de 6 confirmacoes, se não tem saldo suficiente inclui transacoes com 1 confirmacao e se mesmo assim nao tem saldo, tenta com transacoes proprias (quando voce enviou e recebeu change) com 0 transacoes ainda.

Para cada uma dessas 3 tentativas, o QT não se importa com a idade das coins, nem com a taxa que a transacao final vai ter.
Ele tenta encontrar a melhor combinação de coins para reduzir o change.

O que no seu caso pode inclusive ser combinar 0.37 e 0.2 para retornar apenas 0.07 de change.

Se voce gosta de codigo, pode ver a logica completa procurando por SelectCoinsMinConf aqui: https://github.com/bitcoin/bitcoin/blob/master/src/wallet.cpp
newbie
Activity: 1
Merit: 0
March 18, 2014, 03:27:35 PM
#8
Oi,

Tenho uma duvida com relacao as transacoes,
Vamos supor que na minha carteira eu tenha as seguintes transacoes

Dia que eu recebi / Valor

01/05/2013 - 1 BTC
03/05/2013 - 0.5 BTC
06/05/2013 - 2 BTC
08/05/2013 - 1 BTC

Agora eu tenho que pagar uma conta de 0.63 BTC no dia 10/05/2013.

Pelo que eu entendi eu vou enviar o bitcoin que eu recebi no dia (01/05/2013)
(por ser o mais antigo e o menor BTC que cobre o valor de 0.63 BTC) e vai voltar 0.37 BTC para o meu endereço change,
minha carteira vai ficar:

03/05/2013 - 0.5 BTC
06/05/2013 - 2 BTC
08/05/2013 - 1 BTC
10/05/2013 - 0.37 BTC

Agora se eu precisar pagar outra conta no dia 15/05/2013 de 0.3 BTC.


Pelo que eu entendi ele usaria a do dia (03/05/2013 - 0.5 BTC) (por ser o mais antigo e o menor BTC que cobre o valor de 0.63 BTC)
e o meu saldo ficará em:

06/05/2013 - 2 BTC
08/05/2013 - 1 BTC
10/05/2013 - 0.37 BTC
15/05/2013 - 0.2 BTC

Agora se eu precisar pagar uma conta no dia 20/05/2013 de 0.5 BTC

qual seria a transaçao que ele vai utilizar?

a do dia (06/05/2013 - 2 BTC) (por ser o mais antigo que cobre o valor de 0.5 BTC)

a do dia (08/05/2013 - 1 BTC) (por ser o mais antigo e o menor BTC que cobre o valor de 0.5 BTC)

ou vai usar as do dia (10/05/2013 - 0.37 BTC e 15/05/2013 - 0.2 BTC) e volta um troco de 0.7BTC?




Obrigado pela ajuda.
hero member
Activity: 882
Merit: 1000
It's got electrolytes
March 13, 2014, 05:53:58 PM
#7
...

*O bitcoin tem algumas verificações que me falham a memória se ele vai preferir usar as 2 entradas de 1 BTC, ou se ele vai preferir quebrar a entrada de 10 BTC.

Perfeita explicação.

A escolha das transações de origem leva em consideração o valor e a idade (confirmações) das transações.
Ele vai tentar fazer uma transação com menor fee e maior chance de confirmação imediata.

nossa que estranho. sabe o motivo disso?

Entenda cada transação como se fosse a emissão de uma cedula (igual dinheiro de papel), e da mesma forma, quando vc vai na padaria comprar algo, não é possivel gastar meia cedula, vc paga com uma cedula e receba outras cedulas ou moedinhas como troco.

legendary
Activity: 1386
Merit: 1000
English <-> Portuguese translations
March 13, 2014, 04:37:40 PM
#6
nossa que estranho. sabe o motivo disso?

Por causa da natureza criptográfica do bitcoin. Todas as transações que ocorrem são ditas como usadas ou disponíveis, e as transações são confirmadas dentro dos blocos. Então, não tem como tu mudar a origem da transação(porque ela está fixa na blockchain), então a solução é criar novas entradas parciais(que é o que tentei te explicar no post anterior).
sr. member
Activity: 375
Merit: 254
March 13, 2014, 03:43:53 PM
#5
nossa que estranho. sabe o motivo disso?
legendary
Activity: 1386
Merit: 1000
English <-> Portuguese translations
March 13, 2014, 02:35:51 PM
#4
O negócio é o seguinte:
O bitcoin, o protocolo em si, não trabalha com saldo, saldo é só um número bonitinho para sabermos o quanto ainda podemos gastar.

Digamos que você recebeu na sua carteira(indiferente de quais endereços), primeiro 10 BTC, depois 1 BTC, e depois 3 BTC.
Temos um saldo 14(10+3+1).

Digamos que agora você vai mandar 2 BTC para um endereço.
O bitcoin não consegue quebrar uma transação que você recebeu e manter o resto, isto é, ele não consegue usar a transação de 3 BTC e enviar 2 BTC e deixar os outros 1 BTC parado, ou usar a de 10 BTC e deixar 8 BTC parados.
O que ele faz é que ele vai enviar 2 BTC para o endereço desejado, e 1 BTC para um change address, são endereços da tua carteira da bitcoin-qt que não estão visíveis, mas estão dentro do seu wallet.dat. Você nem sabe, mas conta 100 change address neste exato momento(se sua carteira é nova no caso, ele vai criando lotes de 100 em 100 a medida da necessidade).
Agora digamos que depois de efetivado essa última transação você quer mandar 2 BTC, ele usaria as duas transações de 1 BTC que você tem(1 BTC inicial e outro 1 BTC por causa do "troco" da primeira vez que você enviou 2 BTC), lhe deixando somente com a transação de 10 BTC.*

*O bitcoin tem algumas verificações que me falham a memória se ele vai preferir usar as 2 entradas de 1 BTC, ou se ele vai preferir quebrar a entrada de 10 BTC.
sr. member
Activity: 375
Merit: 254
March 12, 2014, 03:12:00 PM
#3
Nao entendi muito bem.
hero member
Activity: 882
Merit: 1000
It's got electrolytes
March 12, 2014, 01:14:06 AM
#2
Funciona assim:

1. um ou mais address da sua carteira recebe multiplas transacões, cada qual com valor diferenciado.
2. quando vc quer enviar valores, então uma transacao é criada para enviar saldo a outro address.
3. a carteira escolhe um conjunto de transacoes (dentre seus address) que melhor acomode o valor de saída.
4. se nao houver como acomodar um valor exato então é criado um destinatario adicional dentro da própria carteira de origem (change), que receberá a diferença.

É muito parecido com uma transação comum usando dinheiro de papel, vc tenta pagar um valor exato mas caso não consiga então paga um pouco a mais e recebe troco.

Detalhe: o que deve ser consumido por completo são as transações recebidas, e não o saldo.

Um envio é caracterizado por transações de origem e address de destino, e não address de origem e address de destino como se supõe normalmente.

sr. member
Activity: 375
Merit: 254
March 11, 2014, 08:43:10 AM
#1
Eu li que quando você faz uma transação, o programa envia a quantidade desejada para o destinatário e envia todo o resto do saldo para você mesmo.
É assim mesmo?
Então como a rede se entende lendo os blocos?
No bloco 289876 (http://blockexplorer.com/b/289876), vejo várias transações onde tem desde 1 destinatário à quase 200.
Jump to: