github开源链游详细搭建文档

文章目录

  • 一、启动项目
    • 1.1 修改文件
    • 1.2 安装依赖
    • 1.3 合约部署
    • 1.4 前端运行
  • 二、问题解决
    • 2.1 角色信息问题
    • 2.2 该NFT合约的相关信息

一、启动项目

1.1 修改文件

  1. 进入文件 hardhat.config.js ,增加一个钱包私钥和网络 Token。
/**
 * @type import('hardhat/config').HardhatUserConfig
 */
require("@nomiclabs/hardhat-waffle");

const config = {
    alchemy: "9aa3d95b3bc440fa88ea12eaa4456161", // 测试网络token,如果节点rpc不需要,可以忽略
    privateKey: "填写你的地址私钥", // 地址私钥
};

module.exports = {
    solidity: "0.8.4",
    networks: {
        goerli: {
            url: `https://data-seed-prebsc-1-s1.binance.org:8545/`,   //goerli 节点rpc地址
            accounts: [config.privateKey], 
            chainId: 97,                                              //goerli 节点chainId
        },
        sepolia: {
            url: `https://data-seed-prebsc-1-s1.binance.org:8545/`,    //sepolia 节点rpc地址
            accounts: [config.privateKey],                             
            chainId: 97,                                               //sepolia 节点chainId
        },
    },
};
  1. 修改文件 scripts.deploy.js 以及 test.test.js

./vue-game-dapp/scripts/deploy.js

"https://www.helloimg.com/i/2025/01/04/6778c27bb9188.png",
"https://www.helloimg.com/i/2025/01/04/6778c27c26a3f.png",
"https://www.helloimg.com/i/2025/01/04/6778c27c25247.png",

./vue-game-dapp/test/test.js

"https://www.helloimg.com/i/2025/01/04/6778c27bb9188.png",
"https://www.helloimg.com/i/2025/01/04/6778c27c26a3f.png",
"https://www.helloimg.com/i/2025/01/04/6778c27c25247.png",

1.2 安装依赖

  1. 安装依赖
npm install
  1. 测试合约
npx hardhat test


以下是打印内容:
  EpicGame
Done initializing 刘备 w/ HP 100, img https://www.helloimg.com/i/2025/01/04/6778c27bb9188.png
Done initializing 关羽 w/ HP 200, img https://www.helloimg.com/i/2025/01/04/6778c27c26a3f.png
Done initializing 张飞 w/ HP 300, img https://www.helloimg.com/i/2025/01/04/6778c27c25247.png
Done initializing boss 吕布 w/ HP 1000, img https://resources.crayon.dev/suangguosha/lvbu.png
    ✔ Should have 3 default characters
    ✔ Should have a boss


  2 passing (486ms)

npm notice
npm notice New major version of npm available! 10.8.2 -> 11.0.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.0.0
npm notice To update run: npm install -g npm@11.0.0
npm notice

1.3 合约部署

  • 部署到 Goerli 测试网络

发布部署合约,下面的指令为部署到 ETH 测试网络 Goerli

npx hardhat run scripts/deploy.js --network goerli
  • 部署到 Sepolia 测试网络

发布部署合约,下面的指令为部署到 ETH 测试网络 Sepolia

npx hardhat run scripts/deploy.js --network sepolia

水龙头

  • 测试网络 Goerli:https://goerlifaucet.com/, 每个账号每天可以获取 0.1ETH,由于水龙头紧张,现在领取的钱包地址必须主网有用一点额度
  • 测试网络 Sepolia:https://sepoliafaucet.com/ ,每个账号每天可以获取 0.5ETH
  • 测试网络 Sepolia:https://zan.top/faucet,每个账号每天可以获取 0.1ETH

注意:合约部署以后,会返回以下信息:

% npx hardhat run scripts/deploy.js --network sepolia

返回以下信息:
Deploying contracts with the account:  0x4838B106FCe9648Bdf1E7888BF73cE8B0BAD5888   //部署合约的地址
Account balance:  108793806521913501                                                //部署合约余额
Contract deployed to:  0x666cF96F216DfA1ad2eAB522437eabF4E1F93888                   //部署的合约地址

我们需要保存部署的合约地址,后面将会用到

1.4 前端运行

  1. 进入前端目录:
cd game
  1. 安装依赖
yarn install
  1. 设置合约地址

编辑文件 ./vue-game-dapp/game/.env,把部署的合约地址填入。

CONTRACT_ADDRESS="0x666cF96F216DfA1ad2eAB522437eabF4E1F93888"

编辑文件 ./vue-game-dapp/game/src/store/index.js

26行:        
contract_address: "0x666cF96F216DfA1ad2eAB522437eabF4E1F93888", // process.env.CONTRACT_ADDRESS, // 合约地址

  1. 启动前端
yarn serve

即可正常启动。

二、问题解决

2.1 角色信息问题

一定要注意:角色名称、角色图片的 URI 、角色血量、角色攻击伤害、boss名称、boss 图片的 URI、boss 血量、boss 攻击伤害 是存储在NFT合约当中的,并不是在前端页面修改,一定需要注意!!!

如果你需要在remix中部署这个合约,那么需要注意:

  1. 安装依赖

    部署EpicGame.sol时,合约中引入了./libraries/Base64.sol,所以我们需要在remix中放入Base64.sol,这个在源码中已经存在了。

  2. 配置 Solidity 编译器

    选择合适的编译器版本(我进行了测试,我们需要0.8.26 版本的编译器才不会编译报错)。

  3. 部署合约

    • 主合约是EpicGame,在部署时,需要选择该合约
    • Deploy 部分,你需要输入构造函数参数。这些参数包括:
      • characterNames(角色的名字数组)
      • characterImageURIs(角色图片的 URI 数组)
      • characterHp(角色血量数组)
      • characterAttackDmg(角色攻击伤害数组)
      • bossName(boss 的名字)
      • bossImageURI(boss 图片的 URI)
      • bossHp(boss 血量)
      • bossAttackDamage(boss 攻击伤害)

例如,我们可以输入如下参数:

characterNames:["刘备", "关羽", "张飞"]
characterImageURIs:["https://www.helloimg.com/i/2025/01/04/6778c27bb9188.png","https://www.helloimg.com/i/2025/01/04/6778c27c26a3f.png","https://www.helloimg.com/i/2025/01/04/6778c27c25247.png"]
characterHp:[100, 200, 300]
characterAttackDmg:[100, 50, 25]
bossName:吕布
bossImageURI:https://www.helloimg.com/i/2025/01/04/6778c27c07c77.png
bossHp:1000
bossAttackDamage:50

输入完这些参数后,点击 Deploy 按钮进行部署。

  1. 与合约交互

部署成功后,我们可以通过 Remix 提供的界面与合约进行交互。你可以:

  • 调用 mintCharacterNFT 来铸造 NFT。

  • 使用 attackBoss 发起攻击。

  • 查看 checkIfUserHasNFT 以检查用户是否拥有 NFT。

  • 查看boss信息,使用bigBoss

    0:string: name 吕布
    1:string: imageURI https://resources.crayon.dev/suangguosha/lvbu.png
    2:uint256: hp 1000
    3:uint256: maxHp 1000
    4:uint256: attackDamage 50
    
  • 查看角色信息,使用getAllDefaultCharacters

    tuple(uint256,string,string,uint256,uint256,uint256)[]: 0,刘备,https://www.helloimg.com/i/2025/01/04/6778c27bb9188.png,100,100,100,1,关羽,https://www.helloimg.com/i/2025/01/04/6778c27c26a3f.png,200,200,50,2,张飞,https://www.helloimg.com/i/2025/01/04/6778c27c25247.png,300,300,25
    
  • 或者调用其他公共方法,如 nftHoldersgetBigBoss等,来获取更多信息。

所以,我们如果在终端使用命令部署合约之前,一定要修改角色信息,防止部署合约后,角色信息无法修改

2.2 该NFT合约的相关信息

  • 合约代码
// SPDX-License-Identifier: MIT

pragma solidity >=0.4.22 <0.9.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

import "./Base64.sol";
import "hardhat/console.sol";

contract EpicGame is ERC721 {
    struct CharacterAttributes {
        uint256 characterIndex;
        string name;
        string imageURI;
        uint256 hp;
        uint256 maxHp;
        uint256 attackDamage;
    }

    struct BigBoss {
        string name;
        string imageURI;
        uint256 hp;
        uint256 maxHp;
        uint256 attackDamage;
    }

    BigBoss public bigBoss;

    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    CharacterAttributes[] defaultCharacters;

    mapping(uint256 => CharacterAttributes) public nftHolderAttributes;

    mapping(address => uint256) public nftHolders;

    event CharacterNFTMinted(
        address sender,
        uint256 tokenId,
        uint256 characterIndex
    );
    event AttackComplete(uint256 newBossHp, uint256 newPlayerHp);

    constructor(
        string[] memory characterNames,
        string[] memory characterImageURIs,
        uint256[] memory characterHp,
        uint256[] memory characterAttackDmg,
        string memory bossName,
        string memory bossImageURI,
        uint256 bossHp,
        uint256 bossAttackDamage
    ) ERC721("Heroes", "HERO") {
        for (uint256 i = 0; i < characterNames.length; i += 1) {
            defaultCharacters.push(
                CharacterAttributes({
                    characterIndex: i,
                    name: characterNames[i],
                    imageURI: characterImageURIs[i],
                    hp: characterHp[i],
                    maxHp: characterHp[i],
                    attackDamage: characterAttackDmg[i]
                })
            );

            CharacterAttributes memory c = defaultCharacters[i];
            console.log(
                "Done initializing %s w/ HP %s, img %s",
                c.name,
                c.hp,
                c.imageURI
            );
        }

        bigBoss = BigBoss({
            name: bossName,
            imageURI: bossImageURI,
            hp: bossHp,
            maxHp: bossHp,
            attackDamage: bossAttackDamage
        });

        console.log(
            "Done initializing boss %s w/ HP %s, img %s",
            bigBoss.name,
            bigBoss.hp,
            bigBoss.imageURI
        );

        _tokenIds.increment();
    }

    function mintCharacterNFT(uint256 _characterIndex) external {
        uint256 newItemId = _tokenIds.current();

        _safeMint(msg.sender, newItemId);

        nftHolderAttributes[newItemId] = CharacterAttributes({
            characterIndex: _characterIndex,
            name: defaultCharacters[_characterIndex].name,
            imageURI: defaultCharacters[_characterIndex].imageURI,
            hp: defaultCharacters[_characterIndex].hp,
            maxHp: defaultCharacters[_characterIndex].hp,
            attackDamage: defaultCharacters[_characterIndex].attackDamage
        });

        console.log(
            "Minted NFT w/ tokenId %s and characterIndex %s",
            newItemId,
            _characterIndex
        );

        nftHolders[msg.sender] = newItemId;

        _tokenIds.increment();
        emit CharacterNFTMinted(msg.sender, newItemId, _characterIndex);
    }

    function attackBoss() public {
        uint256 nftTokenIdOfPlayer = nftHolders[msg.sender];
        CharacterAttributes storage player = nftHolderAttributes[
            nftTokenIdOfPlayer
        ];
        console.log(
            "\nPlayer w/ character %s about to attack. Has %s HP and %s AD",
            player.name,
            player.hp,
            player.attackDamage
        );
        console.log(
            "Boss %s has %s HP and %s AD",
            bigBoss.name,
            bigBoss.hp,
            bigBoss.attackDamage
        );

        require(player.hp > 0, "Error: character must have HP to attack boss.");
        require(bigBoss.hp > 0, "Error: boss must have HP to attack boss.");

        if (bigBoss.hp < player.attackDamage) {
            bigBoss.hp = 0;
        } else {
            bigBoss.hp = bigBoss.hp - player.attackDamage;
        }

        if (player.hp < bigBoss.attackDamage) {
            player.hp = 0;
        } else {
            player.hp = player.hp - bigBoss.attackDamage;
        }

        console.log("Boss attacked player. New player hp: %s\n", player.hp);
        emit AttackComplete(bigBoss.hp, player.hp);
    }

    function checkIfUserHasNFT()
        public
        view
        returns (CharacterAttributes memory)
    {
        uint256 userNftTokenId = nftHolders[msg.sender];
        if (userNftTokenId > 0) {
            return nftHolderAttributes[userNftTokenId];
        } else {
            CharacterAttributes memory emptyStruct;
            return emptyStruct;
        }
    }

    function getAllDefaultCharacters()
        public
        view
        returns (CharacterAttributes[] memory)
    {
        return defaultCharacters;
    }

    function getBigBoss() public view returns (BigBoss memory) {
        return bigBoss;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override
        returns (string memory)
    {
        CharacterAttributes memory charAttributes = nftHolderAttributes[
            _tokenId
        ];

        string memory strHp = Strings.toString(charAttributes.hp);
        string memory strMaxHp = Strings.toString(charAttributes.maxHp);
        string memory strAttackDamage = Strings.toString(
            charAttributes.attackDamage
        );

        string memory json = Base64.encode(
            bytes(
                string(
                    abi.encodePacked(
                        '{"name": "',
                        charAttributes.name,
                        " -- NFT #: ",
                        Strings.toString(_tokenId),
                        '", "description": "This is an NFT that lets people play in the game Metaverse Slayer!", "image": "',
                        charAttributes.imageURI,
                        '", "attributes": [ { "trait_type": "Health Points", "value": ',
                        strHp,
                        ', "max_value":',
                        strMaxHp,
                        '}, { "trait_type": "Attack Damage", "value": ',
                        strAttackDamage,
                        "} ]}"
                    )
                )
            )
        );

        string memory output = string(
            abi.encodePacked("data:application/json;base64,", json)
        );

        return output;
    }
}
  • 合约ABI
[
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "to",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "approve",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "attackBoss",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "string[]",
				"name": "characterNames",
				"type": "string[]"
			},
			{
				"internalType": "string[]",
				"name": "characterImageURIs",
				"type": "string[]"
			},
			{
				"internalType": "uint256[]",
				"name": "characterHp",
				"type": "uint256[]"
			},
			{
				"internalType": "uint256[]",
				"name": "characterAttackDmg",
				"type": "uint256[]"
			},
			{
				"internalType": "string",
				"name": "bossName",
				"type": "string"
			},
			{
				"internalType": "string",
				"name": "bossImageURI",
				"type": "string"
			},
			{
				"internalType": "uint256",
				"name": "bossHp",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "bossAttackDamage",
				"type": "uint256"
			}
		],
		"stateMutability": "nonpayable",
		"type": "constructor"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "sender",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"internalType": "address",
				"name": "owner",
				"type": "address"
			}
		],
		"name": "ERC721IncorrectOwner",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "operator",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "ERC721InsufficientApproval",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "approver",
				"type": "address"
			}
		],
		"name": "ERC721InvalidApprover",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "operator",
				"type": "address"
			}
		],
		"name": "ERC721InvalidOperator",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "owner",
				"type": "address"
			}
		],
		"name": "ERC721InvalidOwner",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "receiver",
				"type": "address"
			}
		],
		"name": "ERC721InvalidReceiver",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "sender",
				"type": "address"
			}
		],
		"name": "ERC721InvalidSender",
		"type": "error"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "ERC721NonexistentToken",
		"type": "error"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "owner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "approved",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "Approval",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "owner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "operator",
				"type": "address"
			},
			{
				"indexed": false,
				"internalType": "bool",
				"name": "approved",
				"type": "bool"
			}
		],
		"name": "ApprovalForAll",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "newBossHp",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "newPlayerHp",
				"type": "uint256"
			}
		],
		"name": "AttackComplete",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "address",
				"name": "sender",
				"type": "address"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "characterIndex",
				"type": "uint256"
			}
		],
		"name": "CharacterNFTMinted",
		"type": "event"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "_characterIndex",
				"type": "uint256"
			}
		],
		"name": "mintCharacterNFT",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "from",
				"type": "address"
			},
			{
				"internalType": "address",
				"name": "to",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "safeTransferFrom",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "from",
				"type": "address"
			},
			{
				"internalType": "address",
				"name": "to",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"internalType": "bytes",
				"name": "data",
				"type": "bytes"
			}
		],
		"name": "safeTransferFrom",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "operator",
				"type": "address"
			},
			{
				"internalType": "bool",
				"name": "approved",
				"type": "bool"
			}
		],
		"name": "setApprovalForAll",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "from",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "to",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "Transfer",
		"type": "event"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "from",
				"type": "address"
			},
			{
				"internalType": "address",
				"name": "to",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "transferFrom",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "owner",
				"type": "address"
			}
		],
		"name": "balanceOf",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "bigBoss",
		"outputs": [
			{
				"internalType": "string",
				"name": "name",
				"type": "string"
			},
			{
				"internalType": "string",
				"name": "imageURI",
				"type": "string"
			},
			{
				"internalType": "uint256",
				"name": "hp",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "maxHp",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "attackDamage",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "checkIfUserHasNFT",
		"outputs": [
			{
				"components": [
					{
						"internalType": "uint256",
						"name": "characterIndex",
						"type": "uint256"
					},
					{
						"internalType": "string",
						"name": "name",
						"type": "string"
					},
					{
						"internalType": "string",
						"name": "imageURI",
						"type": "string"
					},
					{
						"internalType": "uint256",
						"name": "hp",
						"type": "uint256"
					},
					{
						"internalType": "uint256",
						"name": "maxHp",
						"type": "uint256"
					},
					{
						"internalType": "uint256",
						"name": "attackDamage",
						"type": "uint256"
					}
				],
				"internalType": "struct EpicGame.CharacterAttributes",
				"name": "",
				"type": "tuple"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "getAllDefaultCharacters",
		"outputs": [
			{
				"components": [
					{
						"internalType": "uint256",
						"name": "characterIndex",
						"type": "uint256"
					},
					{
						"internalType": "string",
						"name": "name",
						"type": "string"
					},
					{
						"internalType": "string",
						"name": "imageURI",
						"type": "string"
					},
					{
						"internalType": "uint256",
						"name": "hp",
						"type": "uint256"
					},
					{
						"internalType": "uint256",
						"name": "maxHp",
						"type": "uint256"
					},
					{
						"internalType": "uint256",
						"name": "attackDamage",
						"type": "uint256"
					}
				],
				"internalType": "struct EpicGame.CharacterAttributes[]",
				"name": "",
				"type": "tuple[]"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "getApproved",
		"outputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "getBigBoss",
		"outputs": [
			{
				"components": [
					{
						"internalType": "string",
						"name": "name",
						"type": "string"
					},
					{
						"internalType": "string",
						"name": "imageURI",
						"type": "string"
					},
					{
						"internalType": "uint256",
						"name": "hp",
						"type": "uint256"
					},
					{
						"internalType": "uint256",
						"name": "maxHp",
						"type": "uint256"
					},
					{
						"internalType": "uint256",
						"name": "attackDamage",
						"type": "uint256"
					}
				],
				"internalType": "struct EpicGame.BigBoss",
				"name": "",
				"type": "tuple"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "owner",
				"type": "address"
			},
			{
				"internalType": "address",
				"name": "operator",
				"type": "address"
			}
		],
		"name": "isApprovedForAll",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "name",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"name": "nftHolderAttributes",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "characterIndex",
				"type": "uint256"
			},
			{
				"internalType": "string",
				"name": "name",
				"type": "string"
			},
			{
				"internalType": "string",
				"name": "imageURI",
				"type": "string"
			},
			{
				"internalType": "uint256",
				"name": "hp",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "maxHp",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "attackDamage",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"name": "nftHolders",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "ownerOf",
		"outputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "bytes4",
				"name": "interfaceId",
				"type": "bytes4"
			}
		],
		"name": "supportsInterface",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "symbol",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "_tokenId",
				"type": "uint256"
			}
		],
		"name": "tokenURI",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	}
]
  • 合约Bytecode
608060405234801561000f575f80fd5b50604051614ff3380380614ff3833981810160405281019061003191906109c7565b6040518060400160405280600681526020017f4865726f657300000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4845524f00000000000000000000000000000000000000000000000000000000815250815f90816100ab9190610d24565b5080600190816100bb9190610d24565b5050505f5b88518110156103b457600c6040518060c001604052808381526020018b84815181106100ef576100ee610df3565b5b602002602001015181526020018a848151811061010f5761010e610df3565b5b6020026020010151815260200189848151811061012f5761012e610df3565b5b6020026020010151815260200189848151811061014f5761014e610df3565b5b6020026020010151815260200188848151811061016f5761016e610df3565b5b6020026020010151815250908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f015560208201518160010190816101bd9190610d24565b5060408201518160020190816101d39190610d24565b50606082015181600301556080820151816004015560a0820151816005015550505f600c828154811061020957610208610df3565b5b905f5260205f2090600602016040518060c00160405290815f820154815260200160018201805461023990610b57565b80601f016020809104026020016040519081016040528092919081815260200182805461026590610b57565b80156102b05780601f10610287576101008083540402835291602001916102b0565b820191905f5260205f20905b81548152906001019060200180831161029357829003601f168201915b505050505081526020016002820180546102c990610b57565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590610b57565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481525050905061039f604051806060016040528060258152602001614fa46025913982602001518360600151846040015161058a60201b60201c565b506001816103ad9190610e4d565b90506100c0565b506040518060a001604052808581526020018481526020018381526020018381526020018281525060065f820151815f0190816103f19190610d24565b5060208201518160010190816104079190610d24565b5060408201518160020155606082015181600301556080820151816004015590505061056d6040518060600160405280602a8152602001614fc9602a913960065f01805461045490610b57565b80601f016020809104026020016040519081016040528092919081815260200182805461048090610b57565b80156104cb5780601f106104a2576101008083540402835291602001916104cb565b820191905f5260205f20905b8154815290600101906020018083116104ae57829003601f168201915b5050505050600660020154600660010180546104e690610b57565b80601f016020809104026020016040519081016040528092919081815260200182805461051290610b57565b801561055d5780601f106105345761010080835404028352916020019161055d565b820191905f5260205f20905b81548152906001019060200180831161054057829003601f168201915b505050505061058a60201b60201c565b61057d600b61063260201b60201c565b5050505050505050610f5c565b61062c848484846040516024016105a49493929190610ed7565b6040516020818303038152906040527f5d1a971a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061064660201b60201c565b50505050565b6001815f015f828254019250508190555050565b6106678161066261066a60201b6118cc1761068960201b60201c565b60201c565b50565b5f6a636f6e736f6c652e6c6f6790505f80835160208501845afa505050565b61069b60201b6129c717819050919050565b6106a3610f2f565b565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610700826106ba565b810181811067ffffffffffffffff8211171561071f5761071e6106ca565b5b80604052505050565b5f6107316106a5565b905061073d82826106f7565b919050565b5f67ffffffffffffffff82111561075c5761075b6106ca565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561078f5761078e6106ca565b5b610798826106ba565b9050602081019050919050565b8281835e5f83830152505050565b5f6107c56107c084610775565b610728565b9050828152602081018484840111156107e1576107e0610771565b5b6107ec8482856107a5565b509392505050565b5f82601f830112610808576108076106b6565b5b81516108188482602086016107b3565b91505092915050565b5f61083361082e84610742565b610728565b905080838252602082019050602084028301858111156108565761085561076d565b5b835b8181101561089d57805167ffffffffffffffff81111561087b5761087a6106b6565b5b80860161088889826107f4565b85526020850194505050602081019050610858565b5050509392505050565b5f82601f8301126108bb576108ba6106b6565b5b81516108cb848260208601610821565b91505092915050565b5f67ffffffffffffffff8211156108ee576108ed6106ca565b5b602082029050602081019050919050565b5f819050919050565b610911816108ff565b811461091b575f80fd5b50565b5f8151905061092c81610908565b92915050565b5f61094461093f846108d4565b610728565b905080838252602082019050602084028301858111156109675761096661076d565b5b835b81811015610990578061097c888261091e565b845260208401935050602081019050610969565b5050509392505050565b5f82601f8301126109ae576109ad6106b6565b5b81516109be848260208601610932565b91505092915050565b5f805f805f805f80610100898b0312156109e4576109e36106ae565b5b5f89015167ffffffffffffffff811115610a0157610a006106b2565b5b610a0d8b828c016108a7565b985050602089015167ffffffffffffffff811115610a2e57610a2d6106b2565b5b610a3a8b828c016108a7565b975050604089015167ffffffffffffffff811115610a5b57610a5a6106b2565b5b610a678b828c0161099a565b965050606089015167ffffffffffffffff811115610a8857610a876106b2565b5b610a948b828c0161099a565b955050608089015167ffffffffffffffff811115610ab557610ab46106b2565b5b610ac18b828c016107f4565b94505060a089015167ffffffffffffffff811115610ae257610ae16106b2565b5b610aee8b828c016107f4565b93505060c0610aff8b828c0161091e565b92505060e0610b108b828c0161091e565b9150509295985092959890939650565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b6e57607f821691505b602082108103610b8157610b80610b2a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610be37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610ba8565b610bed8683610ba8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610c28610c23610c1e846108ff565b610c05565b6108ff565b9050919050565b5f819050919050565b610c4183610c0e565b610c55610c4d82610c2f565b848454610bb4565b825550505050565b5f90565b610c69610c5d565b610c74818484610c38565b505050565b5b81811015610c9757610c8c5f82610c61565b600181019050610c7a565b5050565b601f821115610cdc57610cad81610b87565b610cb684610b99565b81016020851015610cc5578190505b610cd9610cd185610b99565b830182610c79565b50505b505050565b5f82821c905092915050565b5f610cfc5f1984600802610ce1565b1980831691505092915050565b5f610d148383610ced565b9150826002028217905092915050565b610d2d82610b20565b67ffffffffffffffff811115610d4657610d456106ca565b5b610d508254610b57565b610d5b828285610c9b565b5f60209050601f831160018114610d8c575f8415610d7a578287015190505b610d848582610d09565b865550610deb565b601f198416610d9a86610b87565b5f5b82811015610dc157848901518255600182019150602085019450602081019050610d9c565b86831015610dde5784890151610dda601f891682610ced565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e57826108ff565b9150610e62836108ff565b9250828201905080821115610e7a57610e79610e20565b5b92915050565b5f82825260208201905092915050565b5f610e9a82610b20565b610ea48185610e80565b9350610eb48185602086016107a5565b610ebd816106ba565b840191505092915050565b610ed1816108ff565b82525050565b5f6080820190508181035f830152610eef8187610e90565b90508181036020830152610f038186610e90565b9050610f126040830185610ec8565b8181036060830152610f248184610e90565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b61403b80610f695f395ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c806395d89b41116100b6578063b953084e1161007a578063b953084e14610366578063c87b56dd14610384578063c8cf27f4146103b4578063d4f24c5b146103d2578063e985e9c5146103dc578063f8b81ef71461040c57610135565b806395d89b41146102b957806398da4c95146102d7578063a22cb4651461030c578063a9c3267914610328578063b88d4fde1461034a57610135565b806323b872dd116100fd57806323b872dd146101f157806342842e0e1461020d5780636352211e1461022957806370a08231146102595780637df124a11461028957610135565b806301ffc9a7146101395780630665f9611461016957806306fdde0314610187578063081812fc146101a5578063095ea7b3146101d5575b5f80fd5b610153600480360381019061014e9190612a95565b610428565b6040516101609190612ada565b60405180910390f35b610171610509565b60405161017e9190612bf5565b60405180910390f35b61018f610660565b60405161019c9190612c5d565b60405180910390f35b6101bf60048036038101906101ba9190612ca7565b6106ef565b6040516101cc9190612d11565b60405180910390f35b6101ef60048036038101906101ea9190612d54565b61070a565b005b61020b60048036038101906102069190612d92565b610720565b005b61022760048036038101906102229190612d92565b61081f565b005b610243600480360381019061023e9190612ca7565b61083e565b6040516102509190612d11565b60405180910390f35b610273600480360381019061026e9190612de2565b61084f565b6040516102809190612e1c565b60405180910390f35b6102a3600480360381019061029e9190612de2565b610905565b6040516102b09190612e1c565b60405180910390f35b6102c161091a565b6040516102ce9190612c5d565b60405180910390f35b6102f160048036038101906102ec9190612ca7565b6109aa565b60405161030396959493929190612e35565b60405180910390f35b61032660048036038101906103219190612ecc565b610aee565b005b610330610b04565b604051610341959493929190612f0a565b60405180910390f35b610364600480360381019061035f9190613095565b610c33565b005b61036e610c58565b60405161037b919061325d565b60405180910390f35b61039e60048036038101906103999190612ca7565b610dfb565b6040516103ab9190612c5d565b60405180910390f35b6103bc611009565b6040516103c9919061330a565b60405180910390f35b6103da6111d6565b005b6103f660048036038101906103f1919061332a565b61152b565b6040516104039190612ada565b60405180910390f35b61042660048036038101906104219190612ca7565b6115b9565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105025750610501826118eb565b5b9050919050565b6105116129d1565b60066040518060a00160405290815f8201805461052d90613395565b80601f016020809104026020016040519081016040528092919081815260200182805461055990613395565b80156105a45780601f1061057b576101008083540402835291602001916105a4565b820191905f5260205f20905b81548152906001019060200180831161058757829003601f168201915b505050505081526020016001820180546105bd90613395565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990613395565b80156106345780601f1061060b57610100808354040283529160200191610634565b820191905f5260205f20905b81548152906001019060200180831161061757829003601f168201915b505050505081526020016002820154815260200160038201548152602001600482015481525050905090565b60605f805461066e90613395565b80601f016020809104026020016040519081016040528092919081815260200182805461069a90613395565b80156106e55780601f106106bc576101008083540402835291602001916106e5565b820191905f5260205f20905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b5f6106f982611954565b50610703826119da565b9050919050565b61071c8282610717611a13565b611a1a565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610790575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107879190612d11565b60405180910390fd5b5f6107a3838361079e611a13565b611a2c565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610819578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610810939291906133c5565b60405180910390fd5b50505050565b61083983838360405180602001604052805f815250610c33565b505050565b5f61084882611954565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108c0575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016108b79190612d11565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600e602052805f5260405f205f915090505481565b60606001805461092990613395565b80601f016020809104026020016040519081016040528092919081815260200182805461095590613395565b80156109a05780601f10610977576101008083540402835291602001916109a0565b820191905f5260205f20905b81548152906001019060200180831161098357829003601f168201915b5050505050905090565b600d602052805f5260405f205f91509050805f0154908060010180546109cf90613395565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90613395565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b505050505090806002018054610a5b90613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8790613395565b8015610ad25780601f10610aa957610100808354040283529160200191610ad2565b820191905f5260205f20905b815481529060010190602001808311610ab557829003601f168201915b5050505050908060030154908060040154908060050154905086565b610b00610af9611a13565b8383611c37565b5050565b6006805f018054610b1490613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4090613395565b8015610b8b5780601f10610b6257610100808354040283529160200191610b8b565b820191905f5260205f20905b815481529060010190602001808311610b6e57829003601f168201915b505050505090806001018054610ba090613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcc90613395565b8015610c175780601f10610bee57610100808354040283529160200191610c17565b820191905f5260205f20905b815481529060010190602001808311610bfa57829003601f168201915b5050505050908060020154908060030154908060040154905085565b610c3e848484610720565b610c52610c49611a13565b85858585611da0565b50505050565b6060600c805480602002602001604051908101604052809291908181526020015f905b82821015610df2578382905f5260205f2090600602016040518060c00160405290815f8201548152602001600182018054610cb590613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce190613395565b8015610d2c5780601f10610d0357610100808354040283529160200191610d2c565b820191905f5260205f20905b815481529060010190602001808311610d0f57829003601f168201915b50505050508152602001600282018054610d4590613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7190613395565b8015610dbc5780601f10610d9357610100808354040283529160200191610dbc565b820191905f5260205f20905b815481529060010190602001808311610d9f57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152505081526020019060010190610c7b565b50505050905090565b60605f600d5f8481526020019081526020015f206040518060c00160405290815f8201548152602001600182018054610e3390613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5f90613395565b8015610eaa5780601f10610e8157610100808354040283529160200191610eaa565b820191905f5260205f20905b815481529060010190602001808311610e8d57829003601f168201915b50505050508152602001600282018054610ec390613395565b80601f0160208091040260200160405190810160405280929190818152602001828054610eef90613395565b8015610f3a5780601f10610f1157610100808354040283529160200191610f3a565b820191905f5260205f20905b815481529060010190602001808311610f1d57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152505090505f610f718260600151611f4c565b90505f610f818360800151611f4c565b90505f610f918460a00151611f4c565b90505f610fd68560200151610fa589611f4c565b8760400151878787604051602001610fc2969594939291906136f8565b604051602081830303815290604052612016565b90505f81604051602001610fea91906137e6565b6040516020818303038152906040529050809650505050505050919050565b6110116129fd565b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111156111c557600d5f8281526020019081526020015f206040518060c00160405290815f820154815260200160018201805461108f90613395565b80601f01602080910402602001604051908101604052809291908181526020018280546110bb90613395565b80156111065780601f106110dd57610100808354040283529160200191611106565b820191905f5260205f20905b8154815290600101906020018083116110e957829003601f168201915b5050505050815260200160028201805461111f90613395565b80601f016020809104026020016040519081016040528092919081815260200182805461114b90613395565b80156111965780601f1061116d57610100808354040283529160200191611196565b820191905f5260205f20905b81548152906001019060200180831161117957829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815250509150506111d3565b6111cd6129fd565b80925050505b90565b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f600d5f8381526020019081526020015f2090506112e16040518060600160405280603c8152602001613fca603c913982600101805461125690613395565b80601f016020809104026020016040519081016040528092919081815260200182805461128290613395565b80156112cd5780601f106112a4576101008083540402835291602001916112cd565b820191905f5260205f20905b8154815290600101906020018083116112b057829003601f168201915b5050505050836003015484600501546121a6565b6113b66040518060400160405280601b81526020017f426f73732025732068617320257320485020616e64202573204144000000000081525060065f01805461132990613395565b80601f016020809104026020016040519081016040528092919081815260200182805461135590613395565b80156113a05780601f10611377576101008083540402835291602001916113a0565b820191905f5260205f20905b81548152906001019060200180831161138357829003601f168201915b50505050506006600201546006600401546121a6565b5f8160030154116113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613877565b60405180910390fd5b5f60066002015411611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90613905565b60405180910390fd5b80600501546006600201541015611463575f600660020181905550611482565b80600501546006600201546114789190613950565b6006600201819055505b600660040154816003015410156114a1575f81600301819055506114bf565b60066004015481600301546114b69190613950565b81600301819055505b6114e5604051806060016040528060288152602001613f74602891398260030154612248565b7f838ab28464562786a6c4ab2311964b82fa60bd9b14aa7e856af1f3f18d41a414600660020154826003015460405161151f929190613983565b60405180910390a15050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6115c4600b6122e4565b90506115d033826122f0565b6040518060c00160405280838152602001600c84815481106115f5576115f46139aa565b5b905f5260205f209060060201600101805461160f90613395565b80601f016020809104026020016040519081016040528092919081815260200182805461163b90613395565b80156116865780601f1061165d57610100808354040283529160200191611686565b820191905f5260205f20905b81548152906001019060200180831161166957829003601f168201915b50505050508152602001600c84815481106116a4576116a36139aa565b5b905f5260205f20906006020160020180546116be90613395565b80601f01602080910402602001604051908101604052809291908181526020018280546116ea90613395565b80156117355780601f1061170c57610100808354040283529160200191611735565b820191905f5260205f20905b81548152906001019060200180831161171857829003601f168201915b50505050508152602001600c8481548110611753576117526139aa565b5b905f5260205f209060060201600301548152602001600c848154811061177c5761177b6139aa565b5b905f5260205f209060060201600301548152602001600c84815481106117a5576117a46139aa565b5b905f5260205f20906006020160050154815250600d5f8381526020019081526020015f205f820151815f015560208201518160010190816117e69190613b74565b5060408201518160020190816117fc9190613b74565b50606082015181600301556080820151816004015560a082015181600501559050506118416040518060600160405280602e8152602001613f9c602e9139828461230d565b80600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061188d600b6123ac565b7f4bc303fd457a97b4691b9af582ce71868a3d258638c8d4f8c60988a0f0bfb8cd3382846040516118c093929190613c43565b60405180910390a15050565b5f6a636f6e736f6c652e6c6f6790505f80835160208501845afa505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061195f836123c0565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119d157826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016119c89190612e1c565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b611a2783838360016123f9565b505050565b5f80611a37846123c0565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a7857611a778184866125b8565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b0357611ab75f855f806123f9565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611b8257600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca757816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611c9e9190612d11565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d939190612ada565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611f45578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401611dfe9493929190613cca565b6020604051808303815f875af1925050508015611e3957506040513d601f19601f82011682018060405250810190611e369190613d28565b60015b611eba573d805f8114611e67576040519150601f19603f3d011682016040523d82523d5f602084013e611e6c565b606091505b505f815103611eb257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611ea99190612d11565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f4357836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611f3a9190612d11565b60405180910390fd5b505b5050505050565b60605f6001611f5a8461267b565b0190505f8167ffffffffffffffff811115611f7857611f77612f71565b5b6040519080825280601f01601f191660200182016040528015611faa5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561200b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161200057611fff613d53565b5b0494505f8503611fb7575b819350505050919050565b60605f825190505f810361203b5760405180602001604052805f8152509150506121a1565b5f600360028361204b9190613d80565b6120559190613db3565b60046120619190613de3565b90505f6020826120719190613d80565b67ffffffffffffffff81111561208a57612089612f71565b5b6040519080825280601f01601f1916602001820160405280156120bc5781602001600182028036833780820191505090505b5090505f604051806060016040528060408152602001613f3460409139905060018101602083015f5b8681101561215e5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506120e5565b506003860660018114612178576002811461218857612193565b613d3d60f01b6002830352612193565b603d60f81b60018303525b508484525050819450505050505b919050565b612242848484846040516024016121c09493929190613e24565b6040516020818303038152906040527ff45d7d2c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127cc565b50505050565b6122e0828260405160240161225e929190613e75565b6040516020818303038152906040527fb60e72cc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127cc565b5050565b5f815f01549050919050565b612309828260405180602001604052805f8152506127e6565b5050565b6123a783838360405160240161232593929190613ea3565b6040516020818303038152906040527fca47c4eb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127cc565b505050565b6001815f015f828254019250508190555050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061243157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612563575f61244084611954565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124aa57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156124bd57506124bb818461152b565b155b156124ff57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016124f69190612d11565b60405180910390fd5b811561256157838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6125c3838383612809565b612676575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263757806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161262e9190612e1c565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161266d929190613edf565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126d7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816126cd576126cc613d53565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612714576d04ee2d6d415b85acef8100000000838161270a57612709613d53565b5b0492506020810190505b662386f26fc10000831061274357662386f26fc10000838161273957612738613d53565b5b0492506010810190505b6305f5e100831061276c576305f5e100838161276257612761613d53565b5b0492506008810190505b612710831061279157612710838161278757612786613d53565b5b0492506004810190505b606483106127b457606483816127aa576127a9613d53565b5b0492506002810190505b600a83106127c3576001810190505b80915050919050565b6127e3816127db6118cc6128c9565b63ffffffff16565b50565b6127f083836128d4565b6128046127fb611a13565b5f858585611da0565b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128c057508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128815750612880848461152b565b5b806128bf57508273ffffffffffffffffffffffffffffffffffffffff166128a7836119da565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6129c7819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612944575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161293b9190612d11565b60405180910390fd5b5f61295083835f611a2c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146129c2575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016129b99190612d11565b60405180910390fd5b505050565b6129cf613f06565b565b6040518060a0016040528060608152602001606081526020015f81526020015f81526020015f81525090565b6040518060c001604052805f815260200160608152602001606081526020015f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a7481612a40565b8114612a7e575f80fd5b50565b5f81359050612a8f81612a6b565b92915050565b5f60208284031215612aaa57612aa9612a38565b5b5f612ab784828501612a81565b91505092915050565b5f8115159050919050565b612ad481612ac0565b82525050565b5f602082019050612aed5f830184612acb565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b3582612af3565b612b3f8185612afd565b9350612b4f818560208601612b0d565b612b5881612b1b565b840191505092915050565b5f819050919050565b612b7581612b63565b82525050565b5f60a083015f8301518482035f860152612b958282612b2b565b91505060208301518482036020860152612baf8282612b2b565b9150506040830151612bc46040860182612b6c565b506060830151612bd76060860182612b6c565b506080830151612bea6080860182612b6c565b508091505092915050565b5f6020820190508181035f830152612c0d8184612b7b565b905092915050565b5f82825260208201905092915050565b5f612c2f82612af3565b612c398185612c15565b9350612c49818560208601612b0d565b612c5281612b1b565b840191505092915050565b5f6020820190508181035f830152612c758184612c25565b905092915050565b612c8681612b63565b8114612c90575f80fd5b50565b5f81359050612ca181612c7d565b92915050565b5f60208284031215612cbc57612cbb612a38565b5b5f612cc984828501612c93565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cfb82612cd2565b9050919050565b612d0b81612cf1565b82525050565b5f602082019050612d245f830184612d02565b92915050565b612d3381612cf1565b8114612d3d575f80fd5b50565b5f81359050612d4e81612d2a565b92915050565b5f8060408385031215612d6a57612d69612a38565b5b5f612d7785828601612d40565b9250506020612d8885828601612c93565b9150509250929050565b5f805f60608486031215612da957612da8612a38565b5b5f612db686828701612d40565b9350506020612dc786828701612d40565b9250506040612dd886828701612c93565b9150509250925092565b5f60208284031215612df757612df6612a38565b5b5f612e0484828501612d40565b91505092915050565b612e1681612b63565b82525050565b5f602082019050612e2f5f830184612e0d565b92915050565b5f60c082019050612e485f830189612e0d565b8181036020830152612e5a8188612c25565b90508181036040830152612e6e8187612c25565b9050612e7d6060830186612e0d565b612e8a6080830185612e0d565b612e9760a0830184612e0d565b979650505050505050565b612eab81612ac0565b8114612eb5575f80fd5b50565b5f81359050612ec681612ea2565b92915050565b5f8060408385031215612ee257612ee1612a38565b5b5f612eef85828601612d40565b9250506020612f0085828601612eb8565b9150509250929050565b5f60a0820190508181035f830152612f228188612c25565b90508181036020830152612f368187612c25565b9050612f456040830186612e0d565b612f526060830185612e0d565b612f5f6080830184612e0d565b9695505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612fa782612b1b565b810181811067ffffffffffffffff82111715612fc657612fc5612f71565b5b80604052505050565b5f612fd8612a2f565b9050612fe48282612f9e565b919050565b5f67ffffffffffffffff82111561300357613002612f71565b5b61300c82612b1b565b9050602081019050919050565b828183375f83830152505050565b5f61303961303484612fe9565b612fcf565b90508281526020810184848401111561305557613054612f6d565b5b613060848285613019565b509392505050565b5f82601f83011261307c5761307b612f69565b5b813561308c848260208601613027565b91505092915050565b5f805f80608085870312156130ad576130ac612a38565b5b5f6130ba87828801612d40565b94505060206130cb87828801612d40565b93505060406130dc87828801612c93565b925050606085013567ffffffffffffffff8111156130fd576130fc612a3c565b5b61310987828801613068565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60c083015f8301516131535f860182612b6c565b506020830151848203602086015261316b8282612b2b565b915050604083015184820360408601526131858282612b2b565b915050606083015161319a6060860182612b6c565b5060808301516131ad6080860182612b6c565b5060a08301516131c060a0860182612b6c565b508091505092915050565b5f6131d6838361313e565b905092915050565b5f602082019050919050565b5f6131f482613115565b6131fe818561311f565b9350836020820285016132108561312f565b805f5b8581101561324b578484038952815161322c85826131cb565b9450613237836131de565b925060208a01995050600181019050613213565b50829750879550505050505092915050565b5f6020820190508181035f83015261327581846131ea565b905092915050565b5f60c083015f8301516132925f860182612b6c565b50602083015184820360208601526132aa8282612b2b565b915050604083015184820360408601526132c48282612b2b565b91505060608301516132d96060860182612b6c565b5060808301516132ec6080860182612b6c565b5060a08301516132ff60a0860182612b6c565b508091505092915050565b5f6020820190508181035f830152613322818461327d565b905092915050565b5f80604083850312156133405761333f612a38565b5b5f61334d85828601612d40565b925050602061335e85828601612d40565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806133ac57607f821691505b6020821081036133bf576133be613368565b5b50919050565b5f6060820190506133d85f830186612d02565b6133e56020830185612e0d565b6133f26040830184612d02565b949350505050565b5f81905092915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000005f82015250565b5f613438600a836133fa565b915061344382613404565b600a82019050919050565b5f61345882612af3565b61346281856133fa565b9350613472818560208601612b0d565b80840191505092915050565b7f202d2d204e465420233a200000000000000000000000000000000000000000005f82015250565b5f6134b2600b836133fa565b91506134bd8261347e565b600b82019050919050565b7f222c20226465736372697074696f6e223a20225468697320697320616e204e465f8201527f542074686174206c6574732070656f706c6520706c617920696e20746865206760208201527f616d65204d657461766572736520536c6179657221222c2022696d616765223a60408201527f2022000000000000000000000000000000000000000000000000000000000000606082015250565b5f61356e6062836133fa565b9150613579826134c8565b606282019050919050565b7f222c202261747472696275746573223a205b207b202274726169745f747970655f8201527f223a20224865616c746820506f696e7473222c202276616c7565223a20000000602082015250565b5f6135de603d836133fa565b91506135e982613584565b603d82019050919050565b7f2c20226d61785f76616c7565223a0000000000000000000000000000000000005f82015250565b5f613628600e836133fa565b9150613633826135f4565b600e82019050919050565b7f7d2c207b202274726169745f74797065223a202241747461636b2044616d61675f8201527f65222c202276616c7565223a2000000000000000000000000000000000000000602082015250565b5f613698602d836133fa565b91506136a38261363e565b602d82019050919050565b7f7d205d7d000000000000000000000000000000000000000000000000000000005f82015250565b5f6136e26004836133fa565b91506136ed826136ae565b600482019050919050565b5f6137028261342c565b915061370e828961344e565b9150613719826134a6565b9150613725828861344e565b915061373082613562565b915061373c828761344e565b9150613747826135d2565b9150613753828661344e565b915061375e8261361c565b915061376a828561344e565b91506137758261368c565b9150613781828461344e565b915061378c826136d6565b9150819050979650505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000005f82015250565b5f6137d0601d836133fa565b91506137db8261379c565b601d82019050919050565b5f6137f0826137c4565b91506137fc828461344e565b915081905092915050565b7f4572726f723a20636861726163746572206d757374206861766520485020746f5f8201527f2061747461636b20626f73732e00000000000000000000000000000000000000602082015250565b5f613861602d83612c15565b915061386c82613807565b604082019050919050565b5f6020820190508181035f83015261388e81613855565b9050919050565b7f4572726f723a20626f7373206d757374206861766520485020746f20617474615f8201527f636b20626f73732e000000000000000000000000000000000000000000000000602082015250565b5f6138ef602883612c15565b91506138fa82613895565b604082019050919050565b5f6020820190508181035f83015261391c816138e3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61395a82612b63565b915061396583612b63565b925082820390508181111561397d5761397c613923565b5b92915050565b5f6040820190506139965f830185612e0d565b6139a36020830184612e0d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613a337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139f8565b613a3d86836139f8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613a78613a73613a6e84612b63565b613a55565b612b63565b9050919050565b5f819050919050565b613a9183613a5e565b613aa5613a9d82613a7f565b848454613a04565b825550505050565b5f90565b613ab9613aad565b613ac4818484613a88565b505050565b5b81811015613ae757613adc5f82613ab1565b600181019050613aca565b5050565b601f821115613b2c57613afd816139d7565b613b06846139e9565b81016020851015613b15578190505b613b29613b21856139e9565b830182613ac9565b50505b505050565b5f82821c905092915050565b5f613b4c5f1984600802613b31565b1980831691505092915050565b5f613b648383613b3d565b9150826002028217905092915050565b613b7d82612af3565b67ffffffffffffffff811115613b9657613b95612f71565b5b613ba08254613395565b613bab828285613aeb565b5f60209050601f831160018114613bdc575f8415613bca578287015190505b613bd48582613b59565b865550613c3b565b601f198416613bea866139d7565b5f5b82811015613c1157848901518255600182019150602085019450602081019050613bec565b86831015613c2e5784890151613c2a601f891682613b3d565b8355505b6001600288020188555050505b505050505050565b5f606082019050613c565f830186612d02565b613c636020830185612e0d565b613c706040830184612e0d565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f613c9c82613c78565b613ca68185613c82565b9350613cb6818560208601612b0d565b613cbf81612b1b565b840191505092915050565b5f608082019050613cdd5f830187612d02565b613cea6020830186612d02565b613cf76040830185612e0d565b8181036060830152613d098184613c92565b905095945050505050565b5f81519050613d2281612a6b565b92915050565b5f60208284031215613d3d57613d3c612a38565b5b5f613d4a84828501613d14565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d8a82612b63565b9150613d9583612b63565b9250828201905080821115613dad57613dac613923565b5b92915050565b5f613dbd82612b63565b9150613dc883612b63565b925082613dd857613dd7613d53565b5b828204905092915050565b5f613ded82612b63565b9150613df883612b63565b9250828202613e0681612b63565b91508282048414831517613e1d57613e1c613923565b5b5092915050565b5f6080820190508181035f830152613e3c8187612c25565b90508181036020830152613e508186612c25565b9050613e5f6040830185612e0d565b613e6c6060830184612e0d565b95945050505050565b5f6040820190508181035f830152613e8d8185612c25565b9050613e9c6020830184612e0d565b9392505050565b5f6060820190508181035f830152613ebb8186612c25565b9050613eca6020830185612e0d565b613ed76040830184612e0d565b949350505050565b5f604082019050613ef25f830185612d02565b613eff6020830184612e0d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f426f73732061747461636b656420706c617965722e204e657720706c617965722068703a2025730a4d696e746564204e465420772f20746f6b656e496420257320616e6420636861726163746572496e6465782025730a506c6179657220772f206368617261637465722025732061626f757420746f2061747461636b2e2048617320257320485020616e64202573204144a26469706673582212203718c704c56f83ae31dd886de93a5c4e6ccb0f4fef7852abb8c6b0609187ba7664736f6c634300081a0033446f6e6520696e697469616c697a696e6720257320772f2048502025732c20696d67202573446f6e6520696e697469616c697a696e6720626f737320257320772f2048502025732c20696d67202573

参考文档:https://github.com/QuintionTang/vue-game-dapp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器遗忘之UNSIR算法】2023年IEEE Trans期刊论文:Fast yet effective machine unlearning

1 介绍 年份&#xff1a;2023 期刊&#xff1a;IEEE Transactions on Neural Networks and Learning Systems 引用量&#xff1a;170 Tarun A K, Chundawat V S, Mandal M, et al. Fast yet effective machine unlearning[J]. IEEE Transactions on Neural Networks and Le…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

Android配件应用默认启动与USB权限申请区别

使用效果&#xff1a; USB配件授权演示 选择USB配件默认打开应用 申请USB配件使用权限

vue2框架配置路由设计打印单

业务效果: 查询出列表后&#xff0c;点击申请单按钮&#xff0c;弹出申请表格&#xff0c;可进行打印 后端实现 控制器、服务层等省略&#xff0c;关联查出数据提供接口给前端即可 <!--获取详细信息(用于申请单打印)--><select id"selectXxxxDetail" par…

第29天:Web开发-PHP应用弱类型脆弱Hash加密Bool类型Array数组函数转换比较

#知识点 1、安全开发-原生PHP-弱类型脆弱 2、安全开发-原生PHP-函数&数据类型 3、安全开发-原生PHP-代码审计案例 一、PHP弱类型对比 1、 和 两个等号是弱比较&#xff0c;使用进行对比的时候&#xff0c;php解析器就会做隐式类型转换&#xff0c;如果两个值的类型不相等就…

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8&#xff0c;g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本&#xff0c;再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…

【亚马逊云科技】基于Amazon EKS部署高可用的OceanBase的最佳实践

一、前言 随着企业业务的快速发展和数据量的不断增长&#xff0c;高性能、高可用的数据库解决方案成为了关键需求。OceanBase作为一款分布式关系型数据库&#xff0c;以其高扩展性、高可用性和高性能的特点&#xff0c;逐渐受到企业的广泛关注。然而&#xff0c;在复杂的分布式…

计算机网络:网络层知识点及习题(一)

网课资源&#xff1a; 湖科大教书匠 1、概述 网络层实现主机到主机的传输&#xff0c;主要有分组转发和路由选择两大功能 路由选择处理机得出路由表&#xff0c;路由表再生成转发表&#xff0c;从而实现分组从不同的端口转发 网络层向上层提供的两种服务&#xff1a;面向连接…

简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩

系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对…

阿里云 人工智能与机器学习

阿里云的 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09; 服务为企业提供了全面的AI解决方案&#xff0c;帮助用户在多个行业实现数据智能化&#xff0c;提升决策效率&#xff0c;推动业务创新。阿里云通过先进的技术和丰富的工具&#xff0c;支持用…

LabVIEW语言学习过程是什么?

学习LabVIEW语言的过程可以分为几个阶段&#xff0c;每个阶段的重点内容逐步加深&#xff0c;帮助你从入门到精通。以下是一个简洁的学习过程&#xff1a; ​ 1. 基础入门阶段 理解图形化编程&#xff1a;LabVIEW是一种图形化编程语言&#xff0c;与传统的文本编程语言不同&am…

【办公类-47-02】20250103 课题资料快速打印(单个docx转PDF,多个pdf合并一个PDF 打印)

背景需求&#xff1a; 2023区级大课题《运用Python优化3-6岁幼儿学习活动材料的实践研究》需要做阶段资料 本来应该2024年6月就提交电子稿和打印稿。可是python学具的教学实验实在太多了&#xff0c;不断生成&#xff0c;我忙着做教学&#xff0c;都没有精力去整理。 2025年…

【CSS】第一天 基础选择器与文字控制属性

【CSS】第一天 1. CSS定义2. css引入方式2.1 内部样式2.2 外部样式2.3 行内样式 3. 选择器3.1 标签选择器3.2 类选择器3.3 id选择器3.4 通配符选择器 1. CSS定义 层叠样式表(CSS)是一种样式表语言&#xff0c;用来描述HTML文档的呈现(美化内容)。 书写位置&#xff1a;title标…

Nginx (40分钟学会,快速入门)

目录​​​​​​​ 一、什么是Nginx ? 可以做什么 &#xff1f; 二、正向代理和反向代理 三、负载均衡 四、动静分离 五、Nginx 常用命令 六、Nginx实战及总结 一、什么是Nginx ? 可以做什么 &#xff1f; Nginx 是高性能的 HTTP 和反向代理的 web 服务器&#xff0c…

单片机从入门到放弃教程001

1. 单片机介绍 单片微型计算机(Single Chip Microcomputer)简称单片机&#xff0c;是典型的嵌入式微处理器(Micro Controller Unit简称MCU)&#xff0c;是一种将中央处理器&#xff08;CPU&#xff09;、内存、输入输出接口以及其他功能模块集成在单一芯片上的微型计算机。 1…

[极客大挑战 2019]HardSQL 1

看了大佬的wp&#xff0c;没用字典爆破&#xff0c;手动试出来的&#xff0c;屏蔽了常用的关键字&#xff0c;例如&#xff1a;order select union and 最搞的是&#xff0c;空格也有&#xff0c;这个空格后面让我看了好久&#xff0c;该在哪里加括号。 先传入1’ 1试试&#…

深入Android架构(从线程到AIDL)_12 Android UI 单线程程序

目录 6、 Android UI 单线程程序 單線程程序概念 单线程可避免线程安全问题 SurfaceView与非UI线程 6、 Android UI 单线程程序 單線程程序概念 单线程程序意谓着两个(或多个)线程不能共享对象或变量值。Android的UI是单线程程序的环境。UI控件(如Button等)都是由UI线程所…

庐山派K230学习日记3 外设模块GPIO

GPIO和FPIOA 1 本节介绍​ 本节您将学习如何通过控制开发板的GPIO引脚&#xff0c;实现对RGB灯和按键的控制。 &#x1f3c6;学习目标 1️⃣如何将GPIO引脚配置为输出模式&#xff0c;通过引脚电平来控制RGB灯的颜色变化。 2️⃣如何将GPIO引脚配置为输入模式&#xff0c;来检…

【网络安全 | 漏洞挖掘】通过模拟功能实现提权(Bugcrowd)

未经许可,不得转载。 我将与大家分享我在 Bugcrowd 的某个项目中发现的一个漏洞,该项目中有一个“用户模拟”功能。 什么是用户模拟? 用户模拟允许管理员在不知晓用户凭据的情况下“以用户身份登录”。这种功能常见于管理员需要调试问题、审查用户权限或解决投诉的平台中。…