Ich habe eine private Kette und betreibe einen eigenen Archivierungsknoten. Der mit --fast cache=1024
Option verbundene Knoten.
Zum Beispiel habe ich eine festgelegte Funktion in meinem Smart Contract.
contract smartContract {
uint value;
function set(uint input) returns (bool success) {
value = input;
}
function getValue() public view
returns (uint)
{
return value;
}
}
Diese Funktion wird bei Blocknummer 100 und 200 aufgerufen.
smartContract.set(10) //deployed at block number 100
smartContract.set(20) //deployed at block number 200
An dieser Stelle. Wenn unsere Blockchain, wie wir wissen, synchronisiert ist, gibt sie beim Aufruf smartContract.get()
20 zurück.
Hier wird erwähnt, dass Smart Contact nur den aktuellen Status sehen kann.
Ein Vertrag kann nur den aktuellen Status sehen, wenn er ausgeführt wird, nicht frühere Status. Durch diese Einschränkung können Validierungsknoten nur mit dem aktuellen Status arbeiten, anstatt alle vorherigen Status speichern und darauf zugreifen zu können.
Hier können wir frühere Blockdaten abrufen. Da wir vorherige Blockdaten erhalten können, könnten wir die vorherigen Zustände erhalten.
[F] Könnte web3 den Status eines Werts aus früheren Blocknummern abrufen, anstatt den neuesten Statuswert zurückzugeben?
Wenn wir die Blocknummer wie 100, smartContract.get() at 100
; irgendwie kann web3 value
den Wert bei Blocknummer 100 statt bei zurückgeben latest
?
[F] Könnte web3 den Status eines Werts aus vorherigen Blocknummern abrufen, anstatt den neuesten Statuswert zurückzugeben?
Ja, in web3.py v4.0+.
Bei einem Vertragsanruf können Sie eine Blocknummer (oder einen Hash) angeben. Diese Beispiele stammen aus der web3.py-Dokumentation :
# You can call your contract method at a block number:
>>> token_contract.functions.myBalance().call(block_identifier=10)
# or a number of blocks back from pending,
# in this case, the block just before the latest block:
>>> token_contract.functions.myBalance().call(block_identifier=-2)
# or a block hash:
>>> token_contract.functions.myBalance().call(block_identifier='0x4ff4a38b278ab49f7739d3a4ed4e12714386a9fdf72192f2e8f7da7822f10b4d')
>>> token_contract.functions.myBalance().call(block_identifier=b'O\xf4\xa3\x8b\'\x8a\xb4\x9fw9\xd3\xa4\xedN\x12qC\x86\xa9\xfd\xf7!\x92\xf2\xe8\xf7\xdax"\xf1\x0bM')
# Latest is the default, so this is redundant:
>>> token_contract.functions.myBalance().call(block_identifier='latest')
# You can check the state after your pending transactions (if supported by your node):
>>> token_contract.functions.myBalance().call(block_identifier='pending')
Henk
Alper
web3.py
? @HenkJesus
Alper
Ismael
Alper
Ismael
Alper