Aceitando Monero

Instruções para a interface em linha de comando

O Básico

O Monero funciona de forma um pouco diferente do que você provavelmente está acostumado de outras cryptocurrencies. No caso de moedas digitais como o Bitcoin e seus derivados, sistemas de pagamentos e comerciantes normalmente criam um novo endereço (address) para cada pagamento ou usuário.

Porém, como o Monero utiliza endereços sigilosos (stealth addresses), não é preciso usar endereços diferentes para cada pagamento ou usuário, basta usar o endereço de uma única conta (account). Nesse caso, o comerciante fornecerá ao cliente um "ID de Pagamento".

O ID de Pagamento (payment ID) é uma string hexadecimal de 64 caracteres, e normalmente é criada de forma aleatória. Veja um exemplo de um ID de Pagamento:

666c75666679706f6e7920697320746865206265737420706f6e792065766572

Verificando um pagamento com a monero-wallet-cli

Se você quiser verificar um pagamento usando a monero-wallet-cli, use o comando "payments" seguido do(s) ID(s) de Pagamento(s) que serão verificados. Por exemplo:

[wallet 49VNLa]: payments 666c75666679706f6e7920697320746865206265737420706f6e792065766572
           payment                           transaction               height     amount     unlock time
666c75666679706f6e79206973207     7ba4cd810c9b4096869849458181e98e     441942     30.00000   0
[wallet 49VNLa]: █

Se você precisa verificar os pagamentos via programação, consulte os detalhes na próxima seção.

Recebendo um pagamento passo a passo.

  • Crie uma string hexadecimal aleatória de 64 caracteres para o pagamento
  • Envie o ID de Pagamento e o endereço Monero ao indivíduo que fará o pagamento
  • Verifique o pagamento usando o comando "payments" na monero-wallet-cli

Verificando um pagamento via programação

Para verificar um pagamento via programação, você pode usar as chamadas get_payments ou get_bulk_payments da API JSON RPC.

get_payments: este método requer o parâmetro payment_id com um único ID de Pagamento.

get_bulk_payments: este é o método recomendado e usa dois parâmetros, payment_ids (um array JSON com os IDs de Pagamento) e o opcional min_block_height (altura do bloco para começar a escanear).

Exemplo de resultado retornado:

[ monero->~ ]$ curl -X POST http://127.0.0.1:18500/json_rpc -d '{"jsonrpc":"2.0","method":"get_bulk_payments","id":"test", "params":{"payment_ids": ["666c75666679706f6e7920697320746865206265737420706f6e792065766572"]}}' -H "Content-Type: application/json"
{
  "id": "test",
  "jsonrpc": "2.0",
  "result": {
    "payments": [{
      "amount": 30000000000000,
      "block_height": 441942,
      "payment_id": "666c75666679706f6e7920697320746865206265737420706f6e792065766572",
      "tx_hash": "7ba4cd810c9b4096869849458181e98e18b6474ab66415de0f4ccf7ab1162fdf",
      "unlock_time": 0
    }]
  }
}

É importante notar que os valores retornados estão em unidades base do Monero, e não nas unidades normalmente exibidas por carteiras e outras aplicações. Observe também que como uma transação normalmente é composta de múltiplas saídas (outputs) que somam o valor total, é preciso agrupar os valores através do tx_hash ou do payment_id. Além disso, como várias saídas podem possuir o mesmo valor, é imperativo que não se tente filtrar os dados retornados de uma única chamada get_bulk_payments.

Antes de escanear os pagamentos é recomendado checar a API RPC do daemon (chamada get_info do RPC) para verificar se novos blocos foram recebidos. Normalmente você vai querer então verificar somente a partir dos blocos recebidos, especificando o min_block_height na chamada get_bulk_payments.

Escaneando pagamentos via programação

  • Verifique a altura do bloco atual no daemon, e prossiga somente se houver um novo bloco desde a última chamada
  • Faça a chamada get_bulk_payments na API RPC com a altura retornada no comando anterior mais a lista de todos os IDs de Pagamento do nosso sistema
  • Armazene a altura do bloco atual numa variável indicando o último bloco que escaneamos
  • Remova as duplicatas com base nos hashes das transações que já recebemos e processamos

Esta página ainda não está traduzida. Se você gostaria de ajudar a traduzi-la, veja a README.