ZB eine Funktion, die nur riesige Struct-Daten zurückgibt. Gibt es eine Datenbeschränkung, sodass der Aufruf dieser Funktion nicht möglich ist?
pragma solidity ^0.4.13;
contract Project
{
struct Person {
address addr;
uint funds;
}
Person[] people;
function getPeople(uint[] indexes)
public
view
returns (address[], uint[])
{
address[] memory addrs = new address[](indexes.length);
uint[] memory funds = new uint[](indexes.length);
for (uint i = 0; i < indexes.length; i++) {
Person storage person = people[indexes[i]];
addrs[i] = person.addr;
funds[i] = person.funds;
}
return (addrs, funds);
}
}
Wenn ich 100000000000 gespeichert habe ... Mensch, kann ich sie mit zurückgeben getPeople()
?
Bearbeiten: Funktion in Ansicht geändert, um Verwirrung zu vermeiden.
Wenn Sie dies von einem externen Konto (mit web3 oder ähnlichem) aufrufen, fallen keine Gaskosten an, da die Funktion Ansicht ist und in dem Knoten aufgelöst wird, mit dem Sie verbunden sind. Auf der anderen Seite, wenn dies aus einem Vertrag abgerufen wird, sind damit Gaskosten verbunden, und das Gaslimit ist das gleiche wie für jede andere Transaktion.
Was die Menge betrifft, auf die Sie hinweisen, ist das Speichern dieser Datenmenge unpraktisch und sehr teuer. Wenn Sie dieses Formular lesen, ist der Knoten machbar, aber mit einem Vertrag würde es nicht funktionieren.
Hoffe das hilft
view
Funktionen geht, auf die Sie sich mehr oder weniger bezogen haben. Dann wird im Fragetext die Funktion selbst nicht deklariert view
, was nicht wirklich zum Titel passt. Dann zeigt ein genauerer Blick, dass es deklariert werden kannview
, was Ihre Antwort wieder relevant macht. Und zuletzt ändert sich die Frage plötzlich von Datenlesen zu Datenveränderung, und so wird Ihre Antwort wieder einmal unvollständig.view
Definitiv ja, es verbraucht Benzin!
Es verbraucht kein Gas, wenn es NUR von einem lokalen Knoten oder Web3 angerufen wird.
Die Ausführung des von Ihnen geschriebenen Codes verbraucht Gas auf der EVM, auch wenn sie nicht die Blockchain, sondern nur den lokalen Speicher modifiziert.
Wenn dies nicht der Fall wäre, sollte jede EVM-Ansichtsfunktion in der Lage sein, in einer Endlosschleife zu gehen, ohne in der Ewigkeit gestoppt zu werden ...
Zum Beispiel verbraucht Ihre for-Schleife Gas: Achten Sie auf gelbe Papiertische.
Wenn andererseits Ihre JavaScript-Anwendung, die auf Ihrem lokalen PC ausgeführt wird, auf öffentliche Variablen zugreift, verbraucht sie kein Gas beim Lesen der Blockchain (z. B. durch Web3-Zugriff).
view
kein Gas kosten, wenn sie von einem externen Konto aus angerufen werden. Dies wird alles in der anderen Antwort richtig erklärt.
gute Stimmung
view
, und dann sollten keine Gaskosten anfallen. Alle Daten sind (bereits) auf der Blockchain, Sie ändern nichts, es gibt also kein Mining, also keine nachträglichen Benzinkosten.Senju
eth