Я использую testrpc и truffle для развертывания контрактов. Я хочу передать параметры конструктора при развертывании.
contract User {
string public userName;
function User(string _name) {
userName=_name;
}
}
Я использую contractname.deployed() для развертывания контракта.
var user=User.deployed()
Эта команда развертывания не инициализирует параметр userName.
Как передать _name этому контракту с помощью трюфеля?
В Truffle параметры конструктора находятся в /migrations. Итак, что-то вроде:
deployer.deploy(User, "foo");
User.deployed()
будет пользовательский контракт, который был развернут с _name="foo"
Рассмотрим тестовый контракт, в котором конструктор принимает два параметра:
// 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 будет использовать MyContract.new([arg1, arg2, ...], [tx params]) для передачи параметров в конструктор:
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);
});
});
Учтите, что для доступа к state-переменной используется геттер-функция .
Осман Бенчекрун
Роб Хитченс
function User(string _name)
определяет один параметр для конструктора. Параметры могут быть больше или отличаться.Осман Бенчекрун
Роб Хитченс