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

}
相关推荐
MicroTech20257 小时前
微算法科技(NASDAQ: MLGO)融合二次矩阵变换模型,研发基于区块链的可溯源IP版权保护算法
区块链
天涯学馆8 小时前
Solidity多重签名合约:打造超安全的区块链投票机制
智能合约·solidity
科技圈快讯14 小时前
解构IDP未来前景:去中心化金融的“阳谋”与以人为本的生态蓝图(解读)
金融·去中心化·区块链
kida_yuan17 小时前
【以太来袭】1. 企业以太坊回归
区块链
央链知播1 天前
三板汇茶咖空间签约“可信资产IPO与数链金融RWA”链改2.0项目联合实验室
金融·区块链·业界资讯
taxunjishu1 天前
DeviceNet 转 Profinet:西门子 S7 - 1500 PLC 与欧姆龙伺服电机在汽车焊装生产线夹具快速切换定位的通讯配置案例
人工智能·区块链·工业物联网·工业自动化·profinet·devicenet·总线协议转换网关
草原猫2 天前
市值机器人:智能力量与监管博弈下的金融新生态
区块链
alex1002 天前
AP2协议与AI Agent经济:重塑金融生态与主权国家挑战
人工智能·金融·web3·去中心化·区块链·ai agent
n8n2 天前
Go语言在区块链开发中的应用场景详解
go·区块链
alex1002 天前
【一天一个Web3概念】区块链中的双花问题:概念、案例与防范措施
web3·区块链·双花