映射(Mapping)和地址(Address)

Addresses (地址)

以太坊区块链由 _ account _ (账户)组成,你可以把它想象成银行账户。一个帐户的余额是 以太 (在以太坊区块链上使用的币种),你可以和其他帐户之间支付和接受以太币,就像你的银行帐户可以电汇资金到其他银行帐户一样。

所以我们可以指定"地址"作为僵尸主人的 ID。当用户通过与我们的应用程序交互来创建新的僵尸时,新僵尸的所有权被设置到调用者的以太坊地址下。

Mapping(映射)

我们看到了 _ 结构体 _ 和 _ 数组 _ 。 映射 是另一种在 Solidity 中存储有组织数据的方法。

映射是这样定义的:

dart 复制代码
//对于金融应用程序,将用户的余额保存在一个 uint类型的变量中:
mapping (address => uint) public accountBalance;
//或者可以用来通过userId 存储/查找的用户名
mapping (uint => string) userIdToName;

映射本质上是存储和查找数据所用的键-值对。在第一个例子中,键是一个 address,值是一个 uint,在第二个例子中,键是一个uint,值是一个 string。

实战演习

为了存储僵尸的所有权,我们会使用到两个映射:一个记录僵尸拥有者的地址,另一个记录某地址所拥有僵尸的数量。

1.创建一个叫做 zombieToOwner 的映射。其键是一个uint(我们将根据它的 id 存储和查找僵尸),值为 address。映射属性为public。

2.创建一个名为 ownerZombieCount 的映射,其中键是 address,值是 uint。

dart 复制代码
pragma solidity ^0.4.19;

contract ZombieFactory {

    event NewZombie(uint zombieId, string name, uint dna);

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    // 在这里定义映射
    mapping (uint => address) public zombieToOwner;
    mapping (address => uint) ownerZombieCount;

    function _createZombie(string _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
        NewZombie(id, _name, _dna);
    }

    function _generateRandomDna(string _str) private view returns (uint) {
        uint rand = uint(keccak256(_str));
        return rand % dnaModulus;
    }

    function createRandomZombie(string _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }

}
相关推荐
网渡科技13 小时前
RWA解决供应链金融中的痛点:从应收账款数字化到链上资产融资
金融·区块链
大力财经18 小时前
抖音生活服务品牌零售行业峰会在杭州举办,探索线下生意新增量
大数据·人工智能·区块链
链上日记1 天前
从公开信息看WEEX的运营轨迹
大数据·区块链
baopixiaoz2 天前
BeeQuant × BeeAgent:AI量化新范式
大数据·人工智能·python·区块链
磐链科技2 天前
去中心化交易所(DEX)开发实战:从Uniswap V2合约设计到生产环境上线
去中心化·区块链
Web3_Daisy2 天前
Robinhood Chain 的 Meme 热潮背后:RWA 正在成为新的流动性入口
区块链
cmes_love2 天前
国内期货Level2五档行情与逐笔成交数据介绍
数据库·区块链
DevOpenClub2 天前
多市场行情如何统一时间与币种:A 股、港股、美股监控数据契约
区块链
cmes_love2 天前
CME和CBOT外盘期货数据下载资源介绍
数据库·区块链
微三云 - 廖会灵 (私域系统开发)2 天前
实体资产数字化实践:基于区块链 RWA 的酒店数字权益解决方案
区块链