1703878424
1703878425
1703878426
为了防止误用加密的查询(即重播攻击),第一个用一个特定加密查询Oraclize的合约成为合法的所有者。任何重复使用完全相同的字符串的合约将不被允许使用它,并且将接收一个空的结果。因此,切记在使用加密查询重新部署合约时,总是要生成新的加密字符串。
1703878427
1703878428
解码数据源
1703878429
1703878430
还有一个称为decrypt的数据源,它用于解码加密的字符串。但是这个数据源不返回任何结果,否则任何人就都有能力解码数据源和数据源的输入了。
1703878431
1703878432
它是专门应用于嵌套数据源的,用于对部分查询进行加密。这是它唯一的使用例子。
1703878433
1703878434
1703878435
1703878436
1703878438
区块链项目开发指南 7.1.7 Oraclize Web IDE
1703878439
1703878440
Oraclize提供了一个Web IDE,使用它就可以编写、编译和测试以Oraclize为基础的应用(参见http://DApp.Oraclize.it/browser-Solidity/)。
1703878441
1703878442
如果访问该链接,将注意到它和Browser Solidity看起来一模一样,它实际上就是Browser Solidity添加的一个额外功能。为了理解这个功能是什么,我们需要更深入地理解Browser Solidity。
1703878443
1703878444
Browser Solidity不仅允许用户为合约编写、编译和生成web3.js代码,还允许测试合约。到目前为止,为了测试合约,我们设置一个以太坊节点并向它发送交易。但是Browser Solidity可以不用连接至任何节点就执行合约,所有操作都在内存中进行。之所以能够这样,是因为使用了ethereumjs-vm(EVM的一种JavaScript实现)。用户可以使用ethereumjs-vm创建自己的EVM和运行字节码,也可以通过提供目标URL来配置Browser Solidity,以使用以太坊节点。UI的信息量很大,用户可以自己尝试一遍。
1703878445
1703878446
Oraclize Web IDE的特殊之处在于,它在in-memory执行环境下部署Oraclize合约,这样就不需要连接到测试网或者主网节点,但是使用Browser Solidity时必须连接到测试网或者主网节点,以测试Oraclize API。
1703878447
1703878448
1703878449
如需更多关于Oraclize的资源,请访问https://dev.Oraclize.it/。
1703878450
1703878451
1703878452
1703878453
1703878455
区块链项目开发指南 7.2 处理字符串
1703878456
1703878457
在Solidity中,处理字符串不像在其他高级编程语言(例如JavaScript、Python等)中那么简单。因此,许多Solidity开发人员使用多种库和合约,以简化字符串的处理。
1703878458
1703878459
strings库是最常见的字符串库。它通过把字符串转换为slice(切片),来进行添加、连接、分割、比较等操作。slice是一个包含字符串长度和字符串地址的数据类型。由于一个slice只需要指定offset(位移)和length(长度),因此复制和操作slices比复制和操作它们所引用的字符串要高效得多。
1703878460
1703878461
为了进一步降低gas成本,slice上的大部分函数在需要返回slice时通常会修改原slice,而非分配一个新的slice,例如,s.split(”.”)要返回第一个”.“之前的文本,将修改s以包含”.“之后的字符串部分。假设不想修改原slice,就可以使用.copy()进行备份,例如s.copy().split(”.”)。注意避免循环使用copy,因为Solidity没有内存管理,copy将导致分配很多临时的、之后被舍弃的slices。
1703878462
1703878463
复制字符串数据的函数将返回字符串,而不是slices;如果需要,这些字符串可以返回到slices用于后续处理。
1703878464
1703878465
下面来看几个使用strings库处理字符串的示例:
1703878466
1703878467
1703878468
1703878469
1703878470
该程序代码无须解释。
1703878471
1703878472
返回两个slices的函数共有两个版本:nonallocating版本(用第二个slice作实参,在适当位置进行修改)和allocating版本(分配并返回第二个slice),示例如下:
1703878473
[
上一页 ]
[ :1.703878424e+09 ]
[
下一页 ]