boostryjp / ibet-smartcontract Goto Github PK
View Code? Open in Web Editor NEWTokens and DEX contracts available in the ibet DeFi network 🔗
Home Page: https://ibet.jp/ibet-for-fin
License: Apache License 2.0
Tokens and DEX contracts available in the ibet DeFi network 🔗
Home Page: https://ibet.jp/ibet-for-fin
License: Apache License 2.0
発行体の公開鍵で個人情報を秘匿化して、コントラクト上に登録するコントラクト
Token側から取引可能なDEXを指定できるようにする。
・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から引き出し可能な状態にする。
Switch framework to Populus, develop test cases, etc.
DEXで売買を可能にする。
取引の仕様はMembership(会員権)と基本は同じ。KYCは必須ではない。
IbetStraightBondを前提としてしまっているが、TokenListは汎用的に利用するものであるため、実装方法を変更する。
Solidityコードの脆弱性チェックにMythrilを導入する
mac mojaveでsolc導入に困憊したので、mac用のsolcのバイナリファイルをリポジトリに含める対応をする
Solcのバージョンが上がってコンパイル時にエラーになっている
http://ec2-13-112-63-97.ap-northeast-1.compute.amazonaws.com:8080/view/3.DEPLOY/job/CD_DEV_tmr-sc/23/console
一定期間経過後に投資家のオペレーションで約定取り消しを可能とする
WhiteList登録時に決済業者を利用することに対する同意機能が必要
注文中の状態で償還処理が行われる場合があるうる。この時未発注状態に戻すのが正しいか?
https://github.com/N-Village/tmr-sc/blob/master/contracts/IbetStraightBondExchange.sol#L135
NG: commitments[msg.sender][_token] = balances[msg.sender][_token].add(_amount);
OK: commitments[msg.sender][_token] = commitments[msg.sender][_token].add(_amount);
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'}
Consumeのイベントから、クーポンの利用履歴を参照するため必要になった。
クーポンの割り当ては、ウォレット側からイベント監視が行えるようにするため、「①DEXにデポジット(allocate)」「②DEXから割り当て先アドレスにTransfer」の2段階オペレーションを行う。
譲渡不可のトークンはTransfer時にチェックを行い、譲渡不可のものはTransferが行えないようにしている。
割り当て処理(allocate)の場合は、譲渡不可の影響を受けないように実装しているが、上記②のDEXからのTransferの処理で結局譲渡不可のチェックに引っかかってしまっており、DEXから引き出せない状態になってしまっている。
InMemoryだとテストできない箇所があるため、バックエンドをQuorumに変更する
債券の利払い日を複数登録できるようにする。
償還を実施した後のTransferを停止する処理を追加する
キャンセル時の預かりを解放のバグ
・TokenList登録時のイベント処理を追加する
修正漏れの対応
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?
決済業者の公開鍵で個人情報を暗号化し、コントラクトに登録する。
____________________________ 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'
ERC適用
OpenZeppelinの導入
v2向け新機能の導入、機能修正
Dockerfile、テスト用スクリプト作成
Readmeを作成する
注文実施時に、決済用口座情報、名簿登録用個人情報がすでに登録済みであるかをチェックする処理を追加する。
会員権Token
会員権Exchange
OpenZeppelinを導入する。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.