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
1703878370
·如果没有其他方法,回退函数是function()。
1703878371
1703878372
下面是_callback函数的一个例子:
1703878373
1703878374
1703878375
1703878376
1703878377
6.解析助手
1703878378
1703878379
HTTP请求返回的结果可以是HTML、JSON、XML或二进制等格式。在Solidity中,解析结果是很困难的,且代价很高。Oraclize提供了解析助手,在服务端上处理解析,最终得到的结果就是用户需要的那部分。
1703878380
1703878381
为了让Oraclize解析结果,用户需要把URL和下面某一个解析助手(Parsing helpers)“打包”:
1703878382
1703878383
·xml(..)和json(..)助手让Oraclize只返回部分JSON或者用XML解析的返回值,例如:
1703878384
1703878385
·为了得到全部返回值,使用带有api.kraken.com/0/public/Ticker?pair=ETHUSD URL实参的URL数据源。
1703878386
1703878387
·如果只想要最终价字段,需要使用JSON解析调用json(api.kraken.com/0/public/Ticker?pair=ETHUSD).result.XETHZUSD.c.0。
1703878388
1703878389
·html(..).xpath(..)助手用于HTML scraping,仅需指定想用作xpath(..)实参的XPATH,例如:
1703878390
1703878391
·为了抓取一个特定tweet的文本,使用html(https://twitter.com/oraclizeit/status/671316655893561344).xpath(//*[contains(@class,‘tweettext’)]/text())。
1703878392
1703878393
·binary(..)助手用于获得诸如证书文件的二进制文件,例如证书文件:
1703878394
1703878395
·为了抓取二进制文件的一部分,可以使用slice(offset,length)。其中第一个参数是位移,第二个参数是所需的slice长度(二者都用字节表示)。
1703878396
1703878397
·示例:从一个二进制CRL中只抓取开头300个字节,用binary(https://www.sk.ee/crls/esteid/esteid2015.crl).slice(0,300)。二进制助手必须和slice选项同时使用,且只接受二进制文件(不接受编译文件)。
1703878398
1703878399
1703878400
如果服务端不响应或连接不上,用户将收到一个空回应。可以在http://app.Oraclize.it/home/test_query测试查询。
1703878401
1703878402
7.获取查询价格
1703878403
[
上一页 ]
[ :1.703878354e+09 ]
[
下一页 ]