Author

Topic: Contar quantidad de recebimentos de um endereço (Read 3537 times)

sr. member
Activity: 315
Merit: 250
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
newbie
Activity: 5
Merit: 0
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
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
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.
newbie
Activity: 5
Merit: 0
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
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
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: ' . $tx["hash"] . '
';
        echo 'Date: ' . date('d/m/Y', $tx["time"]) . '
';
        echo 'Inputs:
';
        echo "
    \n";
            foreach($tx['inputs'] as $input) {
                    echo '
  • ';
                    echo $input["prev_out"]["addr"] . ' - ';
                    echo round($input["prev_out"]["value"]/1e8,4);
                    echo "
  • \n";
            }
            echo '
';
        echo "Outputs:";
        echo "
    \n";
            foreach($tx['out'] as $out) {
                    if ($out['addr'] == $addr) {
                            echo '
  • ';
                            echo $out["addr"] . ' - ';
                            echo round($out["value"]/1e8,4);
                            echo "
  • \n";
                            break;
                    }
            }
            echo '
';
        echo '
';
}
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
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 'https://blockchain.info/tx/' . $dec["txs"][$cont]["hash"] . '">' . $dec["txs"][$cont]["inputs"][0]["prev_out"]["addr"] . '
';
                    echo round($dec["txs"][$cont]["input"][0]["value"]/1e8,4) . '
';
                    echo date('d/m/Y', $dec["txs"][$cont]["time"]) . '
';
                    $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.

newbie
Activity: 5
Merit: 0
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 'https://blockchain.info/tx/' . $dec["txs"][$cont]["hash"] . '">' . $dec["txs"][$cont]["inputs"][0]["prev_out"]["addr"] . '
';
                    echo round($dec["txs"][$cont]["input"][0]["value"]/1e8,4) . '
';
                    echo date('d/m/Y', $dec["txs"][$cont]["time"]) . '
';
                    $received++;
                         break;
                }
                $cont++;
        }
}
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
(...)

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
sr. member
Activity: 315
Merit: 250
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.
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
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
newbie
Activity: 5
Merit: 0
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);
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
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:

$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...
newbie
Activity: 5
Merit: 0
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
Jump to: