Estoy usando testrpc y truffle para implementar contratos. Quiero pasar los parámetros del constructor durante la implementación.
contract User {
string public userName;
function User(string _name) {
userName=_name;
}
}
Estoy usando contractname.deployed() para implementar el contrato.
var user=User.deployed()
Este comando de implementación no inicializará el parámetro de nombre de usuario.
¿Cómo pasar _name a este contrato usando truffle?
En Truffle, los parámetros del constructor van en /migrations. Entonces, algo como:
deployer.deploy(User, "foo");
User.deployed()
será un contrato de usuario que se implementó con _name="foo"
Consideremos el contrato de prueba en el que el constructor acepta dos parámetros:
// 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 usará MyContract.new([arg1, arg2, ...], [tx params]) para pasar parámetros al constructor:
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);
});
});
Tenga en cuenta que para acceder a la variable de estado se utiliza la función getter .
Banco de Othman
Rob Hitchens
function User(string _name)
define un parámetro para el constructor. Podría haber más o diferentes parámetros.Banco de Othman
Rob Hitchens