部署IBM区块链平台:开发区块链业务网络到Hyperledger Fabric(多个组织)

贸易物流行业Hyperledger Fabric区块链用例 区块链是最热门的技术之一,风险资本家正在投入大量资金。最初的区块链概念得到了比特币(Satoshi Nakamoto和他的论文)的推广。不可变分布式分类帐的概念在fintech之外的许多用例中具有很大的前景。在我之前的文章中,我曾提到过我在大型零售商处参与的区块链供应链使用案例。另一个与供应链密切相关的领域是“跨境贸易”。这个重点是使用区块链进行跨境贸易,但是当与供应链使用案例(我之前已经写过)结... 阅读详情

Deploying a IBM Blockchain Platform: Develop blockchain business network to Hyperledger Fabric (multiple organizations)

 

在参照部署IBM区块链平台:开发区块链业务网络到Hyperledger Fabric(多个组织)的教程过程中遇到的问题

 

问题一:

在“Download the platform binaries, including cryptogen ”(下载平台二进制文件,包括cryptogen)这一步中执行一下命令

curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0

时 提示连接超时:

curl: (7) Failed to connect to goo.gl port 443: Operation timed out

解决方法:

方法一:

用浏览器打开命令中的地址发现:

https://goo.gl/6wtTN5
这个地址映射到了下面这个地址
https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh

所以将来命令中的地址替换为执行,ok了。如果你的问题依然内有解决你可以看方法二。

curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.1.0

方法二: 

浏览器打开:(文件内容会贴到后边)

https://goo.gl/6wtTN5
或者(这个地址映射到了下面这个地址)
https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh

其实就是bootstrap.sh文件的源码,将文件保存到本地,copy到需要执行此命令的目录下,然后执行(这一步速度真慢)

sudo chmod +x bootstrap.sh 
./bootstrap.sh

以上这一步命令参考的大侠的文章:https://blog.youkuaiyun.com/sinat_36742186/article/details/78940770

***如果你打不开这个地址可以复制如下内容,在本地新建一个bootstrap.sh文件

bootstrap.sh内容:

#!/bin/bash
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

# if version not passed in, default to latest released version
export VERSION=1.2.0
# if ca version not passed in, default to latest released version
export CA_VERSION=$VERSION
# current version of thirdparty images (couchdb, kafka and zookeeper) released
export THIRDPARTY_IMAGE_VERSION=0.4.10
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
export MARCH=$(uname -m)

printHelp() {
  echo "Usage: bootstrap.sh [version [ca_version [thirdparty_version]]] [options]"
  echo
  echo "options:"
  echo "-h : this help"
  echo "-d : bypass docker image download"
  echo "-s : bypass fabric-samples repo clone"
  echo "-b : bypass download of platform-specific binaries"
  echo
  echo "e.g. bootstrap.sh 1.2.0 -s"
  echo "would download docker images and binaries for version 1.2.0"
}

dockerFabricPull() {
  local FABRIC_TAG=$1
  for IMAGES in peer orderer ccenv tools; do
      echo "==> FABRIC IMAGE: $IMAGES"
      echo
      docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG
      docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES
  done
}

dockerThirdPartyImagesPull() {
  local THIRDPARTY_TAG=$1
  for IMAGES in couchdb kafka zookeeper; do
      echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES"
      echo
      docker pull hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG
      docker tag hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG hyperledger/fabric-$IMAGES
  done
}

dockerCaPull() {
      local CA_TAG=$1
      echo "==> FABRIC CA IMAGE"
      echo
      docker pull hyperledger/fabric-ca:$CA_TAG
      docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca
}

samplesInstall() {
  # clone (if needed) hyperledger/fabric-samples and checkout corresponding
  # version to the binaries and docker images to be downloaded
  if [ -d first-network ]; then
    # if we are in the fabric-samples repo, checkout corresponding version
    echo "===> Checking out v${VERSION} branch of hyperledger/fabric-samples"
    git checkout v${VERSION}
  elif [ -d fabric-samples ]; then
    # if fabric-samples repo already cloned and in current directory,
    # cd fabric-samples and checkout corresponding version
    echo "===> Checking out v${VERSION} branch of hyperledger/fabric-samples"
    cd fabric-samples && git checkout v${VERSION}
  else
    echo "===> Cloning hyperledger/fabric-samples repo and checkout v${VERSION}"
    git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samples && git checkout v${VERSION}
  fi
}

# Incrementally downloads the .tar.gz file locally first, only decompressing it
# after the download is complete. This is slower than binaryDownload() but
# allows the download to be resumed.
binaryIncrementalDownload() {
      local BINARY_FILE=$1
      local URL=$2
      curl -f -s -C - ${URL} -o ${BINARY_FILE} || rc=$?
      # Due to limitations in the current Nexus repo:
      # curl returns 33 when there's a resume attempt with no more bytes to download
      # curl returns 2 after finishing a resumed download
      # with -f curl returns 22 on a 404
      if [ "$rc" = 22 ]; then
	  # looks like the requested file doesn't actually exist so stop here
	  return 22
      fi
      if [ -z "$rc" ] || [ $rc -eq 33 ] || [ $rc -eq 2 ]; then
          # The checksum validates that RC 33 or 2 are not real failures
          echo "==> File downloaded. Verifying the md5sum..."
          localMd5sum=$(md5sum ${BINARY_FILE} | awk '{print $1}')
          remoteMd5sum=$(curl -s ${URL}.md5)
          if [ "$localMd5sum" == "$remoteMd5sum" ]; then
              echo "==> Extracting ${BINARY_FILE}..."
              tar xzf ./${BINARY_FILE} --overwrite
	      echo "==> Done."
              rm -f ${BINARY_FILE} ${BINARY_FILE}.md5
          else
              echo "Download failed: the local md5sum is different from the remote md5sum. Please try again."
              rm -f ${BINARY_FILE} ${BINARY_FILE}.md5
              exit 1
          fi
      else
          echo "Failure downloading binaries (curl RC=$rc). Please try again and the download will resume from where it stopped."
          exit 1
      fi
}

# This will attempt to download the .tar.gz all at once, but will trigger the
# binaryIncrementalDownload() function upon a failure, allowing for resume
# if there are network failures.
binaryDownload() {
      local BINARY_FILE=$1
      local URL=$2
      echo "===> Downloading: " ${URL}
      # Check if a previous failure occurred and the file was partially downloaded
      if [ -e ${BINARY_FILE} ]; then
          echo "==> Partial binary file found. Resuming download..."
          binaryIncrementalDownload ${BINARY_FILE} ${URL}
      else
          curl ${URL} | tar xz || rc=$?
          if [ ! -z "$rc" ]; then
              echo "==> There was an error downloading the binary file. Switching to incremental download."
              echo "==> Downloading file..."
              binaryIncrementalDownload ${BINARY_FILE} ${URL}
	  else
	      echo "==> Done."
          fi
      fi
}

binariesInstall() {
  echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
  binaryDownload ${BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}
  if [ $? -eq 22 ]; then
     echo
     echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
     echo
   fi

  echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
  binaryDownload ${CA_BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${CA_VERSION}/${CA_BINARY_FILE}
  if [ $? -eq 22 ]; then
     echo
     echo "------> ${CA_TAG} fabric-ca-client binary is not available to download  (Available from 1.1.0-rc1) <----"
     echo
   fi
}

dockerInstall() {
  which docker >& /dev/null
  NODOCKER=$?
  if [ "${NODOCKER}" == 0 ]; then
	  echo "===> Pulling fabric Images"
	  dockerFabricPull ${FABRIC_TAG}
	  echo "===> Pulling fabric ca Image"
	  dockerCaPull ${CA_TAG}
	  echo "===> Pulling thirdparty docker images"
	  dockerThirdPartyImagesPull ${THIRDPARTY_TAG}
	  echo
	  echo "===> List out hyperledger docker images"
	  docker images | grep hyperledger*
  else
    echo "========================================================="
    echo "Docker not installed, bypassing download of Fabric images"
    echo "========================================================="
  fi
}

DOCKER=true
SAMPLES=true
BINARIES=true

# Parse commandline args pull out
# version and/or ca-version strings first
if [ ! -z $1 -a ${1:0:1} != "-" ]; then
  VERSION=$1;shift
  if [ ! -z $1  -a ${1:0:1} != "-" ]; then
    CA_VERSION=$1;shift
    if [ ! -z $1  -a ${1:0:1} != "-" ]; then
      THIRDPARTY_IMAGE_VERSION=$1;shift
    fi
  fi
fi

# prior to 1.2.0 architecture was determined by uname -m
if [[ $VERSION =~ ^1\.[0-1]\.* ]]; then
  export FABRIC_TAG=${MARCH}-${VERSION}
  export CA_TAG=${MARCH}-${CA_VERSION}
  export THIRDPARTY_TAG=${MARCH}-${THIRDPARTY_IMAGE_VERSION}
else
  # starting with 1.2.0, multi-arch images will be default
  : ${CA_TAG:="$CA_VERSION"}
  : ${FABRIC_TAG:="$VERSION"}
  : ${THIRDPARTY_TAG:="$THIRDPARTY_IMAGE_VERSION"}
fi

BINARY_FILE=hyperledger-fabric-${ARCH}-${VERSION}.tar.gz
CA_BINARY_FILE=hyperledger-fabric-ca-${ARCH}-${CA_VERSION}.tar.gz

# then parse opts
while getopts "h?dsb" opt; do
  case "$opt" in
    h|\?)
      printHelp
      exit 0
    ;;
    d)  DOCKER=false
    ;;
    s)  SAMPLES=false
    ;;
    b)  BINARIES=false
    ;;
  esac
done

if [ "$SAMPLES" == "true" ]; then
  echo
  echo "Installing hyperledger/fabric-samples repo"
  echo
  samplesInstall
fi
if [ "$BINARIES" == "true" ]; then
  echo
  echo "Installing Hyperledger Fabric binaries"
  echo
  binariesInstall
fi
if [ "$DOCKER" == "true" ]; then
  echo
  echo "Installing Hyperledger Fabric docker images"
  echo
  dockerInstall
fi

 

Hyperledger Fabric和Composer实现区块链应用程序 目前无法绕过技术领域的是区块链话题。但除了加密货币之外,还有更多有趣的应用程序可以带来许多激动人心的软件生态系统。这也适用于Hyperledger项目,该项目提供了一个非常模块化的区块链框架。让我们看看使用Hyperledger Fabric和Composer实现区块链应用程序是多么容易。 关于项目Hyperledger Hyperledger是一个umbrella项目的名称,在该项目下开源区块链... 阅读详情

相关推荐

使用Hyperledger Fabric和Composer实现区块链应用程序

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 目前无法绕过技术领域的是区块链话题。但除了加密货币之外,还有更多有趣的应用程序可以带来许多激动人心的软件生态系统。这也适用于Hyperledger项目,该项目提供了一个非常模块化的区块链框架。让我们看看使用Hyperledger Fabric和Composer实现区块链应用程序是多么容易。 关于项目Hyperledger...

JKX_geek的博客 559

fabric-samples环境搭建-bootstrap.sh下载二进制文件失败

在执行 ./bootstrap.sh 脚本自动下载fabric-samples和fabric镜像时,由于国内网络的原因,常常会下载 hyperledger-fabric-linux-amd64-1.4.0.tar.gz 失败的错误导致无法继续进行: ==> There was an error downloading the binary file. Switching to increme...

tiwolf的博客 6912

别再让地图加载慢吞吞!GeoServer + GeoWebCache 缓存配置实战(附性能对比)

本文详细介绍了如何通过GeoServer和GeoWebCache优化地图服务性能,实现地图加载速度的显著提升。从缓存机制解析到实战配置流程,再到高级性能调优技巧,帮助开发者构建高效地图缓存系统,解决地图加载慢的问题。

weixin_42525369的博客 407

一个小时带你用 Hyperledger Fabric开发一个Demo

先懂是什么,再懂怎么做,再懂为什么 本文作为系列开篇,力求通过一个简单fabric应用开发过程,让大家对fabric有个直观概括的了解。 前言 先放三张图: 第一张是Gartner 2017的技术成熟曲线图。对这张图的理解,大家仁者见仁智者见智,作为区块链从业者,既不想它被过度吹捧也不想被无脑黑。区块链不是万能的,但是在某些方向,尤其是对敏感信息加密共享有旺盛需求的领域,确实有其优势。 第二张是当前主要区块链项目的发展和应用状况。公共链领域,比特币依然一骑绝尘,以太坊紧跟...

建建的博客 4711

如何理解反步法设计控制器?

假设以二阶系统为例,被控对象的系统状态方程为: 基于反步控制的具体方法如下: 1.1步骤一 定义期望状态为xd,状态误差e1,为: e1=x1-xd; 则e1的导数为: 1.2步骤二 定义虚拟控制量为: e2定义为: 1.3步骤三 定义Lyapunov能量函数为: 1.4步骤四 定义总Lyapunov能量函数为: 因此设计的控制律为: 设计c>0,则: 满足Lyapunov的稳定性判定条件...

weixin_42736130的博客 2万+

HA集群 执行 hdfs haadmin -transitionToActive 失败

最近把一个单NameNode集群变更为HA集群,过程中都很顺利,nn1和nn2两个NameNode都显示standby状态,但是把nn1或者nn2切换到active状态时就会报错抛异常。 查看master上namenode启动日志,如下: Incompatible clusterID for journal Storage Directory /home/hadoop-zero/bigdat...

qq_34727158的博客 1764

Hyperledger Fabric Chaincode开发详解(实例说明)

导言 目前fabric开发主要分两大块,一是chaincode链上代码的开发,二是基于SDK的application开发; 本文主要是介绍fabric chaincode api,对api的功能和参数进行说明,同时针对每个主要api都给出了 使用例子。 目标: 熟悉fabric chaincode常用api的功能和使用方法; 熟悉fabric chaincode的开发流程以及能够编写cha...

草根工厂——技术虐我千百遍,我依然待你如初恋 6353

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9914

fabric shim安装合约_Hyperledger Fabric(超级账本) Java 开发区块链 部署运行智能合约...

部署并运行 Java 链代码示例您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperledger Fabric 附带的一个 Java 链代码示例上构建、注册和调用交易。部署并运行链代码您将执行以下步骤:使用 Gradle 构建示例。通过运行 Gradle 构建软件为您创建的脚本,向验证对等网络注册...

weixin_39831242的博客 597

Python实战:3种高效方法将txt转csv(附pandas对比测试)

本文针对Python中将txt文件转换为csv格式的需求,深度评测了open()、csv模块和pandas三种主流方法。通过详尽的性能对比测试,从执行效率、内存占用和适用场景等维度提供选型指南,帮助开发者根据数据规模与复杂度选择最高效的转换方案。

weixin_29073241的博客 262

YOLOv11低光照检测性能优化:基于Retinexformer主干网络的深度改进实践

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!@[TOC]在自动驾驶、安防监控、遥感探测等关键领域,目标检测系统必须保证24小时全天候的可靠工作。然而,现有最先进的目标检测模型,包括YOLOv11,其训练数据大多源于光照良好的场景。当环境光照条件急剧下降时,图像会出现严重的噪声、低对比度、颜色失真和细节丢失,直接导致模型性能断崖式下跌。常规的解决方案如图像直方图均衡化或简单的伽马校正,往往收效甚微,甚至可能放大噪声,进一步干扰检测。

m0_71589036的博客 190

hyperledger fabric 实战开发——水产品溯源交易平台(一)

文章目录前言环境准备水产品溯源交易平台设计实现步骤1.两个组织原始数据上传区块链,并通过couchdb查询2.两个组织原始数据再上传数据库,并通过mysql查询3.两个组织原始数据上传数据库,加密上传区块链,MySQL查询后再验证。4.实现可视化界面操作5.四个组织交易溯源平台实现虚拟机优化(根据个人喜好选择) 前言 在万字解析——区块链hyperledger fabric2.2部署实战教程中,我对fabric2.2官方文档的一个示例和两个实战项目进行了操作展示,现在我准备开发一个水产品溯源交易平台,在写下

专攻毕设大企鹅的博客 9466

【python基础】一文掌握 Jupyter Notebook 的使用(超级详细!)

是一个非营利组织,致力于为多种编程语言的交互式计算开发开源软件、开放标准和服务。Jupyter 于 2014 年由 Fernando Pérez 从IPython衍生出来,支持几十种编程语言的执行环境。Jupyter 项目主要开发并支持(.ipynb 文件格式)、JupyterHub和JupyterLab等交互式计算产品。

数据知道的博客 1万+

Hyperledger Fabric基础知识

文章目录什么是Hyperledger Fabric?Hyperledger架构是怎么工作的?Hyperledger交易如何执行总结 Hyperledger Fabric基础知识 本文我们会介绍Hyperledger Fabric的基础知识,并了解如何充分利用这个多功能的区块链框架。 区块链技术为创新提供了丰富的机会。它提供了一种新的交易方式,从而可以从根本上改变业务的实现。 那么,在众多的区块链框...

程序那些事 1万+

NTC热敏电阻选型快速指南

NTC(Negative Temperature Coefficient Thermistor)负温度系数热敏电阻器,是由锰Mn,镍Ni,铜Cu,一氧化碳Co等烧结而成的氧化物。其电阻值随温度的升高而减小,即具有复温度系数,故被称为负温度系数热敏电阻。本文对热敏电阻的应用场景,结构特点和选型参数进行总结。

fydar的博客 1295

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

composer创建项目_在Hyperledger Composer上创建区块链解决方案的教程

composer创建项目 Due to modern business demands, IBM joined hands with other companies to develop an open-source business blockchain network called Hyperledger Fabric project that is touching the sky. Du...

cullen2012的博客 1598

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

超级账本(Hyperledger)

摘要 超级账本(Hyperledger)是linux基金会下的众多项目中的一个。是由IBM、因特尔,还有金融公司,GP摩根以及其他联合机构于2015年提出来的区块链项目,超级账本还包括5个框架项目:Sawtooth、Iroha、Fabric、Burrow、Indy和3个工具项目:Blockchain explorer、Cello、Composer。其中广为人知的是Fabric。当前成员大约140...

hackerlee 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

001基本概念与第一个区块链应用

前言区块链(Blockchain)技术正在迅速发展,各行各业都正以极大的热情拥抱它。作者相信区块链将成为对信息科技领域产生革命性影响的一项新技术。目前,Hyperledger Fabric 正是此领域一个重要的技术框架与平台。本文既是 Hyperledger Fabric(以下简称 Fabric)的实用教程,也是其学习、研究笔记。读者可以与作者一起,一步一步地学习 Fabric 基础知识,利用 H...

qq_21936601的博客 3031

Hyperledger区块链技术生态

为什么80%的码农都做不了架构师?>>> ...

weixin_33912246的博客 377

面向区块链网络的 Hyperledger Fabric 的 6 大技术优势

面向区块链网络的 Hyperledger Fabric 的 6 大技术优势 最新的 Hyperledger 有何独到之处,为什么它对业务网络至关重要,如何开始使用它 Sharon Cocco 和 Gari Singh 2017 年 5 月 18 日发布/更新: 2017 年 12 月 06 日 WeiboGoogle+用电子邮件发送本页面 Comments 0 准备好在基于 Hype

AI时代光年 3011

Hyperledge 区块链开发教程(一)

这个学习路径是你探索和构建使用以太坊、Hyperledger Fabric 和 Hyperledger Composer 的区块链网络的简易参考。它从区块链的概述开始,向您展示如何为开发、打包、构建和测试去中心化应用程序设置以太坊开发环境。您将学习 Solidity - 在以太坊中开发去中心化应用程序的事实上语言。您将配置 Hyperledger Fabric,并使用这些组件构建私有区块链网络和连接到它们的应用程序。从原则出发,您将学习设计和启动网络、在链代码中实现智能合约,以及更多。

龙哥盟 1610

人工智能区块链智能合约_通过业务规则使您的区块链智能合约更智能

区块链已经对多方业务流程产生了深远的影响。 使用区块链的组织依靠可信的自动交易。 它提供了一个信任框架,您可以使用该框架来安全地自动化直到现在仍是手动的流程。 传统上,在商业交易中,当两方交换价值时,他们需要共享交换后的价值以及交易条款和条件的表示。 如果他们不能完全相互信任,则各方将维护自己的交换记录-交易分类帐。 他们还保留自己管理合同交换价值的规则和流程的副本。 复制这些记录可能...

cuxiong8996的博客 1692
上一篇: Navicat for MySQL 函数 存储过程 遍历创建大量复杂结构测试数据
下一篇: python操作mysql数据库
grootblockchain
博客等级 码龄11年 55粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值