IPFS亚洲巡回Meet Up?周欢你又整什么幺蛾子?

本文介绍了IPFS方得社区创始人周欢的一系列活动。2018年,他为用户代投ETH、揭露矿机厂商谣言、举办IPFS峰会等。2019年,方得社区邀请IPFS创始人录制视频,举办巡回活动,启动星际城邦计划。周欢凭借社群优势,积极布道IPFS/Filecoin。

是的,你没看错,这个有着IPFS中国区教父称号的IPFS方得社区创始人周欢,他又搞事了。

2017年7月,他连同“海峡系”(厦门一帮区块链从业者)一起为国内想投资Filecoin爱西欧的用户,成功投出了10000个ETH,还不收取任何代投费用。

2018年3月,一大群矿机厂商伪造了“Filecoin将于6月上线”的谣言,他的方得社区跑出来发文揭露真相关键是他自己投资了一百万的一家矿机厂商竟然没趁着6月上线狂卖一波机器圈一波钱,真是不知道该说他傻还是说他自命清高。

2018年8月,他举办了国内第一场300多人规模的IPFS峰会,并发起了【IPFS生态联盟】。

2018年12月,他和国内最大的比特币矿工社区——矿海会一起举办了矿工大会,把财大气粗的比特币矿霸、以太坊矿主拉进了Filecoin挖矿圈子。

2018年,他跑遍了北京、上海、深圳、成都、武汉、厦门、沈阳、郑州、银川等城市,开展了十几场线下活动,布道IPFS/Filecoin。

2018年,他接受了金色财经、深链财经、布洛克科技、对话链圈、京链财经、大象区块链、拉盘大王、链茶馆等二十几个媒体的采访和群直播,面向数十万的IPFS兴趣者讲述了IPFS未来的价值和前景。

IPFS亚洲巡回Meet Up?周欢你又整什么幺蛾子?

 

2018年的他,实在是太能“闹腾”了。

在中国,形成了谈IPFS必谈周欢的一个现象。真的是哪哪都有他和他的方得社区。

到了2019年,Filecoin测试网和主网即将上线的一年,我们预估到他会搞更多的事儿,但是没想到,刚开年,就搞了波大事儿。

2019年4月的IPFS大会上,方得社区邀请到了IPFS/Filecoin创始人Juan Benet首次录制视频,祝大会圆满成功并声明IPFS官方团队从未和国内任何个人/组织合作。周欢也是在场唯二两个真正受邀(不花钱赞助)的演讲嘉宾,另一个是YottaChain的王东临。

一个月不到,方得社区又放出了消息说要举办【IPFS/Filecoin亚洲巡回Meet Up】,这次不是止步于中国,而要去到港台、日韩、新马泰。第一场就于18号在厦门举行。现场的横幅简直不能再抢镜。

IPFS亚洲巡回Meet Up?周欢你又整什么幺蛾子?

 

不仅如此,方得社区同时还开始了【星际城邦计划】,招募全国一二线城市的城主,共建Filecoin矿场,共享方得社区股权和分红,这在业内也是史无前例。

在2018年上半年,周欢在一次演讲就透露了方得社区的群主数量大概为100人,社群200多个,依靠方得社区Token进行生态建设和内部流通。凭借众多忠诚的群主和庞大的社群,一举跃升为国内最大的IPFS社区。并且,这些群主对方得社区的粘性和认可度非一般的高,自愿为方得呐喊发声。

到了2019年,周欢又不甘寂寞,开始启动城主计划,准备布局全国重点城市,不可谓野心不大。眼看着Filecoin的测试网和主网上线在即,全国500多家矿机厂商泥沙俱下,谣言漫天飞,用户真假难辨,这个时候做一场巡回活动,确实恰逢其时。

对于众多的IPFS/Filecoin爱好者,晦涩难懂的技术词汇看两眼就昏昏欲睡,Filecoin挖矿原理听过就忘无暇细究,特地跑去某个城市听演讲成本太高,所以,听一个靠谱的布道者直接用通俗易懂的语言来讲述,是最容易接受的形式。

只能说,方得社区的一大波“骚操作”不管结果如何,起码对用户是百利而无一害的,这就够了。

梳理出这段代码的逻辑,绘制一个代码逻辑流程图 package com.mbcloud.cbc.core.business.service.preandpost.hbrn; import com.mbcloud.cbc.common.constants.DcBusinessConstants; import com.mbcloud.cbc.core.business.bo.CbcBusinessPropertyBO; import com.mbcloud.cbc.core.business.bo.CbcBusinessResultBO; import com.mbcloud.cbc.core.business.bo.CbcRequestBO; import com.mbcloud.cbc.core.business.bo.CbcResponseBO; import com.mbcloud.cbc.core.business.bo.GetTransInfoResultBO; import com.mbcloud.cbc.core.business.bo.GetTransInfoResultDetailBO; import com.mbcloud.cbc.core.business.constant.CBCCoreConstants; import com.mbcloud.cbc.core.business.exception.CbcException; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * IT811862 曹可乐 2025-04-23 从CBC迁移 * <p> * Title: 湖北农商行查当日明细 - 第一步 * </p> * * <p> * Description: 查当日明细(对接湖北农商行的对账重发YQ3002) * 一共分为两步: * 第一步: 发送查当日明细报文,触发银行推送明细文件到FTP,第一步查询成功,则进入第二步(每个文件最多包含5笔明细) * 第二步:向跨行前置发送获取文件内容的请求,跨行前置从FTP上下载对应的明细文件内容,并上送给后台 * </p> * * <p> * Copyright: 招银网络科技(杭州) 2019 * </p> * * @author 周欢 80273678 * @version 1.0 * @date 2019-08-21 */ @Service("hbrnGetCurTransInfoHandler") public class HbrnGetCurTransInfoHandler extends HbrnPreAndPostHandler { @Override public CbcRequestBO prerequestHandle(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { Map<String, String> bankCfgMap = cbcBusinessPropertyBO.getBankCfgMap(); // 因为农商行查当日明细,如果超过一定的笔数,就只能查回最新的cdtNum字符串长度的最大笔数,因此这里提供配置参数,防止农商行那边修改 String cdtNum = bankCfgMap.get(CDTNUM); if (StringUtils.isBlank(cdtNum)) { cdtNum = INITNUM; } // bussinessInfo中存在BEGNUM :表示为第二次查询,否则表示为第一次查询;首次查询,BEGNUM序号设置为"0000",之后取BGNDAT + counter (不足4位,则左补0) HashMap<String, Object> pageParam = cbcRequestBO.getExpandParam(); String begum = (String)pageParam.get(BEGNUM); //第一次请求设置当前页为1 if (StringUtils.isEmpty(begum)) { pageParam.put(BEGNUM, INITNUM); } else { HashMap<String, Object> expandParam = cbcRequestBO.getExpandParam(); String counter = String.valueOf(Integer.valueOf(String.valueOf(expandParam.get(CURRNUM))) + 1); if (counter.length() > cdtNum.length()) { // DWHBR26:查询当日明细笔数超过银行上限 throw new CbcException(CbcException.EXCEPTION_BEFORE_BANK, "DWHBR26"); } pageParam.put(BEGNUM, cdtNum.substring(counter.length()) + counter); } return cbcRequestBO; } @Override public CbcResponseBO postresponseHandle(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { CbcResponseBO responseBO = cbcResponseBO; if (responseBO == null) { List<CbcBusinessResultBO> businessResults = new ArrayList<>(); responseBO = new CbcResponseBO(); responseBO.setBusinessResults(businessResults); GetTransInfoResultBO getTransInfoResultBO = new GetTransInfoResultBO(); CbcBusinessResultBO cbcBusinessResultBO1 = cbcBusinessResultBO.get(0); getTransInfoResultBO.setRetCod(cbcBusinessResultBO1.getRetCod()); getTransInfoResultBO.setRetMsg(cbcBusinessResultBO1.getRetMsg()); List<GetTransInfoResultDetailBO> getTransInfoResultDetailBOS = new ArrayList<>(); getTransInfoResultBO.setTransDtl(getTransInfoResultDetailBOS); businessResults.add(getTransInfoResultBO); } else { CbcBusinessResultBO resultBO = responseBO.getBusinessResults().get(0); //查明细结果 GetTransInfoResultBO getTransInfoResultBO = (GetTransInfoResultBO)resultBO; GetTransInfoResultBO getTransInfoResultBO1 = (GetTransInfoResultBO)cbcBusinessResultBO.get(0); String retCod = getTransInfoResultBO1.getRetCod(); getTransInfoResultBO.setRetCod(retCod); getTransInfoResultBO.setRetMsg(getTransInfoResultBO1.getRetMsg()); //查询失败:删除明细,进行覆盖 if (!CBCCoreConstants.RET_COD_SUCCESS.equals(retCod)) { ArrayList<GetTransInfoResultDetailBO> getTransInfoResultDetailBOS = new ArrayList<>(); getTransInfoResultBO.setTransDtl(getTransInfoResultDetailBOS); cleanExtResultUpUnusedField(cbcRequestBO, cbcResponseBO); return responseBO; } } cleanExtResultUpUnusedField(cbcRequestBO, responseBO); setExtResult(cbcRequestBO, cbcBusinessResultBO); return responseBO; } @Override public boolean isRequestSuccess(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { return DcBusinessConstants.RET_COD_SUCCESS.equals(cbcBusinessResultBO.get(0).getRetCod()); } @Override public boolean beContinue(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { boolean isCirculFlag = false; if (DcBusinessConstants.RET_COD_SUCCESS.equals(cbcResponseBO.getBusinessResults().get(0).getRetCod())) { HashMap<String, Object> pageParam = cbcRequestBO.getExpandParam(); String fileName = pageParam.get(FILENAME) == null ? null : String.valueOf(pageParam.get(FILENAME)); isCirculFlag = StringUtils.isNotBlank(fileName); } if (!isCirculFlag) { cleanExtResultUpUnusedField(cbcRequestBO, cbcResponseBO); } return isCirculFlag; } }
10-23
这是第二步的逻辑,同样绘制一个代码逻辑流程图 package com.mbcloud.cbc.core.business.service.preandpost.hbrn; import com.mbcloud.cbc.common.constants.DcBusinessConstants; import com.mbcloud.cbc.core.business.bo.CbcBusinessPropertyBO; import com.mbcloud.cbc.core.business.bo.CbcBusinessResultBO; import com.mbcloud.cbc.core.business.bo.CbcRequestBO; import com.mbcloud.cbc.core.business.bo.CbcResponseBO; import com.mbcloud.cbc.core.business.bo.GetTransInfoResultBO; import com.mbcloud.cbc.core.business.bo.GetTransInfoResultDetailBO; import com.mbcloud.cbc.core.business.constant.CBCCoreConstants; import com.mbcloud.cbc.core.business.exception.CbcException; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * <p>曹可乐 2025-04-23 从CBC迁移 * Title: 湖北农商行查当日明细 - 第二步 * </p> * * <p> * Description: 湖北农商行查当日明细 - 第二步:向跨行前置发送获取文件内容的请求,跨行前置从FTP上下载对应的明细文件内容 * 注意: 超过一定的时间后还未获取,则查明细失败 * </p> * * <p> * Copyright: 招银网络科技(杭州) 2019 * </p> * * @author 周欢 80273678 * @version 1.0 * @date 2019-08-21 */ @Service("hbrnDownLoadCurDtlHandler") public class HbrnDownLoadCurDtlHandler extends HbrnPreAndPostHandler { @Override public CbcResponseBO postresponseHandle(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { CbcResponseBO responseBO = cbcResponseBO; //第一次查询 if (responseBO == null) { responseBO = new CbcResponseBO(); responseBO.setBusinessResults(cbcBusinessResultBO); } else { CbcBusinessResultBO resultBO = responseBO.getBusinessResults().get(0); //查明细结果 GetTransInfoResultBO getTransInfoResultBO = (GetTransInfoResultBO)resultBO; GetTransInfoResultBO getTransInfoResultBO1 = (GetTransInfoResultBO)cbcBusinessResultBO.get(0); String retCod = getTransInfoResultBO1.getRetCod(); getTransInfoResultBO.setRetCod(retCod); getTransInfoResultBO.setRetMsg(getTransInfoResultBO1.getRetMsg()); //查询失败:删除明细,进行覆盖 if (!CBCCoreConstants.RET_COD_SUCCESS.equals(retCod)) { ArrayList<GetTransInfoResultDetailBO> getTransInfoResultDetailBOS = new ArrayList<>(); getTransInfoResultBO.setTransDtl(getTransInfoResultDetailBOS); cleanExtResultUpUnusedField(cbcRequestBO, cbcResponseBO); return responseBO; } if (null == getTransInfoResultBO.getTransDtl()) { getTransInfoResultBO.setTransDtl(new ArrayList<>()); } if (null == getTransInfoResultBO1.getTransDtl()) { getTransInfoResultBO1.setTransDtl(new ArrayList<>()); } getTransInfoResultBO.getTransDtl().addAll(getTransInfoResultBO1.getTransDtl()); } return responseBO; } @Override public boolean isRequestSuccess(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { return DcBusinessConstants.RET_COD_SUCCESS.equals(cbcResponseBO.getBusinessResults().get(0).getRetCod()); } @Override public boolean beConditionMatch(CbcBusinessPropertyBO cbcBusinessPropertyBO, CbcRequestBO cbcRequestBO, CbcResponseBO cbcResponseBO, List<CbcBusinessResultBO> cbcBusinessResultBO) throws CbcException { HashMap<String, Object> pageParam = cbcRequestBO.getExpandParam(); return DcBusinessConstants.RET_COD_SUCCESS.equals(cbcBusinessResultBO.get(0).getRetCod()) && ObjectUtils.isNotEmpty(pageParam.get(FILENAME)); } }
10-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值