从客户端的锯齿地址获取数据

时间:2018-09-08 09:16:38

标签: hyperledger hyperledger-sawtooth

我已将protobuf格式的数据存储在锯齿形的某个地址(由公钥和交易族制成的地址)上。 获取请求已于 http://rest-api:8008/state/ 获取格式的数据

{
  "data": "CkIwM2FjNjA3MTUzZmRlMzJhNzhiNDFlMzkxN2QwZDlkZmJmMmM2NjZmOWFhZGMzMWRiNTNjODZhNzFkNDMyNmZkNGUSBnNlbGxlchoROTc4LTAtNTc2LTUyMzk1LTAiETgxOS02OTAtNzk4Nng1MTE5Kg0xLTk4MTAtMTE0NS01",
  "head":   "bea2911b4d84b897300fc4a9eb6b56b7ddc59c88c115dab6c09935d658b57cf229b538a3cb3d407647211c8847e46db07f9cff65af2835dfc7732be9b443fae3",
  "link": "http://192.168.1.13:8008/state/318c9fa678220444fb9b209a57c849320a7f61c984e5b8a6a56880030728bdb530a5d0?head=bea2911b4d84b7c7300fc4a9eb6b56b7ddc59c88c115dab6c09935d658b57cf229b538a3cb3d407647211c8847e46db07f9cff65af2835dfc7732be9b443fae3"

}

我将帐户数据发布在sawtooth-rest-api上,如果详细信息正确(由处理器检查),则将带有附加“公钥”的帐户插入到区块链中。这是帐户protobuf类,在将其插入到区块链之前已被序列化。

message Account {
  string public_key = 1;
  string user_type = 2;
  string adhaar_number = 3;
  string phone_number = 4;
  string pan_card_number = 5;
}
 transaction = Account()
 transaction.ParseFromString( base64.b64decode(data.encode()))

 THat just gave a number 129. 

更新: 帐户数据序列化输出为         b'\ nB033c10fa02a3b602f008e7837a48d4492f5105417111404c4404b49f51222d30c1 \ x12 $ 60405711-dd32-47c1-a914-3e19ee5177b1 \ x1a \ x06seller“ \ x11978-1-61207-456-6 * \ x10 + 64(0)19727879362 \ r0-609-80129-5'

当我对base64进行编码时,它给出了与我从数据键下的sawtooth api获得的字符串完全相同的字符串。 但不知何故,transaction.ParseFromString仅给出3位数的整数,无法取回该帐户。

抱歉,我发现了这一点:

之后
account=transaction.ParseFromString(<serializedBytes>)

可以像普通的类变量一样访问帐户详细信息。

account.public_key 
account.adhaar_number 

1 个答案:

答案 0 :(得分:1)

如果我的理解是正确的,则可以通过REST API /state/xxxx/state?address=xxxx.来检索数据

通过setState或类似的调用将数据放在TransactionProcessor中的链上时,它将首先进行base64编码。

您将需要进行base64解码,然后对该结果进行ParseFromString