У меня возникла проблема с передачей права собственности на токен ERC721 развернутому контракту на хранение.
Ошибка, которую я получаю при запуске, truffle test
следующая: Error: sender account not recognized
при вызове transferFrom()
функции в контракте ERC721 с использованием развернутого контракта Holding.
Я успешно одобрил Холдинговый контракт перед звонком, transferFrom()
так что это не проблема, но я не знаю, где ошибка при попытке перевести NFT в Холдинговый контракт.
Контракты и тестовый файл находятся здесь: https://github.com/sharad-s/DAOjo
Конкретная строка кода, которая вызывает эту ошибку в моих тестах, - это строка 120 изDAOjo/test/test.js
Чтобы воссоздать эту ошибку:
truffle test
в корне этого репоНиже приведена трассировка стека ошибок:
Contract: Crowdsale
DAOToken
1e+23
✓ should have a total supply of: 1e+23
✓ should have transferred 1e+23 to Crowdsale
Crowdsale
Wei Raised: 1000000000000000000
Buyer Balance: 1000000000000000000
✓ should accept ETH payments (144ms)
Contract: NFTTokenMetaDataEnumerableMock
NFT Registry
✓ Should have a total of 0 tokens when created
NFT APPROVED FOR: 0x3a0a837952964bdf3e751ba838e04b9a1752d94a
HOUSE OWNER: 0x6e4679ddb735556a47dd548489dfab641752afd5
SPV: 0x3a0a837952964bdf3e751ba838e04b9a1752d94a
DAO TOKEN BALANCE OF BUYER 1: BigNumber { s: 1, e: 3, c: [ 1000 ] }
1) Should approve and transfer token to SPV contract
Events emitted during test:
---------------------------
Transfer(from: <indexed>, to: <indexed>, value: 1000)
Transfer(from: <indexed>, to: <indexed>, value: 1000)
Transfer(from: <indexed>, to: <indexed>, value: 1000)
Transfer(from: <indexed>, to: <indexed>, value: 0)
Approval(owner: <indexed>, spender: <indexed>, value: 0)
---------------------------
4 passing (3s)
1 failing
1) Contract: NFTTokenMetaDataEnumerableMock
NFT Registry
Should approve and transfer token to SPV contract:
Error: sender account not recognized
at Object.InvalidResponse (/Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/errors.js:38:1)
at /Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/requestmanager.js:86:1
at /Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/packages/truffle-provider/wrapper.js:134:1
at XMLHttpRequest.request.onreadystatechange (/Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/httpprovider.js:128:1)
at XMLHttpRequestEventTarget.dispatchEvent (/Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:64:1)
at XMLHttpRequest._setReadyState (/Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:354:1)
at XMLHttpRequest._onHttpResponseEnd (/Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:509:1)
at IncomingMessage.<anonymous> (/Users/sharad/.nvm/versions/node/v8.9.4/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:469:1)
at endReadableNT (_stream_readable.js:1055:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
Спасибо!
Вы можете отправлять транзакции только from
той учетной записи, для которой ваш узел (в данном случае ganache) знает закрытый ключ. В этом коде:
const transferFrom = await _HouseNFTRegistry.transferFrom(
houseOwner,
_spvHoldingCrowdsale.address,
1,
{ from: _spvHoldingCrowdsale.address, to: _HouseNFTRegistry.address }
);
вы пытаетесь отправить транзакцию с адреса контракта, чего не можете сделать. (Никто не знает закрытый ключ для этого адреса.)
Шарад С.