如何使用 geth 在钱包之间转移代币
Posted
技术标签:
【中文标题】如何使用 geth 在钱包之间转移代币【英文标题】:How to transfer tokens between wallets using geth 【发布时间】:2018-03-26 11:57:43 【问题描述】:过去几天我一直在努力尝试在 2 个以太坊钱包之间转移自定义令牌。
我正在使用 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
以外的其他语言的解决方案,我很乐意接受它作为正确答案。我需要向钱包列表发送小额付款,而且我的时间很紧,欢迎任何帮助!
【问题讨论】:
尝试下载新版Populus,并以新方式设置本地horton链populus.readthedocs.io/en/latest/tutorial.part-2.html 【参考方案1】:显然您已从ICO project 复制了此代码。为了让用户更容易回答,告诉你从哪里获得源代码是有意义的。 This project has its own chat group here.
异常的原因是在 Populous 的某些版本中,API 已更改,而您使用的示例是针对旧版本的 API。请将 ICO 存储库和 Populous 升级到最新的兼容版本配置,您可以找到 in ICO repo Travis output。
请替换此行:
FractionalERC20 = chain.contract_factories.FractionalERC20
有了这个:
from ico.utils import get_contract_by_name
FractionalERC20 = = get_contract_by_name(chain, "FractionalERC20")
【讨论】:
我已经尝试过您的代码,但出现错误:KeyError: "Key 'priority' not found in "
- pastebin.com/zwSC8uam
请检查您是否拥有符合github.com/TokenMarketNet/ico/blob/master/requirements.txt的兼容Python库版本
我会这样做的。谢了!以上是关于如何使用 geth 在钱包之间转移代币的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python/solidity 生成钱包和转移/铸造代币给他们?