Как получить доступ к тестовым учетным записям, созданным TestRPC, из теста Solidity с помощью Truffle?

С помощью тестов Javascript можно получить доступ к учетным записям, которые создает TestRPC, используя:

contract('MetaCoin', function(accounts) {
   // tests here can access accounts[n] to get the public keys
}

Но как я могу использовать эти адреса из теста, написанного на Solidity?

Ответы (1)

Я хотел бы сделать предложение.

В TestMetaCoin.solпримере видно, что используется адрес владельца контракта. (См. tx.origin) Таким образом, я не вижу причин, по которым вы не могли бы жестко закодировать адреса других учетных записей в файле библиотеки Solidity, а затем импортировать библиотеку в свой тест. Затем вы сможете $ testrpc --account="<privatekey>,balance" [--account="<privatekey>,balance"]убедиться, что адреса в вашей библиотеке повторно используются при каждом запуске.

Вы можете делать довольно сложные вещи с помощью тестов Solidity. (См. http://truffleframework.com/tutorials/testing-for-throws-in-solidity-tests ). Однако, судя по документам по трюфелю, у меня сложилось впечатление, что они могут быть не предназначены для вашего варианта использования.

http://truffleframework.com/docs/getting_started/solidity-tests

Это разумно. По мере того, как я продвигаюсь в разработке в Solidity, я понимаю, что, возможно, .solтесты служат иной цели, чем тесты .js. Используйте Solidity для тестирования сложной внутренней логики и JavaScript для тестирования контрактов.
Я бы сказал, что это правильно. Я слышал аргумент, что .jsтесты по сути являются интеграционными тестами в силу их зависимости от web3. Хотя это может быть правдой, их можно использовать для тестирования сложной логики внутреннего контракта точно так же, как и тест Solidity. Преимущества тестов Solidity заключаются в быстрой разработке, они сосредоточены на самой логике контракта (как вы говорите) и требуют меньше накладных расходов.