<<  >> (p.5)
    Author Topic: [Experimento] CoinJoin  (Read 296 times)
    Adriano (OP)
    Moderator
    Legendary
    *
    Offline

    Activity: 1290
    Merit: 1093



    View Profile
    January 26, 2018, 07:02:38 PM
    Merited by sabotag3x (1), bitmover (1), jpouza (1), u9y42 (1), Raskolhnikov1 (1), caneca (1), wilwxk (1)
     #1


    Pessoal,

    Estou querendo fazer um experimento com CoinJoin, este primeiro teste será completamente manual, dependendo do resultado pode evoluir.

    Para quem não conhece, CoinJoin é uma técnica onde, ao invés de cada usuário gerar uma transação, as inputs e outputs são combinadas em uma única transação. Existem algumas vantagens, por exemplo:

    - o tamanho da transação combinada é menor do que se fossem transações independentes, portanto exigindo taxas menores (ou mais prioridade se forem utilizadas as mesmas taxas);
    - maior privacidade, pois como a transação tem várias inputs e várias outputs é mais difícil de identificar quais as origens e destinos de cada transação individual, assim como quais os endereços de destino/troco;

    Claro que se os inputs e outputs forem de valores muito diferentes, ainda é fácil verificar quais os outputs somados equivalem a cada input, e existem formas de minimizar esse risco, mas esse não é o principal foco do experimento nesse momento.

    A lista de pre-requisitos, se você quiser participar do experimento, é a seguinte:
    1. Sua carteira precisa ser capaz de importar e assinar transações;
    2. Sua carteira precisa ser capaz de gerar uma transação, assiná-la, mas não fazer o broadcast (opcional neste momento, mas fortemente recomendado);
    3. Não pode ser uma transação que você tem urgência, pois o processo será manual e pode demorar alguns dias para coordenar com todos os participantes;

    Dois exemplos de carteiras que atendem os pontos 1 e 2 acima são o Bitcoin Core e a Electrum. Se você quiser que adicione outras carteiras à lista, me avise por favor.

    Como vai funcionar o experimento:

    1. Você gera a transação que quer utilizar no experimento, incluindo a taxa; Não faça o broadcast da mesma e me envie a transação raw via MP (isto é para garantir a pseudo-anonimidade);
        O objetivo de ter a transação assinada neste momento é apenas para garantir que você possui a chave privada dos endereços utilizados, evitando que alguém atrapalhe o processo gerando uma transação aleatória que só atrasaria todo o processo no momento das assinaturas da transação final por cada participante.

    2. Eu vou gerar uma nova transação contendo todas as inputs e outputs de todos os participantes e enviar para cada um assinar as suas inputs. Nesse momento você precisa conferir que esta transação tem as mesmas inputs e outputs que a transação que você enviou... isso garante que eu não incluí na transação final outros inputs do seu endereço, ou que mudei o destino ou valor a ser enviado;

    3. Se a transação estiver ok, você a assina e me devolve para que eu passe para o próximo participante. Infelizmente esse processo não pode acontecer em paralelo. Uma alternativa para agilizar o processo será eu enviar a transação para todos os participantes, e reenviar a transação para os que ainda não assinaram a cada vez que eu receber uma nova assinatura... como participante você só precisa assinar a última transação que receber de mim. O único problema nesse caso é se duas pessoas assinarem a transação no mesmo momento. Nesse caso eu preciso descartar uma e pedir para a pessoa assinar a nova transação (mais ou menos o que acontece quando dois blocos são minerados muito próximos um do outro, e um deles se torna órfão.

    4. Quando todos os participantes tenham assinado a transação, eu farei o broadcast da mesma e vou publicar aqui os detalhes do experimento (tamanho das transações individuais, tamanho da transação final, quantos satoshis por byte cada transação estava pagando e quanto a transação final pagou, etc)

    Como fazer utilizando o Electrum:

    • você pode selecionar os inputs que quer utilizar através da aba "Coins" ou qualquer input do endereço através da aba "Addresses", basta clicar com o botão direito e escolher "Spend"/"Spend from";
    • Preencher o(s) endereço(s) de destino e escolher a taxa. Clique então em "Preview" (NÃO clique em Send)
    • Clique em Sign e em seguida em Copy
    • Envie uma MP para mim o a transação que você copiou no passo anterior.

    Para confirmar e assinar a transação que eu vou te enviar:

    • Clique em Tools, Load transaction, From text
    • Cole a transação eu eu te enviei na janela que se abrir e clique em Load transaction;
    • O electrum mostra em verde as inputs/outputs da sua carteira. verifique se elas batem com a transação que você me enviou, se sim, clique em Sign e em Copy, me envie novamente o valor copiado através de MP

    Aqui alguns exemplos utilizando a rede testnet do Bitcoin:

    1 transação comum, com 1 input e 2 outpus, tem 225 bytes depois de assinada:

    Code:
    # bin/bitcoin-cli -testnet createrawtransaction "[{\"txid\":\"33ecd9a27db30e397440942156beed15dfa0c671c553c135f0aa13c587722143\",\"vout\":0}]" "{\"mzUQE1RewdmyXERGSHpod3rFFtQuaH4ELZ\":1.05955696,\"mpgQEb9ZEhR7PGMaDS344vch1StQUjaZD8\":0.30000000}" 0 true
    020000000143217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec330000000000fdffffff0270c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00000000


    # bin/bitcoin-cli -testnet signrawtransaction 020000000143217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec330000000000fdffffff0270c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00000000
    {
      "hex": "020000000143217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec33000000006a473044022041909a209f9313a0b45046c0cddc553201830818f49931030f6722bd1166a2ce022028ac173709adfb734592ffd924439e830f4b46907d44f54ffe9a17bce6935d0f012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff0270c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00000000",
      "complete": true
    }

    # bin/bitcoin-cli -testnet decoderawtransaction 020000000143217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec33000000006a473044022041909a209f9313a0b45046c0cddc553201830818f49931030f6722bd1166a2ce022028ac173709adfb734592ffd924439e830f4b46907d44f54ffe9a17bce6935d0f012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff0270c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00000000
    {
      "txid": "cfc75e8ac66e195fa321938f231120de33ae59796be9f8339469e99b4c33ce10",
      "hash": "cfc75e8ac66e195fa321938f231120de33ae59796be9f8339469e99b4c33ce10",
      "version": 2,
      "size": 225,
      "vsize": 225,
      "locktime": 0,
      "vin": [
        {
          "txid": "33ecd9a27db30e397440942156beed15dfa0c671c553c135f0aa13c587722143",
          "vout": 0,
          "scriptSig": {
            "asm": "3044022041909a209f9313a0b45046c0cddc553201830818f49931030f6722bd1166a2ce022028ac173709adfb734592ffd924439e830f4b46907d44f54ffe9a17bce6935d0f[ALL] 03132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e",
            "hex": "473044022041909a209f9313a0b45046c0cddc553201830818f49931030f6722bd1166a2ce022028ac173709adfb734592ffd924439e830f4b46907d44f54ffe9a17bce6935d0f012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e"
          },
          "sequence": 4294967293
        }
      ],
      "vout": [
        {
          "value": 1.05955696,
          "n": 0,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 cfeec998872d7328e29347a5b613049587d11c44 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a914cfeec998872d7328e29347a5b613049587d11c4488ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "mzUQE1RewdmyXERGSHpod3rFFtQuaH4ELZ"
            ]
          }
        },
        {
          "value": 0.30000000,
          "n": 1,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 64828790f0ea411e61970f3f13ce36f394c1fc24 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "mpgQEb9ZEhR7PGMaDS344vch1StQUjaZD8"
            ]
          }
        }
      ]
    }

    Outra transação com 1 input e 2 outputs, mesmo tamanho final, 225 bytes:

    Code:
    # bin/bitcoin-cli -testnet createrawtransaction "[{\"txid\":\"314c12bcc014a6dba4bf86e8623f50745692931861dab7e64c729e6254bd422a\",\"vout\":0}]" "{\"mmmAb9Cmz5pGFMFzexqSZoMtuW4unnQjBU\":0.60000000,\"n2H7WowwnzPTZ3t3QYCvzA2vvQoSexB4T1\":0.05000000}" 0 true
    02000000012a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c310000000000fdffffff0200879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000

    # bin/bitcoin-cli -testnet signrawtransaction 02000000012a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c310000000000fdffffff0200879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000
    {
      "hex": "02000000012a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c31000000006a4730440220711940e0b8ab0157c21b412ba2b7d1c227df97f171c23c774ea260d30761769b022006a432996d516f45509871df2da6e8cd997cc3e9b913db09203d5270dfa98667012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff0200879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000",
      "complete": true
    }
    # bin/bitcoin-cli -testnet decoderawtransaction 02000000012a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c31000000006a4730440220711940e0b8ab0157c21b412ba2b7d1c227df97f171c23c774ea260d30761769b022006a432996d516f45509871df2da6e8cd997cc3e9b913db09203d5270dfa98667012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff0200879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000
    {
      "txid": "d0efd3285271445a44f8c22f6e23d64012933972e7cddb8e0852611ed64baac3",
      "hash": "d0efd3285271445a44f8c22f6e23d64012933972e7cddb8e0852611ed64baac3",
      "version": 2,
      "size": 225,
      "vsize": 225,
      "locktime": 0,
      "vin": [
        {
          "txid": "314c12bcc014a6dba4bf86e8623f50745692931861dab7e64c729e6254bd422a",
          "vout": 0,
          "scriptSig": {
            "asm": "30440220711940e0b8ab0157c21b412ba2b7d1c227df97f171c23c774ea260d30761769b022006a432996d516f45509871df2da6e8cd997cc3e9b913db09203d5270dfa98667[ALL] 03132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e",
            "hex": "4730440220711940e0b8ab0157c21b412ba2b7d1c227df97f171c23c774ea260d30761769b022006a432996d516f45509871df2da6e8cd997cc3e9b913db09203d5270dfa98667012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e"
          },
          "sequence": 4294967293
        }
      ],
      "vout": [
        {
          "value": 0.60000000,
          "n": 0,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 4480d7591cb632851816b909a5000f35ec9ba2e7 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a9144480d7591cb632851816b909a5000f35ec9ba2e788ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "mmmAb9Cmz5pGFMFzexqSZoMtuW4unnQjBU"
            ]
          }
        },
        {
          "value": 0.05000000,
          "n": 1,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 e3bc83b045df3da03fbb06465388e45736d198b0 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a914e3bc83b045df3da03fbb06465388e45736d198b088ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "n2H7WowwnzPTZ3t3QYCvzA2vvQoSexB4T1"
            ]
          }
        }
      ]
    }

    E finalmente, a transação agregada, com as duas inputs e quatro outputs, cujo tamanho total ficou em 440 bytes:

    Code:
    # bin/bitcoin-cli -testnet createrawtransaction "[{\"txid\":\"33ecd9a27db30e397440942156beed15dfa0c671c553c135f0aa13c587722143\",\"vout\":0},{\"txid\":\"314c12bcc014a6dba4bf86e8623f50745692931861dab7e64c729e6254bd422a\",\"vout\":0}]" "{\"mzUQE1RewdmyXERGSHpod3rFFtQuaH4ELZ\":1.05955696,\"mpgQEb9ZEhR7PGMaDS344vch1StQUjaZD8\":0.30000000,\"mmmAb9Cmz5pGFMFzexqSZoMtuW4unnQjBU\":0.60000000,\"n2H7WowwnzPTZ3t3QYCvzA2vvQoSexB4T1\":0.05000000}" 0 true
    020000000243217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec330000000000fdffffff2a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c310000000000fdffffff0470c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000

    # bin/bitcoin-cli -testnet signrawtransaction 020000000243217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec330000000000fdffffff2a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c310000000000fdffffff0470c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000
    {
      "hex": "020000000243217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec33000000006a47304402203df82b797fb70c4b6945f7fe64c6313f9d5bc8b0a3fa9f85c73eaa1302b2745e0220556808117806164d955498f9b50d6d3c39e0ae4511f2042bb9da2d81f523b5df012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff2a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c31000000006a473044022041dd569d64dd0da3fdb440afa36bd831f9e14686805fc9c926ed0f640a4c346d02205a6a1d8548b7bc6bb1b68fb218daa7098a2872c057108626e4872b1c3eec9704012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff0470c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000",
      "complete": true
    }

    # bin/bitcoin-cli -testnet decoderawtransaction 020000000243217287c513aaf035c153c571c6a0df15edbe5621944074390eb37da2d9ec33000000006a47304402203df82b797fb70c4b6945f7fe64c6313f9d5bc8b0a3fa9f85c73eaa1302b2745e0220556808117806164d955498f9b50d6d3c39e0ae4511f2042bb9da2d81f523b5df012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff2a42bd54629e724ce6b7da611893925674503f62e886bfa4dba614c0bc124c31000000006a473044022041dd569d64dd0da3fdb440afa36bd831f9e14686805fc9c926ed0f640a4c346d02205a6a1d8548b7bc6bb1b68fb218daa7098a2872c057108626e4872b1c3eec9704012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3efdffffff0470c15006000000001976a914cfeec998872d7328e29347a5b613049587d11c4488ac80c3c901000000001976a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac00879303000000001976a9144480d7591cb632851816b909a5000f35ec9ba2e788ac404b4c00000000001976a914e3bc83b045df3da03fbb06465388e45736d198b088ac00000000

    {
      "txid": "76f4c981d1f1f03bf108b86c9ac4ed6992d5a7bc2c7e12a336bf00fdca25cc59",
      "hash": "76f4c981d1f1f03bf108b86c9ac4ed6992d5a7bc2c7e12a336bf00fdca25cc59",
      "version": 2,
      "size": 440,
      "vsize": 440,
      "locktime": 0,
      "vin": [
        {
          "txid": "33ecd9a27db30e397440942156beed15dfa0c671c553c135f0aa13c587722143",
          "vout": 0,
          "scriptSig": {
            "asm": "304402203df82b797fb70c4b6945f7fe64c6313f9d5bc8b0a3fa9f85c73eaa1302b2745e0220556808117806164d955498f9b50d6d3c39e0ae4511f2042bb9da2d81f523b5df[ALL] 03132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e",
            "hex": "47304402203df82b797fb70c4b6945f7fe64c6313f9d5bc8b0a3fa9f85c73eaa1302b2745e0220556808117806164d955498f9b50d6d3c39e0ae4511f2042bb9da2d81f523b5df012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e"
          },
          "sequence": 4294967293
        },
        {
          "txid": "314c12bcc014a6dba4bf86e8623f50745692931861dab7e64c729e6254bd422a",
          "vout": 0,
          "scriptSig": {
            "asm": "3044022041dd569d64dd0da3fdb440afa36bd831f9e14686805fc9c926ed0f640a4c346d02205a6a1d8548b7bc6bb1b68fb218daa7098a2872c057108626e4872b1c3eec9704[ALL] 03132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e",
            "hex": "473044022041dd569d64dd0da3fdb440afa36bd831f9e14686805fc9c926ed0f640a4c346d02205a6a1d8548b7bc6bb1b68fb218daa7098a2872c057108626e4872b1c3eec9704012103132c1d6a4ea27d03e6c0f6627eb55654d748087aac09bb838c31926597aebd3e"
          },
          "sequence": 4294967293
        }
      ],
      "vout": [
        {
          "value": 1.05955696,
          "n": 0,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 cfeec998872d7328e29347a5b613049587d11c44 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a914cfeec998872d7328e29347a5b613049587d11c4488ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "mzUQE1RewdmyXERGSHpod3rFFtQuaH4ELZ"
            ]
          }
        },
        {
          "value": 0.30000000,
          "n": 1,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 64828790f0ea411e61970f3f13ce36f394c1fc24 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a91464828790f0ea411e61970f3f13ce36f394c1fc2488ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "mpgQEb9ZEhR7PGMaDS344vch1StQUjaZD8"
            ]
          }
        },
        {
          "value": 0.60000000,
          "n": 2,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 4480d7591cb632851816b909a5000f35ec9ba2e7 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a9144480d7591cb632851816b909a5000f35ec9ba2e788ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "mmmAb9Cmz5pGFMFzexqSZoMtuW4unnQjBU"
            ]
          }
        },
        {
          "value": 0.05000000,
          "n": 3,
          "scriptPubKey": {
            "asm": "OP_DUP OP_HASH160 e3bc83b045df3da03fbb06465388e45736d198b0 OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a914e3bc83b045df3da03fbb06465388e45736d198b088ac",
            "reqSigs": 1,
            "type": "pubkeyhash",
            "addresses": [
              "n2H7WowwnzPTZ3t3QYCvzA2vvQoSexB4T1"
            ]
          }
        }
      ]
    }

    Nesse exemplo os ganhos foram bem pequenos (~ 3%) pois cada endereço tinha apenas uma input, parte do que quero com esse experimento é verificar como será o resultado com transações reais, além de verificar como isso escala com mais transações sendo adicionadas.

    Agradeço a quem quiser participar,
    Abraço,
    Adriano

    --
Page 4
Viewing Page: 5