Я использую truffle develop
для тестирования своих смарт-контрактов. Я пытался переключаться между разными учетными записями с помощью, web3.eth.defaultAccount = web3.eth.accounts[1]
но безуспешно. Как мне это сделать?
Из соображений стиля я предпочитаю объявлять участников заранее:
contract('MyContract', function(accounts) {
var owner = accounts[0];
var seller = accounts[1];
var buyer = accounts[2];
Затем во время выполнения тестов (или пользовательского интерфейса) явно укажите, кто говорит:
it("should do something", function() {
myContract.method(args, {from: owner}).then(...
Надеюсь, поможет.
ОБНОВЛЯТЬ
Массив accounts
представляет собой список учетных записей из кошелька (а не сети как таковой), поэтому тестовый клиент может подписывать любой из них.
Хотя truffle использует подход «чистой комнаты» к тестам, вы можете не полагаться на него и избежать возможной путаницы, развертывая новый, свежий контракт перед каждым тестом. Этот метод игнорирует миграции и конкурирует с конфигурацией сети на основе «как есть». Это дает вам возможность контролировать процесс развертывания, в том числе учетную запись, которая развертывает контракт на уровне тестирования на стороне клиента.
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);
});
Если собрать все вместе, то получится что-то вроде
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
Вы можете изменить учетную запись по умолчанию, используемую контрактом, из командной строки «разработать».
> MetaCoin.defaults({ from: '0x123413413412341234' })
Это повлияет на все транзакции, выполненные для этого контракта.
Как указал Роб, другим вариантом является явное переопределение from
в каждой транзакции.
> MetaCoin.deployed().transfer(to, value,
{ from: '0x13412341234...' })
Можно указать from
в конфигурационном файле truffle-config.js
.
Это сложнее, но удобно, если что-то из develop
не соответствует вашим требованиям.
Вы должны определить свою собственную сеть и запустить собственный экземпляр ganache.
module.exports = {
networks: {
myCustomConfiguration: {
host: "127.0.0.1",
port: 8545,
network_id: "*",
from: '0x11111..111'
}
}
};
Теперь выполните ganache
в другой консоли, и вы можете запустить truffle console --network myCustomConfiguration
.
Тадеу Морейра
truffle develop
, по умолчанию используется первая учетная запись. Я не думаю, что смогу это изменить,truffle-config.js
поэтому я пытаюсь переключить учетную запись клиента на консоли.