solidity:外部合约调⽤实例
背景:
在Oracle合约中完成存取操作
在OracleUser中调⽤Oracle进⾏存储操作
后⾯调⽤Oracle中的reply实现对OracleUser的回调
调⽤关系图:
源代码:
pragma solidity ^0.4.11;
contract Oracle{
struct Request{
string data;
function(string memory) external callback;
}
Request[] requests;
event NewRequest(uint);
function insert(string data,
function(string memory) external callback)
public
{
requests.push(Request(data, callback));
NewRequest(requests.length -1);
}
function reply(uint requestID)public{
// check that the reply comes from a trusted source
requests[requestID].callback(requests[requestID].data); }
solidityfunction len()public returns(uint){
return requests.length -1;
}
}
contract OracleUser{
Oracle public oracle ;
string public respoins;
function setoracle(address addr)public{
oracle =Oracle(addr);
}
function buySomething(){
oracle.insert("USD",acleResponse);
}
function oracleResponse(string response)public{
require(msg.sender ==address(oracle));
// Use the data
respoins = response;
}
}
实验步骤和结果:
User.setOracle
User.buySomething ( -> Oralce.insert)
spoins
经过⼀系统操作,将USD从User扔到Oracle,⼜从Oracle上抓了下来hhh
总结:
不做过多解释了,调⽤图也⽐较清晰
总体⽽⾔,就是两个合约间互相进⾏外部函数调⽤吧