Me gustaría dividir mi código en múltiples contratos, pero tengo miedo de que esto aumente las tarifas del gas. ¿Cuesta más gas una llamada de función externa que una llamada interna a una función dentro del mismo contrato? Si es así, ¿se trata de una tarifa fija por cada llamada o se tendrá en cuenta el tamaño de los argumentos que se transmiten?
Un poco.
Aquí hay un conjunto muy idiomático de contratos con un conjunto de funciones que toman diferentes caminos para establecer y obtener el mismo valor. Ningún esfuerzo para optimizar para el gas. delegateCall
puede hacerlo más barato.
Puede ver la diferencia en el costo de transacción, que tiene que ver con las solicitudes de embalaje y desembalaje. Puede ver que son (aproximadamente) 2000 gasolina extra para establecer el valor con una invocación del "Módulo" al contrato "Independiente" que logra lo mismo si se llama directamente.
Vale la pena mencionar dos cosas.
La proporción de gastos generales para el trabajo es desmesurada porque los contratos no están haciendo ningún trabajo pesado por sí mismos. Es básicamente gastos generales de tarifa plana.
Los colocadores son la comparación importante. Aunque el costo del gas se calcula para operaciones de solo lectura, son esencialmente gratuitos, siempre que no exceda el límite de gas del bloque (el presupuesto).
pragma solidity 0.4.19;
contract StandAlone {
uint public x = 1;
function get() public view returns(uint) {
return x;
}
function set(uint _x) public returns(bool success) {
x = _x;
return true;
}
function getLongWay() public view returns(uint) {
return get();
}
}
contract Module {
StandAlone s;
function Module(address SAAddress) public {
s = StandAlone(SAAddress);
}
function get() public view returns(uint) {
return s.get();
}
function set(uint _x) public returns(bool success) {
return s.set(_x);
}
}
Espero eso ayude.
Kwahu Nashoba
Rob Hitchens
Kwahu Nashoba
Rob Hitchens
Kwahu Nashoba
Rob Hitchens
Bharat Mallapur