„Fehler: Absenderkonto nicht erkannt“ beim Aufrufen von transferFrom() für einen ERC721-Vertrag

Ich habe ein Problem bei der Übertragung des Besitzes eines ERC721-Tokens auf einen bereitgestellten Holding-Vertrag.

Der Fehler, den ich beim Ausführen erhalte, truffle testist der folgende: Error: sender account not recognizedBeim Aufrufen der transferFrom()Funktion für den ERC721-Vertrag unter Verwendung des bereitgestellten Holding-Vertrags.

Ich habe den Holding-Vertrag vor dem Anruf erfolgreich genehmigt, transferFrom()das ist also nicht das Problem, aber ich weiß nicht, wo der Fehler beim Versuch liegt, die NFT auf den Holding-Vertrag zu übertragen.

Die Verträge und die Testdatei befinden sich hier: https://github.com/sharad-s/DAOjo

Die spezifische Codezeile, die diesen Fehler in meinen Tests verursacht, ist Zeile 120 vonDAOjo/test/test.js

So reproduzieren Sie diesen Fehler:

  • Repository klonen
  • Trüffel global installieren
  • Ausführen einer lokalen Ganache-Blockchain-Instanz (Port 8545)
  • Führen Sie truffle testim Stammverzeichnis dieses Repositorys aus

Es folgt der Fehler-Stack-Trace:

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 RegistryShould 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)

Danke schön!

Antworten (1)

Sie können Transaktionen nur froman ein Konto senden, für das Ihr Node (in diesem Fall Ganache) den privaten Schlüssel kennt. In diesem Code:

const transferFrom = await _HouseNFTRegistry.transferFrom(
    houseOwner,
    _spvHoldingCrowdsale.address,
    1,
    { from: _spvHoldingCrowdsale.address, to: _HouseNFTRegistry.address }
);

Sie versuchen, eine Transaktion von der Adresse eines Vertrags zu senden, was nicht möglich ist. (Niemand kennt den privaten Schlüssel für diese Adresse.)

Verstanden, danke! Ich löste dies, indem ich die Funktion transferFrom() {from : houseOwner} aufrief, die ich als Adresse [0] definierte, die von ganache angegeben wurde, dem auch die für die Übertragung bestimmte NFT gehörte.