Giter Club home page Giter Club logo

ibet-smartcontract's People

Contributors

dependabot[bot] avatar kyken avatar onepoke2 avatar purplesmoke05 avatar urushibata-k avatar y-kitagawa512 avatar yoshihitoaso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ibet-smartcontract's Issues

バグ:transferFromのFromアドレスが自身以外の場合にExchangeからの引き出しができなくなる

現在の問題

・transferFromでFromアドレスとして自身以外のアドレス(アドレスX)を指定した場合、Exchangeコントラクトに送信を行う際に、receiver.tokenFallback(_from, _value, empty); で指定されるFromアドレスはアドレスXになる。
・上記の結果、ExchangeアドレスにはアドレスXの残高ができる。
・その後、ExchangeアドレスからアドレスXの残高を引き出し(Transfer)しようとしても、自身以外の残高になってしまっているので、発行体権限であっても引き出しができない状態になってしまう。

実装方針

・transferFrom時の receiver.tokenFallback(_from, _value, empty); のFromアドレスには発行体自身のアドレス(つまりmsg.sender)を指定するように修正する。そうすることにより、Exchangeから引き出し可能な状態にする。

Adopt Populus

Switch framework to Populus, develop test cases, etc.

PersonalInfoコントラクトの項目名の変更

現在の問題

  • 収納代行業者がPersonalInfoの情報を収集する。
  • issuer_address の項目を収納代行業者も利用することになるため、項目名が正確ではない。

実装の方針

  • 項目名を変更する。→ link_address

TokenListの汎用化

IbetStraightBondを前提としてしまっているが、TokenListは汎用的に利用するものであるため、実装方法を変更する。

mythrilの導入

Solidityコードの脆弱性チェックにMythrilを導入する

コントラクトアドレスからの注文受付によるトレーディングの妨害

現在の問題

  • DEXコントラクトで決済承認処理(confirmAgreement)を発行すると、トークンコントラクトのtransferが実行され、トークンコントラクト内で買い手へのトークン振り替えが発生する。しかしながら、transferから呼び出されるtransferToContract内で、振り替え先を確認する際に、振り替え先がDEXコントラクトのアドレスではない場合は異常終了するようになっている。従って、不正にデプロイしたコントラクト経由で買い注文(createOrderまたはexecuteOrder)を実行されると、confirmAgreement処理が異常終了となり、約定処理が成立しません。

実装の方針

  • コントラクトからの注文処理を受け付けないようにするなどして、confirmAgreemenが異常終了しないようにする。

ステージング環境でコントラクトデプロイするとエラーになる

Traceback (most recent call last):
  File "deploy/contract_deploy.py", line 12, in <module>
    token_list, _ = chain.provider.get_or_deploy_contract('TokenList')
  File "/home/apl/.pyenv/versions/3.6.2/lib/python3.6/site-packages/populus/contracts/provider.py", line 143, in get_or_deploy_contract
    deploy_kwargs=deploy_kwargs,
  File "/home/apl/.pyenv/versions/3.6.2/lib/python3.6/site-packages/populus/contracts/provider.py", line 121, in deploy_contract
    kwargs=deploy_kwargs,
  File "/home/apl/.pyenv/versions/3.6.2/lib/python3.6/site-packages/web3/contract.py", line 311, in deploy
    txn_hash = cls.web3.eth.sendTransaction(deploy_transaction)
  File "/home/apl/.pyenv/versions/3.6.2/lib/python3.6/site-packages/web3/eth.py", line 221, in sendTransaction
    [transaction],
  File "/home/apl/.pyenv/versions/3.6.2/lib/python3.6/site-packages/web3/manager.py", line 96, in request_blocking
    raise ValueError(response["error"])
ValueError: {'code': -32000, 'message': 'invalid sender'}

譲渡不可クーポンの割り当てができない

現状の問題

  • クーポンの割り当ては、ウォレット側からイベント監視が行えるようにするため、「①DEXにデポジット(allocate)」「②DEXから割り当て先アドレスにTransfer」の2段階オペレーションを行う。

  • 譲渡不可のトークンはTransfer時にチェックを行い、譲渡不可のものはTransferが行えないようにしている。

  • 割り当て処理(allocate)の場合は、譲渡不可の影響を受けないように実装しているが、上記②のDEXからのTransferの処理で結局譲渡不可のチェックに引っかかってしまっており、DEXから引き出せない状態になってしまっている。

実装方針

  • 割り当て処理の場合には、DEXから引き出し処理が行えるように修正する。

Deployment error of Exchange-Contract

I can not deploy an exchange contract.

Although there is no error at deployment, it does not seem to be in an executable state.

Is the contract code too long?

TokenListのテストエラー対応

____________________________ test_register_normal_1 ____________________________

web3 = <web3.main.Web3 object at 0x7f0135e66ac8>
chain = <populus.chain.external.ExternalChain object at 0x7f0135651198>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_register_normal_1(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:22: TypeError
____________________________ test_register_normal_2 ____________________________

web3 = <web3.main.Web3 object at 0x7f01356522e8>
chain = <populus.chain.external.ExternalChain object at 0x7f0135d51fd0>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_register_normal_2(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       token, deploy_args = utils.issue_transferable_coupon(web3, chain)
E       TypeError: issue_transferable_coupon() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:60: TypeError
____________________________ test_register_error_2 _____________________________

web3 = <web3.main.Web3 object at 0x7f0135837a20>
chain = <populus.chain.external.ExternalChain object at 0x7f0135ce5cf8>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_register_error_2(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:113: TypeError
____________________________ test_register_error_3 _____________________________

web3 = <web3.main.Web3 object at 0x7f0135b78978>
chain = <populus.chain.external.ExternalChain object at 0x7f0135f68588>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_register_error_3(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:133: TypeError
____________________________ test_register_error_4 _____________________________

web3 = <web3.main.Web3 object at 0x7f0135d03b00>
chain = <populus.chain.external.ExternalChain object at 0x7f0135c733c8>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_register_error_4(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:173: TypeError
__________________________ test_changeOwner_normal_1 ___________________________

web3 = <web3.main.Web3 object at 0x7f01357468d0>
chain = <populus.chain.external.ExternalChain object at 0x7f0135e4efd0>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_changeOwner_normal_1(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
        new_owner_address = admin
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:218: TypeError
___________________________ test_changeOwner_error_2 ___________________________

web3 = <web3.main.Web3 object at 0x7f0134e06320>
chain = <populus.chain.external.ExternalChain object at 0x7f0134dcd358>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_changeOwner_error_2(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
        new_owner_address = admin
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:279: TypeError
___________________________ test_changeOwner_error_3 ___________________________

web3 = <web3.main.Web3 object at 0x7f0134f3c2b0>
chain = <populus.chain.external.ExternalChain object at 0x7f0134f0be10>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_changeOwner_error_3(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
        new_owner_address = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

tests/test_tokenlist.py:300: TypeError
___________________________ test_changeOwner_error_4 ___________________________

web3 = <web3.main.Web3 object at 0x7f0134d6bc18>
chain = <populus.chain.external.ExternalChain object at 0x7f0134d4ae48>
users = {'admin': '0x2B9Ce958914c06763701d0c06dC11b665d84716B', 'agent': '0x15f6C2fcf3767cbfA2B8B659f0ED5838a10012b3', 'issuer': '0xbd49d9AB77d957aA4825877f839C4d5598CD8969', 'trader': '0x1A4693516EDFd9E7b3F239e0718C5A342A024Bb7'}

    def test_changeOwner_error_4(web3, chain, users):
        admin = users['admin']
        issuer = users['issuer']
        new_owner_address = users['issuer']
    
        # TokenListコントラクト作成
        web3.eth.defaultAccount = admin
        tokenlist_contract, _ = chain.provider.get_or_deploy_contract('TokenList')
    
        # Token新規発行
        web3.eth.defaultAccount = issuer
>       bond_token, deploy_args = utils.issue_bond_token(web3, chain, users)
E       TypeError: issue_bond_token() missing 1 required positional argument: 'exchange_address'

v2.0

  • ERC適用

  • OpenZeppelinの導入

  • v2向け新機能の導入、機能修正

createOrder時のAgentアドレスの指定

現在の問題

  • createOrder時に注文者は自由にAgentアドレスを指定できる。※通常時はウォレット側が指定したAgentアドレスを指定することになるが、コントラクト上は自由に設定ができる。
  • 自身が保有しているアドレスをAgentに指定することにより、自身で約定(executeOrder)および決済承認(confirmAgreement)まで行えてしまう。
  • 補足:現状はウォレット業者が設定したAgent以外を指定した注文はウォレット上に表示されないため、偽装注文の問題は解消されている。

実装の方針

  • 検討中

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.