Я устраняю ошибку, возникшую в моем тесте на прочность трюфелей. Я могу сузить проблему до исключения, произошедшего в модификаторе payable.
мой код контракта:
import "zeppelin-solidity/contracts/token/ERC721/ERC721Token.sol";
contract MyToken is ERC721Token {
function MyToken() ERC721Token(NAME, SYMB) public payable {
}
function purchase(uint256 _tokenId) public payable {
// all the code in this function is commented out when I do the test
}
}
мой тестовый код:
MyToken myToken = MyToken(contractAddress);
myToken.purchase.value(1000000000000000000).gas(1000000000000000000)(0);
исключение:
Error: VM Exception while processing transaction: revert
at Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/errors.js:38:1)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/requestmanager.js:86:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-provider/wrapper.js:134:1
at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/httpprovider.js:128:1)
at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:64:1)
at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:354:1)
at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:509:1)
at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:469:1)
at endReadableNT (_stream_readable.js:1101:12)
at process._tickCallback (internal/process/next_tick.js:114:19)
Я добавляю ответ, так как он находится в комментариях выше и может быть кому-то полезен.
Транзакция была отменена, так как контракт на тестирование не имеет баланса. Когда вам нужно протестировать контактные транзакции через Solidity, отправителем является тестовый контракт. Чтобы разрешить тестовому контракту совершать транзакции, вам необходимо установить начальный баланс.
uint public initialBalance = 1 эфир; // или любое другое значение
это свойство должно быть добавлено в ваш контракт на тестирование. ссылка
Роб Хитченс
contractAddress
и его ABIMyContract
правильно описывает?Исмаэль
require(msg.value == 0)
, а наличие кредиторской задолженности эквивалентно удалению этого требования.мирг
uint public initialBalance = 1 ether;
в свой контракт на тестирование. truffleframework.com/docs/getting_started/…Вэньцзин
Роб Хитченс
Вэньцзин