Estoy tratando de familiarizarme con ethereum. Así que estaba revisando un repositorio e intenté descifrar el código:
function transferFundOnResolve(uint cid) private {
// Could also be used: complainMap[cid]._status == Status.Resolved &&
if(complainMap[cid]._reward > 0) {
if(policeAccounts[complainSolver[cid]] != true) {
complainSolver[cid].transfer( complainMap[cid]._reward );
complainMap[cid]._reward = 0;
}
else {
for(uint i=0; i<complainMap[cid]._contributors.length; i++) {
complainMap[cid]._contributors[i].transfer( complainMap[cid]._contAmount[i] );
}
complainMap[cid]._reward = 0;
}
}
}
Como dice TypeError: "enviar" y "transferir" solo están disponibles para objetos de tipo "dirección a pagar", no "dirección".
Así que modifiqué y agregué payable() como:
function transferFundOnResolve(uint cid) private {
// Could also be used: complainMap[cid]._status == Status.Resolved &&
if(complainMap[cid]._reward > 0) {
if(policeAccounts[complainSolver[cid]] != true) {
complainSolver[cid].transfer( payable(complainMap[cid]._reward) );
complainMap[cid]._reward = 0;
}
else {
for(uint i=0; i<complainMap[cid]._contributors.length; i++) {
complainMap[cid]._contributors[i].transfer( payable(complainMap[cid]._contAmount[i]) );
}
complainMap[cid]._reward = 0;
}
}
}
Ahora dice: ParserError: expresión primaria esperada.
¿Cómo debo resolver esto?
tengo pragma solidez ^0.5.16;
La razón por la que recibió ese error es porque no hay un nombre de función pagadero que tome un valor entero y devuelva una dirección pagadera. El analizador no lo reconoce y le da un error como ese.
No conozco su estructura de mapa de quejas, pero puedo suponer que contiene una variable de contribuyente y su tipo es la dirección. En la versión de solidity superior a 0.5.0, agregan una dirección de pago (puede ver más aquí: ¿ Cuál es la diferencia entre 'dirección' y 'dirección de pago'? ). La función de transferencia solo se puede usar en la dirección de pago, no en la dirección, por lo que la solución es cambiar el tipo variable de contribuyente de la dirección a la dirección de pago o convertirla en la dirección de pago.
Agregue esto en su truffle-config.js
Solc versión: 0.6.0 y superior admitirá pagos (dirección)
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks: {
development: {
host: "localhost",
port: 7545,
network_id: "5777",
gas: 4600000
}
},
compilers: {
solc: {
version: "0.6.0", // Fetch exact version from solc-bin (default: truffle's version)
}
},
};
En tu contrato .sol utiliza:pragma solidity ^0.6.0;
Masud jt