首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Pyethereum生成数据的原始事务

如何使用Pyethereum生成数据的原始事务
EN

Ethereum用户
提问于 2017-09-01 03:12:01
回答 2查看 2K关注 0票数 3

如何使用蒲公英生成要发送到区块链的原始tx?我可以在没有数据的事务中成功地完成这个任务,但是当我试图使用数据时,它不能正常工作。

为了进一步讨论这一点,我已经将问题定位到数据编码上。我可以发送一个1 ETH事务,没有数据完美。我可以用一串数据发送同样的事务,比如‘0xabc does’,它将通过相同的数据,除非etherscan.io上的' data‘部分不读’0xabc does‘。我相信这是问题所在,但我不知道如何解决。

为了演示一个示例,我正在使用创建事务,下面的代码可以工作:

代码语言:javascript
复制
nonce = 100
gas_price = 10000000000
gas_limit = 22000
value = 1000000000000000000
data = ""
privkey = private_key_here

unencoded_tx = rlp.encode(transactions.Transaction(nonce, gas_price, gas_limit, to_address, value, data).sign(privkey))
signedtx = '0x' + codecs.encode(unencoded_tx, 'hex').decode('utf-8')

下面的代码是相同的,但对于数据也是这样,但是数据不是我所期望的:

代码语言:javascript
复制
nonce = 100
gas_price = 10000000000
gas_limit = 22000
value = 1000000000000000000
data = "0xabcdef"
privkey = private_key_here

unencoded_tx = rlp.encode(transactions.Transaction(nonce, gas_price, gas_limit, to_address, value, data).sign(privkey))
signedtx = '0x' + codecs.encode(unencoded_tx, 'hex').decode('utf-8')

数据输出(根据etherscan.io):0x3078616263646566

显然,这不是我想看到的数据。如何传递在etherscan.io上看到的相同数据?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2017-09-01 05:44:12

0x3078616263646566是字符串"0xabcdef"的UTF-8编码的十六进制表示形式."0"是十六进制30,"x"是十六进制78,依此类推。尝试将b'\xab\xcd\xef'作为数据传递。

您可以使用以下方法从十六进制生成此字节字符串:

代码语言:javascript
复制
import codecs
raw_bytes = codecs.decode('abcdef', 'hex')
assert raw_bytes == b'\xab\xcd\xef'

此外,还值得查看包ethereum-utils以获取eth_utils.decode_hex()和其他有用的工具。

票数 3
EN

Ethereum用户

发布于 2018-07-05 20:23:50

这是我在python3中的代码

代码语言:javascript
复制
from ethereum import transactions
from ethereum import utils
tx = transactions.Transaction(nonce=8, gasprice=5000000000, 
    startgas=45000, to=contract_address, value=0, 


data="0x957a0e210000000000000000
   000000000000000000000000000000000000000000000037").sign(private_key)
tx = tx.to_dict()

它会返回这个

代码语言:javascript
复制
  {'nonce': 8, 'gasprice': 5000000000, 'startgas': 45000, 'to': '0x4d21f3618bc4c50475d4b30993d80cffe78b3650', 'value': 0, 'data': '0x3078393537613065323130303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303337', 'v': 27, 'r': 104827557381449577376519412355902868429829733841563149787296871707166833642558, 's': 29002009444020075645692529433910482836532514345220494513395292371410739844134, 'sender': '0xd1bb5d5c362bb4faf25c23b3c7c42c8ea30dc10d', 'hash': '0x20d1a85cf3e6f4d11655c9ba0f09602ea4881b6abcc192581fca18b24634cd2c'}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/25627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档