Bitcoin Forum
May 10, 2024, 06:16:04 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Contar quantidad de recebimentos de um endereço  (Read 3514 times)
G00Gs (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
April 30, 2015, 03:51:26 AM
 #1

preciso contar quantas transações um endereço bitcoin recebeu

estou utilizando a api do blockchain.info, mas não encontro nenhum padrão pra mostrar

como faço?

https://blockchain.info/pt/address/154hDcYwf8qTaVHVZEaQqVccdXgkr9Dz78?format=json
"This isn't the kind of software where we can leave so many unresolved bugs that we need a tracker for them." -- Satoshi
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1715364964
Hero Member
*
Offline Offline

Posts: 1715364964

View Profile Personal Message (Offline)

Ignore
1715364964
Reply with quote  #2

1715364964
Report to moderator
1715364964
Hero Member
*
Offline Offline

Posts: 1715364964

View Profile Personal Message (Offline)

Ignore
1715364964
Reply with quote  #2

1715364964
Report to moderator
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
April 30, 2015, 04:31:00 AM
Last edit: April 30, 2015, 04:43:47 AM by girino
 #2

preciso contar quantas transações um endereço bitcoin recebeu

estou utilizando a api do blockchain.info, mas não encontro nenhum padrão pra mostrar

como faço?

https://blockchain.info/pt/address/154hDcYwf8qTaVHVZEaQqVccdXgkr9Dz78?format=json

no JSON retornado o campo "txs" é um array. Basta medir o tamanho dele. (em PHP seria:
Precisa mesmo iterar pelo array contando inuts e outputs... taí o código...

Code:
<?php

$addr 
'154hDcYwf8qTaVHVZEaQqVccdXgkr9Dz78';
if (
count($argv) > 1$addr $argv[1];

$url 'https://blockchain.info/address/' $addr '?format=json';
static 
$ch null;
if (
is_null($ch)) {
        
$ch curl_init();
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; Blockchain.info API PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
}
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);

// run the query
$res curl_exec($ch);
$dec json_decode($restrue);
print 
"transactions: " count($dec['txs']) . "\n";
$received 0;
$sent 0;
foreach (
$dec['txs'] as $tx) {
        foreach(
$tx['inputs'] as $input) {
                if (
$input['prev_out']['addr'] == $addr) {
                        
$sent++;
                        break;
                }
        }
        foreach(
$tx['out'] as $out) {
                if (
$out['addr'] == $addr) {
                        
$received++;
                        break;
                }
        }
}

print 
"Received: $received, Sent: $sent\n";

Edit: Na verdade percebi que você quer apenas as que ele recebeu, então precisa percorrer o array e verificar se o endereço está no campo de "inputs" ou de outs... peraí que já faço isso...
Edit 2: Feito...

Advertise Here - PM for more info!
G00Gs (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
April 30, 2015, 12:07:39 PM
 #3

muito obrigado girino.

me tira uma duvida, porque preciso usar curl? Não posso pegar o json_decode direto?

Quote
   $jsonBlockChain = json_decode(file_get_contents("https://blockchain.info/address/$endereco?format=json"), true);
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
April 30, 2015, 02:00:11 PM
 #4

muito obrigado girino.

me tira uma duvida, porque preciso usar curl? Não posso pegar o json_decode direto?

Quote
   $jsonBlockChain = json_decode(file_get_contents("https://blockchain.info/address/$endereco?format=json"), true);

Boa, dá sim. Não sabia que o "file_get_contents" aceitava url. Eu usei o exemplo da api deles, por isso usei curl. Wink

Advertise Here - PM for more info!
person
Sr. Member
****
Offline Offline

Activity: 315
Merit: 250



View Profile WWW
April 30, 2015, 02:20:56 PM
 #5

muito obrigado girino.

me tira uma duvida, porque preciso usar curl? Não posso pegar o json_decode direto?

Quote
   $jsonBlockChain = json_decode(file_get_contents("https://blockchain.info/address/$endereco?format=json"), true);

Boa, dá sim. Não sabia que o "file_get_contents" aceitava url. Eu usei o exemplo da api deles, por isso usei curl. Wink

Sugiro usar o curl sempre que possível. Melhor performance, menor risco de segurança e permite muitas configuracoes (header, certificado, permite POST, timeout customizado, etc).

Para um teste o file_get_contents serve, mas não usaria em sistemas que precisam ser mais estáveis.
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
April 30, 2015, 02:55:16 PM
 #6

(...)

Sugiro usar o curl sempre que possível. Melhor performance, menor risco de segurança e permite muitas configuracoes (header, certificado, permite POST, timeout customizado, etc).

Para um teste o file_get_contents serve, mas não usaria em sistemas que precisam ser mais estáveis.

Eu seguiria o conselho do person. Ele mantem sistemas grandes em PHP e entende bem mais que eu. Wink

Advertise Here - PM for more info!
G00Gs (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
May 03, 2015, 03:59:53 AM
Last edit: May 03, 2015, 04:16:16 AM by G00Gs
 #7

voce pode me ajudar a mostrar as transação?

tô desenvolvendo pra um amigo/cliente meu, mas to com dificuldade na leitura do json do blockchain

quero mostrar o endereço de origem, valor e data, mas o que pensei naum deu certo:

Quote
$cont = 0;
foreach ($dec['txs'] as $tx) {
        foreach($tx['inputs'] as $input) {
                if ($input['prev_out']['addr'] == $addr) {
                        $sent++;
                        break;
                }
        }
        foreach($tx['out'] as $out) {
                if ($out['addr'] == $addr) {
                    echo '<a href="https://blockchain.info/tx/' . $dec["txs"][$cont]["hash"] . '">' . $dec["txs"][$cont]["inputs"][0]["prev_out"]["addr"] . '</a><br/>';
                    echo round($dec["txs"][$cont]["input"][0]["value"]/1e8,4) . '<br/>';
                    echo date('d/m/Y', $dec["txs"][$cont]["time"]) . '<br/>';
                    $received++;
                         break;
                }
                $cont++;
        }
}
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
May 03, 2015, 04:09:19 PM
 #8

voce pode me ajudar a mostrar as transação?

tô desenvolvendo pra um amigo/cliente meu, mas to com dificuldade na leitura do json do blockchain

quero mostrar o endereço de origem, valor e data, mas o que pensei naum deu certo:

Quote
$cont = 0;
foreach ($dec['txs'] as $tx) {
        foreach($tx['inputs'] as $input) {
                if ($input['prev_out']['addr'] == $addr) {
                        $sent++;
                        break;
                }
        }
        foreach($tx['out'] as $out) {
                if ($out['addr'] == $addr) {
                    echo '<a href="https://blockchain.info/tx/' . $dec["txs"][$cont]["hash"] . '">' . $dec["txs"][$cont]["inputs"][0]["prev_out"]["addr"] . '</a><br/>';
                    echo round($dec["txs"][$cont]["input"][0]["value"]/1e8,4) . '<br/>';
                    echo date('d/m/Y', $dec["txs"][$cont]["time"]) . '<br/>';
                    $received++;
                         break;
                }
                $cont++;
        }
}

Primeiro tem um erro de digitação, vc usa "input" ao invés de "inputs" (no plural), na segunda linha de "echo".

Segundo, não entendi o que vc quer. Dentro de um loop sobre as outputs, está tentando acessar as inputs da mesma transação? E pelo que entendi, vc assume que cada output tem uma input correspondente, o que não é verdade...

Seria mais fácil ajudar se eu soubesse  o que é o objetivo do código.


Advertise Here - PM for more info!
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
May 03, 2015, 04:23:58 PM
 #9

Como eu disse, sem saber o que vc quer, fica difícil ajudar, mas fiz esse treco aí que pode ser útil:

Code:
foreach ($dec['txs'] as $tx) {
        echo 'Transaction: <a href="https://blockchain.info/tx/' . $tx["hash"] . '">' . $tx["hash"] . '</a><br/>';
        echo 'Date: ' . date('d/m/Y', $tx["time"]) . '<br/>';
        echo 'Inputs:<br />';
        echo "<ul>\n";
        foreach($tx['inputs'] as $input) {
                echo '<li>';
                echo $input["prev_out"]["addr"] . ' - ';
                echo round($input["prev_out"]["value"]/1e8,4);
                echo "</li>\n";
        }
        echo '</ul>';
        echo "Outputs:<br\>";
        echo "<ul>\n";
        foreach($tx['out'] as $out) {
                if ($out['addr'] == $addr) {
                        echo '<li>';
                        echo $out["addr"] . ' - ';
                        echo round($out["value"]/1e8,4);
                        echo "</li>\n";
                        break;
                }
        }
        echo '</ul>';
        echo '<hr />';
}

Advertise Here - PM for more info!
G00Gs (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
May 03, 2015, 06:38:45 PM
Last edit: May 03, 2015, 06:49:25 PM by G00Gs
 #10

desculpa naum ter explicado melhor

tenho o endereço 13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV e quero mostrar na tela as transações que ele recebeu bitcoin:

ENDEREÇO ORIGEM / valor / data

se eu for no blockhain.info agora, ficaria assim:

1KVc3LVDu21egNMfzdnzRBYD5aDuQE74kE / 0.001111 / 03-05-2015
1fT1s7tpx3DXxAhEzBkg3NKf5ENDehkNb / 0.038711 / 18-03-2015

é isso q tô quereno
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
May 03, 2015, 07:06:08 PM
 #11

desculpa naum ter explicado melhor

tenho o endereço 13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV e quero mostrar na tela as transações que ele recebeu bitcoin:

ENDEREÇO ORIGEM / valor / data

se eu for no blockhain.info agora, ficaria assim:

1KVc3LVDu21egNMfzdnzRBYD5aDuQE74kE / 0.001111 / 03-05-2015
1fT1s7tpx3DXxAhEzBkg3NKf5ENDehkNb / 0.038711 / 18-03-2015

é isso q tô quereno

é bem mais complicado do que você imagina. Uma transação tem várias entradas e várias saidas. Você teria na mesma transação vários endereços de entrada e vários de saida.

de qualquer forma, os loops da forma como estão construidos ali em cima não servem pra vc, seria necessário repensar o algoritmo.

Advertise Here - PM for more info!
G00Gs (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
May 03, 2015, 08:48:23 PM
 #12

mostrar somente o hash da transação, valor e data fica mais facil? só de recebimento

como consigo analisar de é uma transação de entrada ou de saída? eu tô começano agora a estudar esse protocolo, é um pouco complicado
person
Sr. Member
****
Offline Offline

Activity: 315
Merit: 250



View Profile WWW
May 04, 2015, 12:03:20 AM
 #13

Você vai querer usar a API /rawaddr/ do Blockchain.info.
Exemplo:
https://blockchain.info/rawaddr/13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV

Faz um loop por todas txs[].
Para cada txs[], procura se existe algum txs[].out[].addr = seu endereço (13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV)
Se encontrar, pega todos os txs[].inputs[].addr e pega quanto seu endereço recebeu txs[].out[].value

Assim você tem todos os endereços de entrada, que estão em uma transação que mandaram alguma coisa para seu endereço.
O resultado vai ser algo como:

Horario (que o blockchain recebeu a transacao) = txs[].time
Endereços de entrada = txs[].inputs[].addr que voce guardou
Total recebido no seu endereço nessa transação =  txs[].out[].value


Não use o txs[].inputs[].value porque esse não é o valor que você recebeu.
Para funcionar 100%, voce precisa percorrer todos os txs[].out[] mesmo depois de encontrar seu endereço. Você pode ter uma transação com 50x o mesmo endereço de output. Não faz sentido, mas pode.

Espero que ajude - para eu escrever o código, vamos precisar rachar quanto seu cliente tá pagando Wink
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!