Wechseln Sie zwischen Konten, um Smart Contracts auszuführen

Ich verwende, truffle developum meine intelligenten Verträge zu testen. Ich habe versucht, zwischen verschiedenen Konten zu wechseln, web3.eth.defaultAccount = web3.eth.accounts[1]aber ohne Erfolg. Wie mache ich das?

Antworten (2)

Aus Stilgründen erkläre ich die Teilnehmer gerne im Voraus:

contract('MyContract', function(accounts) {

    var owner = accounts[0];
    var seller = accounts[1];
    var buyer = accounts[2];

Geben Sie dann beim Ausführen von Tests (oder der Benutzeroberfläche) explizit an, wer spricht:

it("should do something", function() {
    myContract.method(args, {from: owner}).then(...

Ich hoffe es hilft.

AKTUALISIEREN

Das accountsArray ist eine Liste von Konten aus der Brieftasche (nicht das Netzwerk an sich), sodass der Testclient in der Lage ist, mit jedem von ihnen zu signieren.

Obwohl Truffle einen „Reinraum“-Ansatz für Tests verwendet, können Sie sich nicht darauf verlassen und mögliche Verwirrung vermeiden, indem Sie vor jedem Test einen neuen, frischen Vertrag bereitstellen. Diese Methode ignoriert die Migrationen und konkurriert mit der Netzwerkkonfiguration „wie sie ist“. Es bietet Ihnen die Möglichkeit, den Bereitstellungsprozess zu steuern, einschließlich dessen, welches Konto den Vertrag auf der clientseitigen Testebene bereitstellt.

var myContract; // this will be the contract instance

beforeEach("deploy new MyContract", function() {
    return MyContract.new(args, { from: owner }) // make a new one and choose the deployer
        .then(instance => myContract = instance);
});

Wenn Sie alles zusammenfügen, erhalten Sie so etwas wie

MyContract = artifacts.require(...

contract('MyContract', function(accounts) {

    var myContract;        
    var owner = accounts[0];
    var seller = accounts[1];
    var buyer = accounts[2];

    beforeEach("deploy new MyContract", function() {
      return MyContract.new(args, { from: owner }) // control who deployed it
      .then(instance => myContract = instance);
    });

    it("should do something", function() {
      myContract.method(args, {from: owner}).then(... // control who accesses it
Wusste nicht, dass Smart Contracts auf die Kontoadressen der Netzwerke zugreifen können. Das ist ziemlich hilfreich. Aber mein Problem liegt auf der Client-Seite. Immer wenn ich starte truffle develop, wird standardmäßig das erste Konto verwendet. Ich glaube nicht, dass ich das ändern kann, truffle-config.jsalso versuche ich, das Konto des Kunden auf der Konsole zu wechseln.

Sie können das von einem Vertrag verwendete Standardkonto über die Befehlszeile „Entwickeln“ ändern

> MetaCoin.defaults({ from: '0x123413413412341234' })

Dies wirkt sich auf alle Transaktionen aus, die für diesen Vertrag ausgeführt werden.


Wie von Rob angegeben, besteht eine weitere Option darin, fromin jeder Transaktion explizit zu überschreiben.

> MetaCoin.deployed().transfer(to, value,
    { from: '0x13412341234...' })

fromEs ist möglich , in der Konfigurationsdatei anzugeben truffle-config.js.

Dies ist komplexer, aber praktisch, wenn etwas von developnicht Ihren Anforderungen entspricht.

Sie müssen Ihr eigenes Netzwerk definieren und Ihre eigene Ganache-Instanz ausführen.

module.exports = {
  networks: {
    myCustomConfiguration: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*",
      from: '0x11111..111'
    }
  }
};

Jetzt in einer anderen Konsole ausführen ganacheund Sie können starten truffle console --network myCustomConfiguration.