『壹』 区块链在物联网的大规模应运是一种必然趋势吗你怎么看
区块链技术在很多行业都可以应用到。不过现在区块链技术还在发展中,就像初期的互联网一样,有一些投机的人会浑水摸鱼,但我相信,区块链技术的发展,会让人们生活的更便捷。
区块链+物联网的应用,让我联想到之前关注的一个叫INT的项目,方向是一样的,落地的机会感觉还挺大的,可以了解一下。
另外,不止物联网,在社交电商领域,区块链技术的应用也更得心应手,SEC社交电商链就是其中之一。SEC项目横跨区块链和社交电商两大领域都存在着快速发展的红利。社交电商的市场份额不断扩大,每年以50%以上的速度在增长,仅微信从业人数已超3600万,消费人群超2亿,SEC有机会成为用户最多的应用之一,潜在商业价值无可估量。
『贰』 【深度知识】以太坊数据序列化RLP编码/解码原理
RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。
对象序列化方法有很多种,常见的像JSON编码,但是JSON有个明显的缺点:编码结果比较大。例如有如下的结构:
变量s序列化的结果是{"name":"icattlecoder","sex":"male"},字符串长度35,实际有效数据是icattlecoder 和male,共计16个字节,我们可以看到JSON的序列化时引入了太多的冗余信息。假设以太坊采用JSON来序列化,那么本来50GB的区块链可能现在就要100GB,当然实际没这么简单。
所以,以太坊需要设计一种结果更小的编码方法。
RLP编码的定义只处理两类数据:一类是字符串(例如字节数组),一类是列表。字符串指的是一串二进制数据,列表是一个嵌套递归的结构,里面可以包含字符串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一个复杂的列表。其他类型的数据需要转成以上的两类,转换的规则不是RLP编码定义的,可以根据自己的规则转换,例如struct可以转成列表,int可以转成二进制(属于字符串一类),以太坊中整数都以大端形式存储。
从RLP编码的名字可以看出它的特点:一个是递归,被编码的数据是递归的结构,编码算法也是递归进行处理的;二是长度前缀,也就是RLP编码都带有一个前缀,这个前缀是跟被编码数据的长度相关的,从下面的编码规则中可以看出这一点。
对于值在[0, 127]之间的单个字节,其编码是其本身。
例1:a的编码是97。
如果byte数组长度l <= 55,编码的结果是数组本身,再加上128+l作为前缀。
例2:空字符串编码是128,即128 = 128 + 0。
例3:abc编码结果是131 97 98 99,其中131=128+len("abc"),97 98 99依次是a b c。
如果数组长度大于55, 编码结果第一个是183加数组长度的编码的长度,然后是数组长度的本身的编码,最后是byte数组的编码。
请把上面的规则多读几篇,特别是数组长度的编码的长度。
例4:编码下面这段字符串:
The length of this sentence is more than 55 bytes, I know it because I pre-designed it
这段字符串共86个字节,而86的编码只需要一个字节,那就是它自己,因此,编码的结果如下:
184 86 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前三个字节的计算方式如下:
184 = 183 + 1,因为数组长度86编码后仅占用一个字节。
86即数组长度86
84是T的编码
例5:编码一个重复1024次"a"的字符串,其结果为:185 4 0 97 97 97 97 97 97 ...。
1024按 big endian编码为004 0,省略掉前面的零,长度为2,因此185 = 183 + 2。
规则1~3定义了byte数组的编码方案,下面介绍列表的编码规则。在此之前,我们先定义列表长度是指子列表编码后的长度之和。
如果列表长度小于55,编码结果第一位是192加列表长度的编码的长度,然后依次连接各子列表的编码。
注意规则4本身是递归定义的。
例6:["abc", "def"]的编码结果是200 131 97 98 99 131 100 101 102。
其中abc的编码为131 97 98 99,def的编码为131 100 101 102。两个子字符串的编码后总长度是8,因此编码结果第一位计算得出:192 + 8 = 200。
如果列表长度超过55,编码结果第一位是247加列表长度的编码长度,然后是列表长度本身的编码,最后依次连接各子列表的编码。
规则5本身也是递归定义的,和规则3相似。
例7:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
的编码结果是:
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前两个字节的计算方式如下:
248 = 247 +1
88 = 86 + 2,在规则3的示例中,长度为86,而在此例中,由于有两个子字符串,每个子字符串本身的长度的编码各占1字节,因此总共占2字节。
第3个字节179依据规则2得出179 = 128 + 51
第55个字节163同样依据规则2得出163 = 128 + 35
例8:最后我们再来看个稍复杂点的例子以加深理解递归长度前缀,
["abc",["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]]
编码结果是:
248 94 131 97 98 99 248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
列表第一项字符串abc根据规则2,编码结果为131 97 98 99,长度为4。
列表第二项也是一个列表项:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
根据规则5,结果为
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
长度为90,因此,整个列表的编码结果第二位是90 + 4 = 94, 占用1个字节,第一位247 + 1 = 248
以上5条就是RPL的全部编码规则。
各语言在具体实现RLP编码时,首先需要将对像映射成byte数组或列表两种形式。以go语言编码struct为例,会将其映射为列表,例如Student这个对象处理成列表["icattlecoder","male"]
如果编码map类型,可以采用以下列表形式:
[["",""],["",""],["",""]]
解码时,首先根据编码结果第一个字节f的大小,执行以下的规则判断:
1.如果f∈ [0,128),那么它是一个字节本身。
2.如果f∈[128,184),那么它是一个长度不超过55的byte数组,数组的长度为 l=f-128
3.如果f∈[184,192),那么它是一个长度超过55的数组,长度本身的编码长度ll=f-183,然后从第二个字节开始读取长度为ll的bytes,按照BigEndian编码成整数l,l即为数组的长度。
4.如果f∈(192,247],那么它是一个编码后总长度不超过55的列表,列表长度为l=f-192。递归使用规则1~4进行解码。
5.如果f∈(247,256],那么它是编码后长度大于55的列表,其长度本身的编码长度ll=f-247,然后从第二个字节读取长度为ll的bytes,按BigEndian编码成整数l,l即为子列表长度。然后递归根据解码规则进行解码。
以上解释了什么叫递归长度前缀编码,这个名字本身很好的解释了编码规则。
(1) 以太坊源码学习—RLP编码( https://segmentfault.com/a/1190000011763339 )
(2)简单分析RLP编码原理
( https://blog.csdn.net/itchosen/article/details/78183991 )
『叁』 如何查看区块链代码(怎么看区块链地址)
怎么样在以太坊上查询区块链币可以输入钱包地址、交易ID、区块哈希或者区块高度等信息直接查询,非常方便。
如果是查询账户余额、账户的历史交易数据等信息,建议直接输入钱包地址查询;如果是查询某笔转账的相关信息,比如是否到账、进展如何,输入交易ID是最方便的。
当然了,区块链浏览器不仅可以查询自己的账户,也可以查询别人的账户以及相关的交易信息,包括比特币创始人中本聪的账户。
怎样通过RPC命令实现区块链的查询基本架构如下:
前端web基于socket.io或者REST实现,
后端加一层mongodb/mysql等数据库来代替单机leveldb做数据存储
目的应该是:
1.加速查询
2.做更高层的数据分析
3.做分布式数据库
思考:
这些online的查询固然可以方便我们的日常用,那如何与相关应用集成呢?我们是否可以通过简单的rpc命令实现同等的效果?
有几个用处:
1.大家都可以做自己的qukuai.com或blockchain.info的查询:)
2.集成RPC命令到自己的店铺,收款后查询用
3.集成到钱包应用
4.其他应用场景
cmd分析:
根据高度height查blockhash
./bitcoin-cligetblockhash19999
2.然后根据blockhash查block信息
./bitcoin-cligetblock
{
"hash":"",
"confirmations":263032,
"size":215,
"height":19999,
"version":1,
"merkleroot":"",
"tx":[
""
],
"time":1248291140,
"nonce":1085206531,
"bits":"1d00ffff",
"difficulty":1.00000000,
"chainwork":"",
"previousblockhash":"",
"nextblockhash":""
}
3.根据tx查询单笔交易的信息:
没建index时,只能查询自己钱包的信息,若不是钱包的交易,则返回如下:
./bitcoin-cligetrawtransaction
error:{"code":-5,"message":"Invalidornon-wallettransactionid"}
那怎么办呢?直接分析代码找原因:
//Returntransactionintx,andifitwasfoundinsideablock,itshashisplacedinhashBlock
boolGetTransaction(constuint256hash,CTransactiontxOut,uint256hashBlock,boolfAllowSlow)
{
CBlockIndex*pindexSlow=NULL;
{
LOCK(cs_main);
{
if(mempool.lookup(hash,txOut))
{
returntrue;
}
}
if(fTxIndex){
CDiskTxPospostx;
if(pblocktree-ReadTxIndex(hash,postx)){
CAutoFilefile(OpenBlockFile(postx,true),SER_DISK,CLIENT_VERSION);
CBlockHeaderheader;
try{
fileheader;
fseek(file,postx.nTxOffset,SEEK_CUR);
filetxOut;
}catch(std::exceptione){
returnerror("%s:DeserializeorI/Oerror-%s",__func__,e.what());
}
hashBlock=header.GetHash();
if(txOut.GetHash()!=hash)
returnerror("%s:txidmismatch",__func__);
returntrue;
}
}
if(fAllowSlow){//,andscanit
intnHeight=-1;
{
CCoinsViewCacheview=*pcoinsTip;
CCoinscoins;
if(view.GetCoins(hash,coins))
nHeight=coins.nHeight;
}
if(nHeight0)
pindexSlow=chainActive[nHeight];
}
}
if(pindexSlow){
CBlockblock;
if(ReadBlockFromDisk(block,pindexSlow)){
BOOST_FOREACH(constCTransactiontx,block.vtx){
if(tx.GetHash()==hash){
txOut=tx;
hashBlock=pindexSlow-GetBlockHash();
returntrue;
}
}
}
}
returnfalse;
}
区块链指数在哪里看区块链指数如下
1.第一是在任何一个交易软件中输入指数代码399286即可看到指数的走势;
2.第二是在深交所行情系统和国证指数网查看区块链50指数的走势;
3.第三则是在相关股票网站中通过输入区块链50来看即时行情走势。
区块链指数在2019年12月24日已经是在深交所上线了,因而我们也是能直接看到这一指数的走势,并且对相关区块链个股进行操作。
如何查询存证数据的区块链信息?
通过易保全进行区块链存证、网络取证的数据都能在线出具相关证书,通过证书上的备案号,可直接通过易保全和相关仲裁委官网进行区块链查询,包括保全主体、保全时间戳、广州互联网法院证据编号、区块链哈希值等相关信息。
当用户在广州互联网法院立案时,可通过互联网法院直接调取在微版权上的存证证据。广州互联网法院作为保全链开放平台上的区块链节点之一,可为用户节约大量的诉讼时间、诉讼成本和司法资源。
『肆』 road币值得囤币吗
ROAD-一个旨在于利用区块链技术,来创建一个分布式汽车账本系统,通过车辆与人车辆与车辆之间,车辆与服务商之间的数据共享,来让数据产生价值,从而为用户带来激励的项目。
ROAD,可以理解为是一个汽车链,它通过区块链的技术,将区块链与物联网相结合,通过大数据的统计结合区块链的公开透明化,无法篡改的特性,来使得人,车,物,维修商,等环节完成数据采集分析,从而难为众多的消费者和供应商以及维修商提供相应的激励措施。
1-项目方可以利用区块链分布式存储不可篡改的特性,对
车辆的违章信息,车辆故障事故等信息进行记录,从而在以后的交易维修等过程当中,来解决车辆数据的造假问题。2-通过智能合约的自动执行特点,接入相应的汽车经销商,汽车管理,汽车使用人和汽车维修等各个环节,用区块链来记录这辆车的完整的使用历程。
3-通过数据之间的共享来了解车辆与人,车辆与维修商之间的数据,从而为车辆使用人和维修商等提供方便快捷的安全服务。
4-通过车辆所有用户的数据分享,如保险数据,二手买卖数据,维修数据,保养数据等信息,来获取区块链的代币激励。
ROAD的创始人主要来自于阿里系,对于物联网技术和区块链的相应技术有比较深的了解,同时对于现在的国内市场也有比较多的考察。而投资资本和技术孵化则由物联网孵化资深项目团队INT来执行,这也使得项目的整体环节更加完善。
个人评测:从目前的公布信息来看,ROAD这个项目确实是一个从传统互联网中走出来的区块链团队,团队的技术作风还是比较明显的,同时资本和技术孵化机构也是相当的给力,从这一点来说,应该是有不错的发展前景。
但是无论是技术还是发展规划,都需要落地应用来实现,目前这个项目仍然是处于一个空白的落地期间,所以从目前角度来说,我们还需要谨慎的去关注它的未来落地动作。
『伍』 shot time(sec)是什么意思
我还可以根据这个字母的话,代表这含义,你就可以翻译过来了呀