Votación del Network Steward

Creemos que es un hecho universal que cualquier autoridad sin rendir cuentas, sin importar cuán benevolente sea, eventualmente caerá víctima de la corrupción, la ineficiencia o simplemente no podrá innovar. Por esta razón, hemos incorporado en la solución de la blockchain de PKT un mecanismo en caso de que el network steward no cumpla con su función. Cada poseedor de PKT tiene la capacidad de emitir un voto para destituir al network steward y permitir que uno nuevo tome su lugar. La destitución no es un evento insignificante, requiere al menos el 50% del total de PKT en existencia para votar explícitamente a favor de que ocurra. Sin embargo, si ocurre, lo que sigue es un recuento automático de votos y el network steward cambia.

Network Steward

Cómo funciona la votación

Un voto consta de dos partes: Voto a Favor y Voto en Contra. Voto en Contra es un voto para destitución, mientras que Voto a Favor es un voto para determinar quién debería convertirse en network steward en caso de destitución.

Un network steward se representa como un script de salida de transacción en lugar de una clave codificada en el script. Una forma sencilla de obtener el script para una dirección dada es enviarle algo de dinero y luego explorar la transacción en bruto y copiar la salida.

Al explorar una transacción de coinbase, podemos ver la salida que se paga al network steward https://explorer.pkt.cash/address/ y el script de esta salida es 0020d5c1005c0d4012d3ae2672319e7f9eb15a57516aeefabbbc062265f67e308f2

$ ./bin/pktctl getrawtransaction 505d2750577a3d3c739c2a650ec0e03a7ddb1f81080c820ab1a317575020745b 1
{
  "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff10022913000b2f503253482f706b74642fffffffff03cac2a6ee0000000
01976a9147d9df4279212fd7def4c47abf2d5f3a6c6eaf4ae88ac362f5f3b00000000220020d5c1005c0d4012d3ae2672319e7f9eb15a57516aeefabbbc062265f67e308f2b000000000000
0000326a3009f91102ffff7f20c70542e4ca2363ce0149e845305f25564e7ce81e33411ad570df0f56f387462021cd01000000000000000000",
  "txid": "505d2750577a3d3c739c2a650ec0e03a7ddb1f81080c820ab1a317575020745b",
  "hash": "505d2750577a3d3c739c2a650ec0e03a7ddb1f81080c820ab1a317575020745b",
  "size": 203,
  "vsize": 203,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "coinbase": "022913000b2f503253482f706b74642f",
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 40.0390625,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 7d9df4279212fd7def4c47abf2d5f3a6c6eaf4ae OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a9147d9df4279212fd7def4c47abf2d5f3a6c6eaf4ae88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "pGzmtW4Q2v4AWHcX8TYGqG5c1Eh5Ykg6fX"
        ]
      }
    },
    {
      "value": 9.9609375,
      "n": 1,
      "scriptPubKey": {
        "asm": "0 d5c1005c0d4012d3ae2672319e7f9eb15a57516aeefabbbc062265f67e308f2b",
        "hex": "0020d5c1005c0d4012d3ae2672319e7f9eb15a57516aeefabbbc062265f67e308f2b",
        "reqSigs": 1,
        "type": "witness_v0_scripthash",
        "addresses": [
          "pkt1q6hqsqhqdgqfd8t3xwgceulu7k9d9w5t2amath0qxyfjlvl3s3u4sjza2g2"
        ]
      }
    },
    {
      "value": 0,
      "n": 2,
      "scriptPubKey": {
        "asm": "OP_RETURN 09f91102ffff7f20c70542e4ca2363ce0149e845305f25564e7ce81e33411ad570df0f56f387462021cd010000000000",
        "hex": "6a3009f91102ffff7f20c70542e4ca2363ce0149e845305f25564e7ce81e33411ad570df0f56f387462021cd010000000000",
        "type": "nulldata"
      }
    }
  ],
  "blockhash": "c77d9026867de1455e573eb47bd3322548fd537b29ed9296a004a00f43d1da18",
  "confirmations": 3,
  "time": 1566221646,
  "blocktime": 1566221646
}

Si verificamos nuevamente consultando pktd para averiguar cuál es el network steward, veremos que muestra el script al que se le pagó.

$ ./bin/pktctl getnetworksteward
{
  "script": "0020d5c1005c0d4012d3ae2672319e7f9eb15a57516aeefabbbc062265f67e308f2b",
  "votesagainst": 0,
  "totalpossible": 21985819476623360
}

Así que si quisiéramos, por ejemplo, cambiar el network steward a https://explorer.pkt.cash/address/pGzmtW4Q2v4AWHcX8TYGqG5c1Eh5Ykg6fX , quisiéramos votar por el script correspondiente 76a9147d9df4279212fd7def4c47abf2d5f3a6c6eaf4ae88ac, y, por supuesto, probablemente quisiéramos votar en contra del network steward actual también.

Cómo votar

La votación se realiza configurando tu billetera para votar; cada vez que gastes dinero, tu billetera incluirá un voto en cada pago futuro de PKT que realices. Si deseas acelerar el proceso de votación, puedes configurar tu billetera para votar y luego transferir todo tu PKT a otra billetera para asegurarte de que todos estén votando.

Para configurar tu billetera para votar a favor de https://explorer.pkt.cash/address/pGzmtW4Q2v4AWHcX8TYGqG5c1Eh5Ykg6fX y en contra de https://explorer.pkt.cash/address, debes seguir el siguiente flujo de trabajo:

$ ./bin/pktctl --wallet getnetworkstewardvote
{}
$ ./bin/pktctl --wallet setnetworkstewardvote default 76a9147d9df4279212fd7def4c47abf2d5f3a6c6eaf4ae88ac 0020d5c1005c0d4012d3ae2672319e7f
9eb15a57516aeefabbbc062265f67e308f2b
{}
$ ./bin/pktctl --wallet getnetworkstewardvote
{
  "votefor": "76a9147d9df4279212fd7def4c47abf2d5f3a6c6eaf4ae88ac",
  "voteagainst": "0020d5c1005c0d4012d3ae2672319e7f9eb15a57516aeefabbbc062265f67e308f2b"
}