首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RLP协议应该解码与编码相同的值吗?

RLP协议应该解码与编码相同的值吗?
EN

Stack Overflow用户
提问于 2017-04-17 14:11:51
回答 1查看 113关注 0票数 1

我使用Ruby库对一个值进行编码,然后对其进行解码。但是,对于编码和解码,我得到了不同的值:

代码语言:javascript
复制
require 'rlp'                                                                                           

class Transaction                                                                                       
  include RLP::Sedes::Serializable                                                                      

  set_serializable_fields(                                                                              
    to: RLP::Sedes::Binary.fixed_length(20, allow_empty: true)                                          
  )                                                                                                     

  def initialize(*args)                                                                                 
    fields = parse_field_args(args)                                                                     
    fields[:to] = [fields[:to]].pack('H*')                                                              

    serializable_initialize(fields)                                                                     
  end                                                                                                   

  def encoded                                                                                           
    RLP.encode(self)                                                                                    
  end                                                                                                   

  def self.decode(data_in)                                                                              
    deserialize(RLP.decode(data_in))                                                                    
  end                                                                                                   
end                                                                                                     

recipient = "6ba381ce15b19c7e44b8603ad7e698059c09a39b"                                                  
tx = Transaction.new(recipient)                                                                         

puts "Should decode to #{recipient}"                                                                    
puts "Actually decodes to #{Transaction.decode(tx.encoded).to.unpack('H*').first}"

运行它时,解码的值实际上是431e51ced80a7685c93b,而不是输入的值。这似乎与编码无关。

图书馆出问题了吗?我正在使用这个库:https://github.com/cryptape/ruby-rlp

EN

回答 1

Stack Overflow用户

发布于 2022-05-19 16:26:45

是的,总是一样的,你可以来回走。

代码语言:javascript
复制
require "eth"

recipient = "6ba381ce15b19c7e44b8603ad7e698059c09a39b"                                                  
# => "6ba381ce15b19c7e44b8603ad7e698059c09a39b"

encoded = Eth::Rlp.encode "6ba381ce15b19c7e44b8603ad7e698059c09a39b"
# => "\xA86ba381ce15b19c7e44b8603ad7e698059c09a39b"

decoded = Eth::Rlp.decode encoded
# => "6ba381ce15b19c7e44b8603ad7e698059c09a39b"

decoded === recipient
# => true

如果您试图在Ruby中构建事务序列化程序,请查看eth gem。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43453172

复制
相关文章

相似问题

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