Enviando el bool a ```function() payable``` en otro contrato

Estoy tratando de crear un par de contratos, digamos C1 y C2. Quiero agregar un if...else en la función de pago function() public payable{}de C2, que funciona con el boolvalor devuelto por el contrato C1, cuando send()se llama desde C1.

¿Cómo podré hacerlo?

Tal vez este fragmento de código ayude en algún lugar a entenderlo mejor

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
        }
    }

}

Aquí quiero enviar una transacción a contract attackerfrom contract target, con un valor bool en el mensaje, de modo que cuando el control llegue a la función pagadera de contract attacker, verifique el valor bool, si truese ejecuta la parte computacionalmente pesada, de lo contrario, una más ligera obtiene.

Espero que ayude con la descripción.

target contractNota: solo tengo control sobre . No puedo ejecutar ninguna función desde attacker contract.

Lo siento, no entiendo la pregunta. ¿Qué quieres decir con "funciona en el valor bool"? Puede pasar cualquier valor de un contrato a otro llamando a alguna función, si lo desea
@LauriPeltonen, en resumen, quiero que esté ahí de todos modos, puedo usarlo send()para pasar algún valor bool (verdadero/falso) a la función pagadera de C2. Para que pueda usar ese valor bool para hacer a Computationally heavy transaction and eventually fail the transactiono perform a light transaction for a successful transaction. Espero que ayude.

Respuestas (1)

Es difícil decirlo a partir de su descripción, pero tal vez quiera algo como esto. Aquí, C1 envía éter a C2 y C2 vuelve a llamar a C1 para leer un valor booleano.

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()) { ... }
    }
}

Si esto no es lo que quisiste decir, por favor mejora tu pregunta.

Hola, @smarx. Espero que la descripción agregada ayude más a comprender la pregunta.
en resumen, lo que quiero está ahí de todos modos, puedo usarlo send()para pasar algún valor booleano (verdadero/falso) a la función de pago de C2. Para que pueda usar ese valor bool para hacer a Computationally heavy transaction and eventually fail the transactiono perform a light transaction for a successful transaction.