Solidity
在 Oraclize 查詢中使用變數的最簡單方法是什麼?
我的 Solidity 契約中有一個變數
number
發生了變化,我需要將其合併到 oraclize 查詢中。我的 oraclize 查詢如下所示: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}');
我希望
max
上面的值oraclize_query
是number - 1
(而不是 10)。最簡單的方法是什麼?我注意到這個問題How to put a variable inside a string in solidity,但我並不清楚答案(我在複製/粘貼該程式碼時遇到很多錯誤,並且不確定它是如何實現的)。
我嘗試通過將我的uint 轉換為
strConcat
bytes32然後是字元串,然後將這一切都在一起,像這樣:number
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));
這不起作用(那時根本不會呼叫 oraclize)。
來自 Oraclize 的 Marco 在這裡。您應該使用函式 uint2string 將數字轉換為字元串。
oraclize_query(60, "URL", "json(https://api.random.org/json-rpc/1/invoke).result.random.data.0", strConcat(string1, uint2str(5), string3));