Tengo una variable number
en mi contrato de Solidity que cambia y necesito incorporar esto en una consulta oraclize. Mi consulta oraclize se parece a lo siguiente:
oraclize_query(60, "URL", "json(https://api.random.org/json-rpc/1/invoke).result.random.data.0", '\n{"jsonrpc":"2.0","method":"generateIntegers","params":{"apiKey":${[decrypt]BF8gEz7O4gvAdzdJK/FTWHheGo3TuV5VIFku1rAEG78AxzX6AFEbWJSLZ0sCdEwGzppPsPltUXvIvxNaV5Yvnh3qfmzndRy/nfGjlWESfvNL3S1Fl4y2zqGmGi9DA4D+UokY83Awrw6tZd918KtRAvKe2Bos},"n":1,"min":0,"max":10,"replacement":true,"base":10},"id":1}');
Quiero que el valor de max
en lo anterior oraclize_query
sea number - 1
(en lugar de 10).
¿Cuál es la forma más sencilla de hacer esto? Me di cuenta de esta pregunta Cómo poner una variable dentro de una cadena en solidez, pero la respuesta no está del todo clara para mí (obtengo muchos errores al copiar/pegar ese código y no estoy seguro de cómo se debe implementar).
Intenté usar la strConcat
función en el contrato de Oraclize (línea 601 en https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.4.sol ) convirtiendo mi number
uint en bytes32 y luego una cadena, luego poniendo todo junto, así:
string string1 = '\n{"jsonrpc":"2.0","method":"generateIntegers","params":{"apiKey":${[decrypt]BF8gEz7O4gvAdzdJK/FTWHheGo3TuV5VIFku1rAEG78AxzX6AFEbWJSLZ0sCdEwGzppPsPltUXvIvxNaV5Yvnh3qfmzndRy/nfGjlWESfvNL3S1Fl4y2zqGmGi9DA4D+UokY83Awrw6tZd918KtRAvKe2Bos},"n":1,"min":0,"max":';
string string3 = ',"replacement":true,"base":10},"id":1}';
function update() payable {
bytes32 data = bytes32(number - 1);
strConcat(string1, bytes32ToString(data), string3);
oraclize_query(60, "URL", "json(https://api.random.org/json-rpc/1/invoke).result.random.data.0", strConcat(string1, bytes32ToString(data2), string3));
Esto no funciona (entonces no se llama a oraclize).
Marco de Oracle aquí. Debe utilizar la función uint2string para convertir un número en una cadena.
oraclize_query(60, "URL", "json(https://api.random.org/json-rpc/1/invoke).result.random.data.0", strConcat(string1, uint2str(5), string3));