1703878320
为了向Oraclize发送一个查询,需要调用oraclize_query函数。这个函数至少需要两个实参,即数据源和给定数据源的输入值。数据源实参不区分大小写。
1703878321
1703878322
oraclize_query函数的一些基础示例如下:
1703878323
1703878324
1703878325
1703878326
1703878327
上述代码的执行过程如下:
1703878328
1703878329
·如果第一个实参是字符串,就假定它是数据源,第二个实参就假定为数据源的输入条件。在第一个调用中,数据源是WolframAlpha,我们向它发送的查询是0和100之间的随机数。
1703878330
1703878331
·在第二个调用中,向第二个实参中所示的URL发出HTTP GET请求。
1703878332
1703878333
·在第三个调用中,从IPFS获取QmdEJwJG1T9rzHvBD8i69HHuJaRgXRKEQCP7Bh1BVttZbU文件的内容。
1703878334
1703878335
·如果数据源之后的两个连续实参是字符串,就假定它是POST请求。在最后一个调用中,发出HTTP POST请求到https://xyz.io/makePayment进行支付。POST请求内容是第三个实参中的字符串。Oraclize十分智能,能够检测基于字符串格式的content-type标头。
1703878336
1703878337
3.预约查询
1703878338
1703878339
如果想让Oraclize在未来某一预订时间执行查询,就指定从当前时间算起的延迟(以秒计算)作为第一个实参。示例如下:
1703878340
1703878341
1703878342
1703878343
1703878344
Oraclize将在看到上述查询60s之后进行查询。所以,如果第一个实参是数字,就假定我们在预约查询。
1703878345
1703878346
4.自定义gas
1703878347
1703878348
就像其他任何交易一样,从Oraclize到_callback函数的交易要花费gas,即需要向Oraclize支付gas费用。Oraclize_query进行查询收取的以太币还用于在调用_callback函数时提供gas。调用_callback函数时,Oraclize默认提供200000个gas。
1703878349
1703878350
这个返回的gas费用实际上受用户控制,因为用户编写的_callback等方法中的代码可以预估费用。所以当用Oraclize进行查询时,还可以在_callback交易上指定gasLimit应当是多少。但需要注意的是,因为是由Oraclize发送交易,所以没有花费的gas将被返还给Oraclize,而非用户。
1703878351
1703878352
如果200000 gas(默认值,也是最小值)不够,可以指定一个更大的gasLimit,代码如下:
1703878353
1703878354
1703878355
1703878356
1703878357
可以看到,如果最后一个实参是数字,就假定它是自定义的gas。在程序代码中,Oraclize将对回调函数交易使用一个500000的gas上限,而非200000。因为我们让Oraclize提供gas,所以Oraclize在调用oraclize_query时将扣除更多以太币(根据需要多少gas)。
1703878358
1703878359
1703878360
注意:如果给出的gasLimit过小,且_callback方法很长,那么可能永远看不到回调函数。还应注意,自定义的gas一定要大于200000。
1703878361
1703878362
5.回调函数(callback function)
1703878363
1703878364
一旦结果准备好了,Oraclize将把交易发送回合约地址,并调用如下三个方法中的一个:
1703878365
1703878366
·对于每个查询来说,_callback(bytes32 myid,string result)“.”Myid都是一个独特的ID。这个ID由oraclize_query方法返回。如果合约里有多个oraclize_query调用,则将这用于匹配该结果的查询。
1703878367
1703878368
·如果需要TLSNortary的proof,则结果为_callback(bytes32 myid,string result,bytes proof)。
1703878369
[
上一页 ]
[ :1.70387832e+09 ]
[
下一页 ]