68434


以下のサイトを参考にERC２０トークンを試しています

<https://qiita.com/sinsinpurin/items/e95f7e167b3116d29c68#allowance>

このサイトの内容は確認できました  
そこで今度は、トークンを受け取って何か処理することにしました  
何か処理するというところは、「指定量のトークンをOwnerに戻す」ということにします

`MyTokenICO`へ以下の処理を加えました

[code]

    event MoveToken(address beneficiary, uint256 value, uint256 amount);
    
    function moveToken() external payable {
        uint256 weiAmount = msg.value;
        uint256 tokens = _getTokenAmount(weiAmount);
        _weiRaised = _weiRaised.add(weiAmount);
        _token.transferFrom(msg.sender, _MOCOwner, tokens);
        emit MoveToken(msg.sender, weiAmount, tokens);
    }
    
[/code]

前出のサイトの手順により100トークン持っているので、内50トークン戻すことにします

[code]

    > MT.approve(accounts[1], 50)
    
    > MICO.moveToken.sendTransaction({from: accounts[1], value: 50})
    
[/code]

ここでエラーになりました

[code]

    Thrown:
    { Error: Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance -- Reason given: ERC20: transfer amount exceeds allowance.
        at evalmachine.<anonymous>:0:16
        at sigintHandlersWrap (vm.js:288:15)
        at Script.runInContext (vm.js:130:14)
        at runScript (/home/ubuntu/.nvm/versions/node/v10.20.1/lib/node_modules/truffle/build/webpack:/packages/core/lib/console.js:222:1)
        at Console.interpret (/home/ubuntu/.nvm/versions/node/v10.20.1/lib/node_modules/truffle/build/webpack:/packages/core/lib/console.js:237:1)
        at ReplManager.interpret (/home/ubuntu/.nvm/versions/node/v10.20.1/lib/node_modules/truffle/build/webpack:/packages/core/lib/repl.js:129:1)
        at bound (domain.js:402:14)
        at REPLServer.runBound [as eval] (domain.js:415:12)
        at REPLServer.onLine (repl.js:642:10)
        at REPLServer.emit (events.js:198:13)
        at REPLServer.EventEmitter.emit (domain.js:448:20)
        at REPLServer.Interface._onLine (readline.js:308:10)
        at REPLServer.Interface._line (readline.js:656:8)
        at REPLServer.Interface._ttyWrite (readline.js:937:14)
        at REPLServer.self._ttyWrite (repl.js:715:7)
        at ReadStream.onkeypress (readline.js:184:10)
        at ReadStream.emit (events.js:198:13)
        at ReadStream.EventEmitter.emit (domain.js:448:20)
        at emitKeys (internal/readline.js:424:14)
        at emitKeys.next (<anonymous>)
      reason: 'ERC20: transfer amount exceeds allowance',
      hijackedStack:
       'Error: Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds allowance -- Reason given: ERC20: transfer amount exceeds allowance.\n    at Object.ErrorResponse
    以下省略します
    
[/code]

エラーは`_token.transferFrom(msg.sender, _MOCOwner, tokens);`の箇所で起きています  
対応方法や参考情報いただけないでしょうか


CC BY-SA 4.0
2020-07-09T06:55:42.370
68428
2020-07-09T08:56:24.030
27721
question
ethereum
Ethereum ERC-20トークンを受け取るスマートコントラクトのトークンの扱い方がわからない


自己解決しました  
実行方法がよくありませんでした

`MT.approve(accounts[1], 50)`ではなく、  
`MT.approve(MICO.address, 50, {from: accounts[1]})`が正しい

理解不足で失礼しました


CC BY-SA 4.0
2020-07-09T08:56:24.030
68434
2020-07-09T08:56:24.030
27721
68428
answer