I have a variable number
in my Solidity contract which changes and I need to incorporate this into an oraclize query. My oraclize query looks like the following:
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}');
I want the value of max
in the above oraclize_query
to be number - 1
(instead of 10).
What is the simplest way to do this? I noticed this question How to put a variable inside a string in solidity but the answer is not at all clear to me (I get a lot of errors copy/pasting that code and am not sure how it is meant to be implemented).
I tried using the strConcat
function in the Oraclize contract (line 601 at https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.4.sol) by converting my number
uint into bytes32 and then a string, then putting it all together, like this:
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));
This doesn't work (oraclize doesn't get called at all then).