Shonminh / DailyBook

develop knowledge, such as blockchain, java, go, web, etc.
MIT License
1 stars 0 forks source link

oraclize使用相关注意事项 #11

Open Shonminh opened 6 years ago

Shonminh commented 6 years ago
uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
Shonminh commented 6 years ago

整理一下oraclize 在ganache-cli使用时的注意事项。

Shonminh commented 6 years ago

使用encrypted_queries_tools.py对oraclize的api_key进行encrypt,注意只需对raw key string进行encrypt, 不需要包含双引号,在智能合约中书写时,在encrypted string附近增加转义的双引号。 encrypt api key:

python encrypted_queries_tools.py -e -p 044992e9473b7d90ca54d2886c7addd14a61109af202f1c95e218b0c99eb060c7134c4ae46345d0383ac996185762f04997d6fd6c393c86e4325c469741e64eca9 <YOUR_API_KEY>

注明:第一个入参是oraclize的public key是指定的,具体可以去官方doc查找。 智能合约中书写的格式大致如下:

bytes32 myid =
      oraclize_query(
        "nested",
          "[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\"jsonrpc\":\"2.0\",\"method\":\"generateSignedIntegers\",\"params\":{\"apiKey\":\"${[decrypt] BCRIzsoFs/B9JoRMSHqhn3yFcukTtuzAdabwTQEgCaxkHgyBXpMO+68RE1ud2/A6bU5uV6IMnDJ8jvCTumW4wI0W5onBAAyLdUuDZaUdXHg0ACXDxB8gqruqiZfQXKQHqHsGIolkgie+gHNb9+h1VDw/e+0S}\",\"n\":1,\"min\":1,\"max\":10000${[identity] \"}\"},\"id\":1${[identity] \"}\"}']",
        ORACLIZE_GAS_LIMIT + safeGas
      );

上述方法是使用random.org的json-rpc接口去获取1~10000以内的随机数。返回值myid是一个oracleize返回的一个唯一性id,表示当前调用的id。

获取随机数是在__callback函数里面获取的。

function __callback(bytes32 myid, string result, bytes proof){
 uint numberRolled = parseInt(result);
}

在本地使用ganache进行测试的时候,需要和外接的oraclize进行通信,需要借助ethereum-bridge工具进行桥接。 使用如下命令:

node ethereum-bridge -H localhost:8545 -a 1 --account 0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475 --dev

其中0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475表示oraclize的OraclizeAddrResolverI的地址,当然需要再智能合约中也要指定对应的OraclizeAddrResolverI地址。

OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);