2017-10-14 6 views
2

私は最後の数日間、2つのethereumウォレット間でカスタマイズされたトークンの転送を試みていました。gethを使用してウォレット間でトークンを転送する方法

私はpopulus(python)を使用しています。ETHを転送するのはかなり簡単なようですが、カスタムトークンを使って同じことをする方法を理解できませんでした。

これは私のpythonコードです:

from decimal import Decimal 
import populus 
from populus.utils.accounts import is_account_locked 
from populus.utils.cli import request_account_unlock 
from eth_utils import from_wei 
from ico.utils import check_succesful_tx 

# Which network we deployed our contract 
chain_name = "horton" 

# Owner account on geth 
owner_address = "0xaeCb8415d5553F080d351e82b2000f123BFBc23C" 

# Where did we deploy our token 
contract_address = "0x15f173b7aca7cd4a01d5f8360e65fb4491d270c1" 

receiver = "0x4c042bf285689891117AED16005004a6de2cC4FB" 

amount = Decimal("1.0") 

project = populus.Project() 

with project.get_chain(chain_name) as chain: 

    web3 = chain.web3 
    print("Web3 provider is", web3.currentProvider) 
    print("Owner address is", owner_address) 
    print("Owner balance is", from_wei(web3.eth.getBalance(owner_address), "ether"), "ETH") 

    # Goes through geth account unlock process if needed 
    if is_account_locked(web3, owner_address): 
     request_account_unlock(chain, owner_address, None) 

    transaction = {"from": owner_address} 
    FractionalERC20 = chain.contract_factories.FractionalERC20 

    token = FractionalERC20(address=contract_address) 
    decimals = token.call().decimals() 
    decimal_multiplier = 10 ** decimals 

    decimals = 18 
    decimal_multiplier = 10 ** decimals 
    print("Token has", decimals, "decimals") 
    print("Owner token balance is", token.call().balanceOf(owner_address)/decimal_multiplier) 

    # Use lowest denominator amount 
    normalized_amount = int(amount * decimal_multiplier) 

    # Transfer the tokens 
    txid = token.transact({"from": owner_address}).transfer(receiver, normalized_amount) 
    print("TXID is", txid) 
    check_succesful_tx(web3, txid) 

しかし、上記のコードを実行しながら、私はエラーを取得しています:

File "ICO_transfering_tokens.py", line 39, in <module> 
    FractionalERC20 = chain.contract_factories.FractionalERC20 
AttributeError: 'LocalGethChain' object has no attribute 'contract_factories' 

私はエラーを理解し、それを修正しませんか。


誰かがpython以外の言語でのソリューションを持っている場合、私は正しい答えとしてそれを受け入れるさせていただきます。私は財布のリストに小さなお支払いを送る必要がありますし、私は厳しいスケジュールには、任意のヘルプは歓迎される!

+0

新しい方法はhttpのポプラの新しいバージョンをダウンロードし、ローカルホートンチェーンを設定してください://populus.readthedocsこれにより

FractionalERC20 = chain.contract_factories.FractionalERC20 

を.io/en/latest/tutorial.part-2.html –

答えて

2

明らかに、このコードはICO projectからコピーされています。ユーザーが簡単に答えられるようにするには、どこでソースコードを入手したのかが分かります。 This project has its own chat group here

一部のバージョンのPopulousでは、APIが変更され、使用しているサンプルが古いバージョンのAPI用であるという理由があります。 ICOリポジトリとPopulousの両方を最新の互換バージョン構成(in ICO repo Travis output)にアップグレードしてください。

このラインを交換してください:

from ico.utils import get_contract_by_name 

FractionalERC20 = = get_contract_by_name(chain, "FractionalERC20") 
+0

私はあなたのコードを試しましたが、エラーが発生します: 'KeyError:"キー '優先度'が{} "' - https://pastebin.comに見つかりません/ zwSC8uam –

+0

https://github.com/TokenMarketNet/ico/blob/mastに準拠した互換性のあるPythonライブラリのバージョンがあることを確認してくださいer/requirements.txt –

+0

私はそれをします。 Tks! –

関連する問題