Professor Xiao Zhen da aula aberta "Blockchain Technology and Application" da Universidade de Pequim - BTC

Esta nota é um registro dos principais conhecimentos e lógica durante o período de estudo. De acordo com o conteúdo do curso, ela é dividida em duas partes, BTC e ETH. Esta parte é a parte BTC

Professor Xiao Zhen das notas de classe aberta "Blockchain Technology and Application" da Universidade de Pequim - ETH

01-Introdução ao Curso


  • Referências (sujeito ao código)
    • BitCoin and Cryptocurrency Technologies A Comprehensive Introduction (publicado em 2016, desatualizado)
    • Livro branco Ethereum, papel amarelo, código-fonte
    • SolidityDocumentation

Esboço do Curso: Bitcoin

  • bitcoin
    • Noções básicas de criptografia
    • Estrutura de Dados do Bitcoin
    • Protocolo de Consenso e Implementação do Sistema
    • Algoritmo de mineração e ajuste de dificuldade
    • script bitcoin
    • Soft forks e hard forks Anonimato e proteção de privacidade

Esboço do Curso: Ethereum

  • Ethereum
    • Visão geral: Ledgers distribuídos baseados em contas
    • Estruturas de dados: árvore de estado, árvore de transação, árvore de recebimento
    • Protocolo Fantasma
    • Mineração: quebra-cabeça de mineração difícil de memorizar
    • Ajuste de Dificuldade de Mineração
    • prova de aposta
      • Casper, o Dispositivo de Finalidade Amigável (FFG)
    • contrato inteligente
  • Resumo e Perspectivas

02-BTC-Princípios de Criptografia


Bitcoin usa principalmente duas funções em criptografia: 1. Hash 2. Assinatura

  • A função hash usada na criptografia é chamada de função hash criptográfica: ela possui várias propriedades importantes:
  1. colisão (aqui refere-se a colisão de hash) resistência: nenhuma outra entrada pode ser encontrada para tornar seu valor de hash consistente com o valor de hash da entrada original
  2. O processo de cálculo da função hash oculta é unidirecional e irreversível
  3. Amigável ao quebra-cabeça significa que a faixa de valor do valor de hash é imprevisível com antecedência, ou seja, a mineração encontra um número aleatório para que o valor de hash seja menor que o alvo e só pode continuar tentando

  • Abra uma conta no sistema Bitcoin:
  1. Crie um par de chaves público-privado (chave pública, chave privada) localmente, que é uma conta. O par de chaves público-privado vem de um algoritmo de criptografia assimétrica.

  2. Criptografe com sua chave pública e descriptografe com sua própria chave privada depois de recebê-la

  3. Chave privada para assinatura, chave pública para descriptografia

  4. Portanto, uma boa fonte de aleatoriedade é necessária para gerar um par de chaves público-privadas

03-BTC-estrutura de dados


  • ponteiro de hash

    Ponteiros comuns armazenam o endereço de uma estrutura na memória. O ponteiro de hash no Bitcoin salva apenas o valor de hash H() da estrutura. Encontre o local com base no valor do hash e julgue se ele foi adulterado


  • A estrutura mais básica do Bitcoin é o blockchain

    • Qual é a diferença entre blockchain e lista encadeada comum:

      1. Ponteiros de hash são usados ​​em vez de ponteiros comuns (a cadeia de bloco B é uma lista encadeada usando ponteiros de hash)

      2. A lista encadeada comum pode alterar qualquer elemento, não tem efeito sobre outros elementos na lista encadeada. O blockchain afeta todo o corpo, então ele só precisa salvar o último valor de hash para julgar se o blockchain mudou e onde mudou.

    • O bloco é dividido em Cabeçalho do bloco e Corpo do bloco

      • O cabeçalho do bloco contém o hash raiz na árvore Merkle

  • Merkle Tree (estrutura de dados de blocos em Bitcoin)

    • A camada inferior são blocos de dados, as três camadas superiores de nós internos são todos ponteiros de hash, a primeira camada é o nó raiz e o bloco do nó raiz também pode receber um hash, chamado hash raiz (hash raiz). Cada bloco de dados é uma transação

    • Função: Provide merkle proof: prova que a transação em um bloco de dados está incluída no bloco

      • Prove que o tx amarelo está no bloco:

        De acordo com o valor de hash vermelho retornado pelo nó completo, calcule se o valor de hash raiz é o valor de hash raiz no cabeçalho do bloco

        Os nós leves têm apenas cabeçalhos de bloco

      • Como provar que uma determinada transação não está incluída na árvore merkle?

        Se houver alguns requisitos para a ordem dos nós folha, como classificação pelo valor de hash da transação. Cada nó folha é uma transação, e o conteúdo da transação é hash uma vez e os valores de hash são organizados em ordem crescente. A transação a ser verificada primeiro calcula um valor de hash para ver onde deveria estar se estiver dentro. Por exemplo, entre o terceiro e o quarto, a prova fornecida neste momento é que o terceiro e o quarto nós folha devem ir até o nó raiz. Se os valores de hash estiverem todos corretos e o valor de hash calculado pelo nó raiz não tiver sido alterado, isso significa que o terceiro e o quarto nós são de fato pontos adjacentes na árvore merkle original. Se a transação que você procura existe, ela deve estar entre esses dois nós. Mas não aparece, portanto não existe. Sua complexidade também está na forma de toras, ao custo da triagem. O classificado é chamado de árvore merkle classificada. Esse tipo de árvore merkle classificada não é usada no Bitcoin, porque não há necessidade de provar a inexistência no Bitcoin.

insira a descrição da imagem aqui

04-BTC-Protocolo de Consenso


  • A diferença entre a moeda digital e o papel-moeda é que ela pode ser copiada, o que é chamado de ataque de gasto duplo.
    A moeda descentralizada precisa resolver dois problemas:

    • pergunta

      1. Emissão de moeda digital

      2. Como verificar a validade da transação e evitar ataques de gastos duplos.

    • Solução:

      • A emissão de Bitcoin é determinada pela mineração

        A fonte final de cada bitcoin é a transação de cunhagem em cada bloco recém-minerado

      • Confie nas estruturas de dados do blockchain

        Indique a fonte da moeda e o saldo da fonte. A fonte final da fonte é a transação de cunhagem em cada novo bloco


  • transação de transferência

    • Informação

      • O pagador obtém a chave pública do beneficiário por meio de outros canais

      • O beneficiário e outros precisam saber a chave pública do pagador (fornecida pelo pagador na transação)

        1. Verifique a identidade do pagador
        2. Na origem da moeda, a saída da transação de cunhagem possui o hash da chave pública do pagador, que pode ser verificada como legal
      • Como evitar que outras pessoas falsifiquem assinaturas com sua própria chave pública?

        • Estes são executados por scripts de entrada e saída, e se os scripts de entrada e saída puderem ser executados corretamente juntos, isso significa que a transação é legal

          Em essência, é para ver se o hash da chave pública do pagamento anterior bate com o hash da chave pública desta transação


  • Consenso distribuído: o conteúdo do ledger deve atingir um consenso distribuído

    • Há também uma conclusão famosa: Teorema CAP

      • Consistência [consistência do estado do sistema]

      • Disponibilidade [outros podem usar]

      • Tolerância de partição

        O conteúdo da teoria é: qualquer sistema distribuído, como uma tabela hash distribuída, só pode satisfazer no máximo duas dessas três propriedades.Se você quiser as duas primeiras propriedades, não obterá a terceira propriedade.

    • Protocolo de consenso do Bitcoin:

      • Vote pelo poder de computação

        Cada nó pode montar um bloco candidato localmente, colocar nele as transações que considera legais e, então, começar a tentar vários valores nonce (ocupando 4 bytes) para ver qual deles pode satisfazer a desigualdade H(block header)≤target. Se um nó encontrar um nonce que atenda aos requisitos, ele obtém o direito de escrituração.

        O chamado direito contábil é o direito de escrever o próximo bloco no livro-razão do Bitcoin. Somente quando este nonce for encontrado, o nó que obtiver o direito de escrituração terá o direito de publicar o próximo bloco. Após outros nós receberem o bloco, eles precisam verificar a validade do bloco.

        • Verifique a legitimidade:

          • Campo nBits (codificação do limite de destino)
          • nonce
          • A transação é legal: assinada legalmente, não gasta em dobro

          Se o nonce for encontrado ao mesmo tempo, dependerá de quem está na cadeia legal mais longa

insira a descrição da imagem aqui

05-BTC-implementação


  • Modelo de razão baseado em transações

    O blockchain é um livro-razão descentralizado e o Bitcoin usa um modelo de livro-razão baseado em transação (razão baseada em transação【transação】【razão】). O sistema não mostra quanto dinheiro há em cada conta.

    • Modelo de razão baseado em conta: Ethereum

    • UTXO:

      Os nós completos do Bitcoin precisam manter um conjunto UTXO, ou seja, um conjunto de saídas que não foram gastas. Para detectar rapidamente gastos duplos.

    • Taxa de transação

      • entradas totais = saídas totais

        Algumas transações têm entradas totais um pouco maiores que as saídas totais.
        Se 1 bitcoin é inserido, 0,99 bitcoin é gerado e outros 0,01 bitcoin são usados ​​como taxa de transação para o nó que obtém o direito contábil de publicar o bloco.

      • Principalmente bloquear recompensas

        A recompensa do bloco é reduzida pela metade a cada 210.000 blocos e leva cerca de 4 anos para minerar 210.000 blocos. O tempo médio de geração de blocos projetado pelo sistema Bitcoin é de 10 minutos, o que significa que todo o sistema irá gerar um novo bloco em uma média de 10 minutos.


Exemplo de bloco

insira a descrição da imagem aqui

  • Notas:

    Exemplo de um bloco
    A primeira linha: o bloco contém 686 transações
    A segunda linha: a produção total de XXX bitcoins A
    quarta linha: a taxa total da transação (a soma das taxas de transação de 686 transações) A ​​linha inferior: a recompensa do bloco
    (a principal força motriz para os mineradores minerarem) A quinta linha : o número de série do bloco A sexta linha: o carimbo de data/hora do bloco, o número



    Direita: A primeira linha: o valor de hash do cabeçalho do bloco
    A segunda linha: o valor de hash do cabeçalho do bloco anterior
    (nota: o cálculo do valor de hash conta apenas o cabeçalho do bloco)
    O ponto comum dos dois valores de hash: há uma string de 0 na frente. Isso ocorre porque o valor predefinido de destino definido é expresso em hexadecimal, que é uma longa sequência de 0s na frente. Portanto, para qualquer bloco que atenda aos requisitos de dificuldade, o valor de hash do cabeçalho do bloco deve ter uma longa sequência de 0s.
    A quarta linha: merkle root é o valor de hash raiz da árvore merkle composta pelas transações contidas neste bloco.


  • Melhore o espaço de busca

    Não basta apenas alterar o número aleatório durante a mineração, o nonce tem apenas 2 elevado ao 32º valor possível, e o valor do hash raiz também pode ser alterado.

    Você pode alterar o campo coinbase na transação de cunhagem, alterando assim o hashMerkleRoot no cabeçalho do bloco, e o espaço de pesquisa é aumentado para 2 à 92ª potência.

    Pode-se entender que não há informações de entrada para transações de cunhagem e nenhuma informação de saída para destruir bitcoins, portanto, informações adicionais podem ser inseridas. Portanto, as pessoas geralmente adicionam o que desejam ao blockchain queimando bitcoins.

  • Experimento de Bernoulli (experiência de Bernoulli)

    Cada tentativa de um nonce no processo de mineração pode ser considerada como uma tentativa de Bernoulli (experiência de Bernoulli). Todo experimento aleatório de Bernoulli constitui um processo de Bernoulli. Uma de suas propriedades é: sem memória.

    Um processo de Poisson pode ser usado em vez de um processo de Bernoulli. O que realmente importa é o tempo de bloqueio do sistema, que obedece à distribuição exponencial.

    • progresso livre

      A distribuição exponencial também não tem memória. Porque a característica da curva de distribuição de probabilidade é: truncar de um lugar à vontade, e a parte restante da curva é igual à original. Por exemplo: estou esperando há dez minutos e ninguém encontrou um bloqueio legal, então quanto tempo devo esperar? Ainda referente à distribuição da função de densidade de probabilidade, a espera média ainda é de dez minutos. Quanto tempo levará para cavar no futuro não tem nada a ver com quanto tempo foi cavado no passado.

      • Garanta a justiça da mineração

        Os mineradores com forte poder de computação trabalharam mais no passado. Depois de tentar tantos nonces malsucedidos no passado, a probabilidade de nonces bem-sucedidos aumentará. Dessa forma, o progresso livre é a garantia da equidade da mineração

/** Nodes collect new transactions into a block, hash them into a hash tree,
 * and scan through nonce values to make the block's hash satisfy proof-of-work
 * requirements.  When they solve the proof-of-work, they broadcast the block
 * to everyone and the block is added to the block chain.  The first transaction
 * in the block is a special one that creates a new coin owned by the creator
 * of the block.
 */
class CBlockHeader
{
public:
    // header
    int32_t nVersion;
    uint256 hashPrevBlock;
    uint256 hashMerkleRoot;
    uint32_t nTime;
    uint32_t nBits;
    uint32_t nNonce;	

    CBlockHeader()
    {
        SetNull();
    }

    SERIALIZE_METHODS(CBlockHeader, obj) { READWRITE(obj.nVersion, obj.hashPrevBlock, obj.hashMerkleRoot, obj.nTime, obj.nBits, obj.nNonce); }

    void SetNull()
    {
        nVersion = 0;
        hashPrevBlock.SetNull();
        hashMerkleRoot.SetNull();
        nTime = 0;
        nBits = 0;
        nNonce = 0;
    }

    bool IsNull() const
    {
        return (nBits == 0);
    }

    uint256 GetHash() const;

    int64_t GetBlockTime() const
    {
        return (int64_t)nTime;
    }
};


06-BTC-Rede


  • estrutura de rede

    • Camada de aplicação: BitCoin Block Chain
    • Camada de rede: rede de sobreposição P2P
  • espalhar

    • nó de semente

      Para ingressar na rede P2P, você deve primeiro saber que existe pelo menos um nó de semente e, em seguida, precisa entrar em contato com o nó de semente e ele informará outros nós da rede que conhece. A comunicação entre os nós é através do TCP, o que é benéfico para penetrar no firewall. Quando você quiser sair, não precisa fazer nada, não precisa notificar outros nós, basta sair do aplicativo. Outros nós não ouviram sua mensagem e irão excluí-lo depois de um tempo.

    • nó vizinho

      Os princípios de design da rede Bitcoin são: simplicidade e robustez, não eficiência. Cada nodo mantém um conjunto de nodos vizinhos, e a propagação da mensagem assume a forma de flooding na rede. Quando um nó ouve uma mensagem pela primeira vez, ele a espalha para todos os seus nós de grau zero e, ao mesmo tempo, registra que recebi essa mensagem. Na próxima vez que você receber esta mensagem, não precisará encaminhá-la para o nó de zero grau.

      A seleção de nós vizinhos é aleatória sem considerar a topologia subjacente. Por exemplo, um nó na Califórnia pode escolher um nó de zero grau na Argentina. A vantagem desse design é aumentar a robustez. Ele não considera a topologia subjacente, mas o sacrifício é a eficiência. A velocidade de transferência de dinheiro para as pessoas ao seu redor é semelhante à transferência de dinheiro para pessoas nos Estados Unidos.

    • Esperando pela corrente

      No sistema Bitcoin, cada nó mantém uma coleção de transações esperando para serem carregadas na cadeia. Se uma coleção de transações estiver esperando para ser escrita no blockchain, quando você ouvir uma determinada transação pela primeira vez, adicione esta transação à coleção e encaminhe esta transação para o nó, e então você não precisa encaminhar esta transação quando a receber posteriormente, para evitar a transmissão sem fio da transação na rede. A premissa do encaminhamento é que a transação é legal.

    • largura de banda

      O protocolo Bitcoin tem um limite de 1M bytes no tamanho do bloco. O método de transmissão adotado pelo sistema Bitcoin é muito intensivo em largura de banda, e a largura de banda é o gargalo. Calculado de acordo com o limite de tamanho de bloco de 1M, pode levar dezenas de segundos para que um bloco recém-liberado seja transmitido para a maior parte da rede. Isso já é muito tempo, então esse valor limite não é pequeno.


07-BTC-dificuldade de mineração


  • Algoritmo Bitcoin: SHA-256

2 256 2^{256}22 5 6

H (cabeçalho do bloco) ≤ alvo H(bloco \, cabeçalho) \leq alvoH ( bloco _ _ _ _he a d e r ) _alvo _ _ _ _ _

dificuldade = dificuldade 1 targettarget dificuldade = {difficulty1target \over target}D i f f i c u l t y=alvo _ _ _ _ _d i f f i c u l t y 1 alvo _ _ _ _ _

  • Ajuste de motivação: menor tempo de bloqueio

    Se houver muitas bifurcações no futuro, uma determinada transação em um bloco anterior provavelmente sofrerá um ataque de bifurcação e os nós maliciosos tentarão reverter. Como haverá muitas bifurcações no futuro, o poder de computação será disperso e a probabilidade de sucesso de nós maliciosos é maior. Neste momento, nós maliciosos não precisam de 51% do poder de computação, e talvez 10% do poder de computação seja suficiente, então quanto menor o tempo de geração do bloco, melhor.

  • Ajuste o conteúdo

    O protocolo Bitcoin estipula que o pré-valor alvo deve ser ajustado após cada bloco de 2016, que é aproximadamente a cada duas semanas. Ou seja, o tempo médio de bloqueio é de 10 minutos

meta = meta ∗ tempo real tempo esperado meta = meta*{real \, tempo \acima do esperado \, tempo}alvo _ _ _ _ _=alvo _ _ _ _ _e x p e c t e dtempo _ _ _a c tu a l _tempo _ _ _


08-BTC-Mineração


  • nó completo

    • Sempre online
    • Mantenha informações completas de blockchain no disco rígido local
    • Manter a coleção UTXO na memória, verificando rapidamente a exatidão da transação
    • Monitore as informações da transação na rede Bitcoin para verificar a legitimidade de cada transação
    • Decida quais transações serão incluídas no bloco
    • Ouça os blocos escavados por outros mineradores para verificar sua legitimidade
    • mineração
      • decidir qual cadeia para cavar para baixo
      • Qual garfo escolher quando há correntes bifurcadas de igual comprimento
  • nó de luz

    • nem sempre online
    • Ao invés de salvar o blockchain inteiro, apenas salve o cabeçalho de cada bloco
    • Não salve todas as transações, apenas salve transações relacionadas a você
    • É impossível verificar a legitimidade da maioria das transações, apenas as transações relacionadas a si mesmo podem ser verificadas
    • Não é possível verificar a exatidão do bloco publicado na rede
    • A dificuldade da mineração pode ser verificada
    • Ele só pode detectar qual é a cadeia mais longa, mas não sabe qual é a cadeia legal mais longa
  • Evolução do equipamento de mineração

    1. CPU
    2. GPU
    3. ASIC (Application Specific Integrated Circuit) foto
  • quebra-cabeça de mineração

    Alguns novos blockchains podem usar o mesmo algoritmo, mesclar mineração

  • pool de mineração

    Existem muitos mineradores conectados ao proprietário da mina, e os mineradores são responsáveis ​​apenas por calcular o valor do hash. Resolva o problema da renda instável.

    • Calcule a renda do mineiro:

      • Reduzir a dificuldade do minerador

        Aumente o alvo, crie um nonce chamado compartilhamento e calcule quantos compartilhamentos o minerador enviou.

        O domínio coinbase foi definido pelo proprietário da mina, portanto não pode ser roubado

    • Desvantagens:

      Centralização do poder de computação, ataques maliciosos não precisam necessariamente dominar o poder de computação


09-BTC-Script


insira a descrição da imagem aqui

  • introduzir

    A imagem é um exemplo de uma transação Bitcoin. A transação tem uma entrada e duas saídas. O canto superior esquerdo diz saída, que na verdade é a entrada dessa transação. Para as duas saídas à direita, não gasto no topo significa nenhum gasto e gasto no fundo significa gasto. A transação já recebeu 23 confirmações, então há poucas chances de reversão.

    A seguir está o script de entrada e saída desta transação: O script de entrada contém duas operações, que colocam respectivamente dois números muito longos na pilha. A linguagem de script usada pelo Bitcoin é muito simples e o único espaço de memória que pode ser acessado é uma pilha. Ao contrário das linguagens de programação de uso geral, como a linguagem C C++ tem variáveis ​​globais, variáveis ​​locais e espaço de memória alocado dinamicamente, é uma pilha aqui, por isso é chamada de linguagem baseada em pilha. Aqui, o script de saída tem duas linhas, correspondendo às duas saídas acima, respectivamente. Cada saída tem seu próprio script separado.


estrutura de transação

"result":{
    "txid": "921a...dd24", // transaction id
    "hash": "921a...dd24",
    "version": 1,
    "size": 226,
    "locktime": 0,		// 用来设定交易的生效时间,0:立即生效
    "vin": {...},		// 输入脚本
    "vout": {...},		// 输出脚本
    "blockhash": "0000000000000000000002c510d...4c0b",
    "confirmations": 23,
    "time": 1530846727,	// 交易时间
    "blocktime": 1530846727
}
"vin": [{
   "txid": "c0cb...c57b",	// 来源交易的哈希值
    "vout": 0,				// 这个交易里的第几个输出
    "scriptSig": {			// 输入脚本,下文写成input script
        "asm": "3045...0018",	// 输入脚本内容
        "hex": "4830...0018"
    },
}],
"vout": [{
    "value": 0.22684000,	// 单位是比特币
    "n": 0,					// 第几个输出
    "scriptPubKey":{		// 输出脚本, 下文写成 output script
        "asm": "DUP HASH160 628e...d743 EQUALVERIFY CHECKSIG",	// 输出脚本内容
        "hex": "76a9...88ac",
        "reqSigs": 1,	// 需要多少个签名才能兑现(单重多重)
        "type": "pubkeyhash",	// 公钥哈希
        "address": ["19z8LJkNXLrTv2QK5....."]	// 输出地址
    }
},{
    "value": 0.53756644,
    "n": 1,
    "scriptPubKey":{
        "asm": "DUP HASH160 628e...d743 EQUALVERIFY CHECKSIG",
        "hex": "76a9...88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "address": ["1LvGTpdye....."]
}],
  • Observação:

    A estrutura de entrada e saída é uma matriz, que pode consistir em várias entradas e saídas


A forma do script de entrada e saída

  • Modalidades de implementação

    Execute primeiro o script de entrada da transação atual e, em seguida, execute o script de saída da transação de origem

P2PK (Pagar para chave pública)

//	P2PK
//	input script
	PUSHDATA(Sig)
//	output script
	PUSHDATA(PubKey)
    CHEKSIG

P2PKH (Pagar para hash de chave pública)

// P2PKH(Pay to Public Key Hash) 最常用
// input script
	PUSHDATA(Sig)
    PUSHDATA(PubKey)
// output script
    DUP	// 复制栈顶元素
    HASH160
    PUSHDATA(PubKeyHash)
    EQUALVERIFY
    CHECKSIG

P2SH (Pagar para Script Hash)

  • O que é dado não é o hash da chave pública do beneficiário, mas o hash do script de resgate

    • resgatar formulário de script
      1. P2PK
      2. P2PKH
      3. formulário de assinatura múltipla
  • O script de entrada precisa fornecer algumas assinaturas e um resgatescript serializado, e a verificação é dividida em duas etapas

    • Verifique se o resgateScript serializado corresponde ao hash no script de saída
    • Desserialize e execute resgateScript para verificar se a assinatura fornecida no script de entrada está correta
  • Natureza:

    Mude a complexidade de scripts de saída para scripts de entrada

// P2SH实现P2PK
// input script
    PUSHDATA(Sig)
    PUSHDATA(serialized redeemScript)
//	output script
    HASH160
    PUSHDATA(redeemScriptHash)
    EQUAL
// redeemScript
    PUSHDATA(PubKey)
    CHECKSIG
// P2SH实现多重签名
// input script
	FALSE // 忽略这一行,这个是应对内部bug的
	PUSHDATA(Sig_1)
    PUSHDATA(Sig_2)
        ...
    PUSHDATA(Sig_M)
    PUSHDATA(serialized RedeemScript)
// output script
    HASH160
    PUSHDATA(RedeemScriptHash)
    EQUAL
// redeemScript
    M
    PUSHDATA(pubkey_1)
    PUSHDATA(pubkey_2)
        ...
    PUSHDATA(pubkey_N)
    N
    CHECKMULTISIG
  • Observação

    Esse script de entrada é fornecido pela empresa de comércio eletrônico quando ela gasta a saída. Para transações pagas por usuários, o script de saída só precisa saber o valor do hash

    Todos os códigos omitem o prefixo OP_


Prova de Queimadura

// output script
	RETURN
    [zero or more ops or text]

Tal saída nunca pode ser gasta, isso prova o método de destruição do Bitcoin

Na verdade, o valor da saída é 0, o que equivale a pagar apenas a taxa da transação, de modo que não precisa ser armazenado no UTXO


10-BTC-Fork


  • bifurcação do estado

    • bifurcação deliberada: ataque de bifurcação
  • bifurcação do protocolo: desacordo sobre o protocolo

    • garfo duro: garfo duro

      • O limite de tamanho de bloco em Bitcoin. 1M->4M

        1M = 1 milhão. Uma transação é considerada aproximadamente 250 bytes, 1 milhão/250=4000, e um bloco é cerca de 4000 transações. Em média, um bloco aparece em 10 minutos. 4000/(60×10)=7, cerca de 7 transações por segundo, ou seja, 7tx/seg. Essa velocidade de transmissão é muito baixa.

        O novo nó pensará que 4M e 1M são legais, e o nó antigo não reconhecerá 4M, então essas duas cadeias não desaparecerão

    • garfo macio: garfo macio

      • limite de tamanho de bloco. Suponha que 1M -> 0,5M

        O novo nó não reconhece o bloco original, mas os nós antigos sim. Portanto, se o nó não atualizar o software, ele sempre seguirá a cadeia legal mais longa e será descartado. Portanto, não haverá bifurcação permanente.

      • área de base de moedas

        Os primeiros 8 bytes de coinbase são usados ​​como nonce aleatório.

        Alguém sugeriu usar os seguintes bytes como o valor de hash raiz de UTXO

      • Pagar para Script Hash

    • O que os nós antigos não reconhecem é um hard fork, e o que os nós antigos reconhecem é um soft fork.

      Soft fork: enquanto o sistema tiver a maioria dos nós atualizados, não haverá bifurcação permanente

      Hard fork: Enquanto houver nós no sistema que não atualizem o protocolo, ocorrerá um fork permanente


11-BTC-Perguntas e respostas


  1. E se o destinatário não estiver online durante a transação de transferência?

    Neste momento, o destinatário não precisa estar online. A transação de transferência é apenas registrada no blockchain, e o bitcoin na conta de uma pessoa é transferido para a conta de outra pessoa. Não importa se a outra pessoa está conectada à rede Bitcoin naquele momento.

  2. Supondo que um nó completo receba uma transação de transferência, é possível que o endereço de recebimento do destinatário na transação de transferência seja algo que o nó nunca ouviu antes?

    isso é possível. Não há necessidade de notificar outras pessoas quando uma conta Bitcoin é criada, basta gerar um par de chaves pública-privada localmente. Somente quando o dinheiro é recebido pela primeira vez após a geração do endereço de recebimento, outros nós sabem da existência dessa conta.

  3. O que devo fazer se a chave privada da minha conta for perdida?

    Depois que a chave privada é perdida, não há como fazer isso. O dinheiro na conta se torna dinheiro morto e nunca pode ser sacado. Em um sistema descentralizado, ninguém pode redefinir sua senha para você.

  4. E se a chave privada for comprometida?

    Por exemplo, se você descobrir que há algumas transações suspeitas em sua conta, o que deve fazer neste momento? Neste momento, você deve transferir o dinheiro em sua conta para outra conta segura o mais rápido possível. Isso também é diferente de nossa experiência de vida normal. Se houver algumas transações suspeitas na conta bancária, a primeira coisa que pensamos é notificar o banco. Você pode redefinir a senha e congelar a conta para evitar que outras pessoas peguem o dinheiro, e isso é impossível no mundo blockchain.

  5. O que devo fazer se escrever o endereço errado ao transferir dinheiro?

    Não tem jeito. Se você digitar o endereço errado e transferir para a pessoa errada, não temos como cancelar a transação que já foi emitida. Uma vez que a transação de transferência em Bitcoin é publicada no blockchain, não há como cancelá-la. Ao transferir para o endereço errado, se soubermos para quem foi transferido, podemos entrar em contato com a outra parte. Se você não sabe de quem é o endereço transferido, ou se é um endereço que não existe, não tem como.

  6. Então faça uma pergunta: Como a prova de gravação e OP_RETURN realmente funcionam? Quando um nó completo recebe uma transação de transferência, primeiro ele precisa verificar a validade da transação e apenas as transações legais serão gravadas no blockchain. A instrução OP_RETURN é um erro de retorno incondicional. Nesse caso, como ela pode passar na verificação e ser gravada na blockchain?

    Esta instrução não será executada ao verificar a validade da transação atual. Ou seja, o script de saída da transação atual não será executado ao verificar a legitimidade da transação. O script de saída desta transação só será executado quando alguém quiser gastar o dinheiro e haverá outra transação posteriormente para gastar a saída desta transação.

  7. Alguns mineradores roubarão a resposta ao minerar?

    Não vai. Há uma transação coinbase no bloco liberado e há um endereço de beneficiário nele, que é o endereço do minerador que cavou a mina. Se A cavar a mina, será o endereço de recebimento de A. Se você quiser roubar a resposta, precisará substituir o endereço de A pelo seu próprio endereço e, se o endereço mudar, o conteúdo da transação da base de moedas também mudará. O que isso levará? Faz com que o valor do hash raiz da árvore merkle mude, porque esta transação e outras transações contidas no bloco são combinadas para formar a árvore merkle. Se qualquer um mudar, o valor do hash raiz mudará. O nonce está no cabeçalho do bloco e o valor do hash raiz também está no cabeçalho do bloco. Depois que o conteúdo do cabeçalho do bloco muda, o nonce original encontrado se torna inválido. Portanto, é impossível roubar a resposta, porque o nonce cavado por cada minerador está vinculado ao seu próprio endereço de pagamento.

  8. Como julgar qual minerador deve pagar a taxa de transação? Ou seja, como saber com antecedência qual minerador vai cavar a mina?

    Não é necessário saber com antecedência qual minerador receberá essa taxa de transação. Como é calculada a taxa de transação? entradas totais > saídas totais, a diferença é a taxa de transação. Na transação publicada, uma transação pode ter muitas entradas e muitas saídas, e a entrada total menos a saída total é a taxa de transação. Quem não precisa saber com antecedência qual minerador cavou a mina, pode cobrar a diferença da transação contida neste bloco como sua própria taxa de transação


12-BTC-Anonimato


  • Em que circunstâncias é possível destruir o anonimato no sistema Bitcoin?

    Por exemplo, compras online, transações Bitcoin permitem múltiplas entradas e múltiplas saídas. E várias entradas podem ser da mesma pessoa, porque essa pessoa pode controlar as chaves privadas dessas duas contas ao mesmo tempo.

  • O sistema Bitcoin é executado na camada de aplicativo e a camada inferior é a camada de rede. Portanto, para melhorar o anonimato, podemos partir de dois aspectos.

    • Como melhorar o anonimato na camada de rede
      O anonimato na camada de rede é relativamente fácil de resolver. Blockchain é uma coisa nova, mas a comunidade acadêmica do anonimato na camada de rede já tem uma boa solução: encaminhamento de caminhos múltiplos. É o mesmo princípio do Onion Routing (TOR). Ou seja, a mensagem não é enviada diretamente do remetente para o destinatário, mas precisa ser reencaminhada várias vezes no meio. Cada nó no meio sabe apenas quem é o nó anterior, mas não sabe quem enviou a mensagem primeiro. Claro, alguns nós no meio podem ser ruins, mas desde que um nó no caminho seja honesto, a identidade do iniciador original pode ser ocultada. Este também é o princípio básico do roteamento de cebola.

    • Como a camada de aplicativo melhora o anonimato?

      Misturar moedas de diferentes pessoas (mistura de moedas), ou seja, misturar sua identidade com a identidade de outras pessoas, para que os outros não saibam quem é quem. Não apenas o blockchain, mas também pode ser usado em vários outros campos que exigem anonimato. Existem alguns sites especializados em mistura de moedas, que fornecem determinados serviços e cobram determinadas taxas de serviço. Todos aqueles que desejam misturar moedas enviam suas moedas para o site, e o site passa por uma reorganização interna e, em seguida, você recebe as moedas de volta. Neste momento, as moedas retiradas não são as moedas publicadas no site, mas algumas moedas são sorteadas aleatoriamente para você.

  • Por que é tão difícil proteger a privacidade?

    A razão essencial é que o blockchain é público e não pode ser adulterado. A imutabilidade é desastrosa para a proteção da privacidade.


prova de conhecimento zero

  • conceito:

    Uma prova de conhecimento zero é quando uma parte (o provador) prova para outra parte (o verificador) que uma afirmação é verdadeira sem revelar nenhuma informação além de que a afirmação é verdadeira.

  • exemplo:

    Para provar que uma conta é minha, tudo que preciso é fornecer a chave privada. Mas a chave privada não pode ser divulgada diretamente, então a assinatura gerada pela chave privada é fornecida.Assumindo que a outra parte conhece a chave pública da conta, a exatidão da assinatura pode ser verificada. Se esta é uma prova de conhecimento zero é realmente controverso, porque eu forneci outras informações além da chave privada, e se isso conta depende do aplicativo.

ocultação homomórfica

A base matemática da prova de conhecimento zero é a ocultação homomórfica

insira a descrição da imagem aqui

  • A primeira propriedade mostra que o valor da função de criptografia E não colidirá, o que é diferente da função hash, e a função hash pode colidir. Essa propriedade, por sua vez, afirma que se E(x) e E(y) são iguais, então x e y também são iguais. (Esta declaração é o inverso da declaração acima)

  • A segunda propriedade mostra que a função de criptografia é irreversível, conhecendo o valor após a criptografia, não há como deduzir o valor antes da criptografia.

  • A terceira propriedade é a mais importante, chamada de operação homomórfica. O que ele diz é realizar algumas operações algébricas no valor da função criptografada, o que equivale a realizar operações algébricas diretamente nessas entradas e, em seguida, criptografá-las.

    Adição homomórfica: a soma dos valores criptografados é igual à criptografia da soma.
    Multiplicação homomórfica: O produto dos valores criptografados é igual à criptografia do produto.

  • exemplo:

    Conforme mostrado, Alice quer provar a Bob que conhece um conjunto de números x e y tais que x+y=7,
    enquanto impede que Bob conheça os valores específicos de x e y.

    • responder

      Alice envia os valores de E(x) e E(y) para Bob

      Bob calcula o valor de E(x+y) recebendo E(x) e E(y)

      Bob calcula o valor de E(7) ao mesmo tempo, se E(x+y)=E(7), a verificação passa, caso contrário, a verificação falha


Método de assinatura cega

  1. O usuário A fornece o SerialNum e o banco devolve o Token de assinatura sem conhecer o SerialNum, reduzindo o depósito de A
  2. O usuário A entrega SerialNum e Token para B para concluir a transação
  3. O usuário B leva SerialNum e Token ao banco para verificar se o banco passou na verificação e aumenta o depósito de B
  4. O banco não pode ligar A a B

Zcash e Zcash (criptomoeda projetada para anonimato)

Zero moedas e zero notas são integradas com anonimização na camada de protocolo, e seus atributos de anonimato vêm de garantias criptográficas

  • Existem moedas básicas e moedas zero no sistema zerocoin. Através da conversão entre moedas base e moedas zero, a correlação entre o endereço antigo e o novo endereço é eliminada. O princípio é semelhante ao serviço de mistura de moedas

    Existem moedas básicas (como Bitcoin) e moedas zero em moedas zero. Ao usá-la, você precisa provar que existe uma moeda base, para que a moeda base se torne inutilizável e depois troque por uma moeda zero. Ao gastar a moeda zero, você só precisa usar o conhecimento zero para provar que a moeda que gastou é uma moeda legal que existe no sistema, mas não precisa divulgar qual moeda está gastando no sistema.

  • O sistema zerocash usa o protocolo zk-SNARKs e não depende de uma moeda básica.O blockchain apenas registra a existência de transações e as provas de atributos-chave exigidas pelos mineradores para verificar o funcionamento normal do sistema. Nem o endereço da transação nem o valor da transação são exibidos no blockchain e todas as transações são realizadas por meio de verificação de conhecimento zero.

    O ZCash não tem moeda base e é um ZCash completo. Zcash e Zcash não são 100% anônimos e seguros.Entre os fatores que afetam a segurança anônima, ainda existe um fator que não pode ser resolvido, ou seja, ao interagir com entidades. Por exemplo, quando alguém deseja usar essas moedas para fazer coisas ruins, ao converter uma grande quantia nessa criptomoeda ou ao converter essas criptomoedas em dinheiro, ele ainda precisa revelar sua identidade. Não importa o quão bem essas criptomoedas sejam projetadas matematicamente, elas apenas dizem que têm anonimato para as transferências já na blockchain, e o anonimato de interagir com o mundo exterior ainda é uma fraqueza. Portanto, ainda não pode fornecer 100% de anonimato.


13-BTC-Pensamentos


  • ponteiro de hash

    O próprio valor de hash é um ponteiro

    • Então, como podemos encontrar o conteúdo do bloco anterior?

      O nó completo geralmente armazena esses blocos em um banco de dados (chave, valor). A chave é o hash do bloco e o valor é o conteúdo do bloco. Um banco de dados de valor-chave comumente usado é o nível DB. A estrutura de lista encadeada do chamado blockchain é realmente calculada usando o valor de hash no nível DB. Contanto que você tenha o valor de hash do último bloco, você pode recuperar o conteúdo do último bloco pesquisando o nível DB e o valor correspondente à chave de hash. Então, no cabeçalho deste bloco, há um valor de hash apontando para o bloco anterior. Em seguida, procure a chave e o valor, você pode encontrar o conteúdo do bloco anterior e assim por diante, passo a passo para descobrir e, finalmente, descobrir todo o blockchain.

  • bloquear o amor

    Ou seja, uma chave privada é dividida em várias partes e várias pessoas as guardam separadamente. Somente quando cada um tirar sua própria parte da chave privada, a chave privada completa pode ser sintetizada

    Mas se for cortado, um dos casais quer sacar o dinheiro depois de se separar, ele já conhece metade das chaves privadas e só precisa adivinhar a chave privada de 128 bits restante. Reduzir o comprimento da chave privada pela metade não significa reduzir a dificuldade pela metade. A dificuldade caiu de 2 à 256ª potência para 2 à 128ª potência. A primeira é muito maior que a segunda, e a dificuldade de quebrar caiu muito. Se for o exemplo de quatro sócios, três deles querem sacar dinheiro sem avisar o outro, então só precisam tentar 2 elevado a 64.

    Portanto, para uma conta compartilhada de várias pessoas, não use o método de truncar a chave privada, mas é melhor usar assinatura múltipla, e cada chave privada usada na assinatura múltipla é gerada independentemente. E a assinatura múltipla também oferece alguma outra flexibilidade, por exemplo, você pode pedir a qualquer uma das N pessoas para fornecer M assinaturas à vontade.

  • consenso distribuído

    A rigor, o Bitcoin não alcançou um consenso real, porque o consenso alcançado pode ser derrubado a qualquer momento, como um ataque fork. Você acha que um consenso foi alcançado. Após o fork attack, o sistema voltará ao estado anterior. Em teoria, é até possível reverter para o bloco Genesis.

  • Escassez de Bitcoin

    A razão para os mineradores minerarem é obter renda, e a renda da mineração deve ser maior que o custo para ser lucrativa. Para atrair outros para a mineração, deve-se aumentar a receita de mineração ou reduzir os custos de mineração. Qualquer criptomoeda recém-emitida tem problemas para iniciar. A fim de atrair mineiros para a mina no estágio inicial, os mineiros podem receber mais renda. A abordagem do Bitcoin é: ①A dificuldade inicial é relativamente baixa. ② As recompensas iniciais do bloco são relativamente altas.

    Na verdade, a quantidade total constante de Bitcoin não é adequada para uso como moeda. O Ethereum mencionado posteriormente não tem a prática de reduzir pela metade regularmente as recompensas do bloco. Algumas novas moedas ainda têm sua própria função de inflação, e a circulação da moeda deve ser aumentada em uma certa porcentagem a cada ano. Como as coisas escassas não são adequadas para a moeda, a inflação tornará o dinheiro menos valioso, mas uma boa moeda deve ter a função de inflação.

  • Computação quântica

    Com o desenvolvimento da computação quântica e o poder de computação dos computadores quânticos se tornando cada vez mais poderosos, as criptomoedas se tornarão inseguras?

    Essa preocupação é desnecessária:

    ①A tecnologia de computação quântica ainda está longe de ser prática e pode não ter necessariamente uma conexão substancial durante a vida útil do Bitcoin. Se a computação quântica puder ser poderosa o suficiente para destruir o sistema de criptografia no futuro, ela afetará primeiro o setor financeiro tradicional. Por exemplo, muitas atividades financeiras que realizamos on-line: serviços bancários on-line, transferências on-line e pagamentos on-line se tornarão inseguros. Portanto, em vez de se preocupar com o impacto da computação quântica no Bitcoin, é melhor se preocupar com o impacto da computação quântica no setor financeiro tradicional, porque a maior parte do dinheiro ainda está no setor financeiro tradicional e o valor de mercado das criptomoedas representa apenas uma pequena parte do sistema financeiro moderno.

    ②No Bitcoin, a chave pública da conta não é exposta diretamente, mas um endereço é obtido após o hash com a chave pública. No sistema de criptografia assimétrica usado no Bitcoin, a chave pública pode ser derivada da chave privada. Portanto, desde que você mantenha a chave privada segura, não importa se você perder a chave pública. Obviamente, a chave privada não pode ser derivada da chave pública, caso contrário, será problemática.

    Supondo que a tecnologia de computação quântica seja desenvolvida no futuro e a chave privada possa ser deduzida da chave pública, o que devemos fazer? O Bitcoin adicionou outra camada de proteção quando foi projetado. Em vez de usar a própria chave pública, ele usa o hash da chave pública. Então, se alguém quiser roubar dinheiro da sua conta, a primeira coisa a fazer é usar o endereço para deduzir sua chave pública, o que equivale a inverter o valor do hash da chave pública, o que não pode ser feito nem com um computador quântico.

Professor Xiao Zhen das notas de classe aberta "Blockchain Technology and Application" da Universidade de Pequim - ETH

Acho que você gosta

Origin blog.csdn.net/qq_20493631/article/details/117912984
Recomendado
Clasificación