Temos o prazer de anunciar o lançamento do Bitcoin Core 0.16.0, a primeira versão do Bitcoin Core a incluir suporte de carteira padrão para testemunha segregada (segwit). A versão também contém várias outras melhorias e correções de bugs, conforme descrito abaixo.
A versão mais recente está disponível para download na página de download
As seções a seguir descrevem as alterações mais significativas nesta versão. Para obter detalhes completos, consulte as Notas de versão.
Carteira Segwit
Bitcoin Core 0.16.0 introduz suporte completo para segwit na carteira e nas interfaces de usuário. Um novo -addresstype
argumento foi adicionado, o que apoia legacy
, p2sh-segwit
(padrão) e bech32
endereços. Ele controla que tipo de endereços são produzidos por getnewaddress
, getaccountaddress
e createmultisigaddress
. UM -changetype
argumento também foi adicionado, com as mesmas opções e por padrão igual a -addresstype
para controlar que tipo de alteração é usada.
Um novo address_type
parâmetro foi adicionado ao getnewaddress
e addmultisigaddress
RPCs para especificar qual tipo de endereço gerar. UM change_type
argumento foi adicionado ao fundrawtransaction
RPC para substituir o -changetype
argumento para transações específicas.
- Todos os endereços segwit criados através
getnewaddress
ou*multisig
Os RPCs obtêm explicitamente seus resgates adicionados ao arquivo da carteira. Isso significa que o downgrade após a criação de um endereço segwit funcionará, desde que o arquivo da carteira esteja atualizado. - Todas as chaves segwit na carteira recebem um resgate implícito adicionado, sem que ele seja gravado no arquivo. Isso significa que a recuperação de um backup antigo funcionará, desde que você use um novo software.
- Todas as chaves do pool de chaves usadas em transações têm explicitamente seus resgates adicionados aos arquivos da carteira. Isso significa que o downgrade após a recuperação de um backup que inclui um endereço segwit funcionará
Observe que alguns RPCs ainda não suportam endereços segwit. Notavelmente, signmessage
/verifymessage
não suporta endereços segwit, nem importmulti
Neste momento. O suporte para segwit nesses RPCs continuará a ser adicionado em versões futuras.
As saídas de alteração P2WPKH agora são usadas por padrão se qualquer destino na transação for uma saída P2WPKH ou P2WSH. Isso é feito para garantir que a saída alterada seja tão indistinguível quanto possível das outras saídas em ambos os casos.
Suporte a endereços BIP173 (Bech32) (endereços “bc1…”)
Suporte completo para endereços segwit nativos (BIP173/Bech32) foi adicionado. Isso inclui a capacidade de enviar para endereços BIP173 (incluindo os não-v0) e gerar esses endereços (incluindo novos endereços padrão, veja acima).
Uma caixa de seleção foi adicionada à GUI para selecionar se um endereço Bech32 ou um endereço encapsulado em P2SH deve ser gerado ao usar endereços segwit. Quando lançado com -addresstype=bech32
ele é verificado por padrão. Quando lançado com -addresstype=legacy
está desmarcado e desativado.
Carteiras HD por padrão
Devido a uma alteração incompatível com versões anteriores no banco de dados da carteira, as carteiras criadas com a versão 0.16.0 serão rejeitadas pelas versões anteriores. Além disso, a versão 0.16.0 criará apenas carteiras determinísticas hierárquicas (HD). Observe que isso se aplica apenas a novas carteiras; carteiras feitas com versões anteriores não serão atualizadas para HD.
Substituir por taxa por padrão na GUI
A tela de envio agora usa BIP125 RBF por padrão, independente de -walletrbf
. Existe uma caixa de seleção para marcar a transação como final.
O padrão RPC permanece inalterado: para usar RBF, inicie com -walletrbf=1
ou use o replaceable
argumento para transações individuais.
Configuração do diretório de carteiras
O Bitcoin Core agora tem mais flexibilidade na localização do diretório de carteiras. Anteriormente, os arquivos de banco de dados da carteira eram armazenados no nível superior do diretório de dados do Bitcoin. O comportamento agora é:
- Para novas instalações (onde o diretório de dados ainda não existe), as carteiras serão agora armazenadas em um novo
wallets/
subdiretório dentro do diretório de dados por padrão. - Para nós existentes (onde o diretório de dados já existe), as carteiras serão armazenadas na raiz do diretório de dados por padrão. Se um
wallets/
subdiretório já existir na raiz do diretório de dados, então as carteiras serão armazenadas no
wallets/
subdiretório por padrão. - A localização do diretório de carteiras pode ser substituída especificando um
-walletdir=
opção onde
pode ser um caminho absoluto para um diretório ou link simbólico de diretório.
Deve-se ter cuidado ao escolher o local do diretório da carteira, pois se ele ficar indisponível durante a operação, os fundos poderão ser perdidos.
Suporte para sinalização de nós podados (BIP159)
Os nós removidos agora podem sinalizar NODE_NETWORK_LIMITED do BIP159 usando bits de serviço, em preparação para suporte completo ao BIP159 em versões posteriores. Isso permitiria que os nós removidos atendessem os blocos mais recentes. No entanto, a mudança atual ainda não inclui suporte para conexão com esses pares removidos.
Desempenho: montagem SHA256 habilitada por padrão
As otimizações de hash SHA256 para arquiteturas que suportam SSE4, que levam a aproximadamente 50% de aceleração no SHA256 em hardware suportado (sincronização e validação de bloco ~5% mais rápidas), agora foram habilitadas por padrão. Nas versões anteriores eles eram habilitados usando o --enable-experimental-asm
flag durante a construção, mas agora são o padrão e não são mais considerados experimentais.
Mudanças na GUI
- Os usos de “µBTC” na GUI agora também mostram o termo mais coloquial “bits”, especificado no BIP176.
- A opção de reutilizar um endereço anterior foi removida. Isto foi justificado pela necessidade de “reenviar” uma fatura, mas agora que temos o histórico de pedidos, essa necessidade deverá desaparecer.
- Foi adicionado suporte para pesquisa por TXID, em vez de apenas endereço e etiqueta.
- Uma opção “Usar saldo disponível” foi adicionada à caixa de diálogo de envio de moedas, para adicionar o saldo restante da carteira disponível a uma saída de transação.
- Foi adicionada uma opção para desobstruir os campos de senha na caixa de diálogo de senha.
Novo RPC de rescanblockchain
Um novo RPC rescanblockchain
foi adicionado para invocar manualmente uma nova varredura do blockchain. O RPC suporta argumentos de altura inicial e final para a nova verificação e pode ser usado em um ambiente multiwallet para verificar novamente o blockchain em tempo de execução.
Novo RPC savemempool
Um novo savemempool
Foi adicionado RPC que permite que o mempool atual seja salvo em disco a qualquer momento para evitar que seja perdido devido a travamentos/perda de energia.
Modo de segurança desativado por padrão
O modo de segurança agora está desabilitado por padrão e deve ser habilitado manualmente (com -disablesafemode=0
) se desejar usá-lo. O modo de segurança é um recurso que desativa um subconjunto de chamadas RPC – principalmente relacionadas à carteira e ao envio – automaticamente caso sejam detectadas certas condições de problema na rede. No entanto, os desenvolvedores passaram a considerar essas verificações não confiáveis o suficiente para serem executadas automaticamente. Mesmo com o modo de segurança desativado, eles ainda causarão avisos no warnings
campo do getneworkinfo
RPC e iniciar o -alertnotify
comando.
Script renomeado para criação de credenciais JSON-RPC
O share/rpcuser/rpcuser.py
script foi renomeado para share/rpcauth/rpcauth.py
. Este script pode ser usado para criar rpcauth
credenciais para um usuário JSON-RPC.
Validar melhorias de endereço
O validateaddress
A saída RPC foi estendida com alguns novos campos e suporte para endereços segwit (P2SH e Bech32). Especificamente:
- Um novo campo
iswitness
é verdadeiro para endereços P2WPKH e P2WSH (endereços “bc1…”), mas não para endereços segwit encapsulados em P2SH (veja abaixo). - O campo existente
isscript
agora também reportará True para endereços P2WSH. - Um novo campo
embedded
está presente para todos os endereços de script onde o script é conhecido e corresponde a algo que pode ser interpretado como um endereço conhecido. Isto é particularmente verdadeiro para endereços P2SH-P2WPKH e P2SH-P2WSH. O valor paraembedded
inclui muitas das informaçõesvalidateaddress
reportaria se invocado diretamente no endereço incorporado. - Para scripts multisig, um novo
pubkeys
foi adicionado um campo que informa as chaves públicas completas envolvidas no script (se conhecidas). Este é um substituto para o existenteaddresses
campo (que relata as mesmas informações, mas codificadas como endereços P2PKH), representado de forma mais útil e menos confusa. Oaddresses
O campo permanece presente para endereços não-segwit para compatibilidade com versões anteriores. - Para todos os endereços de chave única com chave conhecida (mesmo quando agrupados em P2SH ou P2WSH), o
pubkey
campo estará presente. Em particular, isto significa que invocarvalidateaddress
na saída degetnewaddress
sempre reportará opubkey
mesmo quando o tipo de endereço for P2SH-P2WPKH.
Mudanças de baixo nível
- O RPC obsoleto
getinfo
foi removido. Recomenda-se que sejam usados RPCs mais específicos:getblockchaininfo
getnetworkinfo
getwalletinfo
getmininginfo
- O RPC da carteira
getreceivedbyaddress
retornará um erro se for chamado com um endereço que não esteja na carteira. - O RPC da carteira
addwitnessaddress
foi descontinuado e será removido na versão 0.17, defina oaddress_type
argumento degetnewaddress
ou opção-addresstype=(bech32|p2sh-segwit)
em vez de. dumpwallet
agora inclui scripts codificados em hexadecimal da carteira no dumpfile e
importwallet
agora importa esses scripts, mas os endereços correspondentes podem não ser adicionados corretamente ou uma nova verificação manual pode ser necessária para encontrar transações relevantes.- O RPC
getblockchaininfo
agora inclui umerrors
campo. - Um novo
blockhash
parâmetro foi adicionado aogetrawtransaction
RPC que permite que uma transação bruta seja obtida de um bloco específico, se conhecido, mesmo sem-txindex
habilitado. - O
decoderawtransaction
efundrawtransaction
RPCs agora têm opçõesiswitness
parâmetros para substituir as verificações heurísticas de testemunhas, se necessário. - O
walletpassphrase
o tempo limite agora está limitado a 2 ^ 30 segundos. - Usando endereços com o
createmultisig
O RPC agora está obsoleto e será removido em uma versão posterior. As chaves públicas devem ser usadas em seu lugar. - As novas varreduras do Blockchain agora não bloqueiam mais a carteira durante todo o processo de nova varredura, então outros RPCs agora podem ser usados ao mesmo tempo (embora os resultados dos saldos/transações possam estar incorretos ou incompletos até que a nova varredura seja concluída).
- O
logging
O RPC agora foi tornado público em vez de oculto. - Um
initialblockdownload
booleano foi adicionado aogetblockchaininfo
RPC para indicar se o nó está atualmente em IBD ou não. minrelaytxfee
agora está incluído na saída degetmempoolinfo
Outras opções de linha de comando alteradas
-debuglogfile=
pode ser usado para especificar um arquivo de log de depuração alternativo.- bitcoin-cli agora tem um
-stdinrpcpass
opção para permitir que a senha RPC seja lida na entrada padrão. - O
-usehd
opção foi removida. - bitcoin-cli agora suporta um novo
-getinfo
sinalizador que retorna uma saída como a do agora removidogetinfo
RPC.
Testando alterações
- A porta JSON-RPC padrão do regtest foi alterada para 18443 para evitar conflito com o padrão 18332 do testnet.
- O Segwit agora está sempre ativo no modo regtest por padrão. Portanto, se você atualizar um nó regtest, precisará -reindexar ou usar as regras antigas adicionando
vbparams=segwit:0:999999999999
para o seu regtest bitcoin.conf. Não fazer isso resultará em uma falha de asserção CheckBlockIndex() que será semelhante a: Asserção `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)’ falhou.