打字猴:1.703878454e+09
1703878454 区块链项目开发指南 [:1703875375]
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
1703878474
1703878475
1703878476
1703878477
1703878478 要更深入地学习字符串库,可以访问https://github.com/Arachnid/Solidity-stringutils。
1703878479
1703878480
1703878481
1703878482
1703878483 区块链项目开发指南 [:1703875376]
1703878484 区块链项目开发指南 7.3 创建投注合约
1703878485
1703878486 在投注应用中,两个人可以就一场足球比赛押注,一个支持主队,另一个支持客队。他们押注同样多的钱,赢家拿走所有钱。如果比赛结果是平局,则各自拿回自己的钱。
1703878487
1703878488 我们将使用FastestLiveScores API读取比赛结果。它提供一个免费接口,允许每小时免费进行100个请求。首先,创建一个账户,然后生成一个API key。为了创建一个账户,访问https://customer.fastestlivescores.com/register,一旦建立了账户,API key就在https://customer.fastestlivescores.com/可视。可以在https://docs.crowdscores.com/找到API文档。
1703878489
1703878490 在应用中,两个人只要打一次赌,就部署一个投注合约。该合约将包含从FastestLiveScores API检索的比赛ID,每一方需要投入的wei和双方地址。双方对合约投注后,将会看到比赛结果。在比赛结束之前,他们将每隔24小时查看一次结果。
1703878491
1703878492 合约代码如下:
1703878493
1703878494
1703878495
1703878496
1703878497
1703878498
1703878499
1703878500
1703878501
1703878502
1703878503 该合约代码无须解释说明。现在使用solc.js或者Browser Solidity编译程序代码。不需要接入strings库,因为其中所有函数的可视性都被设为internal。
[ 上一页 ]  [ :1.703878454e+09 ]  [ 下一页 ]