我正在尝试创建一对契约,比如C1和C2。我想在可支付函数if...else of C2中添加一个bool,当从C1调用send()时,它可以处理ContractC1返回的D1值。
我怎么能做到呢?
也许这个代码片段有助于更好地理解它。
contract target.sol{
bool private flag=false;
function set0(int val) public returns(bool){
if (val % 10 == 0) {flag0 = true;}
}
function transact() public returns(bool){
if(!flag){
// heavy computation
}
else{
// light computation
}
}
}
contract attacker(){
function() public payable {
if(flag == true){
// Do some heavy computation to generate uncomplete send
}
else {
// Do some light computation to let send pass
}
}
}这里,我想从contract attacker向contract target发送一个事务,其中包含消息中的bool值,这样当控制落在contract attacker的应付款函数上时,它会检查bool值,如果true,计算量较大的部分被执行,否则会更轻。
希望这有助于描述。
Note:我控制着 target contract only。我不能从 attacker contract**.**运行任何函数
发布于 2019-05-24 04:43:52
很难从你的描述中看出,但也许你想要这样的东西?在这里,C1将乙醚发送给C2,然后C2调用C1读取布尔值。
contract C1 {
function pay(address whoToPay) external payable {
require(whoToPay.send(msg.value)); // just because you said "send" instead of "transfer"
// for gas reasons, you may instead need to use whoToPay.call.value(msg.value)("")
}
function getBoolValue() external pure returns (bool) {
return true;
}
}
contract C2 {
function() external payable {
if (C1(msg.sender).getBoolValue()) { ... }
}
}如果这不是你的意思,请改进你的问题。
https://ethereum.stackexchange.com/questions/71060
复制相似问题