wie man Trüffel verwendet, um den Statuswert eines Smart Contracts zu lesen

Ich bin ein Neuling.

Ich habe folgenden Scheinvertrag

contract A{

uint public test = 6;
address public myaddress;
uint public dummy;

/**
* The logs that will be emitted in every step of the contract's life cycle
*/
event MyEvent(address myaddress);
event ReadEvent(address myaddress, uint dummy);

/**
* The contract constructor
*/
constructor() public {
    myaddress = msg.sender;
    emit MyEvent(myaddress);
}

function myF(address sender, uint value) internal {
    require(sender == myaddress );
    dummy = value;
    emit ReadEvent(sender, myaddress);

}


function run() public payable{
    myF(msg.sender, msg.value);

    /*SendMiles();*/

}
}

Ich kompiliere es dann und migriere mit Truffle. Nachdem ich eine Truffle-Konsole in einem Entwicklungsnetzwerk gestartet und Folgendes getan habe:

A.deployed().then(inst => { AInstance = inst })

account0 = web3.eth.accounts[0];

AInstance.run({from: account0, value: 5});

Ich bekomme dann eine Transaktionsnummer '0xa72b03232f5028332411d7f05cf47248616aab96d982ce9a7b147a00642db405' auf Glinche.

Zwei Fragen: 1. Wie kann ich den Wert der Vertragsvariablen hauptsächlich für Test, myaddress und Dummy für die Transaktion '0xa72b03232f5028332411d7f05cf47248616aab96d982ce9a7b147a00642db405' erhalten?

  1. Wie kann ich diese Werte in einem komplexeren Format wie json erhalten?

Ich habe web3.eth.storeat und A.at ('0xa72b03232f5028332411d7f05cf47248616aab96d982ce9a7b147a00642db405') ausprobiert und es hat in beiden Fällen nicht funktioniert

vielen Dank im Voraus;

Antworten (1)

Ihre Transaktion '0xa72b0...' ändert den Vertragsstatus A. Öffentliche Vertragsvariablen wie myaddress werden im Vertragsstatus gespeichert: Es hat keinen Sinn, myaddress für eine bestimmte Transaktion zu erhalten.

  1. Wenn Sie einer Variablen das publicAttribut geben, wird automatisch eine Getter-Funktion mit demselben Namen generiert: Sie können den Wert von myaddress mit dem folgenden Befehl abrufen:AInstance.myaddress()
  2. Sie können JSON manuell generieren:

    var tmp = new Object()
    tmp.test = AInstance.test()
    tmp.myaddress = AInstance.myaddress()
    tmp.dummy = AInstance.dummy()
    result = JSON.stringify(tmp)
    
1. Wenn ich das richtig verstehe, gibt es einen Vertrag und jede Transaktion aktualisiert den Status in diesem Vertrag? Wenn ich also 2 Verträge A von 2 verschiedenen Konten initiiere, hat A.instance.myaddress() die Adresse der zweiten Instanz? 2. Wie initiiere ich eine Instanz für eine bestimmte Transaktion in der Blockchain und erhalte ihre Werte? 3. Gibt es eine Möglichkeit, die Zustände in allen Transaktionen automatisch in eine Textdatei umzuwandeln, ohne Truffle, Geth oder andere Web3-Anwendungen zu verwenden?
Dein erster Satz ist richtig. Ich habe jedoch das Gefühl, dass Ihnen der Unterschied zwischen einem Vertrag und einer Vertragsinstanz nicht klar ist. Wenn Sie ausführen, AInstance.run()rufen Sie die Methode runvon der spezifischen Instanz AInstanceIhres Vertrags auf A. Wenn Sie erneut bereitstellen, erhalten Sie eine weitere Instanz Ihres Vertrags A.
Jedes Mal, wenn Sie einen Vertrag bereitstellen, erhalten Sie eine Instanz. Diese Instanz wird dann eine oder mehrere Transaktionen haben, richtig? In diesem Fall versuche ich also, bei einer aktuellen Transaktion zu verstehen, was der Wert dieser Instanz ist, richtig?