Esta es mi función de lanzamiento aéreo:
mapping (address => bool) public airdrops;
function airdropTokens(address[] _recipient, uint256[] _tokens) public onlyOwner{
uint airdropped;
for(uint256 i = 0; i< _recipient.length; i++)
{
airdrops[_recipient[i]] = true;
require(token.transferFrom(msg.sender, _recipient[i], _tokens[i] * decimalFactor));
airdropped = airdropped.add(_tokens[i] * decimalFactor);
}
}
¿Cuál debería ser el límite de gas óptimo y el precio del gas para esto? Inicialmente usé gasPrice = 50000000000 y gasLimit = 4500000, lo que da como resultado $47,27. ¿Esto es normal? Logré enviar con éxito un lote de 20 direcciones a 3.5 GWEI / 2500000 Límite de gas ver: Airdrop a 20 transacciones de direcciones
Pero para otro lote de 80 direcciones, falló en el límite de gas de 4 GWEI / 4500000, vea el enlace aquí . ¿Alguna idea sobre cómo administrar mejor el gas? Si tuviera que enviar los 350 lotes más a los precios recomendados, ¡me costaría alrededor de £ 16k!
PD: actualmente, cada transacción de airdrop envía tokens a 80 direcciones a la vez.
Aquí hay algunos consejos:
public
el modificador con external
en su contrato. Aquí está el por qué
fariha abbasi
ismael
airdrops[_recipient[i]] = true;
, paga 20k de gasolina para almacenar un solo bit. De la transacción exitosa, usa alrededor de 125k de gas por transferencia de token, lo que parece un poco alto. Echaría un vistazo a optimizar transferFrom.fariha abbasi
ismael
airdrops
nunca se vuelve a usar, pero si lo usa en otra función, debe conservarlo. Números de redondeo 20k x 80 = 1600k = 1,6 m.