Bitcoin Forum
November 11, 2024, 09:32:12 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Transações  (Read 2103 times)
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
March 11, 2014, 12:43:10 PM
 #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.
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
March 12, 2014, 05: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.


+---------=====[ Rm 12:21 ]=====---------+
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
March 12, 2014, 07:12:00 PM
 #3

Nao entendi muito bem.
DarkHyudrA
Legendary
*
Offline Offline

Activity: 1386
Merit: 1000


English <-> Portuguese translations


View Profile
March 13, 2014, 06: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.

English <-> Brazilian Portuguese translations
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
March 13, 2014, 07:43:53 PM
 #5

nossa que estranho. sabe o motivo disso?
DarkHyudrA
Legendary
*
Offline Offline

Activity: 1386
Merit: 1000


English <-> Portuguese translations


View Profile
March 13, 2014, 08: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).

English <-> Brazilian Portuguese translations
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
March 13, 2014, 09: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.


+---------=====[ Rm 12:21 ]=====---------+
RCbit
Newbie
*
Offline Offline

Activity: 1
Merit: 0


View Profile
March 18, 2014, 07: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.
person
Sr. Member
****
Offline Offline

Activity: 315
Merit: 250



View Profile WWW
March 19, 2014, 02:12:37 AM
 #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
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
March 19, 2014, 12:15:55 PM
 #10

Eu gosto de programação, mas só sei php.
Não existe uma documentação explicando cada função do código?
DarkHyudrA
Legendary
*
Offline Offline

Activity: 1386
Merit: 1000


English <-> Portuguese translations


View Profile
March 19, 2014, 02:51:44 PM
 #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.

English <-> Brazilian Portuguese translations
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!