Función de contrato de llamada Ethereum-PHP con parámetro

No soy el autor de la parte de Ethereum, pero tengo que conectarme usando php. Paquete Ethereum-PHP elegido ( https://github.com/digitaldonkey/ethereum-php ). Tiene conexión a ethereum y contrato inteligente, pero no puede ejecutar la función de contrato inteligente con el parámetro correctamente. Tengo contrato de esquema y prueba de función ():

 function test(uint value) public returns(uint) {
return value*2;
 }

y ABI:

...
{"constant":false,"inputs":[{"name":"value","type":"uint256"}],
"name":"test","outputs":
[{"name":"","type":"uint256"}],
"payable":false,"stateMutability":"nonpayable","type":"function"}
...

Ahora en php tengo:

  $eth = new Ethereum('https://kovan.infura.io/<unique address>');
  $schemaContract = new SmartContract($abi, '<contract address>', $eth);

  // Call a function with result : 2
  $result = $schemaContract->test(1)->Val();

No puedo recibir el resultado. No sé exactamente cómo lograr esto. Probé muchas opciones diferentes como:

$result = $schemaContract->test(1);
$result = $schemaContract->test('1');
$result = $schemaContract->test(1);
$result = $schemaContract->__call('test',1);

Pero siempre recibía algunos mensajes de error.

¿Qué estoy haciendo mal?

Saludos, T.B.

Veo un enfoque interesante en su código: el contrato "conoce" su tipo de datos, por lo que podría convertirlo por usted. Tal vez algún día agregue un contrato que sea capaz de hacer lo que quiera, pero por ahora la respuesta a continuación es la solución.

Respuestas (1)

Comprobando las pruebas unitarias que encontré

public function testSimpleContract()
{
    $number = 2;
    $result = $this->contract->multiplyWithSeven(
        new EthQ($number, ['abi'=> 'uint256'])
    );
    $this->assertEquals($number*7, $result->val());
}

Probablemente funcionaría si haces esto

$result = $schemaContract->test(
    new EthQ(1, ['abi' => 'uint256'])
);
echo $result->val();
Muchas gracias. Está funcionando ahora. No sabía que era necesario especificar el tipo de datos. ¿Puede darme también consejos sobre cómo obtener algunos valores de devolución? `Función producto (uint32 _prdId) devoluciones de vista pública (uint32 prdId, cadena prdName, dirección prd, uint closeTime, uint promoTime, uint8 bonus, uint256 price, uint8 numberOfOptions, uint256 totalSupply , uint8 estado, uint32 siguiente)'
No tengo experiencia con esta biblioteca. Haz otra pregunta, probablemente alguien más pueda ayudarte, o tendré algo de tiempo para intentarlo. Será más fácil de entender si está correctamente formateado.