Solidity

在 Oraclize 查詢中使用變數的最簡單方法是什麼?

  • October 17, 2017

我的 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_querynumber - 1(而不是 10)。

最簡單的方法是什麼?我注意到這個問題How to put a variable inside a string in solidity,但我並不清楚答案(我在複製/粘貼該程式碼時遇到很多錯誤,並且不確定它是如何實現的)。

我嘗試通過將我的uint 轉換為strConcatbytes32然後是字元串,然後將這一切都在一起,像這樣: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));

引用自:https://ethereum.stackexchange.com/questions/28641