Ist es möglich, die Kosten dieser Funktion mit einer for-Schleife zu reduzieren?

Ist es möglich, die Gaskosten dieser Funktion zu reduzieren? Es liegt derzeit bei 140.000 Gas für 20 Elemente. (Ich bin neu in Solidität)

uint8[1000] public array;

function Test(uint32[] index, uint8[] value) public  {        
    for (uint i=0; i<index.length; i++) {
        array[index[i]] = value[i];
    }
}

Antworten (1)

Haben Sie versucht, eine Zuordnung des Index und des Werts zu erstellen, anstatt zwei separate Arrays zu erstellen? Es würde in bestimmten Situationen funktionieren, aber dieser Code sagt mir nichts.

//Creating the mapping:
mapping(uint32 index => uint8 value) theMap;
//Then when setting the value:
theMap[index] = value;
//Then to get it back:
uint8 value = theMap[index]
Danke Gabi für den Vorschlag. Ich brauche eine Funktion, um das gesamte Array zurückzugeben, also glaube ich nicht, dass eine Zuordnung funktionieren wird, oder? Ich denke, ich muss nur die hohen Benzinkosten akzeptieren.
Ich würde mir diesen Beitrag ansehen, um zu sehen, was am besten zu Ihnen passt: ethereum.stackexchange.com/questions/13167/… . Beim Looping muss man sehr vorsichtig sein, da man extrem schnell an sein Gaslimit stoßen kann. Denken Sie daran, dass Schleifen während der Zahlung ebenfalls um jeden Preis vermieden werden sollten (verwenden Sie dafür das Auszahlungsmuster).