¿Cuál debería ser el límite de gas óptimo y el precio del gas para 80 direcciones airdrop?

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.

@Rob Hitchens B9lab ¿Puedes ver si eso es algo que puedes responder?
Un problema con su lanzamiento aéreo es que por cada destinatario con el que está consumiendo una ranura adicional 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.
el almacenamiento del registro del destinatario puede verse comprometido. ¿Sugieres que omitirlo me ayudará? ¿Cuánto cuesta la gasolina cree que ahorrará por transacción y por 80?
En su código, el mapeo airdropsnunca 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.

Respuestas (1)

Aquí hay algunos consejos:

  1. reemplace publicel modificador con externalen su contrato. Aquí está el por qué
  2. El gas no utilizado (límite) se le devuelve para que pueda poner tanto como sea posible. En el momento de escribir es alrededor de 6-7M.
  3. Puede poner precio de gasolina bajo (por ejemplo, 1 GWEI). Sin embargo, su transacción llevará algún tiempo. Puede estimarlo aquí: https://ethgasstation.info/
Gracias, dado que ya implementé el contrato en la red principal, ¿cuánto cree que agregará el primer punto? Si vale la pena mucho, voy a volver a implementar.
Creo que vale la pena volver a implementarlo, puedes experimentar con rinkeby para ver los beneficios. límite de gas no le ahorrará dinero. Si especifica un límite de gas demasiado bajo, simplemente se quemará. Si desea utilizar un contrato existente, solo puede reducir el precio del gas @FarihaAbbasi
Gracias, así que estoy mirando hacia la reimplementación del contrato con el uso de "externo" y luego, si uso un límite de gas de 4500000 y un precio de gas de 2 Gwei, ¿sugeriría que es una buena combinación para lanzamiento aéreo a 80 direcciones? Me encontré con la excepción "Sin gasolina" al transferir a 80 direcciones con 4 GWEI y 4500000 de límite de gasolina. Entonces, ¿piensas que no volveré a tener este problema?
Sin gasolina se debe a un límite de gas bajo. Cuando usa externo, debe ser más bajo. No puedo decirle el precio exacto que debe experimentar. Pondría 6M para estar seguro. Puede implementar una red de prueba para experimentar rinkeby.etherscan.io
Hice los cambios necesarios en el contrato, lo volví a implementar, usé un límite de gas de 4500000 y 1 Gwei en la red de prueba de ropsten, funcionó bien. En la red principal, mi transacción tomó más de 8-9 horas y finalmente cayó. ver enlace
Lo intenté dos veces más, con 5Gwei y 4Gwei, pero fallaron. ver enlace 5gwei enlace 4gwei
@FarihaAbbasi ok, déjame aclarar una vez más. Ingrese gasPrice: 1.5 GWEI, gasLimit: 6000000 (6M) e intente lanzar 100 cuentas desde el aire. La razón por la que quema la transacción no es por el precio del gas. Es porque el límite de gas. Cuando pone el límite de gas bajo y la transacción necesita más, simplemente quema todo su gas. Mejor pon más, lo que queda te lo devuelven. El precio del gas solo influye en la rapidez con la que se ejecutará la transacción. Si 6M no es suficiente, puede disminuir la cantidad de direcciones en airdrop hasta que esté bien.
@petro.sidlovskyy El uso de un límite de gas grande no es óptimo si tiene prisa, los mineros tienden a omitir transacciones con un límite de gas grande y un precio de gas bajo.