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 bool
valor 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 attacker
from 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 true
se ejecuta la parte computacionalmente pesada, de lo contrario, una más ligera obtiene.
Espero que ayude con la descripción.
target contract
Nota: solo tengo control sobre . No puedo ejecutar ninguna función desde attacker contract
.
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.
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 transaction
o perform a light transaction for a successful transaction
.
Lauri Peltonen
Aman Pandey
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 aComputationally heavy transaction and eventually fail the transaction
operform a light transaction for a successful transaction
. Espero que ayude.