¿Cómo verificar el seguimiento de la VM usando Geth?

¿Cómo verificar el seguimiento de la VM usando Geth?

He ejecutado geth con --verbosity 6, y se registran cosas como esta:

I0525 01:26:12.418607 core/vm/vm.go:157] running byte VM b82addc7
I0525 01:26:12.419818 core/vm/vm.go:160] byte VM b82addc7 done. time: 1.196171ms instrc: 539
I0525 01:26:12.419852 core/state_transition.go:258] VM call err: Out of gas

Pero ese no es el rastro de VM, ¿lo tomo?

Respuestas (1)

En las versiones recientes de geth, puede usar la debug.traceTransaction(txid)llamada para rastrear su transacción.

Por ejemplo, aquí hay una transacción que envía algunos éteres al contrato DAO:

> debug.traceTransaction("0x8e5b38db03e0941677ba65275d78fe18df999c11a7be1921831082121ae73390")
...
}, {
  depth: 1,
  error: "",
  gas: 96943,
  gasCost: 3,
  memory: ["000000000000000000000000b50a06ffe68c746fee498147481767f32ce16ea4", "0000000000000000000000000000000000000000000000000000000000000013", "0000000000000000000000000000000000000000000000000000000000000060", "0000000000000000000000000000000000000000000000000000000000000001"],
  op: "SWAP1",
  pc: 2422,
  stack: ["00000000000000000000000000000000000000000000000000000000baac5300", "0000000000000000000000000000000000000000000000000000000000000060", "0000000000000000000000000000000000000000000000000000000000000020"],
  storage: {
    0000000000000000000000000000000000000000000000000000000000000016: "000000000000000000000000000000000000000000096d2c34d6cb6b944ab9e8",
    8913b768e65415e14d5815e774a6dc351fe0f40ad272540c08c8e6a86fa6ae77: "00000000000000000000000000000000000000000000000402bf8582bb468000",
    eb8d4c8dfc1d31afefdf4361baf3da7164a6863a3e14531b2faef246b93c97bb: "000000000000000000000000000000000000000000000002ac7fae5727845554"
  }
}, {
  depth: 1,
  error: "",
  gas: 96943,
  gasCost: 0,
  memory: ["000000000000000000000000b50a06ffe68c746fee498147481767f32ce16ea4", "0000000000000000000000000000000000000000000000000000000000000013", "0000000000000000000000000000000000000000000000000000000000000060", "0000000000000000000000000000000000000000000000000000000000000001"],
  op: "RETURN",
  pc: 2423,
  stack: ["00000000000000000000000000000000000000000000000000000000baac5300", "0000000000000000000000000000000000000000000000000000000000000020", "0000000000000000000000000000000000000000000000000000000000000060"],
  storage: {
    0000000000000000000000000000000000000000000000000000000000000016: "000000000000000000000000000000000000000000096d2c34d6cb6b944ab9e8",
    8913b768e65415e14d5815e774a6dc351fe0f40ad272540c08c8e6a86fa6ae77: "00000000000000000000000000000000000000000000000402bf8582bb468000",
    eb8d4c8dfc1d31afefdf4361baf3da7164a6863a3e14531b2faef246b93c97bb: "000000000000000000000000000000000000000000000002ac7fae5727845554"
  }
}]

Puede ver la misma información de rastreo en la pestaña VM-Trace en https://live.ether.camp .

EDITAR: encontrará más funciones de depuración en las API de administración , que incluyen:

Hola, ejecuto este comando dentro de mi gethconsola, pero me muestra Error: transaction 8e5b38db03e0941677ba65275d78fe18df999c11a7be1921831082121ae73390 not found. ¿Me perdí algo aquí? Gracias.
@The OfficiousBokkyPooBah, ¿esto requiere un nodo de archivo completo?
Si no se encuentra la transacción, es posible que el nodo no tenga los datos que necesita, según el modo (archivo, completo, rápido, ligero): consulte: geth.ethereum.org/docs/dapp/tracing