Ich verwende testrpc und truffle für die Bereitstellung von Verträgen. Ich möchte Konstruktorparameter während der Bereitstellung übergeben.
contract User {
string public userName;
function User(string _name) {
userName=_name;
}
}
Ich verwende contractname.deployed() zum Bereitstellen von Verträgen.
var user=User.deployed()
Dieser Bereitstellungsbefehl initialisiert den userName-Parameter nicht.
Wie übergebe ich _name mit Trüffel an diesen Vertrag?
In Truffle gehen Konstruktorparameter in /migrations. Also so etwas wie:
deployer.deploy(User, "foo");
User.deployed()
wird ein Benutzervertrag sein, der mit _name="foo" bereitgestellt wurde
Betrachten wir den Testvertrag, in dem der Konstruktor zwei Parameter akzeptiert:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
contract Test {
address public owner;
address public user1;
address public user2;
constructor (address _user1, address _user2) {
owner = msg.sender;
user1 = _user1;
user2 = _user2;
}
}
Truffle-test verwendet MyContract.new([arg1, arg2, ...], [tx params]) , um Parameter an den Konstruktor zu übergeben:
const TestContract = artifacts.require('Test');
contract('Test', function (accounts) {
const [owner, user1, user2] = accounts;
const txParams = { from: owner };
beforeEach(async function () {
this.testContract = await TestContract.new(user1, user2, txParams);
});
it('has an owner, user1 and user2', async function () {
expect(await this.testContract.owner()).to.equal(owner);
expect(await this.testContract.user1()).to.equal(user1);
expect(await this.testContract.user2()).to.equal(user2);
});
});
Beachten Sie, dass für den Zugriff auf Zustandsvariablen die Getter-Funktion verwendet wird .
Othman Benchekroun
Rob Hitchens
function User(string _name)
definiert einen Parameter für den Konstruktor. Es können mehr oder andere Parameter vorhanden sein.Othman Benchekroun
Rob Hitchens