范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Web3割韭菜王牌发币到底是什么?教你基于ERC20开发发币DApp

  互联网的技术日新月异,互联网不断深入人们的生活;
  web3.0将是彻底改变人们生活的互联网形式;
  web3.0使所有网上公民不再受到现有资源积累的限制;
  具有更加平等地获得财富和声誉的机会。
  web3.0会从哪里开始呢?
  本合集文章,授权转载,侵权必究。
  Web 3.0世界系列文章
  来源 : 代码与野兽
  【 Web3 系列文章 】
  NO.1 遇见Web3: 在 Web3 的世界中写下第一行 HelloWorld
  NO.2 全面系统的 Web3 学习路线,助你成为 Web3 开发专家
  NO.3 Web3世界:区块链、比特币、以太坊和智能合约
  NO.4 Remix IDE 使用与 VSCode 搭建 Solidity 开发环境
  NO.5 深入聊聊 Web3 世界中的协议和硬盘:IPFS
  NO.6 一文聊透 Solidity 语法:助你成为智能合约专家
  NO.7 Web3世界:使用 React+ethers.js 开发简单加密钱包
  NO.8 Web3世界:Web3为什么能赚钱?为什么不要All in Web3?
  本文会讲解代币、ERC20 的基本概念,并完成一个包含智能合约、前端、测试、部署的完整 DApp 设计与实现。
  非常适合 Web3 初学者朋友进行学习。
  文中用到的一些主要的工具、框架及技术:solidity:智能合约编程语言。MetaMask:加密钱包。truffle:智能合约开发套件。ganache:本地区块链。react、nextjs:前端UI库/框架。chakra、tailwindcss:组件库/CSS框架。wagmi、ethersjs:JS 与智能合约交互 SDK。
  注意:文中不会涉及这些工具、框架、技术的基本安装及使用。
  完成效果如下:
  基本概念什么是Token/代币/通证?
  这里指的代币是以太坊平台的代币,其他平台的代币在概念上可能略有出入。
  除了以太坊平台有代币的概念外,很多模仿以太坊的平台也都有代币的概念,比如 BSC 和 polygon 等。
  代币,英文是 Token,顾名思义就是代表某种东西的货币。它可以表示任何东西:
  像人民币一样的法币。黄金。石油。股份资产。游戏道具。积分。门票。以及更多的东西...
  代币唯一不能代表的东西就是 gas 费。
  代币除了代币以外,还有另一个名字,叫做通证。所谓通证,也就是通用的证明。你持有这个通证,就可以证明你拥有某件东西或者某项权益。这和中国成立初期的粮票、布票是一个道理。
  现在我们明白了,虽然它有三种称呼,但其实是一个意思,文中通称为代币。
  在代码的角度上,代币就是一份智能合约,它负责提供查账、转账、记账等功能,没有什么特殊。
  最后扩展一点儿小知识。
  比特币和以太币是代币吗?可以说是,但和通常意义上的代币还是有些区别。我们一般会称呼为比特币和以太坊这种自己拥有区块链的代币为「币」。而除了比特币以外的币,我们还会称为「替代币」。没有自己的区块链,依赖其他区块链的币,我们称为「代币」。这些名词是每一个玩币的人都应该清楚的。什么是 ERC、EIP 和 ERC20?
  ERC 是 Ethereum Request for Comment 的缩写,也就是以太坊改进建议。提交 ERC 后,以太坊社区会对这个草案进行评估,最终会接受或者拒绝该建议。
  如果接受的话,ERC 会被确认为 EIP。
  EIP 是 Ethereum Improvement Proposals 的缩写,也就是被接纳的以太坊改进建议。
  ERC 是按照时间顺序从 1 开始递增的,ERC 20 就是第 20 个建议。
  在讲 ERC20 之前,我们先来看下发行代币过程中存在的问题。
  我们上面讲过,代币就是智能合约,智能合约就是代码。虽然代币合约都是做查账、转账、记账这几件主要的事情的,但在没有规范约束的情况下,每种代币的实现可能都是不同的。
  比如 Pig 币的转账函数是 t,参数顺序是余额、收款人;Cat 币的转账函数是 tr,参数顺序是收款人、余额。虽然各自都是没问题的,但那这样很多应用来集成他们就变得非常麻烦了,这会导致有多少种代币就要集成多少次。特别是交易所和钱包这类应用。
  ERC20 是关于代币的建议,由以太坊联合创始人 Vitalik 在 2015 年 6 月提出。它是一个简单的接口,允许开发者在以太坊区块链上发行自己的代币,并可以与第三方应用集成。
  EIP 20 的地址:eips.ethereum.org/EIPS/eip-20
  既然是接口,那就是一种规范约束。所有人都应该按照这个接口去实现自己的代币合约。
  如果你不按照这个规范实现你的代币合约,那么你的代币在集成到第三方应用时就会无法识别,比如在 MetaMask 中不能正常显示代币名称、余额等。
  代币的价值很依赖流通性,如果你的代币不能通用、不能流通的话,那么基本上就失去了代币的价值。
  所以发行代币,要按照 ERC20 接口去实现合约。
  截至本文写作时间(2023/1/4),以太坊上的 ERC20 代币有将近 74 万种,BSC 上的 ERC20 代币有将近 300 万种。从这些数字上足以看出 ERC20 对促进代币发展的过程中提供的重要作用。
  插一句,BSC 就是币安智能链,因为以太坊交易的 gas 费太贵,BSC 就模仿以太坊做了它们自己的平台,但 gas 相比以太坊少很多,所以吸引了很多用户,后面顺理成章地发展起来了。ERC20 接口介绍
  ERC20 接口规定了 9 个方法和 2 个事件。
  方法:function name() public view returns (string) function symbol() public view returns (string) function decimals() public view returns (uint8) function totalSupply() public view returns (uint256) function balanceOf(address _owner) public view returns (uint256 balance) function transfer(address _to, uint256 _value) public returns (bool success) function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) function approve(address _spender, uint256 _value) public returns (bool success) function allowance(address _owner, address _spender) public view returns (uint256 remaining)
  事件:event Transfer(address indexed _from, address indexed _to, uint256 _value) event Approval(address indexed _owner, address indexed _spender, uint256 _value)
  我们详细讲解一下它们的作用。name:返回代币名称,比如我创建一个 Noah 币,那么就返回 "Noah"。symbol:返回代币符号,比如 Noah 币的符号是 NH,那么就返回 "NH"。也可以叫做代币代号。decimals:返回代币使用的小数点位数,代币会以代币数量除以这个值给用户展示。也就是精度。通常都会使用 18。totalSupply:返回代币发行总量,比如 Noah 币只发行 10000 个,那就返回 10000。balanceOf:返回指定账户的余额。transfer:将指定数量的代币转入指定的地址中,并需要触发 Transfer 事件。transferFrom:将指定数量的代币从一个指定的地址转到另一个指定的地址。这通常被称为提币,但依赖授权。approve:允许指定地址可以分多次从你的账户中提取代币,最多不超过指定的金额。并需要触发 Approval 事件,这也就是授权。allowance:查询指定地址给另一个指定地址的授权代币额度。
  我们可以将它们分为三类,查询、转账、授权:查询
  查询类方法有:name、symbol、decimals、totalSupply、balanceOf。
  其中 name、symbol 和 decimals 都是可选的,因为它们没有具体的功能。但建议是要全部实现。
  totalSupply 和 balanceOf 分别是发行总量和查余额,很容易理解。转账
  转账方法有:transfer。
  它可以将你账户上的代币转给另一个账户,也很容易理解。授权
  授权方法有:transferFrom、approve 和 allowance。
  这三个函数可能比较难理解。
  我再举个例子来详细讲一下授权这块内容。
  假设我是一家游戏平台(游戏平台也是一个地址,和用户没区别),玩家张三完成了我的任务,我奖励他 50 个代币。但我并不会直接转账到他的账户,而是在授权账本上记下来,玩家张三可以使用我的 50 个代币。
  李四是个游戏商人,贩卖游戏道具。张三要在李四手里买一个价值 30 个代币的道具,就可以使用平台的代币支付给李四。而这个代币可能也不会直接打到李四的账户上,和上面的玩法一样,我也在授权账本上记下,允许李四使用我的 30 个代币,同时把张三原来那 50 个代币的账户改为 20 个代币。
  这就是授权的玩法,对应的实现就是:
  游戏平台给玩家授权代币:approve。
  查询玩家在游戏平台的授权代币余额:allowance。
  玩家使用平台授权的代币进行交易:transferFrom。
  当然这只是我举例的一个场景,授权的玩法可以应用在更多的场景中。代码实现实现 ERC20 接口的智能合约
  实现 ERC20 是很多刚接触智能合约的小伙伴都需要学习的内容。
  你可能需要使用 VSCode 或者 Remix 作为编辑器来写 Solidity 代码。这部分内容就不多讲了。
  因为一些特殊的原因,这里我选择 VSCode。
  我会使用 truffle 来创建项目。
  它可以帮我们对合约进行编译和部署。
  运行命令创建项目:mkdir noth-token-contract cd noth-token-contract truffle init
  创建 contracts/IERC20.sol 文件,定义 IERC20 接口。// SPDX-License-Identifier: MIT  pragma solidity ^0.8.0;  interface IERC20 {     function name() external view returns (string memory);      function symbol() external view returns (string memory);      function decimals() external view returns (uint8);      function totalSupply() external view returns (uint256);      function balanceOf(address _owner) external view returns (uint256 balance);      function transfer(address _to, uint256 _value)         external         returns (bool success);      function transferFrom(         address _from,         address _to,         uint256 _value     ) external returns (bool success);      function approve(address _spender, uint256 _value)         external         returns (bool success);      function allowance(address _owner, address _spender)         external         view         returns (uint256 remaining);      event Transfer(address indexed _from, address indexed _to, uint256 _value);      event Approval(         address indexed _owner,         address indexed _spender,         uint256 _value     ); }
  再创建 contracts/NoahToken.sol 文件,实现 IERC20 接口。// SPDX-License-Identifier: MIT  pragma solidity ^0.8.0;  import "./IERC20.sol";  contract NoahToken is IERC20 {     string private _name; // 代币名称     string private _symbol; // 代币代号     uint8 private _decimals; // 代币精度     uint256 private _totalSupply; // 代币发行总量     mapping(address => uint256) private _balances; // 账本     mapping(address => mapping(address => uint256)) private _allowance; // 授权记录     address public owner; // 合约发布者      constructor(         string memory _initName,         string memory _initSymbol,         uint8 _initDecimals,         uint256 _initTotalSupply     ) {         // 发布合约时设置代币名称、代号、精度和发行总量         _name = _initName;         _symbol = _initSymbol;         _decimals = _initDecimals;         _totalSupply = _initTotalSupply;         owner = msg.sender;         // 在合约部署时把所有的代币发行给合约发布者         _balances[owner] = _initTotalSupply;     }      function name() external view override returns (string memory) {         return _name;     }      function symbol() external view override returns (string memory) {         return _symbol;     }      function decimals() external view override returns (uint8) {         return _decimals;     }      function totalSupply() external view override returns (uint256) {         return _totalSupply;     }      function balanceOf(address _owner)         external         view         override         returns (uint256 balance)     {         return _balances[_owner];     }      function transfer(address _to, uint256 _value)         external         override         returns (bool success)     {         // 检查发送者余额是否足够         require(_balances[msg.sender] >= _value, "Insufficient balance");         // 扣除发送者余额         _balances[msg.sender] -= _value;         // 增加接收者余额         _balances[_to] += _value;         // 触发转账事件         emit Transfer(msg.sender, _to, _value);         return true;     }      function transferFrom(         address _from,         address _to,         uint256 _value     ) external override returns (bool success) {         // 检查发送者余额是否足够         require(_balances[_from] >= _value, "Insufficient balance");         // 检查授权额度是否足够         require(             _allowance[_from][msg.sender] >= _value,             "Insufficient allowance"         );         // 扣除发送者余额         _balances[_from] -= _value;         // 增加接收者余额         _balances[_to] += _value;         // 扣除授权额度         _allowance[_from][msg.sender] -= _value;         // 触发转账事件         emit Transfer(_from, _to, _value);         return true;     }      function approve(address _spender, uint256 _value)         external         override         returns (bool success)     {         // 设置授权额度         _allowance[msg.sender][_spender] = _value;         // 触发授权事件         emit Approval(msg.sender, _spender, _value);         return true;     }      function allowance(address _owner, address _spender)         external         view         override         returns (uint256 remaining)     {         return _allowance[_owner][_spender];     } }
  具体代码的作用我都加到注释中了,就不再多赘述。
  在合约编写完成之后,我们需要在本地进行测试、编译、部署。使用 truffle 测试智能合约
  truffle 支持通过代码对智能合约进行测试。目前支持 JavaScript 和 Solidity 两种语言,但 JavaScript 更灵活,也更流行。这里选择 JavaScript 进行测试。
  创建 test/token.js 文件,该文件是测试文件。测试 balanceOf 与 transfer 函数
  truffle 使用 Mocha 和 Chai 这两个库作为断言库,但略有不同。
  首先应该使用 contract 函数而不是 describe 函数。
  contract 函数会传递一个默认参数,它会提供一组可用的账户。const NoahToken = artifacts.require("NoahToken");  contract("Token", (accounts) => {   const [alice, bob] = accounts;    it("balanceOf", async () => {     // 发 Noah 币,发行 1024 个     const noahTokenInstance = await NoahToken.new("noah", "NOAH", 0, "1024", { from: alice });     // 查看 alice 的余额是否是 1024     const result = await noahTokenInstance.balanceOf(alice);     assert.equal(result.valueOf().words[0], 1024, "1024 wasn"t in alice");   });    it("transfer", async () => {     // 发 Noah 币,发行 1024 个     const noahTokenInstance = await NoahToken.new("noah", "NOAH", 0, "1024", { from: alice });     // alice 将 1 个 Noah 币转给 bob     await noahTokenInstance.transfer(bob, 1, { from: alice });     // 查看 alice 的余额是否是 1023     let aliceBalanceResult = await noahTokenInstance.balanceOf(alice);     assert.equal(aliceBalanceResult.valueOf().words[0], 1023, "1023 wasn"t in alice");     // 查看 bob 的余额是否是 1     let bobBalanceResult = await noahTokenInstance.balanceOf(bob);     assert.equal(bobBalanceResult.valueOf().words[0], 1, "1 wasn"t in bob");      // bob 将 1 个 Noah 币转给 alice     await noahTokenInstance.transfer(alice, 1, { from: bob });     // 查看 alice 的余额是否是 1024     aliceBalanceResult = await noahTokenInstance.balanceOf(alice);     assert.equal(aliceBalanceResult.valueOf().words[0], 1024, "1024 wasn"t in alice");     // 查看 bob 的余额是否是 0     bobBalanceResult = await noahTokenInstance.balanceOf(bob);     assert.equal(bobBalanceResult.valueOf().words[0], 0, "0 wasn"t in bob");   }); });
  代码中有详尽的注释,就不多赘述了。其他 function 也可以用这种方式进行测试。
  编写完成后运行命令:truffle test ./test/token.js
  全部 pass 即可通过。
  使用 ganache 本地部署智能合约
  除了代码测试外,我们通常还需要将合约部署到开发环境,和前端代码进行集成联调。
  我使用 ganache 部署智能合约,它会在本地运行一个区块链。配置 truffle-config.js 和 migration 文件
  首先在项目中对 truffle-config.js 文件进行修改,添加 development 环境的相关配置。{   "network": {     development: {      host: "127.0.0.1",     // Localhost (default: none)      port: 7545,            // Standard Ethereum port (default: none)      network_id: "*",       // Any network (default: none)     },   } }
  同时创建一个 migrations/1_NoahToken_migration.js 文件,用于部署。
  内容如下:const NoahToken = artifacts.require("NoahToken");  module.exports = function (deployer) {   deployer.deploy(NoahToken, "noah", "NOAH", 18, "1024000000000000000000"); }
  deployer.deploy 的第一个参数是合约,其余的参数是部署合约传递的参数。部署到 ganache
  最后运行 truffle 的编译部署脚本:truffle migrate --network development --f 1
  network 参数是指定的网络环境,truffle 会将合约部署到指定的网络。
  f 参数是指定的部署文件名前缀,truffle 会从这个文件开始迁移。
  稍等片刻就可以在 ganache 的 contracts 中就可以看到这个合约的地址了。
  点进去就可以看到合约的详细信息。
  不过需要注意,ganache 中数字是以十六进制形式进行展示,所以 decimals 和 totalSupply 和我们传入的十进制数字不匹配。
  另一个注意事项是:ganache 中的 mapping 一直存在显示问题,永远都显示 0 items。这个 Bug 存在时间超过了一年。记得我刚用 Ganache 的时候,一度怀疑是我的合约写得有问题,在这个问题上折腾了一天,记忆犹新。遗憾的是,一年多过去了,ganache 还没有修复这个 Bug。配置 MetaMask 网络
  在测试之前,我们先要配置网络。
  配置信息如下图所示:
  在 MetaMask 中添加代币
  接下来我们要把代币添加到 MetaMask 中。
  在这一步就可以看到代币余额了。
  不过本地的链在 MetaMask 中不能正常显示,部署到链上时是正常的。实现前端 DApp
  前端使用了很多库,我们先来安装这些库。创建 Nextjs 项目
  运行命令创建项目:npx create-next-app
  项目名看你的喜好;编程语言选择 TypeScript。安装 wagmi 和 ethersjs
  与智能合约交互的 SDK 使用 wagmi 和 ethersjs,安装依赖:npm i wagmi ethers安装 chakra
  UI 组件库选择 chakra,安装依赖:npm i @chakra-ui/react @emotion/react @emotion/styled framer-motion安装配置 tailwindcss
  CSS 框架选择 tailwindcss,安装依赖:npm install -D tailwindcss postcss autoprefixer
  初始化配置。npx tailwindcss init -p
  修改 tailwind.config.js 的内容。/** @type {import("tailwindcss").Config} */ module.exports = {   content: [     "./pages/**/*.{js,ts,jsx,tsx}",     "./components/**/*.{js,ts,jsx,tsx}",   ],   theme: {     extend: {},   },   plugins: [], }
  修改 styles/globals.css 的内容。@tailwind base; @tailwind components; @tailwind utilities;
  这些配置比较烦琐,更多内容可以参考官方文档。关闭 React 严格模式
  nextjs 会默认打开 React 的严格模式,但我们用不到,需要关闭。/** @type {import("next").NextConfig} */ const nextConfig = {   reactStrictMode: false, }  module.exports = nextConfig创建 pages/noah-token.tsx 文件
  这是我们代币的操作页面。export default function NoahToken() {   return hello, noah token! }关闭服务端渲染
  接下来我们需要配置 wagmi 的相关配置。但在那之前我们需要关闭 SSR。
  nextjs 的页面默认都是开启 SSR 的,这会导致下面这个 Error。
  触发这个 Error 的原因是服务端的 UI 和客户端不一致。
  关闭服务端渲染很简单。import dynamic from "next/dynamic";  export default dynamic(() => Promise.resolve(NoahToken), { ssr: false });开发功能
  代码分为几个组件:Profile:个人信息。Detail:代币信息。BalanceOf:查余额。Transfer:转账。Allowance:查授权余额。Approve:授权。TransferFrom:通过授权转账。
  代码量较多,不在这里做更多分析。后续考虑单独写一篇专门介绍 wagmi 的文章。
  部署上线将合约部署到 Goeril
  Goeril 是目前最流行的测试网络之一,接下来我们会把 Noah 币部署到这个网络上。
  要部署到 Goeril 首先需要在app.infura.io/ 上面创建一个项目。
  然后可以获取到 API Key。
  回到合约项目中。
  安装两个包:npm i @truffle/hdwallet-provider dotenv
  dotenv 用于读取环境变量。
  创建 .env 文件,写入以下内容:PRIVATE_KEY="xxx" PROJECT_ID="xxx"
  回到 truffle-config.js 文件,添加 goerli 相关配置:require("dotenv").config();  const { PRIVATE_KEY, PROJECT_ID } = process.env;  const HDWalletProvider = require("@truffle/hdwallet-provider");   module.exports = {   // ...   networks: {     // ...     goerli: {       provider: () => new HDWalletProvider(PRIVATE_KEY, `https://goerli.infura.io/v3/${PROJECT_ID}`),       network_id: 5,       // Goerli"s id       confirmations: 2,    // # of confirmations to wait between deployments. (default: 0)       timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)       skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )     }   } }
  最后运行命令:truffle migrate --network goerli --f 1
  稍等片刻,部署成功。
  将 DApp 部署到 Vercel
  部署之前需要将合约地址配置到 vercel 的环境变量中。
  由于之前我就配置好了 Vercel,而且这部分不是重点,就不展开讲了。
  当然,在实际工作中,并不会真正从零实现一个 ERC20 的代币合约,通常会使用 OpenZepplin 这种库来一键发币。本文教学目的是以学习为主。
  只懂得如何发行代币还不够,我们还需要知道如何推广币。推广币最简单的方式就是发布一个免费领币的网站,因为互联网上最不缺的就是羊毛党。
  后面我也会写一篇文章介绍如何开发免费领币网站,也就是水龙头网站。
  Web3 是未来世界一大变数,我们想帮助更多人了解并加入 Web3,如果你对 Web3 感兴趣,记得关注我~
  一起沉淀、一起成长、一起拥抱未来。
  #头条创作挑战赛# #web3#

当前房价的一些想法现在很多国人希望房价能够出现大幅下跌,甚至跌5075,这个基本上不可能发生,方方面面的阻力应该是很大的。首当其冲的是各地方政府不希望看到。依托房产各类税费仍是地方政府最容易来钱的地通过任泽平所说的经济数字,我们看到了什么反过来看,我们大家就更明白其中的一些意思。1国营经济的企业数量占近10。2一一国营经济贡献了中国经济近20的城镇就业。3国营经济贡献了中国经济近30的技术创新成果。4一一国营经济贡白酒IPO新变局A股久未添丁,珍酒李渡无奈赴港?财经新媒体刘芬文蒋诗舟编辑酒别重逢!从霸屏央视春晚,到亲友宴请,白酒抢占着春节流量高地。2023年春晚2000开播前十分钟黄金时间里,共19个品牌广告出现,白酒品牌多达8个,除劲酒江苏常州壕奖新能源产业,进击产业规模市值双万亿目标距离GDP万亿之城仅一步之遥的江苏常州,推出重磅政策为新能源产业釜底加薪。1月28日,常州新春第一会聚焦新能源之都建设,会上提出目标到2025年新能源产业规模超万亿元资本市场新能源存款超过50万的人,少得可怜!虽然大家建议专家不要再建议了,但专家控制不了自己,各种建议仍层出不穷。这不,最近一位专家的奇葩言论又引发了轩然大波专家建议对50万以上存款征收利息税其实拥有50万以上存款的人少得可杠杆原理,小资金博取大收益杠杆原理一夜暴富,小资金博得大收益杠杆原理,亦称杠杆平衡条件。在重心理论的基础上,阿基米德发现了杠杆原理,即二重物平衡时,它们离支点的距离与重量成反比。阿基米德对杠杆的研究不仅仅停专访武汉汉阳区委副书记区长郭笑撰探索差异化特色金融服务体系基金聚集和基金招商助力现代产业发展编者按当基地基金基业模式成为地方政府发展高新技术产业撬动社会资本参与促进地方经济高质量发展的通用模式,创投地理栏目应运而生。21世纪经济报道将通过对各地产业生态资本布局等系列调研,岳阳税务税力量为重大项目建设蓄力赋能红网时刻岳阳2月2日讯(通讯员陈真黎牧)重大项目是加快区域发展的强引擎。日前,随着城陵矶新港区2023年第一批重大项目的集中启动,全市项目建设吹响了冲锋号。岳阳市税务部门靠前部署,创新药械审批开展大数据交易上海浦东引领区实施方案已完成超九成21世纪经济报道记者张梓桐上海报道如果没有这条政策,我们最新一轮的增资进程就不会这么快完成。2月1日,在浦东引领区改革创新案例发布现场,上海隐冠半导体技术有限公司董事长兼总经理吴立唇腭裂语言康复关键看什么?年龄是重点唇腭裂孩子的康复问题非常多,每一步都有很多细节在里面,家长一定要认真阅读,仔细消化。唇腭裂语言训练机构分享的内容包括1术后语音训练的时间。2唇腭裂语音训练的年龄。3术后语音训练的条携程的春天来了吗?2023年第一波报复性消费从春节旅游开始,夸张到什么地步?三亚酒店一晚价格最高达到20万元以上。德宏芒市卖甩手粑粑的小哥甩太多饼,导致手腕脱臼。昆明喂海鸥情况平均五十个人喂一只海鸥
狂人穆里尼奥学院派主教练的升级之路传奇一生你们说,穆里尼奥到底有什么样的魔力,只用了一场比赛,就差点将葡超两大豪门拆家,而他新加盟的俱乐部,在他上班第一天开始,他就将俱乐部管理层几乎都得罪一遍,而他用硬实力告诉了所有人,我新疆炮轰,姚明硬刚,一场合同纠纷下的体制真相CBA和篮协的问题,看似是一个体制问题,其实是一个涉及计划经济自由市场资源管制贸易壁垒的经济学问题。文巴九灵(微信公众号吴晓波频道)自从NBA退役,姚明有了新工作中国篮协主席。他曾弘扬雷锋精神参与志愿服务海安雅周江海志愿者组织学雷锋活动陆宝文王开彬3月4日,海安市雅周江海志愿者服务站,雅周社会组织培育发展中心为纪念向雷锋同志学习题词发表60周年,组织志愿者上午深入残疾人家和帮扶人家进行理疗理发打扫卫生等服务活动,3月6日深夜,中国传来4个消息,个个都说出了老百姓的心声今天是3月6日,全国两会正在召开,每天都有委员的新提案传来,花上几分钟了解一下,有的可能将发生,也是让人期待的事情。感受国家的政策变化,认为非常给力,接下来,我为大家分享这四个消息科技创新主题理财日渐受宠理财公司接连布局是何缘由理财公司正在抢滩布局新兴领域以丰富产品品类。3月6日,北京商报记者注意到,近日,浦银理财全额认购了母行浦发银行落地的全国首单科技创新主题理财直接融资工具。在此之前,亦有不少理财公司洋女婿聊两会德国高管托马斯我的未来在中国视频加载中编者按3月,中国进入两会时间。这不仅是中国的大事,也吸引着全球目光。有这样一群人,他们来自世界各地,因好奇或向往来到了中国,遇到命定的另一半,成为中国女婿。他们看到了中国机构调研Filecoin的潜力是巨大的,未来20年数据将增加1000倍互联网的早期发展花了大约20年的时间,直到1989年发明了万维网,释放了它的巨大潜力并改变了我们与数据交互和相互通信的方式。万维网位于支持互联网的基础设施之上,使用称为统一资源定位Z45次武昌到杭州,Z47次杭州到武昌凭什么能成为最受欢迎特快列车云游风物之旅春暖花开的季节,又到了旅游旺季,来一场顺走就走的旅行,是多少人的理想与向往,尤其是运火车去旅行,让心灵放松,让心情舒畅,让青春荡漾,让春天奔放。可能你没坐过Z45次武昌日本深受欢迎的药妆店,了解一下!暖灯点亮你的旅日生活日本的药妆店以低廉的价格出售种类繁杂,有药品化妆品补品日用品糖果等。而且许多商品都是免税的。因此非常受外国游客的欢迎。药妆店已成为日本人生活中不可或缺的一部分,丽水青田诗画小舟山景区对面山火燎原,救灾进行时(3。4。1400于现场)山火熊熊,昨天到现在,蔓延开来中。森林火灾警察上来了,说局长在火线前线指挥部。我能做些什么呢?以前做过救灾志愿者,可是我到了现场,没有救灾用具,什么也做不福建云霄又到枇杷收获季3月3日拍摄的云霄县和平乡棪树村的枇杷生态观光产业园(无人机照片)。福建省漳州市云霄县是中国枇杷之乡,枇杷是该县农业支柱产业。眼下又到了云霄枇杷收获的季节。近年来,该县积极引进枇杷