映射(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);
    }

}
相关推荐
S***42801 小时前
Web3.0在去中心化应用中的前端框架
前端框架·web3·去中心化
青云交3 小时前
Java 大视界 -- 基于 Java 的大数据分布式存储在数字媒体内容存储与版权保护中的应用
java·性能优化·区块链·分布式存储·版权保护·数字媒体·ai 识别
2501_9418108316 小时前
Web3去中心化应用在跨链资产流转体系中的架构设计与落地实践解析
区块链
东南门吹雪21 小时前
PostgreSQL与MySQL的锁与隔离级别
mysql·postgresql·区块链
5***79001 天前
Rust在区块链智能合约中的安全实践
rust·区块链·智能合约
java之书1 天前
1. web3.0 概念理解
web3
MicroTech20251 天前
微算法科技(NASDAQ :MLGO)基于区块链的混合数据驱动认知算法:开启智能安全新范式
科技·安全·区块链
wangchenggong19882 天前
Foundry初始化、编译、测试、部署智能合约全流程介绍
区块链·智能合约
矶鹬笛手2 天前
(2.2) 新一代信息技术及应用
大数据·云计算·区块链·时序数据库
天涯学馆2 天前
Solidity合约升级:让你的区块链代码永葆青春的硬核攻略
智能合约·solidity