Open Shonminh opened 6 years ago
整理一下oraclize 在ganache-cli使用时的注意事项。
使用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);