Python cripto

Agora vamos para o python. Instalar e, as bibliotecas.

Monica

Claro! Vamos falar sobre como instalar o Python e as bibliotecas necessárias para trabalhar com transações em criptomoedas.

1. Instalando o Python

Se você ainda não tem o Python instalado, siga estes passos:

brew install python


python3 --version


sudo apt update

sudo apt install python3 python3-pip


2. Instalando Bibliotecas

Para trabalhar com criptomoedas em Python, algumas bibliotecas úteis incluem:

Você pode instalar essas bibliotecas usando pip. Abra seu terminal ou prompt de comando e execute:

bash

Copiar

pip install requests

pip install web3

pip install bitcoinlib


3. Exemplo de Uso

Aqui está um exemplo básico de como usar web3.py para interagir com a blockchain Ethereum:

python

Copiar

from web3 import Web3


# Conectar ao nó Ethereum

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'))


# Verificar a conexão

if w3.isConnected():

    print("Conectado à rede Ethereum!")

else:

    print("Falha na conexão.")


# Obter o saldo de uma carteira

address = '0xYourEthereumAddress'

balance = w3.eth.get_balance(address)

print(f'Saldo: {w3.fromWei(balance, "ether")} ETH')


4. Considerações Finais

Se precisar de mais ajuda ou de exemplos específicos, é só avisar!

seasai@raspberrypi:~ $ python3 --version

Python 3.11.2

seasai@raspberrypi:~ $ 


Monica

Ótimo! Você já tem o Python 3.11.2 instalado no seu Raspberry Pi. Agora, vamos prosseguir com a instalação das bibliotecas necessárias.

1. Atualizando o pip

Antes de instalar as bibliotecas, é uma boa prática garantir que o pip esteja atualizado. Execute o seguinte comando:

bash

Copiar

python3 -m pip install --upgrade pip


2. Instalando as Bibliotecas

Agora, você pode instalar as bibliotecas que mencionamos anteriormente. Execute os seguintes comandos:

bash

Copiar

pip install requests

pip install web3

pip install bitcoinlib


3. Verificando a Instalação

Após a instalação, você pode verificar se as bibliotecas foram instaladas corretamente. Abra um console Python interativo:

bash

Copiar

python3


E tente importar as bibliotecas:

python

Copiar

import requests

import web3

import bitcoinlib


print("Bibliotecas importadas com sucesso!")


Se não houver mensagens de erro, significa que as bibliotecas foram instaladas corretamente.

4. Próximos Passos

Agora que você tem o Python e as bibliotecas instaladas, você pode começar a desenvolver seu projeto de criptomoeda. Se precisar de exemplos específicos ou ajuda com alguma funcionalidade, fique à vontade para perguntar!

1º preciso saber em qual diretorio se enconta. Para nele colocar tudo; - na mesma pasta.

Monica

Para descobrir em qual diretório você está atualmente no seu Raspberry Pi e decidir onde colocar seus arquivos, você pode usar o seguinte comando no terminal:

bash

Copiar

pwd


Esse comando exibe o "path" do diretório atual.

Criando um Novo Diretório

Se você quiser criar um novo diretório para o seu projeto, você pode usar o comando mkdir. Por exemplo, para criar um diretório chamado meu_projeto:

bash

Copiar

mkdir meu_projeto


Depois, você pode navegar até esse diretório com:

bash

Copiar

cd meu_projeto


Verificando o Conteúdo do Diretório

Para ver quais arquivos e pastas estão presentes no diretório atual, use:

bash

Copiar

ls


Resumo

Se precisar de mais ajuda, é só avisar!

Quero as permissões do diretorio: escrita, leitura e execução.

Monica

Para verificar e modificar as permissões de um diretório no Linux (incluindo Raspberry Pi), você pode usar os comandos ls -l e chmod. Aqui está como fazer isso:

1. Verificando Permissões

Para ver as permissões do diretório atual, use:

bash

Copiar

ls -l


Isso mostrará uma lista de arquivos e diretórios com suas permissões. A primeira coluna indica as permissões:

As permissões são mostradas em três grupos: proprietário, grupo e outros.

2. Modificando Permissões

Se você precisar alterar as permissões de um diretório, use o comando chmod. Aqui estão alguns exemplos:

bash

Copiar

chmod 755 nome_do_diretorio


bash

Copiar

chmod 666 nome_do_diretorio


bash

Copiar

chmod 777 nome_do_diretorio


3. Exemplo Prático

Se você criou um diretório chamado meu_projeto e deseja dar permissões de leitura, escrita e execução para todos, execute:

bash

Copiar

chmod 777 meu_projeto


4. Confirmando as Mudanças

Após alterar as permissões, você pode usar novamente o comando ls -l para confirmar que as permissões foram aplicadas corretamente.

Se precisar de mais ajuda ou tiver outras perguntas, é só avisar!

drwxrwxrwx 2 seasai seasai 4096 out  6 18:56 cripto


Monica

As permissões do diretório cripto estão definidas como drwxrwxrwx, o que significa:

Resumo das Permissões

O que Fazer Agora

Com essas permissões, você pode:

Se você precisar de mais alguma coisa, como criar arquivos ou executar scripts dentro desse diretório, é só avisar!

seasai@raspberrypi:~/cripto $ python3

Python 3.11.2 (main, Aug 26 2024, 07:20:54) [GCC 12.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> 

>>> 


Monica

Você está dentro do interpretador Python, pronto para executar comandos e scripts. Aqui estão algumas coisas que você pode fazer:

1. Testar Importações

Você pode testar se as bibliotecas que instalou estão funcionando corretamente. Tente importar as bibliotecas:

python

Copiar

import requests

import web3

import bitcoinlib


print("Bibliotecas importadas com sucesso!")


2. Criar um Script

Se você quiser criar um script Python para seu projeto, siga estes passos:

nano meu_script.py


# meu_script.py

from web3 import Web3


# Conectar ao nó Ethereum

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'))


if w3.isConnected():

    print("Conectado à rede Ethereum!")

else:

    print("Falha na conexão.")


3. Executar o Script

Depois de criar o arquivo, você pode executá-lo com o seguinte comando:

bash

Copiar

python3 meu_script.py


Dicas Finais

seasai@raspberrypi:~/cripto $ python script.py

Traceback (most recent call last):

  File "/home/seasai/cripto/script.py", line 2, in <module>

    from web3 import Web3

ModuleNotFoundError: No module named 'web3'

seasai@raspberrypi:~/cripto $ 


Monica

O erro ModuleNotFoundError: No module named 'web3' indica que a biblioteca web3 não está instalada ou não está acessível no ambiente em que você está executando o script.

Soluções Possíveis

pip list


pip install web3


python3 -m pip install web3


python3 script.py


Dicas Finais

easai@raspberrypi:~/cripto $ pip install web3

error: externally-managed-environment


× This environment is externally managed

╰─> To install Python packages system-wide, try apt install

    python3-xyz, where xyz is the package you are trying to

    install.

    

    If you wish to install a non-Debian-packaged Python package,

    create a virtual environment using python3 -m venv path/to/venv.

    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make

    sure you have python3-full installed.

    

    For more information visit http://rptl.io/venv


note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.

hint: See PEP 668 for the detailed specification.


Monica

O erro que você está enfrentando indica que o ambiente Python no seu Raspberry Pi é gerenciado externamente, o que significa que não é recomendado instalar pacotes diretamente usando pip no sistema global.

Solução: Criar um Ambiente Virtual

A melhor prática é criar um ambiente virtual para instalar pacotes Python. Aqui estão os passos para fazer isso:

sudo apt update

sudo apt install python3-venv


cd ~/cripto

python3 -m venv venv


source venv/bin/activate


pip install web3


python script.py


Desativando o Ambiente Virtual

Quando terminar de trabalhar no ambiente virtual, você pode desativá-lo com o comando:

bash

Copiar

deactivate


Dicas Finais

(venv) seasai@raspberrypi:~/cripto $ python3 script.py

Traceback (most recent call last):

  File "/home/seasai/cripto/script.py", line 7, in <module>

    if w3.isConnected():

       ^^^^^^^^^^^^^^

AttributeError: 'Web3' object has no attribute 'isConnected'. Did you mean: 'is_connected'?

(venv) seasai@raspberrypi:~/cripto $ 


Monica

O erro AttributeError: 'Web3' object has no attribute 'isConnected' indica que a função correta para verificar a conexão com a rede Ethereum é is_connected() (com um underscore) e não isConnected().

Correção do Código

Altere a linha no seu script de:

python

Copiar

if w3.isConnected():


para:

python

Copiar

if w3.is_connected():


Código Corrigido

Aqui está como seu script deve ficar:

python

Copiar

# meu_script.py

from web3 import Web3


# Conectar ao nó Ethereum

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'))


if w3.is_connected():

    print("Conectado à rede Ethereum!")

else:

    print("Falha na conexão.")


Executar o Script

Após fazer essa alteração, salve o arquivo e execute novamente:

bash

Copiar

python3 script.py


Dicas Finais

(venv) seasai@raspberrypi:~/cripto $ python3 script.py

Falha na conexão.

Monica

Se você está recebendo a mensagem "Falha na conexão", isso pode indicar que a conexão com o nó Ethereum não foi estabelecida. Aqui estão algumas etapas para solucionar o problema:

1. Verifique o URL do Provedor

Certifique-se de que o URL do provedor está correto. O formato deve ser:

arduino

Copiar

https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID


2. Teste a Conexão com o Provedor

Você pode testar se o endpoint está acessível usando curl ou wget. Execute o seguinte comando no terminal:

bash

Copiar

curl https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID


Se você receber uma resposta de erro ou não conseguir se conectar, pode ser um problema com o endpoint.

3. Verifique a Conexão à Internet

Certifique-se de que seu Raspberry Pi está conectado à internet. Você pode testar isso tentando acessar um site:

bash

Copiar

ping google.com


4. Verifique as Configurações de Firewall

Se você estiver em uma rede que possui restrições de firewall, verifique se as portas necessárias estão abertas (geralmente, a porta 443 para HTTPS).

5. Teste com um Provedor Diferente

Se você ainda estiver tendo problemas, tente usar outro provedor de nós Ethereum, como Alchemy ou QuickNode, e veja se a conexão é bem-sucedida.

Exemplo de Código

Aqui está um exemplo atualizado do seu script, caso você precise:

python

Copiar

from web3 import Web3


# Substitua pelo seu ID de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'))


if w3.is_connected():

    print("Conectado à rede Ethereum!")

else:

    print("Falha na conexão.")


Se Persistir o Problema

Se mesmo após essas verificações o problema persistir, forneça mais detalhes sobre o que você está vendo ou qualquer mensagem de erro adicional. Isso pode ajudar a diagnosticar melhor a situação.

Como criar uma conta no Infura e gerar um projeto

Monica

Para criar uma conta no Infura e gerar um projeto, siga estes passos:

1. Acesse o Site do Infura

Visite o site do Infura: Infura.io.

2. Crie uma Conta

3. Faça Login

Após verificar seu e-mail, faça login na sua conta Infura.

4. Crie um Novo Projeto

5. Obtenha seu ID de Projeto

6. Configure o Endpoint

7. Use seu ID de Projeto no Código

Agora você pode usar o ID do projeto e o endpoint no seu código Python:

python

Copiar

from web3 import Web3


# Substitua pelo seu ID de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'))


if w3.is_connected():

    print("Conectado à rede Ethereum!")

else:

    print("Falha na conexão.")


Dicas Finais

Se você tiver mais dúvidas ou precisar de ajuda, é só avisar!

Infura criou a chave

Monica

Ótimo! Agora que você tem sua chave de projeto do Infura, siga estas etapas para integrá-la ao seu código e testar a conexão com a rede Ethereum.

1. Atualize seu Código

Substitua YOUR_INFURA_PROJECT_ID pelo seu ID de projeto do Infura no seu script Python. O código deve ficar assim:

python

Copiar

from web3 import Web3


# Substitua pelo seu ID de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/SUA_CHAVE_AQUI'))


if w3.is_connected():

    print("Conectado à rede Ethereum!")

else:

    print("Falha na conexão.")


2. Execute o Script

Salve as alterações no seu arquivo script.py e execute-o novamente:

bash

Copiar

python3 script.py


3. Verifique a Conexão

Se tudo estiver configurado corretamente, você deve ver a mensagem "Conectado à rede Ethereum!" no terminal. Caso contrário, verifique os seguintes pontos:

4. Próximos Passos

Após conseguir se conectar, você pode começar a interagir com a rede Ethereum, como consultar saldos, enviar transações, etc. Consulte a documentação do Web3.py para mais informações sobre as funcionalidades disponíveis.

Se você encontrar mais problemas ou tiver perguntas, é só avisar!

O que você achou da resposta?

Conectado à rede Ethereum!

(venv) seasai@raspberrypi:~/cripto $


Monica

Excelente! Fico feliz em saber que você conseguiu se conectar à rede Ethereum com sucesso. Agora você pode começar a explorar e interagir com a blockchain.

Próximos Passos

Aqui estão algumas sugestões sobre o que você pode fazer a seguir:

address = 'ENDEREÇO_DA_CONTA_AQUI'

balance = w3.eth.get_balance(address)

print(f'Saldo: {w3.fromWei(balance, "ether")} ETH')


Enviar uma Transação:

Interagir com Contratos Inteligentes:

Monitorar Eventos:

Recursos Adicionais

Se você tiver mais perguntas ou precisar de ajuda com algo específico, é só avisar!

O que você achou da resposta?

Consultar o Saldo de uma Conta. No caso 'crio' - edito uma conta.py e rodo no venv

Monica

Para consultar o saldo de uma conta Ethereum usando o Web3.py, você pode criar um arquivo Python, como consulta_saldo.py, e executar no seu ambiente virtual (venv). Aqui está um passo a passo:

1. Crie o Arquivo consulta_saldo.py

Abra seu editor de texto ou IDE e crie um novo arquivo chamado consulta_saldo.py. Insira o seguinte código:

python

Copiar

from web3 import Web3


# Substitua pela sua chave de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/SUA_CHAVE_AQUI'))


# Endereço da conta que você deseja consultar

endereco_conta = 'ENDEREÇO_DA_CONTA_AQUI'


# Verifica se a conexão foi bem-sucedida

if w3.is_connected():

    print("Conectado à rede Ethereum!")


    # Obtém o saldo da conta

    saldo = w3.eth.get_balance(endereco_conta)

    saldo_ether = w3.fromWei(saldo, 'ether')

    print(f'Saldo de {endereco_conta}: {saldo_ether} ETH')

else:

    print("Falha na conexão.")


2. Substitua os Valores

3. Salve o Arquivo

Salve as alterações feitas no arquivo consulta_saldo.py.

4. Execute o Script no Ambiente Virtual

Certifique-se de que você está no diretório correto no terminal e que o ambiente virtual (venv) está ativado. Em seguida, execute o script:

bash

Copiar

python3 consulta_saldo.py


5. Verifique o Resultado

Se tudo estiver configurado corretamente, você verá a mensagem informando o saldo da conta especificada. Se houver algum erro, verifique as mensagens de erro no terminal e certifique-se de que todos os valores estão corretos.

Se precisar de mais ajuda ou tiver dúvidas, é só avisar!

Tem algum simulador de conta? # Endereço da conta que você deseja consultar endereco_conta = 'ENDEREÇO_DA_CONTA_AQUI'

Monica

Sim, você pode usar endereços de contas de teste (simuladores) para praticar sem usar ETH real. Aqui estão algumas opções:

1. Endereços de Teste no Ropsten ou Rinkeby

Você pode usar redes de teste como Ropsten ou Rinkeby, que são redes Ethereum onde você pode obter ETH de teste gratuitamente. Aqui estão alguns endereços de contas de teste que você pode usar:

2. Criar uma Conta de Teste

Se você quiser criar sua própria conta de teste, você pode usar uma carteira como MetaMask e criar uma conta na rede de teste. Depois, você pode obter ETH de teste através de um faucet (distribuidor de ETH de teste).

3. Usando o Código

Substitua o endereco_conta no seu código pelo endereço de teste que você escolher. Por exemplo:

python

Copiar

endereco_conta = 'conta 1'


4. Executar o Script

Depois de fazer essa alteração, execute o script novamente para consultar o saldo da conta de teste.

Se você precisar de mais informações sobre como configurar uma conta de teste ou usar faucets, é só avisar!

No caso é chave e conta da Ropsten: 

conta 1

conta 2

Monica

Ótimo! Você pode usar os endereços de conta da Ropsten que você forneceu para consultar os saldos. Aqui está como você pode configurar seu script para consultar o saldo de ambas as contas.

1. Atualize o Código

Abra seu arquivo consulta_saldo.py e substitua o código pelo seguinte:

python

Copiar

from web3 import Web3


# Substitua pela sua chave de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_AQUI'))


# Endereços das contas que você deseja consultar

enderecos_contas = [

    'conta 1',

    'conta 2'

]


# Verifica se a conexão foi bem-sucedida

if w3.is_connected():

    print("Conectado à rede Ropsten!")


    for endereco in enderecos_contas:

        # Obtém o saldo da conta

        saldo = w3.eth.get_balance(endereco)

        saldo_ether = w3.fromWei(saldo, 'ether')

        print(f'Saldo de {endereco}: {saldo_ether} ETH')

else:

    print("Falha na conexão.")


2. Substitua a Chave do Projeto

Não se esqueça de substituir SUA_CHAVE_AQUI pela sua chave de projeto do Infura.

3. Execute o Script

Salve as alterações e execute o script novamente:

bash

Copiar

python3 consulta_saldo.py


4. Verifique os Resultados

O script deve retornar os saldos das duas contas na rede Ropsten. Se você tiver alguma dúvida ou encontrar algum erro, é só avisar!

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_AQUI')) A chave continua a mesma que peguei no Infura.

Monica

Perfeito! Se você já tem a chave do Infura, basta substituí-la na linha do código. Aqui está o que você precisa fazer:

1. Substitua a Chave do Infura

No seu código, substitua SUA_CHAVE_AQUI pela sua chave real do Infura. O código ficará assim:

python

Copiar

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_REAL'))


2. Código Completo Atualizado

Aqui está o código completo com a chave do Infura:

python

Copiar

from web3 import Web3


# Substitua pela sua chave de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_REAL'))


# Endereços das contas que você deseja consultar

enderecos_contas = [

    'conta 1',

    'conta 2'

]


# Verifica se a conexão foi bem-sucedida

if w3.is_connected():

    print("Conectado à rede Ropsten!")


    for endereco in enderecos_contas:

        # Obtém o saldo da conta

        saldo = w3.eth.get_balance(endereco)

        saldo_ether = w3.fromWei(saldo, 'ether')

        print(f'Saldo de {endereco}: {saldo_ether} ETH')

else:

    print("Falha na conexão.")


3. Execute o Script

Após fazer essa substituição, salve o arquivo e execute-o novamente:

bash

Copiar

python3 consulta_saldo.py


4. Resultados

O script deve retornar os saldos das duas contas especificadas na rede Ropsten. Se tudo estiver correto, você verá o saldo em ETH. Se você enfrentar algum problema, sinta-se à vontade para perguntar!

(venv) seasai@raspberrypi:~/cripto $ python consulta_saldo.py

Conectado à rede Ropsten!

Traceback (most recent call last):

  File "/home/seasai/cripto/consulta_saldo.py", line 19, in <module>

    saldo = w3.eth.get_balance(endereco)

            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/eth/eth.py", line 413, in get_balance

    return self._get_balance(account, block_identifier)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/module.py", line 100, in caller

    (method_str, params), response_formatters = method.process_params(

                                                ^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/method.py", line 237, in process_params

    _apply_request_formatters(params, self.request_formatters(method)),

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/eth_utils/functional.py", line 47, in inner

    return callback(fn(*args, **kwargs))

                    ^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/method.py", line 64, in _apply_request_formatters

    formatted_params = pipe(params, request_formatters)

                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "cytoolz/functoolz.pyx", line 685, in cytoolz.functoolz.pipe

  File "cytoolz/functoolz.pyx", line 660, in cytoolz.functoolz.c_pipe

  File "cytoolz/functoolz.pyx", line 523, in cytoolz.functoolz.Compose.__call__

  File "cytoolz/functoolz.pyx", line 268, in cytoolz.functoolz.curry.__call__

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/abi.py", line 570, in map_abi_data

    return pipe(data, *pipeline)

           ^^^^^^^^^^^^^^^^^^^^^

  File "cytoolz/functoolz.pyx", line 685, in cytoolz.functoolz.pipe

  File "cytoolz/functoolz.pyx", line 660, in cytoolz.functoolz.c_pipe

  File "cytoolz/functoolz.pyx", line 268, in cytoolz.functoolz.curry.__call__

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/abi.py", line 605, in data_tree_map

    return recursive_map(map_to_typed_data, data_tree)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/decorators.py", line 34, in wrapped

    wrapped_val = to_wrap(*args)

                  ^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/formatters.py", line 84, in recursive_map

    items_mapped = map_collection(recurse, data)

                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/formatters.py", line 68, in map_collection

    return datatype(map(func, collection))

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/formatters.py", line 82, in recurse

    return recursive_map(func, item)

           ^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/decorators.py", line 34, in wrapped

    wrapped_val = to_wrap(*args)

                  ^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/formatters.py", line 85, in recursive_map

    return func(items_mapped)

           ^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/abi.py", line 601, in map_to_typed_data

    return ABITypedData(func(*elements))

                        ^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/normalizers.py", line 79, in wrapper

    modified = to_wrap(type_str, data)

               ^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/normalizers.py", line 202, in abi_address_to_hex

    validate_address(data)

  File "/home/seasai/cripto/venv/lib/python3.11/site-packages/web3/_utils/validation.py", line 183, in validate_address

    raise InvalidAddress(

web3.exceptions.InvalidAddress: ('web3.py only accepts checksum addresses. The software that gave you this non-checksum address should be considered unsafe, please file it as a bug on their platform. Try using an ENS name instead. Or, if you must accept lower safety, use Web3.to_checksum_address(lower_case_address).', 'conta 1')

(venv) seasai@raspberrypi:~/cripto $ 



Monica

O erro que você está enfrentando indica que os endereços fornecidos não estão no formato de checksum. O web3.py exige que os endereços Ethereum estejam em formato de checksum para garantir que eles sejam válidos.

Como Corrigir

Você pode usar a função Web3.toChecksumAddress() para converter os endereços para o formato de checksum. Aqui está como você pode atualizar seu código:

Código Atualizado

python

Copiar

from web3 import Web3


# Substitua pela sua chave de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_REAL'))


# Endereços das contas que você deseja consultar (convertidos para checksum)

enderecos_contas = [

    w3.toChecksumAddress('conta 1'),

    w3.toChecksumAddress('conta 2')

]


# Verifica se a conexão foi bem-sucedida

if w3.is_connected():

    print("Conectado à rede Ropsten!")


    for endereco in enderecos_contas:

        # Obtém o saldo da conta

        saldo = w3.eth.get_balance(endereco)

        saldo_ether = w3.fromWei(saldo, 'ether')

        print(f'Saldo de {endereco}: {saldo_ether} ETH')

else:

    print("Falha na conexão.")


O que Mudou

Execute o Script Novamente

Salve as alterações e execute o script novamente:

bash

Copiar

python3 consulta_saldo.py


Resultado

Agora, o script deve funcionar corretamente e retornar os saldos das contas. Se você continuar tendo problemas, não hesite em perguntar!

(venv) seasai@raspberrypi:~/cripto $ python consulta_saldo.py

Traceback (most recent call last):

  File "/home/seasai/cripto/consulta_saldo.py", line 9, in <module>

    w3.toChecksumAddress('conta 1'),

    ^^^^^^^^^^^^^^^^^^^^

AttributeError: 'Web3' object has no attribute 'toChecksumAddress'. Did you mean: 'to_checksum_address'?

(venv) seasai@raspberrypi:~/cripto $

Monica

O erro que você está enfrentando é devido à mudança na nomenclatura da função em versões mais recentes da biblioteca web3.py. A função correta agora é to_checksum_address() (tudo em minúsculas e com um sublinhado).

Código Corrigido

Aqui está o código atualizado com a função correta:

python

Copiar

from web3 import Web3


# Substitua pela sua chave de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_REAL'))


# Endereços das contas que você deseja consultar (convertidos para checksum)

enderecos_contas = [

    w3.to_checksum_address('conta 1'),

    w3.to_checksum_address('conta 2')

]


# Verifica se a conexão foi bem-sucedida

if w3.is_connected():

    print("Conectado à rede Ropsten!")


    for endereco in enderecos_contas:

        # Obtém o saldo da conta

        saldo = w3.eth.get_balance(endereco)

        saldo_ether = w3.fromWei(saldo, 'ether')

        print(f'Saldo de {endereco}: {saldo_ether} ETH')

else:

    print("Falha na conexão.")


Execute o Script Novamente

Salve as alterações e execute o script novamente:

bash

Copiar

python3 consulta_saldo.py


Resultado

Agora, o script deve funcionar corretamente e retornar os saldos das contas. Se você encontrar mais problemas ou tiver outras dúvidas, estou aqui para ajudar!

(venv) seasai@raspberrypi:~/cripto $ python consulta_saldo.py

Conectado à rede Ropsten!

Traceback (most recent call last):

  File "/home/seasai/cripto/consulta_saldo.py", line 20, in <module>

    saldo_ether = w3.fromWei(saldo, 'ether')

                  ^^^^^^^^^^

AttributeError: 'Web3' object has no attribute 'fromWei'. Did you mean: 'from_wei'?

(venv) seasai@raspberrypi:~/cripto $ 


Monica

O erro que você está enfrentando é novamente devido à mudança na nomenclatura da função. A função correta para converter Wei para Ether é from_wei() (tudo em minúsculas e com um sublinhado).

Código Atualizado

Aqui está o código corrigido com a função correta:

python

Copiar

from web3 import Web3


# Substitua pela sua chave de projeto do Infura

w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/SUA_CHAVE_REAL'))


# Endereços das contas que você deseja consultar (convertidos para checksum)

enderecos_contas = [

    w3.to_checksum_address('conta 1'),

    w3.to_checksum_address('conta 2')

]


# Verifica se a conexão foi bem-sucedida

if w3.is_connected():

    print("Conectado à rede Ropsten!")


    for endereco in enderecos_contas:

        # Obtém o saldo da conta

        saldo = w3.eth.get_balance(endereco)

        saldo_ether = w3.from_wei(saldo, 'ether')  # Corrigido aqui

        print(f'Saldo de {endereco}: {saldo_ether} ETH')

else:

    print("Falha na conexão.")


Execute o Script Novamente

Salve as alterações e execute o script novamente:

bash

Copiar

python3 consulta_saldo.py


Resultado

Agora, o script deve funcionar corretamente e retornar os saldos das contas. Se você tiver mais dúvidas ou encontrar outros problemas, estou aqui para ajudar!

(venv) seasai@raspberrypi:~/cripto $ python consulta_saldo.py

Conectado à rede Ropsten!

Saldo de CHAVE CONTA 1: 0 ETH

Saldo de CHAVE CONTA 2: 0 ETH

(venv) seasai@raspberrypi:~/cripto $ 



Monica

O resultado indica que os saldos das contas consultadas estão em 0 ETH. Isso pode ocorrer por algumas razões:

Possíveis Motivos

O Que Fazer a Seguir

Se precisar de mais assistência ou tiver outras perguntas, fique à vontade para perguntar!

O que você achou da resposta?