No puedo usar Metamask con mi contrato inteligente

No puedo llamar a mi contrato inteligente en Metamask sobre Ganache.

Estos fueron los pasos que tomé:

  • desarrolló el contrato
  • probado con éxito usandotruffle test
  • configurar una red Ganache y migrar el contrato a la red
  • en Metamask, conectado a la red privada de Ganache y una de las cuentas mediante clave privada
  • Luego procedió a realizar un pago desde la cuenta de 5 eth y utilizando otra cuenta como "datos de transacción" en Metamask (ver más abajo: el contrato de pago espera una sola dirección como argumento)

Este es el error que estoy recibiendo:

ingrese la descripción de la imagen aquí

Así es como llamé al contrato:

ingrese la descripción de la imagen aquí

Pay.sol

pragma solidity ^0.4.17;

/// @title Pay - Facilitates payments.
contract Pay {
    event Payment(
        address _from,
        address _to,
        uint amount
    );

    /// @dev Makes a payment.
    /// @param _to Address to pay to.
    function pay(address _to) public payable {
        require(msg.value > 0);
        _to.transfer(msg.value);
        Payment(msg.sender, _to, msg.value);
    }
}

2_pay_migration.js

var Pay = artifacts.require("Pay");

module.exports = function(deployer) {
    deployer.deploy(Pay);
}
Agregue los datos completos de la transacción incluidos con la transacción. ABI también ayuda

Respuestas (1)

Así no es como funcionan los datos de transacciones. Lo correcto dataserían los primeros cuatro bytes del hash keccak256 de "pay(address)" seguidos de la dirección, con relleno izquierdo para tener 32 bytes de ancho. Como puede imaginar, es inusual construir esa carga útil a mano. :-)

Gracias, pude hacer esto con myetherwallet + Metamask.