文章目录
- 一、启动项目
- 1.1 修改文件
- 1.2 安装依赖
- 1.3 合约部署
- 1.4 前端运行
- 二、问题解决
- 2.1 角色信息问题
- 2.2 该NFT合约的相关信息
一、启动项目
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
},
},
};
- 修改文件
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 安装依赖
- 安装依赖
npm install
- 测试合约
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 前端运行
- 进入前端目录:
cd game
- 安装依赖
yarn install
- 设置合约地址
编辑文件 ./vue-game-dapp/game/.env
,把部署的合约地址填入。
CONTRACT_ADDRESS="0x666cF96F216DfA1ad2eAB522437eabF4E1F93888"
编辑文件 ./vue-game-dapp/game/src/store/index.js
26行:
contract_address: "0x666cF96F216DfA1ad2eAB522437eabF4E1F93888", // process.env.CONTRACT_ADDRESS, // 合约地址
- 启动前端
yarn serve
即可正常启动。
二、问题解决
2.1 角色信息问题
一定要注意:角色名称、角色图片的 URI 、角色血量、角色攻击伤害、boss名称、boss 图片的 URI、boss 血量、boss 攻击伤害 是存储在NFT合约当中的,并不是在前端页面修改,一定需要注意!!!
如果你需要在remix中部署这个合约,那么需要注意:
-
安装依赖
部署
EpicGame.sol
时,合约中引入了./libraries/Base64.sol
,所以我们需要在remix中放入Base64.sol
,这个在源码中已经存在了。 -
配置 Solidity 编译器
选择合适的编译器版本(我进行了测试,我们需要
0.8.26
版本的编译器才不会编译报错)。 -
部署合约
- 主合约是
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 按钮进行部署。
- 与合约交互
部署成功后,我们可以通过 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
-
或者调用其他公共方法,如
nftHolders
或getBigBoss
等,来获取更多信息。
所以,我们如果在终端使用命令部署合约之前,一定要修改角色信息,防止部署合约后,角色信息无法修改
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