heyuan 发布的文章 - 六币之门
首页
视频教程
网站导航
活动日历
关于我们
用户投稿
推荐
新闻动态
搜 索
1
融资周报 | 公开融资事件11起;加密技术公司Toposware完成500万美元融资,Polygon联创参投
112 阅读
2
六币日报 | 九只比特币ETF在6天内积累了9.5万枚BTC;贝莱德决定停止推出XRP现货ETF计划
76 阅读
3
融资周报 | 公开融资事件27起;L1区块链Monad Labs完成2.25亿美元融资,Paradigm领投
74 阅读
4
六币日报 | 美国SEC再次推迟对灰度以太坊期货ETF做出决定;Do Kwon已出黑山监狱等待引渡
72 阅读
5
【ETH钱包开发06】查询某个地址的交易记录
55 阅读
新闻动态
每日快报
一周精选
融资情况
项目投研
自治组织
数字藏品
去中心化应用
去中心化游戏
去中心化社交
去中心化金融
区块链交易所
科普知识
小白入门
用户手册
开发文档
行业报告
技术前沿
登录
搜 索
标签搜索
新闻
日报
元歌Eden
累计撰写
1,087
篇文章
累计收到
0
条评论
首页
栏目
新闻动态
每日快报
一周精选
融资情况
项目投研
自治组织
数字藏品
去中心化应用
去中心化游戏
去中心化社交
去中心化金融
区块链交易所
科普知识
小白入门
用户手册
开发文档
行业报告
技术前沿
页面
视频教程
网站导航
活动日历
关于我们
用户投稿
推荐
新闻动态
用户登录
登录
找到
1087
篇与
heyuan
相关的结果
2023-03-24
程序猿生存指南-14 钱迷心窍
(30) 上班摸鱼周一,我重新踏上辛苦劳作的征程。早高峰的地铁,乌压压满是人。地铁进站了,又是一场没有硝烟的战争。人挤人,人推人,人骂人,大家争先恐后,寸步不让。车门大开,身后的壮汉硬生生地把我挤进了地铁。刚参加工作那会儿,面对这种场面,我还会横眉冷对,现在却是完全麻木。我靠着屁股大的优势在车厢门口处开辟了一块不小的空间,而后点亮手机,在屏幕上划划点点,打发短暂却烦闷的路上时光。周遭的过客莫不是如此,无论自己占据的位置多么逼仄,总会有一方空间留给手机。21世纪,大千世界被浓缩在巴掌大的方寸之间。旁边一位正看综艺视频的小哥,为了不发出笑声,强忍着愣是把脸憋得通红。而我,为了不让体内一股胀气喷薄而出,进而引来周围人侧目,强撑着将其逼退回了肠道。等待着,放空着,游离着。终于列车抵达西二旗,喧嚣如约而至。我从西二旗地铁出来,坐上了前往中关村软件园的摆渡车。约莫十分钟,便来到了朗云大厦楼下。今日,大厦门口多了两盆巨大的招财树,枝繁叶茂,一人多高。寓意朗云在互联网领域里蒸蒸日上。矗立于门口的保安小哥还如往常那般颔首微笑,十分友善。乘电梯,过走廊,我快步走进办公区。四下扫视,这才发现工位好似换了人间。原先办公桌上那些蔫了的绿植全都被替换,从吊兰变成了绿箩。整个屋子宛若一片丛林,满目皆是绿油油。成年后,绿色被赋予了新的含义,不总是令人喜悦。不过,眼前这抹绿着实让人舒适无比。几位保洁阿姨穿梭于工位之间,认真地打扫着卫生。隔壁组有几个早到的同事,正围坐在一起闲聊,声音忽大忽小,不时还爆出狼嚎般的狂笑,有些令人讨厌。一如往常,我坐在工位上先发呆了几分钟,待到心绪平稳下来后,打开了电脑,登上聊天工具,办公系统。也不知是哪一次陪老娘看养生节目,把养生专家那清晨畅饮一杯水的建议记在了心里。在开启一天忙碌工作之前,我会先去躺茶水间,喝几杯温水。如果正赶上尿急屎紧,则会先跑一趟乃至几趟厕所。三分开水,七分冷水,倒入杯中,缓慢摇晃杯体数下,待其冷热混合均匀后,手高举,头微仰,二三百毫升咕咚下肚。爽到喉咙深处后,会不由自主地打个嗝。如果身旁无人,这个隔会拉个长音,直到胸腔共鸣消失殆尽。接下来,抚摸肚腩几下,将空杯子重新放回饮水机处,打开热水阀,把水杯重新灌满,保持步伐匀称,慢悠悠地走回工位。将水杯敞口,放在书桌一隅,等待沸水慢慢变成凉白开。在此期间,可以多次尝试轻抿杯中水面,如果温度适宜,则可多饮几口,如果烫嘴,则再放数分钟。对于程序员来说,上午绝对不是一个容易迸发灵感的时间段,所以不要惋惜一寸光阴一寸金,寸金难买寸光阴。该颓颓,该歇歇,因为整个下午乃至晚上,我们都会有大把辛劳的时间。为了打发无聊的上午时光,可以选择在网上冲浪。在浏览器里开几个新闻网站,大致了解了当下新闻热点,社会动态,免得吃饭时和同事之间闲聊没有谈资,不知对方所云。热门新闻总是有限,随后可以再去几个知名的程序开发者社区观摩一番。把业界又开源了哪些项目,各大网站又爆出了哪些漏洞,明星创业公司又融了多少钱,统统装进脑子里。程序员就应该时刻保持与时俱进,这样才能做到不会被时代的轮子所碾压。倘若如此操作,上午很快就会过去。王旭喊我去吃午饭的时候,我正在公司内部系统里浏览上个月的工资明细。幸好我眼疾手快,在察觉有人伫立身后时,立马叉掉了浏览器,差点就暴露了自己的薪水状况。薪资泄密这事儿在绝大多数互联网公司里都是高压线,谁都不能触碰,更不能讨论。不患寡而患不均。在大多数互联网企业里,老员工不得不接受一个现实,那就是工资时不时就会被新人所倒挂。所谓工资倒挂是指为公司工作多年的老员工,其薪水比不上刚入职的新员工。当然当初老员工入职的时候也曾倒挂过比他更老的员工。所谓往复循环,后浪总把前浪掀翻。之所以出现这种并非为公司贡献越久回报越多的现象是源于互联网这个行业尚处于高速增长期,人才缺口很大,招聘的成本水涨船高。为了吸引更多更好的人进来,各大公司不得不逐年抬高各级别岗位的起薪,已期在招聘市场上不被其他家公司所碾压。然而公司内部的调薪却很是缓慢,甚至很多公司入职即巅峰。几年下来,老员工的薪资甚至会低于没有工作经验的应届生。同工不同酬,为了不引发矛盾,进而稳住老员工。在我入职的第一天,公司的人力就告诫我薪资待遇一定要保密。(31) 钱迷心窍我登录邮箱,刷新邮件列表,几十封未读邮件。依次点开,都是一些同事休假,公司内部活动等无关紧要的事情。对此,我无多大兴致,直到瞧见了一封部门内部人事调整的公示邮件。李波终于如愿地成功上位,由高级专家荣升部门技术总监。康神接替波哥成为了架构组的新组长。我又看了看组内其他老员工的职级变化,大部分人都得到了晋升。王旭的职级如今已经比我高了两个等级。我刚来还不满半年,没有资格进行述职晋升。不过职级低点倒也无大碍,只要钱给到位就行。虽然公司有着严格的薪资保密协议,但在多次闲谈试探中,我也大概知晓了王旭目前的工资水平,应该是与我持平。一般来说,程序员这个行业,涨薪最行之有效捷径就是跳槽。我比王旭入职朗云晚,职级比他低,但薪资却比他高,这就是所谓的倒挂。不过,由于王旭有公司奖励的股票,如果算上这笔收入话,一年下来他的收入还是比我高不少。我一个月挣5000的时候,畅想要是能挣到一万,那该多好,生活过得绝对潇洒。如今,挣到一万了,又想着倘若拿到公司股票,待遇追上王旭,那该是一番怎样的光景。钱这个东西,应该是没有人嫌拿的多;工资这件事,几乎每个人都觉得自己挣得少。一些花钱大手大脚的人形容自己的生活状态是:月初,他吃什么,狗吃什么,月末,狗吃什么,他吃什么。不过对于我这种除去房租,再无其他大花销的人来说,月初月末其实对我都一样。当然,在老潘搬走后,我的日常支出发生了些许变化。单说房租就由原来的500涨到了1500。忽然多出来的这1000,一半是原来老潘应该交的那部分,一半是房东老太坐地起价上涨的租金。房东老太在得知老潘搬走后,极力劝说我去租幸福公寓顶层的小阁楼。顶层阁楼倒是便宜,月租只需800大洋,不过面积特别小,夏天热,冬天冷。房东三番五次游说我,还许诺了不少好处,比如网费减半,不收水费。我并不为所动,因为她这般热心肠并非是出于对我的关照,她心里有一套自己的小九九。由于近期政府大力推进棚户区危楼改造,公寓周遭一些年久失修,有安全隐患的房子被勒令整修。棚户区里一些老租户不得不重新找寻靠谱的房源。年前,为了孙子上学,房东老太举家搬去了东城区。老太雇了个看大门的保安,是她一个远方亲戚,高中辍学生。保安小哥住在公寓的门房,隔三差五就有人来敲他房门,寻租者络绎不绝。可,当下幸福公寓已经没有剩余的空房子。对于这种供不应求,能够坐地起价的大好时机,房东老太自然是不会错过。首先,她大幅度提高了房租,淘汰了一批没有支付能力的老租户。其次,她左腾右挪,最终在公寓顶层又整理出来了几个原本用于放置杂物的小阁楼。小情侣,小夫妻们肯定不会去住那五六平米的小阁楼,里面根本就塞不下两个人。于是,房东老太就打起了单身汉--我的主意。不过,我并没有就范,虽满是不爽,却还是答应了她的涨租要求。如果此时有记者采访我:你认为金钱能买来快乐吗?我肯定回答---能。至少在瞅见那五位数工资的时刻,我是快乐的。不过,转而一想,单单房租一项就要花掉其中不小的一部分后,内心又不免悲伤起来。独在异乡为异客,每涨房租倍思乡。家有良田数十亩,百平庭院炊烟升。若是来世走人间,但愿无德又无才。躬耕乡田过此生,不问前程与功名。点击进入下一章阅读点击从第一章开始阅读ps:欢迎各位关注我,文章更新的消息会在「掘金动态」里滚动,同时七筒也欢迎大家在动态的评论区给我评论。此致敬礼,感谢各位厚爱。
2023年03月24日
5 阅读
0 评论
0 点赞
2023-03-24
写给前端的区块链开发入门指南:零基础开发基于以太坊智能合约的 ICO DApp
张泉灵说,时代抛弃我们的时候连声再见都不会说,马云说对于新兴事物,绝大多数人是看不见、看不起、看不懂、来不及。自从学完 Coursera 上的 Crypto Currency 课程,搞懂区块链技术的本质后,对区块链的的所谓信仰变成了强有力的逻辑支撑,不管你看没看见,区块链正在吞噬整个世界!不甘平庸的工程师肯定会问,怎么在区块链技术和行业崛起的时候参与进去获取更大的成长?如果你选择参与,而不是旁观,真诚的邀请你在成为区块链应用研发工程师的路上和我同行。前端工程师学习区块链应用开发的 WHY、HOW、WHAT 可以用下图来概括,如果你同意我的观点,还犹豫什么?赶紧动手吧!为什么要选择区块链开发?未来已来,只是尚未流行!区块链技术的爆炸式发展引起了很多人的注意,相信看到这篇小册的你早就听说过比特币、ICO,甚至购买过区块链资产。区块链是个天然和钱离得很近的领域,离钱越近就越容易赚到钱,尽早开始准备并在区块链领域站稳脚跟的人将能享受到行业崛起的巨大红利,就像四年前的微信公众号,两年前的知识付费,一年前的微信小程序。然而,从对身边同学的观察来看,前端工程师很容易产生区块链是底层技术、离前端很远的错觉。实际上任何区块链应用落地都需要以为用户创造实实在在的价值为基础,区块链应用的用户不会仅限于少数极客,有普通用户就需要界面,有界面就需要前端工程师。区块链可以简单理解为分布式的、公开的、不可篡改的数据库,区块链应用在项目架构、前后端交互方式等方面和传统的端应用会有比较大的差别。从技术栈的视角来看,构建在分布式网络、公开账本、共识算法等三个核心要素之上的智能合约和 DApp 才是未来百花齐放的地方,底层协议会逐渐趋于稳定。那么,作为前端工程师,我们在区块链领域的机会到底在哪里?炒币?貌似不是长久之计。如果说做成任何事情都需要依赖技能和和运气两个要素,不同的事情只是两种要素的比重不同,那么理智的人会想尽办法让事情更依赖技能,而不是运气。为什么要选以太坊?以太坊(Ethereum)是目前最成熟的、最被广泛使用的、支持构建和部署基于智能合约的 DApp 的区块链应用平台,根据 State of DApps 的统计,目前运行在以太坊上的应用多达 1379 个,这些 DApp 全部由两部分组成:存储在以太坊网络上的智能合约(使用 Solidity 编写,和 JS 很类似,未来 EOS 也会支持使用 Solidity 编写智能合约),以及能和智能合约交互的用 Web 技术开发的 DApp。围绕以太坊的 DApp 开发生态是目前相对最成熟的,比如有开发框架 Truffle,有智能合约在线集成开发环境 Remix,还有专设的 StackExchange 开发者问答频道。别跑题了!怎么学习区块链开发?Blockchain is hard,虽然我们不愿承认,但事实摆在面前。围绕以太坊有大量的开发工具可以使用,但是它们的演化和迭代却非常快,很多工具、框架、库的教程可能过两周就就过时了,或者接口不再兼容了,这成了很多新同学入门区块链开发时最大的障碍,在坑里趟了半年的我写了个比较详细完整的教程(广告来了,其实就是掘金小册),姑且称之为:前端工程师写给前端工程师的区块链开发入门指南。学会某个新技术的最佳路径是先掌握最小可用知识(Minimum Actionable Knowledge),然后撸起袖子开始做,在做的过程中不断优化和迭代自己对新技术的理解和掌握。在这本小册里我会把最近半年摸索出来的以太坊智能合约、DApp 开发套路、最佳实践悉数分享给你,无需花费大量的时间去做诸如启动本地测试网络、编译和运行全节点之类的事情,在只依赖核心工具如 solc、Chrome 的情况下,用由浅入深的方式手把手带你熟悉 Solidity 智能合约开发、测试、部署,搭建和智能合约交互的 DApp 开发框架,为成为区块链工程师做好准备。文不如表,表不如图,在小册中使用了大量的图片(目前完成度 35%,插图 55副)和类比,即使你完全没接触过区块链,也能轻松理解区块链世界里面的关键概念。小册的内容划分为 5 大部分:入门篇(上):理解区块链原理与以太坊的运行机制,熟悉以太坊开发的基本概念,如账户、交易等; 入门篇(下):Solidity 开发入门,基于 Remix 的智能合约工作流; 进阶篇:基于现代前端环境的智能合约开发、构建、部署、测试工作流; 实战篇(上):设计、开发、部署、测试 ICO 智能合约; 实战篇(下):使用 web3、next.js 开发能和智能合约交互的ICO DApp; 我是谁?做过什么?我有过什么作品?掘金专栏作者:王仕军,11250 人关注; 掘金小册作者:《使用 npm script 构建超溜的前端工作流》,787 人购买; 微信公众号前端周刊创办和维护者,2600 订阅; 高质量技术视频教程作者:async/await、styled-components,网盘下载量近 3000 次。 有谁审阅过小册?他们怎么说?你会得到什么?在小册中,你将学会在自己熟悉的前端开发环境中组合使用 Ethereum、Solidity、JavaScript 编写、调试、测试、部署和管理自己的 DApp 的基本方法。具体包括:理解在以太坊上构建 DApp 需要掌握的关键概念,比如 Gas、Transaction; 熟悉以太坊不同测试网络,以及测试网络提供工具的使用方法; 熟悉 Solidity 语言,并用其开发真实的智能合约; 熟悉以太坊智能合约调试工具 Remix 的基本用法; 掌握设计、开发、测试、部署智能合约的工作流和最佳实践; 熟悉以太坊智能合约工具库 web3 最新版的基本使用方法; 熟悉 web3 和 next.js 结合使用的方方面面; 构建并掌握完整的、能被重用的智能合约、DApp 应用架构和构建工具链条; 适合什么群体?具备基本的 JavaScript 知识,最好是写过 Web 应用,熟悉 npm 使用的同学; 对区块链、以太坊、智能合约技术感兴趣,想做深入了解的前端同学; 期望使用区块链技术开发能实际落地的应用的前端同学; 期望储备区块链开发技能,为跨界区块链做好准备的前端同学; 期望从事区块链行业的计算机相关专业学生; 想抓取区块链行业红利,靠技能赚更多钱的同学; 你要准备什么?Chrome 浏览器,部分开发和调试功能是在浏览器中进行的; Node.js 运行环境,最好是 v8.x 以上版本,建议使用 nvm 来安装; 可以用来输入和执行命令的终端程序,比如 Mac 下的 iTerm,或者 Windows 下的 cmder; 你自己用起来舒服的编辑器,比如 VSCode,我写过两篇 VSCode 编辑器配置的文章,参见上和中; 2 小时的闲暇时间,读完这本小册,并能自己上手实践,因为纸上得来终觉浅; 读者福利免费加入读者交流群,和群友讨论和交流读书心得和疑惑问题,我相信,这本小册能让很多和你我志同道合的同学聚在一起; 读者群内 5月31日 前每天会有抽奖活动,奖品为有真实价值的区块链代币(抽奖使用微信小程序,发奖过程公开透明): 05 月 18 日 ~ 05 月 22 日,每天的奖品是价值 1 枚 EOS or 等值的 ETH ,据说握住会价值不菲; 05 月 23 日 ~ 05 月 31 日,每天的奖品是 1000 枚 * (2 份)Candy,李笑来操刀运作的糖果代币,拿三年试试? 凡在限时优惠期间购买本小册的读者,都会获赠专属 5 折折扣券,可用于购买廖雪峰老师的《数字货币与区块链原理》小册,更系统全面的理解和掌握区块链开发必备知识。 希望在成为区块链工程师的路上,你能与我同行!猛击下图享受七折限时优惠。或者直接点击这个链接:juejin.cn/book/684473…
2023年03月24日
10 阅读
0 评论
0 点赞
2023-03-24
程序猿生存指南-25 逃离帝都
(54) 逃离帝都下定决心离开帝都这事儿,老潘可能思索了数个深夜,而告知我却只用了一通几分钟的电话。老潘有一个我不能及的优点,那便是做事果断,从不拖泥带水。决意要走,他便立即向公司提出了离职。老潘花了一周的时间将手上的工作交接完毕,随后开始着手搬家事宜。黄飞为了一台二手XBOX,前来帮老潘打包行李。而我不完全是为了蹭老潘允诺的那顿海底捞火锅。更多是缘于近两年的友谊。友谊它就像磷火,深处黑暗之中才显得光亮。老潘这三十平米的一居室被家具塞得满满当当。梳妆台,跑步机,微波炉,锅碗瓢盆,柴米油盐酱醋茶一应俱全。以我对老潘的了解,倘若他一直是孑然一身,这些东西断不会出现在他的屋中。看得出来,他与李亚男曾度过了一段快乐的同居生活。而今,劳燕分飞,佳人成仇人,不禁令人唏嘘。收拾行李过程中,老潘翻到了几件李亚男遗落的衣服。睹物思人,他便气不打一出来,对着衣服是一顿猛踩,而后一股脑地将其扔进了垃圾堆中。我们额头冒汗,手忙脚乱。老潘家那只英短蓝猫也没闲着。它在屋子里上蹿下跳,一会攀爬窗帘,一会儿撕扯床单,相当调皮。玩累了,它便匍匐一隅,宛若一位监工,凝视着我们。黄飞蹲下身子,用衣架逗它玩,问道:“潘哥,这猫你怎么处理?带去杭州吗?”老潘一边往快递箱中扔东西一边搭话:“李亚男那贱人想要,我没给她。我挂在二手宠物市场了。”黄飞将蓝猫抱在怀中,蓝猫蜷缩在他的臂弯里,用爪子玩弄着他的帽衫绳。瞧黄飞如此喜爱小动物,我便顺水推舟,对老潘说:“送给黄飞吧,我看他喜欢的不行。”老潘提前打预防针道:“原来李亚男一直给它吃鱼罐头,把这家伙的嘴巴喂刁了,养它可花不少钱呢。”黄飞把蓝猫放到地上,满不在乎道:“一只猫还能把我吃穷了?饿上它几顿,它就嘛也吃了。”老潘目送蓝猫跑去阳台,微微摇头说:“你要是喜欢就抱走吧。阳台那猫笼,猫砂还有几盒罐头,你都拎走,我也眼不见心不烦。”老潘说去杭州后,他要从头来过。于是,他把所有能卖的都卖了,能扔的都扔了,能送的也都送了。楼下收废品的老大爷得到了一三轮车的破烂。黄飞得到了一只猫和一台XBOX游戏机,而我得到了一台微波炉。老潘兑现了承诺,我跟黄飞狠宰了他一顿海底捞火锅。胡吃海喝过后,我跟黄飞带着战利品踏上了返回幸福公寓的路途。地铁上不允许携带宠物,我拎着微波炉,黄飞抱着猫笼,挤上了一辆公交车。蓝猫的哀叫声成功引起了车上乘客的关注。他们询问黄飞关于猫的价钱,年岁,品种等问题。对于这些问题,黄飞并不知晓,只能乱答一气。终于赶回了幸福公寓,黄飞把猫笼放在了离暖气最近的地方,生怕冻坏了他的新玩伴。新主人给这个新玩伴起了个新名字---盖伦,《英雄联盟》中一个游戏角色的名字。盖伦的住所是一栋两层别墅,下面是厕所,上面是卧室,空中还有一个吊床。四周通透,独门独院,极尽奢华。新到一个环境,盖伦还不太适应。任凭黄飞跪在地上如何好言相求,它就是躲在床底下,不愿出来。实在是逗累了,黄飞便不再白费力气,打开电脑,玩起了游戏。瞧黄飞那一脸没耐心的样儿,我觉得过不几天,他就会厌烦。他应该还不知道猫可是天底下最傲娇的动物。不幸被我言中,没过三天,黄飞就把盖伦抱到了我屋中。他实在是受不了盖伦的那恶臭的猫屎和暴躁的脾气。他一玩游戏,它就跳上键盘。他把它关进笼中,它就嚎叫不止。盖伦严重影响了黄飞的日常休息与娱乐游戏,他无计可施,又不忍心放它流浪,再三恳求我代为收留。盖伦被抱来的时候,眼角还挂着泪痕。想必是把黄飞逼急了,挨了一顿打。瞧它那楚楚可怜的样子,我实在于心不忍,便把它留了下来,成为它第三个主人。此后众多深夜伏案的日子里,盖伦都陪伴在我身边。或安静于一隅,或嚎叫求关注。它依旧傲娇,依旧挑食,依旧调皮,依旧无情,却给我带来了巨大的乐趣。(55) 奔赴杭州老潘南下杭州,倒也不是赤手空拳,毫无准备。他有一个大学同学在杭州阿里巴巴总部上班,已经帮他内推了几个部门。老潘有电商相关的职业背景,本身能力又很强,再加上杭州那边急缺人,应聘阿里很顺利。告别需要仪式,老潘把入职时间往后推迟了一周。他说他要重新游览一番帝都的美景,吃一遍帝都的美食,最后拥抱一下这座曾承载了他众多梦想的城市。其实我知道,他要告别的不是一座城而是曾经的自己。感恩节那天,老潘启程前往杭州,开始了他的杭漂生涯。清晨,我去老潘住处帮他搬运行李,送他去火车站。途中,路过一家7-11便利店,老潘进去买了两杯热豆浆和四个包子。从便利店出来,老潘一脸娇羞地问我:“你看收银台那妹子漂亮不?”为了瞻仰老潘口中的妹子,我踏入便利店买了瓶矿泉水。结账时,我特地留心偷瞄了几眼收银员。妹子高高的个子,甜美的笑容,有点儿郭碧婷的感觉。我从便利店出来,老潘不打自招:“每天上下班路过这里,我几乎都会注意到她。曾无数次闭目畅想,哪天买早餐,一定要向她索取联系方式,勾搭一番。”老潘的渣男行径让我对李亚男的厌恶感减弱了不少,鄙夷道:“本以为李亚男够渣,原来你也不是什么好鸟。”老潘白了我一眼,反问:“我要是够渣,还能被那贱人给踹了?”步履匆匆,我们已经走出了很远的距离,老潘仍恋恋不舍地回头张望。有贼心没贼胆,此后他与那小妹应该是很难再见了。一个怀春少年的春梦就此中断,不禁令人扼腕。挤进地铁,老潘在售票处驻足了片刻。我顺着他的视线仔细瞅了半晌,并未发现漂亮姑娘,也不知他是何用意。老潘悄声对我说:“看见那个四眼大高个了吗?”大高个足足有一米九,带着一副黑框眼镜,靠墙伫立,宛如一根电线杆。人群中很醒目,我一眼就定位到了。只不过对方是个胡子拉碴的大老爷们。我不禁大呼:“怎么?你俩还有故事?”“几个月前,我俩曾打过一架。”“嗷嗷,吓我一跳。”我为刚才脑袋中闪过的一丝不符合主流价值观的念想深感抱歉。“那天我给公交卡充值,他不小心把我公交卡扔到了地上,不但不道歉还骂我傻逼,把我气得不行。小爷我可不是吃亏的主儿,我立马从包里拿出一杯水,顺着窗口就泼了进去。那小子气冲冲地跑出来跟我打了一架。”“战况如何?”“互有损伤,我稍微占了点便宜。后来跟那小子又照面过几次,他假装不认识我,我也没再找麻烦。这种人一看就是那种欺软怕硬的贱骨头。”地铁上,老潘成了话痨,一直说个不停。在帝都的近六个春秋,他经历了太多难忘的事。一座千万人口的大都市,少了老潘就像是沙漠中少了一粒沙子,并不会有多少人在意。也许是怕被人遗忘,也许是离别前感触颇多,老潘选择把那些事儿讲给我这粒沙子听。12年大三实习那会儿,有一天他加班到午夜。他走出公司,发现身上没带一分钱,手机也没有了电。再回到公司,公司大门已经被锁。万般无奈,他一个人花了三个多小时从荒凉的西二旗走回邮大。一路上,有烂尾楼,有废弃工厂,有小树林,有立交桥,他靠唱歌给自己壮胆。14年刚跟李亚男在一起的时候,他俩去泰国游玩,夜游曼谷迷了路,老潘靠蹩脚的英文,边比划边猜,最后被人带进了一个人妖表演会所,花了近一千泰铢,李亚男骂了他一路的变态。他爸刚住院那会儿,他急缺钱,于是疯狂地接外包。小到学生作业,大到公司项目。基本是是来者不拒,他曾用两个通宵赚了一万人民币。李亚男跟他分手,不完全是因为他在医院把她给骂了一顿。李亚男说跟他在一起,她看不到未来。那个花臂男张旭是北京胡同土著,住在南城,家里有一个小院子等待拆迁,想必是能给李亚男一个光明的未来。……北京南站的候车厅里,人山人海。北京的火车站,无论春夏秋冬,满是漂泊的人。南下北上,东出西进,不甘平庸的人注定要为自己的宏愿奔波。距开往杭州的G33次高铁发车还有半个小时,我跟老潘立在检票口,等待着工作人员检票进站。我找话说:“前几天听新闻上说,杭州那边最近又出台了许多吸引人才的新政策。落户,购房,孩子上学什么的都特方便。”老潘叹了口气:“哎,也不知人家看重的是你的才能还是你的钱包。随着一大批高学历人涌入杭州,他们择业购房,当前杭州的房价也不低了。”我劝慰道:“如果不适应那里就回来,咱一技在手,到哪里也饿不死。”老潘点头如捣蒜。身后陆续有人起身前来排队,周围喧闹起来。扬声器里传来G33次列车开始检票进站的广播。此去经年,再次见面不知何时何处,得抓紧利用剩余时间,好好道个别。我与老潘相拥:“在杭州好好混,苟富贵,勿相忘。”“大姚,我做了逃兵,希望你能在这里扎根。早日找一个贤惠的媳妇,买一栋舒适的房子,过上好日子。”“嗯。”我有些哽咽。“有空来杭州玩,哥定会好酒好菜招待你,一定要带着妹子来,你要是一个人来,恕不接待。”我点头,泪水不受控制地在眼眶里打转。年纪大了,不忍别离。老潘面露笑意,挥手与我作别,而后迅速消失在拥挤的人流中。我不由自主地回想起了与老潘初次见面的场景。那时我们比现在更年轻,比现在更有朝气,比现在更无所畏惧。在返程地铁上,我收到了老潘发来车已启动的消息。打开微信,看到了他在朋友圈发的那条「我爱你北京,再见北京!」的状态。再见,老潘。点击进入下一章阅读点击从第一章开始阅读
2023年03月24日
6 阅读
0 评论
0 点赞
2023-03-24
区块链到底是个什么鬼?一幅漫画让你秒懂!
最近ICO很火,带来了非常多人关注这块。很多人都会问,区块链到底是什么?但说到区块链,网上各种各样的资料满天飞,看完之后,感觉懂了,又感觉完全没懂。一句话概括,如果互联网技术解决的是通讯问题的话,区块链技术解决的是信任问题。妈:“小明啊,什么是区块链?” 我:“(惊!)......妈,你从哪里听来的区块链。” 妈:“隔壁你蔡姨说他老公在炒什么币,老是喊着区块链balabala,楼上李大哥也喊着区块链创业balabalabala,区块链能卖钱吗?” 我:“妈,区块链很复杂,我下次再解释......” 妈:“你晚饭想吃开水拌面?” 我:“好吧 Σ(っ °Д °;)っ 我想想怎么说。”这么火的区块链,到底是什么呢?区块链到底是个什么鬼?一幅漫画让你秒懂 区块链技术是指一种全民参与记账的方式。所有的系统背后都有一个数据库,你可以把数据库看成是就是一个大账本。目前是各自记各自的账。 由于没有中心化的中介机构存在,让所有的东西都通过预先设定的程序自动运行,不仅能够大大降低成本,也能提高效率。而由于每个人都有相同的账本,能确保账本记录过程是公开透明的。 区块链技术是比特币的底层技术,比特币在没有任何中心化机构运营和管理的情况下,多年运行非常稳定,没有出现过任何问题,所以有人注意到了它的底层技术,把比特币技术抽象提取出来,称之为区块链技术,或者分布式账本技术。 根据西班牙最大银行桑坦德发布的一份报告显示,2020年左右如果全世界的银行内部都使用区块链技术的话,大概每年能省下200亿美元的成本。这样的数据足以说明“区块链”给传统金融领域带来的巨大变革和突破。 云计算通常定义为通过互联网来提供动态易扩展且经常是虚拟化的资源,但是提供云计算平台的往往是一个中心化机构。而区块链组成的网络一般是没有特定的机构,所以区块链更接近分布式计算系统的定义,属于分布式计算的一种。 Q币是一种中心化的电子货币,包括总量,发行方式都是由腾讯公司控制的。而比特币的总量,发行方式都是由程序和加密算法预先设定后,在全世界的多个节点上运行,没有任何人和机构可以修改,不受任何单一人或者机构来控制。一般称Q币为电子货币,或者企业代币。称比特币为数字货币或者加密数字货币。 如果说比特币是对传统货币的一种颠覆,那么比特币的基础技术——区块链则是对传统编程范式的一种颠覆。区块链技术被看作是一次Paradigm Shift。作为一个程序员在理解这些技术上有一点点优势,但也仅限于一点,因为对于任何一个新概念来说,要理解透它都是非常痛苦的(比如椭圆曲线加密算法,梅克尔树,不是每个程序员都知道这些)。根据我的经验,在学一个东西刚开始的时候,没有捷径,就是扎进去,一点点的磨着看,遇到不懂的就查资料。对应到区块链,就是看白皮书,我看以太坊白皮书,断断续续自己翻译,做笔记,看了差不多一个月,看完之后很多细节没懂。但却对区块链大概做了什么,解决问题的一些思想,概念有了全面的认识。有了思想的储备的好处是,看其它的东西就轻松了,因为大家解决同样问题的框架是类似的总结即使你不想进入全新的区块链应用开发大潮之中,你也会发现区块链相关的底层技术对平日的应用开发有不少启发和借鉴作用。一个新技术的诞生是有它顺应时代的合理性的(黑格尔语”存在就是合理的“)。作为程序员我们应该去了解它的合理性所在之处,取而用之。我们不一定非要用新技术去颠覆一个老应用,但可以用新技术去重塑一个老应用。更多阅读[屏幕适配之尺寸的相关概论《一》 ](http://mp.weixin.qq.com/s?__biz=MzI3OTU0MzI4MQ==&mid=2247485137&idx=1&sn=970c4aa3251853064406ed6c1cac1ed6&chksm=eb476a4fdc30e359331f414f5312a96e0cfabaf630922d0c59ffa3a8499e4aa68d5e44c07854&scene=21#wechat_redirect)什么是dp,dip,sp和px及他们之间的的关系?《二》破解Android版微信跳一跳,一招教你挑战高分记一次阿里面试经历|Java面试知识整理相信自己,没有做不到的,只有想不到的微信公众号:终端研发部
2023年03月24日
3 阅读
0 评论
0 点赞
2023-03-24
一大波 Android 刘海屏来袭,全网\Maybe/最全适配技巧!
一、序Hi,大家好,我是承香墨影!Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议。不过不管你怎样,Android 也要跻入 "刘海屏" 的行列,尤其是 Android P 发布之后,也从系统级支持顶部凹槽屏幕设计。很多厂商也在逐渐推出 “刘海屏” 设计的手机,在国内比较常见的就是 OPPO R15 和 华为 P20。屏幕不一样了,迎来的就是一些适配上的问题。今天就来聊聊,Android 的 “刘海屏”,以及我们如何去适配它。二、刘海屏的背景介绍2.1 背景介绍刘海屏的外观,我想大家应该都有概念,不过不同厂商刘海屏的实现方式也有所不太,这一点需要先有个概念。就现在市场上的情况来说,会区分成两类,一类是标准的 Android P Api,另外一类就是厂商在 Android P 以下的系统,做的特殊适配。例如:华为 P20 就是采用的 Android P 标准 Api 的方式,而 OPPO R15 就不一样了,它有自己的适配 Api。2.2 那些需要单独适配就算是增加了刘海屏,你也可以发现,大部分都是“切割”的状态栏的区域,所以就面临了三种情况。有状态栏的页面,不会收到刘海屏的影响。 全屏未适配刘海屏的页面,系统会对刘海屏区域进行切割,让整体 UI 页面做下移处理,避开刘海屏的显示。 全屏已适配刘海屏的页面,可以兼容刘海屏,做到真正的全屏显示。 后面会单独讲解这几种方式的区别。2.3 抢先体验 Android P在手边没有对应系统的设备的时候,模拟器是一条不错的路,最近 Google 也发布了 Android P 的模拟器,还有一个办法就是找一些支持真机云测的平台,租用一台需要的远程设备,也是一个解决方案。我这里选择 Android P 的模拟器,有需要自己更新 SDK ,无脑下载更新就好。刘海的凹槽区域,大部分是为了给摄像头或者其他传感器留出区域。而在没有刘海的设备或者模拟器上,可以通过开发者选项里的 “Simulate a display with a cutout”,开启刘海屏的支持。如果你把所有的模式都试过一遍,你会发现,其实刘海屏的刘海,在 Android P 上,是有多种样式的,并非统一的。2.4 刘海屏的适配2.2 也讲清楚了,刘海屏的切割区域,都存在于状态栏上,所以在有状态栏的页面上,是无需我们特殊处理的,系统会帮我们处理好。而对于全屏的页面,就需要单独的处理了。我这里,简单做了一个全屏页面,每个横条都是等宽的这样能看到布局上的差异。从左至右分别是:关闭刘海屏、开启刘海屏但不支持、适配刘海屏。一个全屏的页面,当没有支持刘海屏又碰到了刘海屏,会导致 UI 下沉,如果这不是一个列表的布局,底部的控件就会被遮挡。例如下面这样的情况:还有一些被刘海遮挡区域的效果,其实主要是依赖 UI 设计师来规避了,不要在可能出现刘海切割的地方,设计可操作的区域,影响用户操作。三、技术适配刘海屏说那么多,最终我们还是需要用技术的方式来适配刘海屏。Android P 的刘海屏,是有标准的 Api 来进行适配,而对于一些厂商自己的刘海屏设备,例如:OPPO R15,就需要遵循它的开发文档进行单独适配。Android P 为最新的刘海屏,提供了专门的 Api 来支持:DisplayCutout。3.1 开启刘海屏我们在全屏的页面,需要单独开启支持刘海屏。而 Google 提供的适配方案,可以设置是否在全屏模式下,使用刘海屏的区域。WindowManager.LayoutParams lp =getWindow().getAttributes(); lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; getWindow().setAttributes(lp); 复制代码新的布局属性 layoutInDisplayCutoutMode 包含三种可选的模式,public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS = 1; public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0; public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2; 复制代码3.2 刘海屏的高度在全屏模式下,我们需要有办法获取到刘海屏凹槽的高度,才可以做到设计和布局的时候,留出安全距离。虽然 Google 要求,刘海屏的凹槽,必须和刘海的高度保持一致,而刘海屏又被隐藏在状态栏了,所以有一个思路是直接获取状态栏的高度,来判断刘海之外,可布局的安全区域。不过 Android P 已经预留出了标准的测量 刘海屏凹槽 的 Api:DisplayCutout。刘海屏的凹槽,就在屏幕的中间,所以只有 getSafeInsetTop() 方法返回的结果,是我们需要的,而其他的 getSafeInsetXxx() 方法,直接返回的是 0 。view.postDelayed(new Runnable() { @Override public void run() { DisplayCutout displayCutout = view.getRootWindowInsets().getDisplayCutout(); Log.i("cxmyDev", "SafeInsetBottom:" + displayCutout.getSafeInsetBottom()); Log.i("cxmyDev", "SafeInsetLeft:" + displayCutout.getSafeInsetLeft()); Log.i("cxmyDev", "SafeInsetRight:" + displayCutout.getSafeInsetRight()); Log.i("cxmyDev", "SafeInsetTop:" + displayCutout.getSafeInsetTop()); } }, 100); 复制代码得到的结果,也可以看一下:I/cxmyDev: SafeInsetBottom:0 I/cxmyDev: SafeInsetLeft:0 I/cxmyDev: SafeInsetRight:0 I/cxmyDev: SafeInsetTop:112 复制代码3.3 非标准 Api像 OPPO 这样的厂商,实现刘海屏的方式,也并不是按照 Android P 的标准做的,它完全是自己修改了刘海屏的实现方式。不过好在,都是会提供完备的适配文档,这就需要我们直接阅读他们提供的开发文档来进行适配。oppo 的刘海屏适配文档:https://open.oppomobile.com/wiki/doc#id=10139对于 OPPO 而言,它刘海的高度是固定的,就是 80px。判断当前设备是否是刘海屏,也提供了对应的 Api,可以用以下方法获取。context.getPackageManager().hasSystemFeature(“com.oppo.feature.screen.heteromorphism”) 复制代码返回 true 为刘海屏,但是这种方法只能识别 OPPO 品牌所支持的刘海屏。四、结语看完本篇文章,我想你对 Android 的刘海屏也有一定的认识了。这是一个全新的适配技术,现在还不确定不同厂商会不会对其微调,所以你要是碰到什么问题,不妨在留言区留言讨论。今天在公众号后台回复成长『成长』,将会得到我整理的一些学习资料,也能回复『加群』,一起学习进步。推荐阅读:漫画:程序员,你能“管理”好你的产品经理吗? App 多语言翻译,机器翻译也能快如闪电! 2017 最权威区块链报告(内含下载) Google 的 Flutter 学习资料! 远程控制智能电视,方案已开源!
2023年03月24日
6 阅读
0 评论
0 点赞
2023-03-23
六币日报 | Llama.Fi已重定向到DefiLlama.com;Euler正与攻击者进行私下谈判
今日要闻提示:1.新加坡金管局计划在今年年中之前公布加密货币和稳定币的磋商反馈2.Coinbase:ChatGPT不符合集成至该平台安全审查流程中的准确性要求3.DefiLlama联创:Llama.Fi已重定向到DefiLlama.com4.外媒:Coinbase曾在硅谷银行破产后向Circle提供30亿美元即时信贷额度5.以太坊客户端Geth发布v1.11.5版本,以能在4月13日启用上海主网升级6.OP3N以1亿美元估值完成2800万美元A轮融资,Animoca Brands领投7.Celsius破产程序中的律师和顾问费用预计将达到1.44亿美元8.数据:超过10亿美元的以太币永远丢失,占流通供应量的0.5%监管消息美国最高法院周二将审理首起加密案件,被告Coinbase拟推动案件走仲裁程序据CoinDesk报道,美国最高法院将于周二听取有史以来第一起与加密货币相关的案件的辩论,届时Coinbase的律师将试图说服九名法官暂停针对该交易所的两起集体诉讼(Bielski诉Coinbase和Suski诉Coinbase),这两起案件分别指控被告安全措施不当导致个人账户被黑、以及广告涉及误导消费者。虽然高等法院将于周二审理的案件涉及加密,但它本身并不是加密案件。相反,这个案件是一个相当深奥的程序争论,争论的焦点是诉讼是否可以在联邦法院进行,而Coinbase试图将争议提交仲裁。仲裁是一种庭外解决纠纷的方法,在这种方法中,胜算往往不公平地不利于消费者。虽然最终的决定不会为加密货币面临的最重要问题树立任何先例,但它可能对加密货币领域的新兴诉讼格局产生重大影响,它还将对越来越多地成为集体诉讼目标的其他加密公司产生广泛的影响。新加坡金管局计划在今年年中之前公布加密货币和稳定币的磋商反馈新加坡金融管理局( MAS) 周一表示,其目标是在今年年中之前公布加密货币和稳定币的磋商反馈。MAS于去年10月发布了咨询文件,该文件寻求对拟议监管措施的回应,以保护消费者免受加密交易风险并支持稳定币的发展。反馈咨询期已于12月21日结束。MAS 收到了广大受访者的大量反馈。MAS 目前正在审查收到的反馈,并打算在 2023 年中期公布对咨询反馈的回应。NFTImmutable将与Polygon Labs合作创建Immutable zkEVM,并公布两项IMX效用升级据美通社报道,NFT二层扩展解决方案Immutable X开发公司Immutable宣布与Polygon Labs建立战略合作伙伴关系,以加速Web3游戏的开发。Immutable将使用Polygon的零知识技术构建新的EVM兼容的zk-rollup扩容解决方案Immutable zkEVM,为游戏开发者提供额外选择,但其表示该解决方案不会取代其基于Starkware的解决方案Immutable X。此外,ImmutableX在官方推特上公布两项IMX效用升级:平台费用的20%必须以IMX支付;IMX将被用作Immutable zkEVM的核心Gas货币,成为原生网络代币。Origin Protocol考虑在加入NFT版税竞争后增加OGN质押奖励NFT平台Origin Protocol近日通过了在2023年6月1日之前将本地交易市场Origin Story的交易费用降至0%的提案(此前为1.25%),并正对“增加OGN质押的质押奖励”提案进行投票。这两项提案可能会重新平衡其代币经济学,因为它试图在零费用版税战争中竞争,同时又不排斥OGN代币的质押者,这些质押者依赖于平台现在大幅削减的费用收入。根据CoinDesk的说法,此举使Origin Story与OpenSea和Blur直接竞争,这两个NFT市场目前正在发动零费用战争以吸引数字收藏品交易商。Origin意图降低自己的费用以“在这个关键时刻获得市场份额”。补贴提案写道,由于费用冻结,“我们将在短期内减少本应奖励给OGN利益相关者的平台收入”。据悉,“增加OGN质押的质押奖励”的提案旨在为3月8日开始的OGN质押第3季提供补贴的ETH和/或OGN,以提高OGN质押计划的吸引力。目标是增加有效的APY和抵押的OGN总量(目前为5600万枚)。目前提案支持率达100%,投票将于3月22日截止。韩国歌手权志龙明日将在OpenSea发售NFT系列“Archive of PEACEMINUSONE”据OpenSea官方推特,韩国流行乐歌手权志龙将在OpenSea平台发售其基于BNB Chain的NFT系列“Archive of PEACEMINUSONE”。该NFT系列是权志龙的原画的拼图,代表了PEACEMINUSONE (PMO, 权志龙创建的品牌)的身份,并融合了权志龙生活和个人发展的私密细节。每个持有者都将获得:1.能够订购印有拼图的商品;2.实物证书;3.访问由PEACEMINUSONE创建的拼图游戏。一些幸运的持有者还有可能获得:演唱会门票、周边商品、带有权志龙亲笔签名和涂鸦的实物证书。本周的铸造是OpenSea三次drop中的第一次,但它们在价格、稀缺性和优势方面各不相同。Drop详情:1.3月21日,共计13,444枚NFT,铸造价格为88美元;2.4月22日,共计1,888枚NFT,铸造价格为288美元;3.4月29日,654枚NFT,铸造价格为488美元。不过根据OpenSea页面更新,该系列首次公开铸造开启具体时间为北京时间3月22日11:00,铸造价格为0.27 BNB。元宇宙Coinbase:ChatGPT不符合集成至该平台安全审查流程中的准确性要求Coinbase发文表示,ChatGPT显示出快速评估智能合约风险的能力,但不符合集成到Coinbase安全审查流程中的准确性要求。Coinbase比较了 ChatGPT和人工安全审查之间的20个智能合约风险评分,ChatGPT 12次产生与人工审核相同的结果。但在8次失误中,有5次是ChatGPT错误地将高风险资产标记为低风险。Coinbase总结道,虽然ChatGPT没有达到准确度标准,但它确实显示出足够的潜力。Coinbase将继续进一步试验新兴工具。在自动化或智能流程能够显示与其现有流程相同程度的准确性之前,这些工具将仅用作支持工具,而不是主要工具。项目动态Coinbase将Arbitrum(ARB)列入上币路线图Coinbase Assets发推表示,已将Arbitrum(ARB)列入上币路线图。此前消息,Arbitrum将于3月23日向其社区成员空投代码为ARB的治理代币。Coinbase停止支持Signature Bank的数字支付平台Signet据路透社报道,加密交易所Coinbase Global周一表示,在美国监管机构控制Signature Bank一周多后,它已停止支持Signature Bank的数字支付平台Signet。该交易所表示,它正在寻找新的技术提供商,或者希望更清楚地了解Signet的结果,依赖Signet的Coinbase用户将无法在传统银行营业时间以外进行交易。据悉,Signet允许实时加密货币到法定货币交易。DefiLlama联创:Llama.Fi已重定向到DefiLlama.comDefiLlama创始人之一0xngmi发推表示:“所有工作将在DefiLlama.com上进行,Llama.Fi已重定向到DefiLlama.com。”此前今日早些时候消息,DefiLlama官方推特表示,目前无计划发行LLAMA代币,任何空投都将与社区讨论。Starknet基金会任命五个委员会,包括负责规划STRK供应的拨备委员会据官方博客,Starknet基金会宣布任命五个委员会,其中拨备委员会负责规划、监督和执行Starknet生态系统代币STRK的供应,STRK将作为参与Starknet共识机制的质押代币、网络的治理代币和支付网络交易费用的Gas代币;早期采用者拨款委员会致力于通过向在Starknet上构建链上应用的创新团队提供资助来促进Starknet生态系统的发展。另外,开发者合作委员会将通过培养和监督新的战略开发者合作伙伴关系来引入Starknet生态系统;治理委员会的任务是在Starknet生态系统的持续去中心化中发挥关键作用,该委员会负责研究、规划和执行Starknet治理的初始阶段,已经启动了Starknet治理的第一阶段;另外,生态系统准入委员会负责授权新的开发人员和社区成员并将其整合到Starknet生态系统中。外媒:Coinbase曾在硅谷银行破产后向Circle提供30亿美元即时信贷额度据《财富》杂志援引知情人士报道,Coinbase曾在硅谷银行破产后向Circle提供了约30亿美元的即时信贷额度,以保证USDC储备的全部流动性,并确保稳定币可以在硅谷银行破产后的周一早上兑换成美元。Coinbase原计划披露这一信贷额度,但随后危机很快解除。Circle拒绝对此事置评,但也并未否认。FTX新管理层正起诉其巴哈马实体清算人据The Block报道,FTX正在起诉其巴哈马实体的清算人,FTX的新管理层希望美国特拉华州破产法院作出宣告性判决,称FTX Digital Markets 对任何FTX债务人的财产“没有所有权”,并声称FTX Digital Markets为欺诈客户的“幌子”。对抗诉讼中的原告包括FTX.US、Alameda Research和West Realm Shires(由前FTX 负责人Sam Bankman-Fried成立的控股公司)。他们将FTX Digital Markets及其联合临时清算人Brian Simms、Kevin Cambridge和Peter Greaves列为被告。根据诉讼,FTX Digital Markets声称自己是“FTX.com财产的建设性所有者”,并表示所有权纠纷应在巴哈马群岛解决。FTX债务人不同意该观点。Euler正与攻击者进行私下谈判,攻击者称“无意保留不属于我们的东西”据Cointelegraph报道,借贷协议Euler Finance现在已经开始与攻击者进行私下谈判。3月20日,在攻击者向Euler的一个朝鲜地址发送资金几天后,攻击者在给Euler的链上消息中声称,他们现在希望与Euler“达成协议”。攻击者写道:“我们想让所有受影响的人都轻松些,不打算保留不属于我们的东西。建立安全通信,让我们达成协议吧。”几个小时后,Euler在链上回复称:“收到消息。让我们通过Euler Deployer地址和你的一个EOA,通过电子邮件contact@euler.foundation或您选择的任何其他渠道的签名消息,在blockscan上私下讨论。请回复你选择哪一个。”此前3月13日消息,借贷协议Euler Finance遭到攻击,损失已达1.97亿美元。以太坊客户端Geth发布v1.11.5版本,以能在4月13日启用上海主网升级Go Ethereum发布以太坊客户端Geth v1.11.5版本(Erszbat),Geth v1.11.5将在UTC时间4月12日22:27:35(北京时间4月13日06:27:35)启用上海主网升级。此前3月16日消息,以太坊主网将于4月12日进行上海(Shapella)升级。Animoca Brands联创:加密货币正成为银行业危机中的“安全网”据福布斯报道,Animoca Brands联合创始人Yat Siu认为,随着传统金融世界受到瑞士信贷动荡和一系列美国银行倒闭的冲击,波动较大的加密货币是一种相对安全的投资。Yat Siu周一在香港Web3投资峰会上通过视频连线表示:“如果你看看最近硅谷银行的整个发展情况,这显然令人震惊,而瑞信被瑞银收购……实际上,加密货币的情况完全不同,它实际上正在成为银行业危机中的安全网”。Siu说,“安全网”原来是比特币和以太坊,而不是稳定币,因为稳定币声称与法定货币挂钩,所以被认为是安全的。Yat Siu在对福布斯的书面回应中表示:“有鉴于此(近日的美国银行倒闭事件),加密货币,特别是比特币和以太币,成为了有吸引力的保值替代方式,而且没有存在那些特定的传统银行风险。就在银行业危机凸显之际,这些加密货币取得了显著进展。这不是巧合。我认为,我们现在看到的是普通资金逃往一些加密货币。”此外,Siu表示,尽管Animoca并未受到银行业危机的“直接影响”,但其投资组合中的380多家公司中的一些公司“会受到影响”。Zilliqa将于4月25日在主网启动首个EVM完整兼容版本据官方博客,Layer1区块链Zilliqa宣布将于4月25日在主网启动首个EVM完整兼容版本。用户将能够使用MetaMask等钱包传输本机ZIL,并使用Truffle和Hardhat等工具部署Solidity智能合约。Coinbase CLO再次呼吁美SEC澄清质押服务不是证券,并在执法前与公众接触Coinbase首席法务官Paul Grewal在推特上表示:“今天,Coinbase向我们在2022年7月写的SEC规则制定请愿书提交了评论信。我们解释了为什么核心质押服务不是证券发行,并要SEC澄清核心质押服务不是证券这一事实。”Grewal称核心质押服务未能通过Howey测试的每一个分支,并重申了支持这一论点的几个论据,包括质押服务不构成金钱投资、质押服务不符合Howey的“普通企业”分支、质押服务不符合Howey的“合理的利润预期”要素、以及质押服务不会根据“他人的努力”支付奖励。Grewal表示:“这不是SEC第一次不得不实时应对快速发展的技术。SEC可以采取多种途径而不是强制执行,包括明确声明规则3a-4版本中的语言意味着质押服务不涉及证券发行。股权证明是区块链技术的一项重要发展,世界不会等待美国弄清楚它要做什么。如果美国不发挥领导作用,行业就会转移到能发挥作用的地方——即使那些地方缺乏美国市场标准。SEC在尚未完成必要的工作时就开始执法。它没有(1)确定证券法可以解决的问题、(2)让公众参与、(3)征求专家意见、(4)描述其行动的经济影响或(5)解释好处。现在做这件事还为时不晚。但SEC需要与公众接触,并使用其监管工具为行业提供清晰度。我们随时准备提供帮助。”Celsius破产程序中的律师和顾问费用预计将达到1.44亿美元据Cointelegraph报道,加密贷款机构 Celsius Network 在其破产程序中的律师和顾问费用预计将达到 1.44 亿美元,引发加密社区成员的回应。软件开发商 Cam Crews 编制的数据显示,其中汇总了破产的加密货币贷方需要支付的报告费用和预计费用。根据数据,迄今为止已向法院报告提交了近 1.02 亿美元。开发商还指出,缺少了几个月,并估计最终还需要支付和归档的费用约为 4200 万美元。这条推文得到了加密社区各个成员的回应,一些人甚至将 Celsius 的情况与当前的硅谷银行 (SVB) 问题进行了比较,一些人建议债权人自己创办一家律师事务所。矿业消息美国法官批准Core Scientific向债权人PPM转让2000万美元的设备据CoinDesk报道,美国破产法官批准比特币矿企Core Scientific与其债权人Priority Power Management(PPM)的和解协议,Core Scientific将向PPM转让价值超过2000万美元的电气设备,涉及得克萨斯州西部的两个设施,这两个设施本累计可为Core Scientific的资产组合带来1 GW的电力容量。据悉,PPM从2021年夏天开始被聘为Core Scientific的独家能源谈判代表和顾问,2022年5月Core Scientific停止向PPM支付各种费用,由于现金不足,该矿企还于2022年10月停止了债务偿还并于去年12月申请了第11章破产保护。PPM在诉讼中声称其被拖欠约3000万美元。融资消息Aavegotchi开发商Pixelcraft Studios完成3000万美元代币融资,历时两年多据美通社报道,元宇宙游戏Aavegotchi的开发商Pixelcraft Studios周一宣布成功完成为期多年的长期代币销售,共筹集3000万美元。资金将在社区参与者之间分配,Aavegotchi的主要开发者Pixelcraft Studios获得 25%,即750万美元,DAO金库获得剩余的2250万美元。所有资金将专门用于开发、营销、提供流动性或协议奖励。据悉,Aavegotchi代币GHST通过DAIC0(去中心化自治IC0)从2020年9月14日开始至今已历时两年多,没有风投或天使投资人直接参与此次融资。由于DAI稳定币的稳定性存在不确定性,AavegotchiDAO投票决定终止销售。加密交易公司Auros已终止临时清算程序,并获得1700万美元投资据CoinDesk报道,加密交易公司Auros Global在进行了重大债务重组后,上周从法院监督的临时清算中解脱出来,并获得了由传统高频交易公司Vivienne Court Trading和上市比特币矿业公司 Bit Digital (BTBT) 牵头的1700万美元新投资。据该公司称,在FTX崩溃之前,Auros是前10-15家数字资产做市商之一,处理了约1-2%的加密交易总量。该公司在11月遇到了流动性问题,当时约2000万美元的数字资产被困在现已不存在的FTX上,并且未能支付约1800万美元的去中心化金融 ( DeFi ) 贷款。在英属维尔京群岛申请临时清算后,该公司在法庭监督下花了大约5个月的时间就如何偿还未偿债务和偿还债权人进行谈判。Auros首席投资官Benjamin Roth表示,该公司正在摆脱FTX带来的冲击。据该公司发言人称,Auros上周三收到英属维尔京群岛法官的密封法庭命令,终止临时清算程序。土耳其加密货币交易所Metatime完成1100万美元的种子轮融资据TheBlock报道,尚未启动的土耳其加密货币交易所 Metatime 筹集了 1100 万美元的种子资金。土耳其投资公司 Yildiz Tekno GSYO 和多个未公开姓名的天使投资人参投。这家位于伊斯坦布尔加密初创公司正在开发交易所、钱包、区块链、NFT 市场和稳定币。OP3N以1亿美元估值完成2800万美元A轮融资,Animoca Brands领投据Techcrunch报道,基于 web3 AI 的平台 OP3N 完成 2800 万美元 A 轮融资,这轮融资由Animoca Brands牵头,包括来自 Dragonfly Capital、SuperScrypt、Creative Artists Agency 和 New Enterprise Associates 的 Connect Ventures、Republic Crypto、Avalanche 的暴雪基金、Galaxy Digital 和 Warner Music Interactive 的投资。其他投资者包括 GSR Markets、The Spartan Group、BRV Capital Management 和 NBA 球员 Russell Westbrook 等。该公司估值为 1 亿美元。新资金将用于进一步开发其应用程序以及壮大其领导团队。OP3N 的基于聊天的产品 Superapp 旨在通过将区块链和去中心化技术实施到 Web 2.0 友好界面中来弥合 Web 2.0 和 web3 之间的差距。该应用程序将能够将音频、视频和混合媒体内容添加到链上交互中,以便用户可以获得“一站式”体验。重要数据数据:超过10亿美元的以太币永远丢失,占流通供应量的0.5%Coinbase 产品战略和业务运营总监 Conor Grogan 发推表示,由于错误和人为错误,已经永远丢失了超过 10 亿美元的以太币。 他写道:“我已经对数千个以太坊打字错误、用户错误和有缺陷的合约进行了分类。” 他指出,他已经对丢失的 636,000 ETH(11.5 亿美元)进行了分类,占代币流通供应量的 0.5%。大约一半的总数——大约 306,000 ETH——是由于 2017 年Parity 加密钱包中的一个漏洞造成的。倒闭的加密货币交易所 Quadriga 因合约故障损失了 60,000 ETH,Akutars NFT 系列在失败的 Mint 中损失了 11,500 ETH。最重要的是,以太坊用户已累计将 24,000 ETH 发送到一个销毁地址,该地址将无法再访问代币。某黑客向2400个私钥泄露地址发送以太坊并授权ARB合约,企图抢先领取ARB空投加密数据公司Arkham在推特上表示:“被Nansen标记为 Arbitrum Airdrop Exploiter的黑客地址在过去12小时内向大约2400个私钥泄露的地址发送以太坊作为gas费,并提前授权ARB合约,准备抢先领取ARB空投。”数据:某地址凌晨将1.6万枚ETH转入币安,并在Uniswap抛售4000枚ETH据Lookonchain数据显示,某Smart Money地址于6小时前在Uniswap平台抛售4000枚ETH(约合700万美元),同时将1.6万枚ETH转入币安。目前该地址仍持有20,891枚ETH (约合3670万美元), 持仓均价为1,464美元。据悉,该地址此前曾于7月5日从FTX提币10,597枚 ETH,当时均价为1120美元。于今年3月USDC脱锚时将4400万枚USDC兑换为27,957枚 ETH,当时均价为1573美元。数据:全球前300家加密VC管理的资本总规模达839亿美元据Coinstack对全球前300家加密货币VC公司的最新研究报告显示,全球前300家加密风险投资公司管理的资本总规模达839亿美元,旧金山是世界上加密风险投资公司资本的第一大城市,占全球前50家加密风险投资公司资本总额的45.16%,其次是纽约、香港、新加坡、奥斯汀、伦敦和上海。此外,尽管经历熊市,2022年仍是历史上加密货币风险投资的最大年份,市场进行了超过262亿美元的新资本投资,高于2021年的251亿美元。2022年第四季度新的加密货币风险投资(25亿美元)较2022年第一季度(112亿美元)降低77%。另外,2023年2月,加密/区块链公司获8.72亿美元的风险资本投资,较2023年1月的5.74亿美元增长了52%。数据:黄立成今日以72 ETH均价承接逾120枚Cryptopunks抛售据Blur行情数据显示,中国台湾歌手黄立成地址(0x020c开头)今日以约72 ETH均价承接多名Cryptopunks巨鲸抛售的逾120枚Cryptopunks,总金额超过8980 ETH(约合1560万美元)。此外,黄立成今日也以约70 ETH均价售出32枚Cryptopunks,还持有96枚 Cryptopunks,已实现和未实现浮亏达742 ETH(约合128万美元)。Cryptopunks地板价目前已从75 ETH跌至65 ETH。
2023年03月23日
5 阅读
0 评论
0 点赞
2023-03-23
六币日报 | CCP Games完成A16z领投的4000万美元融资;超10万名参与者认购Space ID
今日要闻提示:1.白宫公开抨击数字资产,称“加密货币几乎没有价值”2.DEX聚合器1inch发起创立NFT交易聚合器的提案投票3.Magic Eden将推出比特币NFT市场,正集成比特币钱包Hiro和Xverse4.Ronin黑客试图对Euler黑客进行网络钓鱼以窃取资金,Euler官方已喊话干预5.Sui Network:主网将于第二季度推出,尚无正式的空投计划6.链游开发商CCP Games完成A16z领投的4000万美元融资7.Binance Launchpad项目Space ID已完成认购,超10万名参与者投入超867万枚BNB8.彭博社:Circle本月已销毁约122亿美元的USDC,但发行量约为销毁量一半监管消息韩国国民议会将于3月28日起审议虚拟资产相关法案,4月将举行公开听证会据Money Today报道,韩国国民议会正在就“虚拟资产相关法案”的立法进行全面讨论,其中包含投资者保护措施,例如虚拟资产(加密货币)的发行和披露规定。韩国国会政务委员会将于当地时间3月28日10:00召开第1议案审议分会,提出并讨论虚拟资产相关议案。4月将举行公开听证会,听取专家意见。韩国国会政务委员会目前有18项虚拟资产相关法案待决,包括11项与虚拟资产相关的立法法案、4项电子金融交易法修正案、2项特定金融信息法修正案和1项关于设立金融服务委员会的法案修正案。虚拟资产法案自去年以来已多次提交政务委员会,但都被其他法案推后,未能进行实质性讨论。对此,政务委员会的一位官员表示:“由于我们正在开始全面讨论,虚拟资产相关法律可能难以在本月底立即通过。我们将举行公开听证会听取意见和辩论,重点是法案的内容。”白宫公开抨击数字资产,称“加密货币几乎没有价值”据The Block报道,来自白宫的一份新报告抨击了数字资产未能实现其最初的承诺,并增加了消费者和整个美国金融体系的风险。拜登最新向国会提交的年度经济报告对数字资产的好处提出了重大质疑,几乎就在一年前,拜登下令多个联邦机构就这一问题进行研究并发布报告。报告中指出,数字资产被吹捧为知识产权和金融价值的传递工具、更好的支付机制、提高金融普惠性的途径和减少金融中间商的方式,但“到目前为止,加密资产没有带来任何这些好处”。事实上,到目前为止,加密资产似乎并没有提供任何具有基本价值的投资,也没有作为法定货币的有效替代品,也没有改善金融普惠性或提高支付效率。相反,他们的创新主要是为了人为创造稀缺性,以支持加密资产的价格。其中许多资产没有根本价值。这就凸显了监管在保护消费者、投资者和其他金融系统免受加密资产相关恐慌、崩溃和欺诈影响的作用。该报告还对美国央行数字货币(CBDC)的可能性表示怀疑,称CBDC可能会损害信贷可用性,增加银行挤兑的风险。此报告可能标志着对美国政府对数字资产的态度从不了解转变为公开对抗。NFTDEX聚合器1inch发起创立NFT交易聚合器的提案投票据Snapshot投票页面,DEX聚合器1inch发起创立NFT交易聚合器的提案投票。目前该提案的支持率为80.53%,投票将于3月26日结束。提案指出,为保持1inch在DeFi聚合领域的竞争力,需要创立一个新的NFT交易聚合器协议。该聚合器旨在为交易NFT提供一个综合平台,费用将与其他竞争对手保持一致甚至更低。全栈Web 3解决方案工作室Solidity.io将为此聚合器提供技术支持。Magic Eden将推出比特币NFT市场,正集成比特币钱包Hiro和Xverse据CoinDesk报道,NFT市场Magic Eden将推出一个完全经过审计的比特币NFT市场。Magic Eden的交易者将能够在该市场购买铭文或在比特币网络内铸造的NFT。为了帮助交易者上架、购买和出售Ordinal NFT,Magic Eden正在集成比特币钱包Hiro和Xverse。新市场还将提供比特币NFT相关信息,如Ordinal稀有度和铭文编号。此外,Magic Eden正在与Ordinal项目Taproot Wizards、Inscribed Pepes和Bitcoin Bandits合作。项目动态Chainflip Labs公布代币经济模型,将向社区空投475万枚FLIP据官方消息,跨链交易平台Chainflip Labs公布代币经济模型并将向社区进行空投。FLIP是Chainflip Labs的ERC-20原生代币,预计于2023年第二季度推出。该代币的初始供应量为9000万,每年通胀率为8%。分配计划如下:(1)将向社区空投475万枚FLIP,分配给在2020与2021年参与Service Node空投计划的服务节点运营商;(2)690万枚FLIP用于代币销售;(3)1300万枚FLIP分配给贡献者;(4)约3,400万枚FLIP分配给战略投资者;(5)420万枚FLIP分配给Oxen基金会;(6)4,968,503枚FLIP作为流动资金;(7)2,200万枚FLIP作为储备资金。此前去年5月份消息,Chainflip Labs完成1000万美元融资,Framework Ventures等参投。Ronin黑客试图对Euler黑客进行网络钓鱼以窃取资金,Euler官方已喊话干预据CoinDesk报道,链上标记为“Ronin bridge exploiter”(Ronin黑客)的地址昨日向标记为“Euler exploiter”(Euler黑客)的地址发送了一条链上通知,要求其解密一条加密信息。在包含此通知的这笔交易中,Ronin黑客向Euler黑客发送了2枚ETH。但专家称,该消息是一个网络钓鱼骗局,试图窃取Euler攻击者钱包的凭据。在Ronin黑客钱包向Euler黑客钱包发送消息几分钟后,Euler Finance的开发人员试图用他们自己的消息进行干预,他们警告Euler黑客警惕所谓的解密软件,称“最简单的方法就是退还资金”。Euler的开发人员在另一份交易中继续说道:“在任何情况下都不要试图查看该消息。不要在任何地方输入您的私钥。提醒您,您的机器也可能被入侵。”以太坊基金会前开发人员Hudson Jameson表示,Ronin黑客的提议可能是一种几乎不加掩饰的企图,目的是诱使Euler黑客交出他们从Euler Finance窃取的私钥,从而交出加密货币。但他表示,链上消息背后的动机仍不清楚。此前昨日消息,Euler正与攻击者进行私下谈判,攻击者称“无意保留不属于我们的东西”。Sui Network:主网将于第二季度推出,尚无正式的空投计划公链项目Sui Network在推特上表示,主网将于今年第二季度推出,目前没有正式的空投计划,Wave to Mainnet活动旨在进一步让社区了解关于Sui协议在主网之前转变Web3的潜力。ENS基金会董事宣布辞职,新董事提名窗口将于4月10日开放据官方治理论坛,ENS基金会董事Brantly Millegan宣布将辞去董事一职,辞职将在任命新董事后生效。ENS DAO可根据章程第15条任命新的ENS基金会董事,新董事将在提名程序和选举后任命,ENS基金会将于4月10日17:00开放提名窗口,并于4月30日17:00关闭。5月1日至5日进行选举,选举结果公布后,将向ENS基金会发出任命新董事的通知。法官批准Celsius托管账户结算,并返还72.5%的加密资产据The Block报道,在美国纽约南区破产法院周二举行的听证会上,法官Martin Glenn批准了Celsius债务人、无担保债权人委员会和托管账户持有人特设小组之间的和解。个人托管账户持有人必须选择参与和解。反过来,Celsius债务人将同意根据交易条款解决针对托管账户持有人的托管资产的所有诉因。根据和解协议,Celsius托管账户持有人可以在其托管账户中获得72.5%的加密货币,不包括交易费用。周二批准的和解协议没有释放与Earn计划中持有的资产相关的任何权利或诉因。Glenn今年1月裁定,Celsius Earn账户中的资产属于公司,而不是客户。美国检方要求没收该国立法者从SBF获得的政治捐款,拟用于偿还此案受害者据Semafor报道,通过查阅美国纽约南区检察官办公室于2月份发布的通知函,该机构要求立法者交出前FTX首席执行官Sam Bankman-Fried(SBF)及其员工的政治捐款。通知称,捐款代表SBF的犯罪所得,因此可以根据“联邦资产没收法”收回。它指示收款人将现金退还给美国法警服务,而不是FTX本身。检察官计划根据美国司法部的规定,使用没收的任何资金来补偿SBF涉嫌犯罪的受害者。它还表示,政府正在与这家破产公司协调。FTX此前曾向政治人物发出机密信件,要求在2月28日之前归还捐款。Semafor 证实至少有两名国会议员收到了这封信。Semafor还表示,SBF是Semafor的投资者,Semafor计划回购他的权益。Sushi DAO收到美国SEC传票,CEO提议建立300万美元的法律辩护基金据CoinDesk报道,Sushi DAO周二透露,美国证券交易委员会(SEC)近期向Sushi DAO和其首席执行官Jared Grey发出了传票。Grey在一篇论坛文章中提议建立一个“Sushi DAO法律辩护基金”,称它将“支付核心贡献者的法律费用”。该提案建议为核心贡献者提供300万美元的USDT。如果最初的300万美元用完,还可以另外提供100万美元的USDT。Grey表示:“我们正在与SEC合作。我们不打算公开评论正在进行的调查或其他法律事务。”根据该提案,新基金将为自去年4月“Sushi 2.0”被批准以来一直活跃的核心贡献者支付律师费和其他费用。Circle首席战略官:向USDC持有者推出忠诚度奖励分配计划Circle首席战略官Dante Disparte在社交媒体发文称,最近稳定币脱锚是由外部市场力量造成,不在Circle的控制范围内,但是Circle将采取措施解决此问题,为此Circle将向USDC持有者推出忠诚度奖励分配计划并计划分发一次性USDC奖金。据Circle官方网站数据,截至3月10日,USDC持有者数量约160万。融资消息链游开发商CCP Games完成A16z领投的4000万美元融资成立于1997年的游戏开发商 CCP Games 已经筹集了 4000 万美元的资金,用于制作一款以Eve Online宇宙为背景的新的 3A 区块链游戏。Andreessen Horowitz (A16z) 领投,Makers Fund、Bitkraft、Kingsway Capital、Nexon、Hashed 和其他参与者跟投。CCP 总部位于冰岛首都雷克雅未克,并在伦敦和上海设有工作室。CCP Games 首席执行官 Hilmar Veigar 表示,这笔融资将使 CCP Games 能够利用其研发团队的发现,利用区块链技术全面开发新的 3A 游戏。多资产投资平台eToro以35亿美元的估值融资2.5亿美元据Techcrunch报道,多资产投资平台 eToro 以 35 亿美元估值融资 2.5 亿美元,该笔融资通过高级投资协议(AIA)获得的,投资者包括 ION Group、Social Leverage、SoftBank 和 Spark Capital。EToro 计划利用其新资本发展业务,并在全球和“主要市场”投资该产品。它还打算扩大其在美国的业务。匿名DAO项目tomi完成4000万美元融资,DWF Labs领投旨在建立替代互联网网络的去中心化自治组织 (DAO) tomi 已筹集到 4000 万美元,由数字资产做市商 DWF Labs 领投,Ticker Capital、Piha Equities、日本加密巨鲸和社区领袖 Hirokado Kohji 以及其他私人投资者参投。tomiNET 是一种由 DAO 管理、无监控的万维网替代方案。这笔资金将用于为网络吸引内容创作者。Tomi 的目标是“为互联网重新开始”,使用其 DAO 治理模型来促进言论自由和获取未经审查的信息。Race Capital第二支基金Fund II获1.81亿美元超额认购据彭博社报道,Race Capital第二支基金Fund II获得1.81亿美元超额认购。据悉,该基金已经进行了10项投资,投资组合包括机器学习开发平台Sematic和数字钱包Ottr Finance。Race Capital普通合伙人Alfred Chuang表示,该公司比以往任何时候都对去中心化技术更感兴趣,尤其是在Race Capital投资的加密货币交易所FTX倒闭之后。据数据平台Rootdata统计,Race Capital此前投资项目包括DeFi项目Huma Finance、全球支付平台Ping、Web3通信基础设施Notifi、加密钱包Martian、Solana钱包Ottr Finance、网络数据分析平台Umami等。Bitget以3亿美元的估值追加投资3000万美元,收购了加密钱包BitKeep的控股权据The Block报道,加密货币交易所 Bitget 以 3 亿美元的估值追加投资 3000 万美元,收购了加密钱包 BitKeep 的控股权。作为 Bitget 交易的一部分,BitKeep 的化名 CEO Kevin Como 将辞职,而 BitKeep 现任首席产品官 Karry Cheung 将晋升为 CEO。BitKeep 将继续作为独立实体运营。重要数据Binance Launchpad项目Space ID已完成认购,超10万名参与者投入超867万枚BNB据官方公告,Binance Launchpad 项目 Space ID 已完成认购。认购期间共有 103,598 名参与者投入 8,677,923.9471 枚 BNB,超额认购 1,170 倍。5 名参与者达到 600,000 ID 硬顶,导致参与者分配给剩余用户。数据:Voyager过去10天共转出9968.76万美元的代币,并提回1.68亿美元的USDC据推特用户余烬监测,过去十天(3月12日至3月22日),Voyager向各交易平台共转出价值约9968.76万美元的加密货币,并提回了价值约1.68亿美元的USDC。目前Voyager地址代币总价值8.82亿美元,其中稳定币占6.97亿美元,目前仅剩1.85亿美元为非稳定币资产。数据:权志龙发行的NFT系列目前已铸造1378枚,仅占本次公开铸造总量的10.2%OpenSea数据显示,韩国歌手权志龙发行的NFT系列“Archive of PEACEMINUSONE”自今日11时开启公开铸造以来,仅铸造了1378枚,占此次公开铸造总量13,444枚的10.2%。据此前昨日消息,该NFT系列还将在4月22日和4月29日分别公开铸造1888枚及654枚,三次公开铸造的NFT在价格、稀缺性和优势方面各不相同。今日晚些时候消息,安全机构表示,权志龙发行的NFT系列存在CVE-2022-38217通用漏洞。彭博社:Circle本月已销毁约122亿美元的USDC,但发行量约为销毁量一半据彭博社报道,即使USDC稳定币发行商Circle收回了困在硅谷银行的存款,但客户仍继续以比购买它更快的速度赎回其发行的稳定币USDC。根据研究人员CryptoCompare的数据,3月20日,用户赎回了7.386亿美元的USDC,而Circle在以太坊区块链上发行了不到900万美元的代币。数据显示,前一天,Circle在网络上发行了2.31亿美元,客户赎回了2330万美元。CryptoCompare发现,自3月初以来,Circle销毁了约122亿美元的USDC,而在以太坊上发行的金额约为其一半。根据CryptoCompare数据,自3月13日以来,投资者在以太坊上赎回了57.6亿美元的 USDC,而Circle已发行了约8.74亿美元的USDC。USDC抛售也出现在去中心化金融应用程序上,Curve 3pool中稳定币占比继续倾斜,USDT占比仅为9%,这意味着Tether的需求量很大,而交易员正在退出其他稳定币。CryptoCompare分析师Jacob Joseph表示:“最近对银行合作伙伴关闭的担忧似乎已导致用户转向USDT和其他稳定币,而不是USDC。”Cathie Wood的Ark ETF售出价值1350万美元的Coinbase股票据The Block报道,Cathie Wood的ARK Fintech Innovation ETF出售了价值1350万美元的Coinbase股票,这是自7月以来首次出售大量该公司股票。ARK出售了其ARK Fintech Innovation ETF的160,887股。这结束了2022年11月开始的长达数月的购买狂潮。此前消息,本月早些时候,Ark增持了近3000万美元的Coinbase股票。该基金目前上涨5%,年初至今上涨33%,此前在2022年下跌了约65%。Coinbase股价今天上涨11%,收于83.99 美元,年初至今上涨近150%。
2023年03月23日
7 阅读
0 评论
0 点赞
2023-03-22
Hyperledger Fabric 部署在多个主机上
前言在实验Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务中,我们已经完成了使用提供 TLS-CA 服务的 council 组织运行维护 Raft 协议的三个 orderer 节点。但目前我们都是在单个主机上启动 Fabric 网络,本文将尝试将 Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务 中的网络结构部署在多个主机上。工作准备本文工作将 Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务 中网络部署至两台主机上—— DebianA 和 DebianB,其中 DebianA 维护 council 和 soft 组织及相关节点, DebianB 维护 web 和 hard 组织及相关节点,网络结构为(实验代码已上传至:github.com/wefantasy/F… 的 5_FabricNetworkByMultiHost 下):项所属主机运行端口说明council.ifantasy.netDebianA7050council 组织的 CA 服务, 为联盟链网络提供 TLS-CA 服务orderer1.council.ifantasy.netDebianA7051orderer1 的排序服务orderer1.council.ifantasy.netDebianA7052orderer1 的 admin 服务orderer2.council.ifantasy.netDebianA7054orderer2 的排序服务orderer2.council.ifantasy.netDebianA7055orderer2 的 admin 服务orderer3.council.ifantasy.netDebianB7057orderer3 的排序服务orderer3.council.ifantasy.netDebianB7058orderer3 的 admin 服务soft.ifantasy.netDebianA7250soft 组织的 CA 服务, 包含成员: peer1 、 admin1peer1.soft.ifantasy.netDebianA7251soft 组织的 peer1 成员节点web.ifantasy.netDebianB7350web 组织的 CA 服务, 包含成员: peer1 、 admin1peer1.web.ifantasy.netDebianB7351web 组织的 peer1 成员节点hard.ifantasy.netDebianB7450hard 组织的 CA 服务, 包含成员: peer1 、 admin1peer1.hard.ifantasy.netDebianB7451hard 组织的 peer1 成员节点两个主机的相关信息为:主机名别名网络地址说明DebianAhost1172.25.1.250运行 council 和 softDebianBhost2172.25.1.251运行 web 和 hard实验准备本文网络结构直接将 Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务 中创建的 4-2_RunOrdererByCouncil 复制为 5_FabricNetworkByMultiHost 并修改(建议直接将本案例仓库 FabricLearn 下的 5_FabricNetworkByMultiHost 目录拷贝到本地运行),文中大部分命令在 Hyperledger Fabric定制联盟链网络工程实践 中已有介绍因此不会详细说明。默认情况下,所有命令皆在 5_FabricNetworkByMultiHost 根目录下执行。本系列所有实验都是在 VM ware 的 Debian 虚拟机(DebianA)下完成,本文会将 DebianA 虚拟机直接拷贝一份为 DebianB ,之后将会在 DebianA 下生成所有证书文件及通道文件,然后将文件复制一份到 DebianB 中再分别启动对应的网络。配置文件通过 docker 运行 fabric 网络总是需要解决不同节点间的通信问题(不能仅配置 DNS),目前主要有三种解决方案:在 docker-compose.yaml 中设置 extra_hosts 字段 通过容器编排工具 docker swarm 实现 通过容器编排工具 Kubernetes(K8S) 实现(后期尝试) 大规模容器编排管理目前最流行的就是 K8S ,后期本人也会朝此方向尝试,为了简便本文使用第一种方式实现不同主机的 docker 容器通信。具体实现方面,只需要在 compose/docker-compose.yaml 中的 orderer 服务和 peer 服务中添加下列代码,如 orderer1.council.ifantasy.net : orderer1.council.ifantasy.net: container_name: orderer1.council.ifantasy.net extends: file: docker-base.yaml service: orderer-base environment: - ORDERER_HOST=orderer1.council.ifantasy.net - ORDERER_GENERAL_LOCALMSPID=councilMSP - ORDERER_GENERAL_LISTENPORT=7051 volumes: - $/council.ifantasy.net/registers/orderer1:$/orderer - $/data/genesis.block:$/orderer/genesis.block ports: - 7051:7051 - 7052:8888 - 7053:9999 extra_hosts: - "orderer1.council.ifantasy.net:172.25.1.250" - "orderer2.council.ifantasy.net:172.25.1.250" - "orderer3.council.ifantasy.net:172.25.1.251" 复制代码如果不进行上述配置,则会因无法通信而出现下列错误:Error: failed to send transaction: got unexpected status: SERVICE_UNAVAILABLE -- no Raft leader 复制代码证书和通道文件生成网上很多相关教程都说明了将 Fabric 网络部署至多主机的方法12,大部分教程都是在同一台主机上生成全部的组织证书文件再进行证书分发部署(包括本文),但必须说明的是这种方式必然不能用于生产环境,因为生成组织证书的那台主机将会拥有全部组织的访问权限。在生产环境中,应该每个组织通过自身的 CA 服务生成自身的组织证书,并由单个组织创建通道后使用 Hyperledger Fabric组织的动态添加和删除 中的方法将其它组织加入通道中。 此外,毫无疑问使用 cryptogen 的方式一次性生成所有证书比本文所使用的 fabric-ca 的方式简单很多(不必考虑 DNS 问题)。启动 CA 服务由于要通过 DebainA 生成所有证书文件,所以得先将本地 DNS 指向 DebianA (setDNSTemp.sh):echo "127.0.0.1 council.ifantasy.net" >> /etc/hosts echo "127.0.0.1 soft.ifantasy.net" >> /etc/hosts echo "127.0.0.1 web.ifantasy.net" >> /etc/hosts echo "127.0.0.1 hard.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer1.council.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer2.council.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer3.council.ifantasy.net" >> /etc/hosts echo "127.0.0.1 peer1.soft.ifantasy.net" >> /etc/hosts echo "127.0.0.1 peer1.web.ifantasy.net" >> /etc/hosts echo "127.0.0.1 peer1.hard.ifantasy.net" >> /etc/hosts 复制代码直接运行根目录下的 0_Restart.sh 即可完成本实验所需 CA 服务的启动。docker stop $(docker ps -aq) docker rm $(docker ps -aq) docker rmi $(docker images dev-* -q) # rm -rf orgs data docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d council.ifantasy.net soft.ifantasy.net web.ifantasy.net hard.ifantasy.net 复制代码在前面的实验中,我们每次重启都删除所有的证书文件,但考虑到多机生成证书的复杂性,在这里只清除 docker 镜像而不删除证书文件。注册账户注册账户跟之前没什么不同,直接运行根目录下的 1_RegisterUser.sh 即可完成本实验所需用户的注册。council 用户注册: echo "Working on council" export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@council.ifantasy.net:7050 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name orderer1 --id.secret orderer1 --id.type orderer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name orderer2 --id.secret orderer2 --id.type orderer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name orderer3 --id.secret orderer3 --id.type orderer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name peer1soft --id.secret peer1soft --id.type peer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name peer1web --id.secret peer1web --id.type peer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name peer1hard --id.secret peer1hard --id.type peer -u https://council.ifantasy.net:7050 复制代码soft 用户注册: echo "Working on soft" export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@soft.ifantasy.net:7250 fabric-ca-client register -d --id.name peer1 --id.secret peer1 --id.type peer -u https://soft.ifantasy.net:7250 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://soft.ifantasy.net:7250 复制代码web 用户注册: echo "Working on web" export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/web.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@web.ifantasy.net:7350 fabric-ca-client register -d --id.name peer1 --id.secret peer1 --id.type peer -u https://web.ifantasy.net:7350 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://web.ifantasy.net:7350 复制代码hard 用户注册: echo "Working on hard" export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/hard.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/hard.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@hard.ifantasy.net:7450 fabric-ca-client register -d --id.name peer1 --id.secret peer1 --id.type peer -u https://hard.ifantasy.net:7450 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://hard.ifantasy.net:7450 复制代码组织证书构建组织证书构建跟之前的实验一样,直接运行根目录下的 2_EnrollUser.sh 即可完成本实验所需证书的构建。直接运行根目录下的 2_EnrollUser.sh 即可完成本实验所需证书的构建。组织资产预处理: echo "Preparation=============================" mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/assets cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/council.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/council.ifantasy.net/assets/tls-ca-cert.pem mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/assets cp $LOCAL_CA_PATH/soft.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/assets cp $LOCAL_CA_PATH/web.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/assets cp $LOCAL_CA_PATH/hard.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/assets/tls-ca-cert.pem echo "Preparation end==========================" 复制代码council 证书构建: echo "Start Council=============================" echo "Enroll Admin" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@council.ifantasy.net:7050 # 加入通道时会用到admin/msp,其下必须要有admincers mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/admincerts/cert.pem echo "Enroll Orderer1" # for identity export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://orderer1:orderer1@council.ifantasy.net:7050 mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1/msp/admincerts cp $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1/msp/admincerts/cert.pem # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://orderer1:orderer1@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts orderer1.council.ifantasy.net cp $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1/tls-msp/keystore/key.pem echo "Enroll Orderer2" # for identity export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://orderer2:orderer2@council.ifantasy.net:7050 mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2/msp/admincerts cp $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2/msp/admincerts/cert.pem # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://orderer2:orderer2@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts orderer2.council.ifantasy.net cp $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2/tls-msp/keystore/*_sk $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2/tls-msp/keystore/key.pem echo "Enroll Orderer3" # for identity export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://orderer3:orderer3@council.ifantasy.net:7050 mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3/msp/admincerts cp $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3/msp/admincerts/cert.pem # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://orderer3:orderer3@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts orderer3.council.ifantasy.net cp $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3/tls-msp/keystore/*_sk $LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3/tls-msp/keystore/key.pem mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/council.ifantasy.net/msp/users cp $LOCAL_CA_PATH/council.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/council.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/council.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/council.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/council.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/council.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/council.ifantasy.net/msp/config.yaml echo "End council=============================" 复制代码soft 证书构建: echo "Start Soft=============================" echo "Enroll Admin" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@soft.ifantasy.net:7250 mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/admincerts/cert.pem echo "Enroll Peer1" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://peer1:peer1@soft.ifantasy.net:7250 # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://peer1soft:peer1soft@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts peer1.soft.ifantasy.net cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/tls-msp/keystore/key.pem mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/msp/admincerts cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/msp/admincerts/cert.pem mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/users cp $LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/soft.ifantasy.net/msp/config.yaml echo "End Soft=============================" 复制代码web 证书构建: echo "Start Web=============================" echo "Enroll Admin" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/web.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@web.ifantasy.net:7350 mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/admincerts/cert.pem echo "Enroll Peer1" # for identity export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/web.ifantasy.net/registers/peer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://peer1:peer1@web.ifantasy.net:7350 # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://peer1web:peer1web@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts peer1.web.ifantasy.net cp $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/tls-msp/keystore/key.pem mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/msp/admincerts cp $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/msp/admincerts/cert.pem mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/users cp $LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/web.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/web.ifantasy.net/msp/config.yaml echo "End Web=============================" 复制代码hard 证书构建: echo "Start Hard=============================" echo "Enroll Admin" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/hard.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/hard.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@hard.ifantasy.net:7450 mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/hard.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/registers/admin1/msp/admincerts/cert.pem echo "Enroll Peer1" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/hard.ifantasy.net/registers/peer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/hard.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://peer1:peer1@hard.ifantasy.net:7450 # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/hard.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://peer1hard:peer1hard@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts peer1.hard.ifantasy.net cp $LOCAL_CA_PATH/hard.ifantasy.net/registers/peer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/hard.ifantasy.net/registers/peer1/tls-msp/keystore/key.pem mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/registers/peer1/msp/admincerts cp $LOCAL_CA_PATH/hard.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/registers/peer1/msp/admincerts/cert.pem mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/hard.ifantasy.net/msp/users cp $LOCAL_CA_PATH/hard.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/hard.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/hard.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/hard.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/hard.ifantasy.net/msp/config.yaml echo "End Hard=============================" 复制代码在上面操作完成后,已经暂时不需要 CA 服务了,因此先使用 docker stop $(docker ps -aq) 命令关闭正在运行的四个 CA 容器。配置通道配置通道的方法跟单机略有区别,由于我们预期将 peer 和 orderer 服务部署在不同的主机上,因此并不需要使用 docker-compose 启动其它容器,只需要生成通道文件就好。运行根目录下的 3_Configtxgen.sh 即可完成本实验所需通道配置。configtxgen -profile OrgsChannel -outputCreateChannelTx $LOCAL_ROOT_PATH/data/testchannel.tx -channelID testchannel configtxgen -profile OrgsChannel -outputBlock $LOCAL_ROOT_PATH/data/testchannel.block -channelID testchannel cp $LOCAL_ROOT_PATH/data/testchannel.block $LOCAL_CA_PATH/soft.ifantasy.net/assets/ cp $LOCAL_ROOT_PATH/data/testchannel.block $LOCAL_CA_PATH/web.ifantasy.net/assets/ cp $LOCAL_ROOT_PATH/data/testchannel.block $LOCAL_CA_PATH/hard.ifantasy.net/assets/ 复制代码在以上步骤完成后,在 5_FabricNetworkByMultiHost 文件夹下的 data 和 orgs 目录中已经生成了全部网络所需的通道文件和组织证书文件,现在我们将 5_FabricNetworkByMultiHost 文件夹复制一份到 DebianB 主机上开始接下来的实验。以后每次重启网络只需要在每个主机上运行 0_Restart.sh 、 4_JoinChannel_host1.sh 、 4_JoinChannel_host2.sh 、 5_TestChaincode_host1.sh 、 5_TestChaincode_host2.sh 。启动多机网络配置 DNS在上节中,我们为了方便在 DebianA 上生成证书,将所有域名映射都指向了 DebianA 自身,现在需要手动修改 /etc/hosts 文件并删除上节设置的 DNS 映射,然后设置新的 DNS 内容:echo "172.25.1.250 council.ifantasy.net" >> /etc/hosts echo "172.25.1.250 soft.ifantasy.net" >> /etc/hosts echo "172.25.1.251 web.ifantasy.net" >> /etc/hosts echo "172.25.1.251 hard.ifantasy.net" >> /etc/hosts echo "172.25.1.250 orderer1.council.ifantasy.net" >> /etc/hosts echo "172.25.1.250 orderer2.council.ifantasy.net" >> /etc/hosts echo "172.25.1.251 orderer3.council.ifantasy.net" >> /etc/hosts echo "172.25.1.250 peer1.soft.ifantasy.net" >> /etc/hosts echo "172.25.1.251 peer1.web.ifantasy.net" >> /etc/hosts echo "172.25.1.251 peer1.hard.ifantasy.net" >> /etc/hosts 复制代码同样,我们需要在 DebianB 上设置类似的 DNS 映射:echo "172.25.1.250 council.ifantasy.net" >> /etc/hosts echo "172.25.1.250 soft.ifantasy.net" >> /etc/hosts echo "172.25.1.251 web.ifantasy.net" >> /etc/hosts echo "172.25.1.251 hard.ifantasy.net" >> /etc/hosts echo "172.25.1.250 orderer1.council.ifantasy.net" >> /etc/hosts echo "172.25.1.250 orderer2.council.ifantasy.net" >> /etc/hosts echo "172.25.1.251 orderer3.council.ifantasy.net" >> /etc/hosts echo "172.25.1.250 peer1.soft.ifantasy.net" >> /etc/hosts echo "172.25.1.251 peer1.web.ifantasy.net" >> /etc/hosts echo "172.25.1.251 peer1.hard.ifantasy.net" >> /etc/hosts 复制代码启动容器并加入通道DebainA可以直接运行根目录下的 4_JoinChannel_host1.sh 脚本以使 DebianA 执行下列命令启动容器并加入通道:启动本主机容器: source envpeer1soft docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d council.ifantasy.net soft.ifantasy.net peer1.soft.ifantasy.net docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d orderer1.council.ifantasy.net orderer2.council.ifantasy.net 复制代码此时 DebianA 运行的容器网络为: 2. 本主机排序服务加入通道:source envpeer1soft export ORDERER_ADMIN_TLS_SIGN_CERT=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1/tls-msp/signcerts/cert.pem export ORDERER_ADMIN_TLS_PRIVATE_KEY=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer1/tls-msp/keystore/key.pem osnadmin channel join -o orderer1.council.ifantasy.net:7052 --channelID testchannel --config-block $LOCAL_ROOT_PATH/data/testchannel.block --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY" osnadmin channel list -o orderer1.council.ifantasy.net:7052 --ca-file $ORDERER_CA --client-cert $ORDERER_ADMIN_TLS_SIGN_CERT --client-key $ORDERER_ADMIN_TLS_PRIVATE_KEY export ORDERER_ADMIN_TLS_SIGN_CERT=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2/tls-msp/signcerts/cert.pem export ORDERER_ADMIN_TLS_PRIVATE_KEY=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer2/tls-msp/keystore/key.pem osnadmin channel join -o orderer2.council.ifantasy.net:7055 --channelID testchannel --config-block $LOCAL_ROOT_PATH/data/testchannel.block --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY" osnadmin channel list -o orderer2.council.ifantasy.net:7055 --ca-file $ORDERER_CA --client-cert $ORDERER_ADMIN_TLS_SIGN_CERT --client-key $ORDERER_ADMIN_TLS_PRIVATE_KEY 复制代码本主机组织加入通道: source envpeer1soft peer channel join -b $LOCAL_CA_PATH/soft.ifantasy.net/assets/testchannel.block peer channel list 复制代码DebianB可以直接运行根目录下的 4_JoinChannel_host2.sh 脚本以使 DebianB 执行下列命令启动容器并加入通道:启动本主机容器: source envpeer1web docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d web.ifantasy.net peer1.web.ifantasy.net hard.ifantasy.net peer1.hard.ifantasy.net docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d orderer3.council.ifantasy.net 复制代码此时 DebianB 运行的容器网络为: 2. 本主机排序服务加入通道:source envpeer1web export ORDERER_ADMIN_TLS_SIGN_CERT=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3/tls-msp/signcerts/cert.pem export ORDERER_ADMIN_TLS_PRIVATE_KEY=$LOCAL_CA_PATH/council.ifantasy.net/registers/orderer3/tls-msp/keystore/key.pem osnadmin channel join -o orderer3.council.ifantasy.net:7058 --channelID testchannel --config-block $LOCAL_ROOT_PATH/data/testchannel.block --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY" osnadmin channel list -o orderer3.council.ifantasy.net:7058 --ca-file $ORDERER_CA --client-cert $ORDERER_ADMIN_TLS_SIGN_CERT --client-key $ORDERER_ADMIN_TLS_PRIVATE_KEY 复制代码本主机组织加入通道: source envpeer1web peer channel join -b $LOCAL_CA_PATH/web.ifantasy.net/assets/testchannel.block peer channel list source envpeer1hard peer channel join -b $LOCAL_CA_PATH/hard.ifantasy.net/assets/testchannel.block peer channel list 复制代码安装并测试链码由于通道更新需要根据策略进行顺序操作,所以不可以直接运行根目录下的 5_TestChaincode_host1.sh 脚本,而是在不同主机中分别按链码周期运行对应的脚本内容:DebianA 安装链码: source envpeer1soft # peer lifecycle chaincode package basic.tar.gz --path asset-transfer-basic/chaincode-go --label basic_1 peer lifecycle chaincode install basic.tar.gz peer lifecycle chaincode queryinstalled 复制代码DebianB 安装链码: source envpeer1web peer lifecycle chaincode install basic.tar.gz peer lifecycle chaincode queryinstalled source envpeer1hard peer lifecycle chaincode install basic.tar.gz peer lifecycle chaincode queryinstalled 复制代码DebianA 批准链码: export CHAINCODE_ID=basic_1:06613e463ef6694805dd896ca79634a2de36fdf019fa7976467e6e632104d718 source envpeer1soft peer lifecycle chaincode approveformyorg -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_ID peer lifecycle chaincode queryapproved -C testchannel -n basic --sequence 1 复制代码此时使用以下命令查看链码批准情况:peer lifecycle chaincode checkcommitreadiness -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --version 1.0 --sequence 1 --init-required 复制代码4. DebainB 批准链码:export CHAINCODE_ID=basic_1:06613e463ef6694805dd896ca79634a2de36fdf019fa7976467e6e632104d718 source envpeer1web peer lifecycle chaincode approveformyorg -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_ID peer lifecycle chaincode queryapproved -C testchannel -n basic --sequence 1 source envpeer1hard peer lifecycle chaincode approveformyorg -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_ID peer lifecycle chaincode queryapproved -C testchannel -n basic --sequence 1 复制代码此时再回到 DebianA 查看链码批准情况发现已同步: 5. DebainB 提交链码:source envpeer1web peer lifecycle chaincode commit -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --init-required --version 1.0 --sequence 1 --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.web.ifantasy.net:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE 复制代码DebainB 初始化链码: source envpeer1web peer chaincode invoke --isInit -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.web.ifantasy.net:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '' 复制代码DebainA 调用链码: peer chaincode invoke -o orderer1.council.ifantasy.net:7051 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.web.ifantasy.net:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '' 复制代码参考FootnotesKC Tam. Multi-Host Deployment for First Network (Hyperledger Fabric v2). CSDN. [2020-08-11] ↩ 余府. Hyperledger Fabric 2.x 多机部署/分布式集群部署流程. CSDN. [2020-11-28] ↩
2023年03月22日
9 阅读
0 评论
0 点赞
2023-03-22
Hyperledger Fabric定制联盟链网络工程实践
前言总体来看,网络上成体系的可用的 Fabric 教程极少——不是直接在 Fabric 官网复制内容大谈基础理论就是在描述一个几乎无法复现的项目实践,以至于学习 Fabric 的效率极低,印象最深刻的就是我曾经花费几天时间尝试按照官方教程 CA Deployment steps 搭建自己的 CA 服务,却始终无法成功也找不到原因。因此,为了提高生产效率,本项目虚拟了一个工作室联盟链需求并将逐步实现,致力于提供一个易理解、可复现的Fabric学习项目,其中项目部署步骤的各个环节都清晰可见,并且将所有过程打包为脚本使之能够被快速复现在任何一台主机上。工程介绍组织架构有一启明星工作室,其中包含三大组织:软件组、WEB组、硬件组、理事会,不同组织间相互独立,偶尔有业务往来。现理事会决定搭建一个启明星工作室的联盟链网络,使不同组织间加强合作,期望最终实现以下工程架构:组织说明 council:理事会,负责工作室各组间协调管理,由三组抽调人员共同组成 soft:软件组,专注软件开发 hard:硬件组,专注硬件开发 web:WEB组,专注网站开发 orderer:过渡排序组织,为联盟链网络提供排序服务,后期会舍弃 成员说明 council:一个Orderer节点、三个Admin账号,每组拥有一个Admin账号权限 soft:一个Orderer节点、一个Peer节点、一个Admin账号、一个User账号 hard:一个Orderer节点、一个Peer节点、一个Admin账号、一个User账号 web:一个Orderer节点、一个Peer节点、一个Admin账号、一个User账号 orderer:一个Orderer节点、一个Admin账号 根CA服务器(域名) council.fantasy.com:提供/管理组织间的TLS证书,又叫TLS CA服务器 soft.fantasy.com:提供/管理组织内TLS证书 hard.fantasy.com:提供/管理组织内TLS证书 web.fantasy.com:提供/管理组织内TLS证书 orderer.fantasy.com:提供/管理组织内TLS证书 实验准备在开始前,如果你对 Fabric 命令知之甚少,可以先学习fabric的test-network启动过程Bash源码详解;此外应准备好 Fabric 的开发环境,具体环境搭建和软件版本可参考基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例。为了方便区分各组织和节点,本工程使用域名的方式进行各节点间的通信,以 web 组织为例,域名分配规范如下:域名说明peer1.web.ifantasy.net web组第一个 peer 节点地址peer2.web.ifantasy.netweb组第二个 peer 节点地址orderer1.web.ifantasy.netweb组第一个 orderer 节点地址此外,还需要在 \etc\hosts 文件添加 DNS 地址:echo "127.0.0.1 council.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer.ifantasy.net" >> /etc/hosts echo "127.0.0.1 soft.ifantasy.net" >> /etc/hosts echo "127.0.0.1 web.ifantasy.net" >> /etc/hosts echo "127.0.0.1 hard.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer1.soft.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer1.web.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer1.hard.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer1.orderer.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer2.orderer.ifantasy.net" >> /etc/hosts echo "127.0.0.1 orderer3.orderer.ifantasy.net" >> /etc/hosts echo "127.0.0.1 peer1.soft.ifantasy.net" >> /etc/hosts echo "127.0.0.1 peer1.web.ifantasy.net" >> /etc/hosts echo "127.0.0.1 peer1.hard.ifantasy.net" >> /etc/hosts 复制代码本文工作本项目主要以学习为主,所以并未期望一次实现所有架构和功能。本文所实现的具体内容为,搭建一个简单的工作室联盟链网络,包含 council 、 orderer 、 soft 、 web 四个组织,并将测试链码部署在通道 mychannel ,网络结构为(实验代码已上传至:github.com/wefantasy/F… 的 1_3Org2Peer1Orderer1TLS 目录下):项运行端口说明council.ifantasy.net7050council 组织的 CA 服务, 为联盟链网络提供 TLS-CA 服务orderer.ifantasy.net7150orderer 组织的 CA 服务, 为联盟链网络提供排序服务orderer1.orderer.ifantasy.net7151orderer 组织的 orderer1 成员节点soft.ifantasy.net7250soft 组织的 CA 服务, 包含成员: peer1 、 admin1peer1.soft.ifantasy.net7251soft 组织的 peer1 成员节点web.ifantasy.net7350web 组织的 CA 服务, 包含成员: peer1 、 admin1peer1.web.ifantasy.net7351web 组织的 peer1 成员节点其它说明个人觉得 Fabric 官方示例的证书结构过于冗余,为了便于自己理解,本工程证书结构跟一般 Fabric 有所出入,先将本工程各文件目录说明如下:1_3Org2Peer1Orderer1TLS ├── 0_Restart.sh # 启动基本 CA 网络脚本 ├── 1_RegisterUser.sh # 注册账户脚本 ├── 2_EnrollUser.sh # 登录账户脚本 ├── 3_Configtxgen.sh # 生成创世区块脚本 ├── 4_TestChaincode.sh # 链码测试脚本 ├── asset-transfer-basic # 测试链码目录 ├── basic.tar.gz # 打包后的链码包 ├── compose # Docker配置目录 │ ├── docker-base.yaml # 基础通用配置 │ └── docker-compose.yaml # 具体 Docker 配置 ├── config # Fabric 公共配置目录 │ ├── config-msp.yaml # 节点组织单元配置文件 │ ├── configtx.yaml # 初始通道配置 │ ├── orderer.yaml # orderer 节点配置,osnadmin 的配置文件 │ └── core.yaml # peer 配置 ├── data # 临时数据目录 ├── envpeer1soft # soft 组织的 peer1 cli环境变量 ├── envpeer1web # web 组织的peer1 cli环境变量 ├── orgs # 组织成员证书目录 │ ├── council.ifantasy.net # council 组织目录 │ ├── orderer.ifantasy.net # orderer 组织目录 │ ├── web.ifantasy.net # web组织目录 │ └── soft.ifantasy.net # soft 组织目录 │ ├── assets # 组织公共材料目录 │ │ ├── ca-cert.pem # 本组织根证书 │ │ ├── mychannel.block # mychannel 通道创世区块 │ │ └── tls-ca-cert.pem # TLS-CA 服务根证书 │ ├── ca # 本组织 CA 服务目录 │ │ ├── admin # 本组织 CA 服务引导管理员 msp 目录 │ │ └── crypto # 本组织 CA 服务默认证书目录 │ ├── msp # 组织 MSP 目录 │ │ ├── admincerts # 组织管理员签名证书目录 │ │ ├── cacerts # 组织 CA 服务根证书目录 │ │ ├── config.yaml # 组织节点单元配置文件 │ │ ├── tlscacerts # TLS-CA 服务根证书目录 │ │ └── users # 空目录,msp 规范所需 │ └── registers # 本组织注册的账户目录 │ ├── admin1 # 管理员账户 │ └── peer1 # 节点账户 └── README.md 复制代码实验步骤实验准备首先将基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例中的/usr/local/fabric/config目录复制到根目录下。如无特殊说明,环境变量FABRIC_CFG_PATH总是默认指向根目录的config目录(建议直接将本案例仓库 FabricLearn 下的 1_3Org2Peer1Orderer1TLS 目录拷贝到本地运行)。fabric 提供一个 fabric-tools 镜像用于提供操作 peer 节点的命令行,其实现方式是在启动 fabric-tools 时指定 peer 节点的身份证书等环境变量,此外我们也可以直接将这些环境变量写入一个文件中然后通过 source 命令激活。在根目录下创建 envpeer1soft 文件,用于保存 soft 组织的环境变量,写入以下内容:export LOCAL_ROOT_PATH=$PWD export LOCAL_CA_PATH=$LOCAL_ROOT_PATH/orgs export DOCKER_CA_PATH=/tmp export COMPOSE_PROJECT_NAME=fabriclearn export DOCKER_NETWORKS=network export FABRIC_BASE_VERSION=2.4 export FABRIC_CA_VERSION=1.5 复制代码配置TLS服务在根目录下创建 compose 文件夹,用于储存 docker-compose 配置文件。 在 compose 下创建 docker-base.yaml 文件,用于写入公共服务配置,先写入以下内容: version: "2" services: ca-base: image: hyperledger/fabric-ca:$ environment: - FABRIC_CA_SERVER_HOME=$/ca/crypto - FABRIC_CA_SERVER_TLS_ENABLED=true - FABRIC_CA_SERVER_DEBUG=true networks: - $ 复制代码在 compose 下创建 docker-compose.yaml 文件,用于配置工程 docker 容器,写入 council 、 orderer 、 soft 、 web 的 TLS 服务配置: version: '2' networks: network: services: council.ifantasy.net: container_name: council.ifantasy.net extends: file: docker-base.yaml service: ca-base command: sh -c 'fabric-ca-server start -d -b ca-admin:ca-adminpw --port 7050' environment: - FABRIC_CA_SERVER_CSR_CN=council.ifantasy.net - FABRIC_CA_SERVER_CSR_HOSTS=council.ifantasy.net volumes: - $/council.ifantasy.net/ca:$/ca ports: - 7050:7050 orderer.ifantasy.net: container_name: orderer.ifantasy.net extends: file: docker-base.yaml service: ca-base command: sh -c 'fabric-ca-server start -d -b ca-admin:ca-adminpw --port 7050' environment: - FABRIC_CA_SERVER_CSR_CN=orderer.ifantasy.net - FABRIC_CA_SERVER_CSR_HOSTS=orderer.ifantasy.net volumes: - $/orderer.ifantasy.net/ca:$/ca ports: - 7150:7050 soft.ifantasy.net: container_name: soft.ifantasy.net extends: file: docker-base.yaml service: ca-base command: sh -c 'fabric-ca-server start -d -b ca-admin:ca-adminpw --port 7050' environment: - FABRIC_CA_SERVER_CSR_CN=soft.ifantasy.net - FABRIC_CA_SERVER_CSR_HOSTS=soft.ifantasy.net volumes: - $/soft.ifantasy.net/ca:$/ca ports: - 7250:7050 web.ifantasy.net: container_name: web.ifantasy.net extends: file: docker-base.yaml service: ca-base command: sh -c 'fabric-ca-server start -d -b ca-admin:ca-adminpw --port 7050' environment: - FABRIC_CA_SERVER_CSR_CN=web.ifantasy.net - FABRIC_CA_SERVER_CSR_HOSTS=web.ifantasy.net volumes: - $/web.ifantasy.net/ca:$/ca ports: - 7350:7050 复制代码启动各组织的 TLS 服务: source envpeer1soft docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d council.ifantasy.net orderer.ifantasy.net soft.ifantasy.net web.ifantasy.net 复制代码注册账户注册 council 组织账户。首先设置 council 的环境变量:export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/ca/admin 复制代码 然后使用 enroll 登录引导账户, 它会以 FABRIC_CA_CLIENT_TLS_CERTFILES 指向的 CA 服务器根证书加密通信,并将生成的身份证书保存在 FABRIC_CA_CLIENT_HOME 指向的工作目录下1:fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@council.ifantasy.net:7050 复制代码 注意: enroll 操作结果是保存账号的身份证书至指定目录下,以后就可以直接根据该目录下的证书来使用对应身份,跟传统 web 系统的登录操作类似所以被我称为登录,但实际上有所区别。 然后便可以 ca-admin 身份进行注册其它用户的操作:fabric-ca-client register -d --id.name orderer1 --id.secret orderer1 --id.type orderer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name peer1soft --id.secret peer1soft --id.type peer -u https://council.ifantasy.net:7050 fabric-ca-client register -d --id.name peer1web --id.secret peer1web --id.type peer -u https://council.ifantasy.net:7050 复制代码 council 为其它组织提供 TLS-CA 服务的具体实现就是为其它组织提供 council 可验证的合法账户,其他组织使用这些账户进行通信就是可信的。后面注册步骤与上面类似,故不再赘述。 注册 orderer 组织账户:export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/orderer.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/orderer.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@orderer.ifantasy.net:7150 fabric-ca-client register -d --id.name orderer1 --id.secret orderer1 --id.type orderer -u https://orderer.ifantasy.net:7150 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://orderer.ifantasy.net:7150 复制代码 注册 soft 组织账户:export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@soft.ifantasy.net:7250 fabric-ca-client register -d --id.name peer1 --id.secret peer1 --id.type peer -u https://soft.ifantasy.net:7250 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://soft.ifantasy.net:7250 复制代码 注册 web 组织账户:export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/ca/crypto/ca-cert.pem export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/web.ifantasy.net/ca/admin fabric-ca-client enroll -d -u https://ca-admin:ca-adminpw@web.ifantasy.net:7350 fabric-ca-client register -d --id.name peer1 --id.secret peer1 --id.type peer -u https://web.ifantasy.net:7350 fabric-ca-client register -d --id.name admin1 --id.secret admin1 --id.type admin -u https://web.ifantasy.net:7350 复制代码 构造组织成员证书在各组织下创建 assets 目录,用于储存本组织根证书和用于组间通信的 LTS-CA 根证书:mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/assets cp $LOCAL_CA_PATH/orderer.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/assets/tls-ca-cert.pem mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/assets cp $LOCAL_CA_PATH/soft.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/assets cp $LOCAL_CA_PATH/web.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem cp $LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem 复制代码 构造 orderer 组织成员证书。登录 orderer 管理员账户 admin1 :export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/orderer.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/orderer.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@orderer.ifantasy.net:7150 复制代码 注意:这里是登录上节我们注册的管理员账户而非启动 CA 服务时的引导账户,引导账户跟管理员账户的区别也是我至今难以理解的地方 以上命令成功后便可以看到 FABRIC_CA_CLIENT_HOME/FABRIC_CA_CLIENT_MSPDIR 目录下生成的证书文件。然后需要构造 admin1 的 msp 目录:mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/orderer.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/registers/admin1/msp/admincerts/cert.pem 复制代码 这里的操作仅仅是将 admin1 的签名证书复制到新建的 admincerts 文件夹下,这样做的原因是 Fabric 的 MSP 规范要求其下需有 admincerts 目录,否则后面操作组织 peer 节点时会报错,因此建议在所有联盟链网络服务节点的 msp 目录下添加 admincerts 证书。然后登录 orderer 的 orderer1 的组织内账户:export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/orderer.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://orderer1:orderer1@orderer.ifantasy.net:7150 mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/msp/admincerts cp $LOCAL_CA_PATH/orderer.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/msp/admincerts/cert.pem 复制代码 然后登录 orderer 的 orderer1 的组织间 TLS-CA 账户:export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/orderer.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://orderer1:orderer1@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts orderer1.orderer.ifantasy.net cp $LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/tls-msp/keystore/key.pem 复制代码 最后一步便是构造 orderer 的组织 MSP 目录2(MSP 目录说明可参考 MSP结构):mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/orderer.ifantasy.net/msp/users cp $LOCAL_CA_PATH/orderer.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/orderer.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/orderer.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/orderer.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/orderer.ifantasy.net/msp/config.yaml 复制代码 上面命令最后一行会在组织 msp 目录下添加节点组织单元配置文件 config.yaml ,其原理可以参考 节点组织单元和MSP ,如果缺少该文件或者文件内容错误,会报以下错误:loadLocalMSP -> Failed to setup local msp with config: administrators must be declared when no admin ou classification is set 复制代码 后面的流程跟这里类似,因此不再赘述。 构造 soft 组织成员证书: echo "Start Soft=============================" echo "Enroll Admin" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@soft.ifantasy.net:7250 mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/admincerts/cert.pem echo "Enroll Peer1" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://peer1:peer1@soft.ifantasy.net:7250 # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://peer1soft:peer1soft@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts peer1.soft.ifantasy.net cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/tls-msp/keystore/key.pem mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/msp/admincerts cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer1/msp/admincerts/cert.pem mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/msp/users cp $LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/soft.ifantasy.net/msp/config.yaml echo "End Soft=============================" 复制代码构造 web 组织成员证书: echo "Start Web=============================" echo "Enroll Admin" export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/web.ifantasy.net/registers/admin1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://admin1:admin1@web.ifantasy.net:7350 mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/admincerts cp $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/admincerts/cert.pem echo "Enroll Peer1" # for identity export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/web.ifantasy.net/registers/peer1 export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem export FABRIC_CA_CLIENT_MSPDIR=msp fabric-ca-client enroll -d -u https://peer1:peer1@web.ifantasy.net:7350 # for TLS export FABRIC_CA_CLIENT_MSPDIR=tls-msp export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem fabric-ca-client enroll -d -u https://peer1web:peer1web@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts peer1.web.ifantasy.net cp $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/tls-msp/keystore/*_sk $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/tls-msp/keystore/key.pem mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/msp/admincerts cp $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/web.ifantasy.net/registers/peer1/msp/admincerts/cert.pem mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/admincerts mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/cacerts mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/tlscacerts mkdir -p $LOCAL_CA_PATH/web.ifantasy.net/msp/users cp $LOCAL_CA_PATH/web.ifantasy.net/assets/ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/msp/cacerts/ cp $LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem $LOCAL_CA_PATH/web.ifantasy.net/msp/tlscacerts/ cp $LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/web.ifantasy.net/msp/admincerts/cert.pem cp $LOCAL_ROOT_PATH/config/config-msp.yaml $LOCAL_CA_PATH/web.ifantasy.net/msp/config.yaml echo "End Web=============================" 复制代码配置系统通道及测试通道在 config 目录下创建 configtx.yaml 配置文件,文件太长在此不做展示,可以在 FabricLearn 中查看,其中各项已加说明注释3。 通过 configtxgen 生成创世区块和测试通道: configtxgen -profile OrgsOrdererGenesis -outputBlock $LOCAL_ROOT_PATH/data/genesis.block -channelID syschannel configtxgen -profile OrgsChannel -outputCreateChannelTx $LOCAL_ROOT_PATH/data/mychannel.tx -channelID mychannel 复制代码 在 compose/docker-compose.yaml 文件中添加 peer 和 orderer 服务相关配置: peer1.soft.ifantasy.net: container_name: peer1.soft.ifantasy.net extends: file: docker-base.yaml service: peer-base environment: - CORE_PEER_ID=peer1.soft.ifantasy.net - CORE_PEER_ADDRESS=peer1.soft.ifantasy.net:7051 - CORE_PEER_LOCALMSPID=softMSP - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.soft.ifantasy.net:7051 volumes: - $/soft.ifantasy.net/registers/peer1:$/peer ports: - 7251:7051 peer1.web.ifantasy.net: container_name: peer1.web.ifantasy.net extends: file: docker-base.yaml service: peer-base environment: - CORE_PEER_ID=peer1.web.ifantasy.net - CORE_PEER_ADDRESS=peer1.web.ifantasy.net:7051 - CORE_PEER_LOCALMSPID=webMSP - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.web.ifantasy.net:7051 volumes: - $/web.ifantasy.net/registers/peer1:$/peer ports: - 7351:7051 orderer1.orderer.ifantasy.net: container_name: orderer1.orderer.ifantasy.net extends: file: docker-base.yaml service: orderer-base environment: - ORDERER_HOST=orderer1.orderer.ifantasy.net - ORDERER_GENERAL_LOCALMSPID=ordererMSP volumes: - $/orderer.ifantasy.net/registers/orderer1:$/orderer - $/data/genesis.block:$/orderer/genesis.block ports: - 7151:7777 复制代码 启动 peer 和 orderer 服务: docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d peer1.soft.ifantasy.net peer1.web.ifantasy.net orderer1.orderer.ifantasy.net 复制代码 此时我们已经启动了所有联盟链网络所需的容器如下: (base) root@DebianA:1_3Org2Peer1Orderer1TLS# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c59b88fa847 hyperledger/fabric-peer:2.4 "peer node start" 8 seconds ago Up 6 seconds 0.0.0.0:7251->7051/tcp peer1.soft.ifantasy.net 3906338f6861 hyperledger/fabric-peer:2.4 "peer node start" 8 seconds ago Up 6 seconds 0.0.0.0:7351->7051/tcp peer1.web.ifantasy.net 9f127a054343 hyperledger/fabric-orderer:2.4 "orderer" 8 seconds ago Up 6 seconds 7050/tcp, 0.0.0.0:7151->7777/tcp orderer1.orderer.ifantasy.net 949abd8f7070 hyperledger/fabric-ca:1.5 "sh -c 'fabric-ca-se…" About an hour ago Up About an hour 7054/tcp, 0.0.0.0:7150->7050/tcp orderer.ifantasy.net 011fe2b36c01 hyperledger/fabric-ca:1.5 "sh -c 'fabric-ca-se…" About an hour ago Up About an hour 0.0.0.0:7050->7050/tcp, 7054/tcp council.ifantasy.net 207879f5bb33 hyperledger/fabric-ca:1.5 "sh -c 'fabric-ca-se…" About an hour ago Up About an hour 7054/tcp, 0.0.0.0:7350->7050/tcp web.ifantasy.net d1850c86e096 hyperledger/fabric-ca:1.5 "sh -c 'fabric-ca-se…" About an hour ago Up About an hour 7054/tcp, 0.0.0.0:7250->7050/tcp soft.ifantasy.net 复制代码 补全根目录中 envpeer1soft 的环境变量: export LOCAL_ROOT_PATH=$PWD export LOCAL_CA_PATH=$LOCAL_ROOT_PATH/orgs export DOCKER_CA_PATH=/tmp export COMPOSE_PROJECT_NAME=fabriclearn export DOCKER_NETWORKS=network export FABRIC_BASE_VERSION=2.4 export FABRIC_CA_VERSION=1.5 echo "init terminal soft" export FABRIC_CFG_PATH=$LOCAL_ROOT_PATH/config export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="softMSP" export CORE_PEER_ADDRESS=peer1.soft.ifantasy.net:7251 export CORE_PEER_TLS_ROOTCERT_FILE=$LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem export CORE_PEER_MSPCONFIGPATH=$LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp export ORDERER_CA=$LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem 复制代码 复制 envpeer1soft 为 envpeer1web 作为 web 组织的环境变量: export LOCAL_ROOT_PATH=$PWD export LOCAL_CA_PATH=$LOCAL_ROOT_PATH/orgs export DOCKER_CA_PATH=/tmp export COMPOSE_PROJECT_NAME=fabriclearn export DOCKER_NETWORKS=network export FABRIC_BASE_VERSION=2.4 export FABRIC_CA_VERSION=1.5 echo "init terminal web" export FABRIC_CFG_PATH=$LOCAL_ROOT_PATH/config export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="webMSP" export CORE_PEER_ADDRESS=peer1.web.ifantasy.net:7351 export CORE_PEER_TLS_ROOTCERT_FILE=$LOCAL_CA_PATH/web.ifantasy.net/assets/tls-ca-cert.pem export CORE_PEER_MSPCONFIGPATH=$LOCAL_CA_PATH/web.ifantasy.net/registers/admin1/msp export ORDERER_CA=$LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem 复制代码 通过 soft 创建 mychannel 测试通道的创世区块: source envpeer1soft peer channel create -c mychannel -f $LOCAL_ROOT_PATH/data/mychannel.tx -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --outputBlock $LOCAL_ROOT_PATH/data/mychannel.block 复制代码 如果出现以下错误,请检查环境变量 FABRIC_CFG_PATH 所指目录是否包含 core.yaml 配置文件: InitCmd -> ERRO 001 Fatal error when initializing core config : Could not find config file. Please make sure that FABRIC_CFG_PATH is set to a path which contains core.yaml 复制代码 如果出现以下错误,请检查环境变量 CORE_PEER_TLS_ROOTCERT_FILE 是否只想 TLS-CA 根证书、 环境变量 ORDERER_CA 是否指向 orderer1 的 TLS-CA 根证书: ERRO 002 Client TLS handshake failed after 1.116738ms with error: x509: certificate is not valid for any names, but wanted to match localhost remoteaddress=127.0.0.1:7151 复制代码 将 mychannel 创世区块复制到其成员组织目录: cp $LOCAL_ROOT_PATH/data/mychannel.block $LOCAL_CA_PATH/soft.ifantasy.net/assets/ cp $LOCAL_ROOT_PATH/data/mychannel.block $LOCAL_CA_PATH/web.ifantasy.net/assets/ 复制代码 分别通过成员组织的 cli 加入通道: source envpeer1soft peer channel join -b $LOCAL_CA_PATH/soft.ifantasy.net/assets/mychannel.block source envpeer1web peer channel join -b $LOCAL_CA_PATH/web.ifantasy.net/assets/mychannel.block 复制代码 如果出现以下错误,请检查环境变量 CORE_PEER_ADDRESS 是否与对应组织的 docker 配置中的 peer 地址和端口是否一致: Client TLS handshake failed after 1.554615ms with error: x509: certificate is valid for peer1soft, peer1.soft.ifantasy.net, not soft.ifantasy.net remoteaddress=127.0.0.1:7251 复制代码 成功后,便可通过 peer channel getinfo -c mychannel 查看已加入通道: 安装/测试链码soft 打包并安装链码: source envpeer1soft peer lifecycle chaincode package basic.tar.gz --path asset-transfer-basic/chaincode-go --label basic_1 peer lifecycle chaincode install basic.tar.gz 复制代码 安装成功后,可使用 peer lifecycle chaincode queryinstalled 命令查询已安装链码信息(其中 Package ID 需要记下来): (base) root@DebianA:1_3Org2Peer1Orderer1TLS# peer lifecycle chaincode queryinstalled Installed chaincodes on peer: Package ID: basic_1:06613e463ef6694805dd896ca79634a2de36fdf019fa7976467e6e632104d718, Label: basic_1 复制代码 web 安装链码: source envpeer1web peer lifecycle chaincode install basic.tar.gz 复制代码 设置链码 ID 环境变量: export CHAINCODE_ID=basic_1:06613e463ef6694805dd896ca79634a2de36fdf019fa7976467e6e632104d718 复制代码 soft 和 web 批准链码: source envpeer1soft peer lifecycle chaincode approveformyorg -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --channelID mychannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_ID source envpeer1web peer lifecycle chaincode approveformyorg -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --channelID mychannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_ID 复制代码 批准后,可使用以下命令查看本组织的链码批准情况: (base) root@DebianA:1_3Org2Peer1Orderer1TLS# peer lifecycle chaincode queryapproved -C mychannel -n basic --sequence 1 Approved chaincode definition for chaincode 'basic' on channel 'mychannel': sequence: 1, version: 1.0, init-required: true, package-id: basic_1:06613e463ef6694805dd896ca79634a2de36fdf019fa7976467e6e632104d718, endorsement plugin: escc, validation plugin: vscc 复制代码 也可使用以下命令查看指定链码是否已准备好被提交: (base) root@DebianA:1_3Org2Peer1Orderer1TLS# peer lifecycle chaincode checkcommitreadiness -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --channelID mychannel --name basic --version 1.0 --sequence 1 --init-required Chaincode definition for chaincode 'basic', version '1.0', sequence '1' on channel 'mychannel' approval status by org: softMSP: true webMSP: true 复制代码 使用任意合法组织提交链码: source envpeer1soft peer lifecycle chaincode commit -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --channelID mychannel --name basic --init-required --version 1.0 --sequence 1 --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.web.ifantasy.net:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE 复制代码 可使用以下命令查看链码提交情况: peer lifecycle chaincode querycommitted --channelID mychannel --name basic -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE 复制代码 初始化链码(非必须): peer chaincode invoke --isInit -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --channelID mychannel --name basic --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.web.ifantasy.net:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '' 复制代码 其中带 --isInit 参数表示当前调用为链码初始化调用,在不需要初始化的链码中可以省略此步骤。如果出现下列错误,请检查: 整个 docker 内的 networks 的值必须为 $ 环境变量中 COMPOSE_PROJECT_NAME 和 DOCKER_NETWORKS 是否被赋值、 docker-base.yaml 中 CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE 的值必须是 $_$ error starting container: error starting container: API error (404): network hyperledger_fabric-ca not found"复制代码 调用链码: peer chaincode invoke -o orderer1.orderer.ifantasy.net:7151 --tls --cafile $ORDERER_CA --channelID mychannel --name basic --peerAddresses peer1.soft.ifantasy.net:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.web.ifantasy.net:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '' 复制代码 如果出现下列错误,请检查 approveformyorg 的链码包 ID 与 install 的链码包 ID 必须一致: endorsement failure during invoke. response: status:500 message:"make sure the chaincode fabcar has been successfully defined on channel mychannel and try again: chaincode definition for 'basic' exists, but chaincode is not installed" 复制代码 调用成功后可在控制台查看链码输出: 2022-04-05 14:25:16.529 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"[,,,,,]" 复制代码 参考FootnotesNisen. Fabric账号、cryptogen和fabirc-ca. github.io. [2018-06-19] ↩ Hyperledger. 成员服务提供者 (MSP). hyperledger-fabric.readthedocs.io. [2021-05-22] ↩ hubwiz.com. configtx.yaml中文详解. hubwiz.com. [2019-04-24 ] ↩
2023年03月22日
6 阅读
0 评论
0 点赞
2023-03-22
融资周报 | 公开融资事件22起;离岸人民币稳定币项目CNHC完成1000万美元A+轮融资,KuCoin Ventures领投
本期看点据 六币News 不完全统计,上周(3.12-3.19)全球区块链有22起投融资事件,融资总规模约1.1亿美元,与前一周相比均有所减少,概览如下:DeFi赛道热度与前几周基本持平,公布了3起投融资事件,其中与离岸人民币 1:1 挂钩的 CNHC 稳定币的发行人 CNHC Group 筹集了 1000 万美元的资金。KuCoin Ventures 领投; 链游方面表现稳定,公布了3起事件,其中Web3游戏平台Moxy宣布已完成超1000万美元融资,Shima Capital、Polygon、MetaTope和GSR等投资方参投; NFT和元宇宙领域有所回温,公布了5起融资,其中NFT 投资组合管理和社交平台 Metalink 宣布了之前未公开的 600 万美元种子轮融资,投资者包括Gary Vaynerchuk等; 基础设施与工具赛道热度大幅缩减,公布了5起事件,其中加拿大区块链基础设施TeleportDAO宣布完成250万美元种子轮融资,AppWorks和DefinanceX领投; 其他Web3/加密相关项目方面,公布了3起事件,其中区块链创作者互动平台GigaStar宣布完成480万美元种子轮融资,DV Crypto VC等参投; 中心化金融领域公布了3起投融资事件,专注于为Web3平台提供嵌入式支付服务的数字银行及支付公司Ibanera完成1850万美元融资,欧洲支付公司Emerchantpay Limited参投。 下面我们一起来全盘回顾上周的投融资事件。DeFi离岸人民币稳定币项目CNHC完成1000万美元A+轮融资,KuCoin Ventures领投与离岸人民币 1:1 挂钩的 CNHC 稳定币的发行人 CNHC Group 筹集了 1000 万美元的资金。KuCoin Ventures 领投,其他投资者包括 Circle 和 IDG Capital。有了新的资金,CNHC 旨在扩大其稳定币的采用,尤其是在亚太地区。为此,该公司正将总部从开曼群岛迁至香港。CNHC 还计划通过招聘跨职能部门(包括运营、合规和业务发展)来增加其约 60 人的团队。去中心化交易所Alex完成250万美元战略轮融资比特币去中心化交易所 Alex 在战略轮融资中筹集了 250 万美元,投资者包括 Trust Machines 和 Gossamer Capital等。该交易所由两位前华尔街宽客 Chiente Hsu 和 Rachel Yu 共同创立。此次筹集的资金将用于继续在比特币生态系统中建立去中心化金融并扩大用户社区。除了去中心化交易所,Alex 还提供质押、收益农业和启动板服务。Composable Corp完成120万美元种子轮融资,Ashbury Ventures等参投DeFi策略协议Blueberry Protocol背后开发公司Composable Corp完成120万美元种子轮融资,Ashbury Ventures、Alchemix、Multisig Ventures、Pirata Capital等参投。Composable主要成员称,将使用该笔资金发展团队和基础设施。链游Web3游戏平台Moxy完成超1000万美元融资,Shima Capital等参投Web3游戏平台Moxy宣布已完成超1000万美元融资,Shima Capital、Polygon、MetaTope和GSR等投资方参投。Moxy基于FLOW区块链驱动的Web3游戏平台通过去中心化、安全且稳定的方式帮助包括电竞选手和其他玩家参与游戏并获得激励,同时还能让游戏开发者无缝创建基于游戏资产的NFT以推动电竞大众化,此外Moxy还使用统一数字钱包参与游戏生态让玩家存储加密货币和NFT,据悉Nolan Bushnell(Atari创始人)、Lawrence Siegel(世嘉欧洲总裁)和Tony Bickley(世嘉欧洲游戏主管)已加入Moxy团队。GameFi孵化及发行平台TripleC完成新一轮融资,具体融资金额暂未披露GameFi孵化及发行平台TripleC宣布完成新一轮融资,具体融资金额暂未披露。据悉,TripleC旨在孵化和发布Web 3游戏,通过一个集成游戏、钱包、NFT交易市场、SBT的一站式平台为玩家提供支持并以数字资产的形式奖励玩家。TripleC已与Century Games和Crystal Labs等世界知名游戏开发公司签署合作协议,还与日本手冢社、东京影业等知名文化娱乐公司达成战略合作。游戏公司Bravo Ready宣布获得Aptos Labs的战略投资游戏开发公司Bravo Ready 宣布获得 Aptos Labs 的战略投资,该投资将用于推出两个工作室之间的独家游戏合作“Aptos Arena”,以及未来 Aptos 与 BR1: INFINITE 的集成。NFT&元宇宙数字时尚公司DressX获1500万美元A轮融资时尚科技公司 DressX 筹集了 1500 万美元的 A 轮融资,由总部位于柏林的加密货币风险投资公司 Greenfield 领投。该轮融资于 2 月底结束,参与方还包括 Slow Ventures、The Artemis Fund、Red Dao 和 Warner Music等。 虽然其大部分数字时尚产品都是链下的,但该公司已开始通过建立自己的 NFT 市场并通过与交易所 Crypto.com 合作来深入研究 web3 。NFT社交平台Metalink完成600万美元种子轮融资,并推出其移动应用程序NFT 投资组合管理和社交平台 Metalink 宣布了之前未公开的 600 万美元种子轮融资,投资者包括 Guy Oseary、Gary Vaynerchuk、MoonPay首席执行官 Ivan Soto-Wright、The Sandbox 创始人 Sebastien Borget、前 Coinbase 首席技术官 Balaji Srinivasan、DJ Justin Blau、Social Capital、Arrington Capital 和 Sound Ventures等。韩国“虚拟K-pop”元宇宙公司Afun Interactive完成530万美元A轮过桥融资韩国“虚拟K-pop”元宇宙公司Afun Interactive宣布完成70亿韩元(约合530万美元)A轮过桥融资,Shinhan Asset Management参投,该公司在此前的A轮融资中募集到100亿韩元(约合760万美元),当时投资方包括CJ Investment、Company K Partners和CJ ENM。Afun Interactive目标是成为韩国头部元宇宙公司,其首席执行官Dokyun Kwon对虚拟娱乐和元宇宙市场充满热情,希望利用3D内容制作技术构建角色IP化的“虚拟K-pop”,目前已推出了“Apoki”和“Lesha”等虚拟明星。ShowMeta元宇宙平台完成84万美元融资ShowMeta元宇宙平台在社交媒体平台宣布已完成84万美元的首轮融资。ShowMeta元宇宙平台将进入最后一轮测试阶段,以确保平台的可靠性和性能。参与测试的用户将会获得10万枚代币奖励。据悉,ShowMeta元宇宙平台旨在为用户提供一个无缝的游戏世界。沙特阿拉伯NFT市场Nuqtah完成种子轮融资,Animoca Brands领投沙特阿拉伯首个NFT市场Nuqtah宣布完成种子轮融资,Animoca Brands领投,Polygon和当地一批投资者参投,但具体融资金额暂未对外披露。该公司将利用新资金在未来12个月内扩大其在产品开发、营销、人才招聘和其他业务领域的业务。Nuqtah是第一个获得沙特通信和信息技术部和投资部许可的NFT市场,旨在帮助个人和企业轻松构建、部署和货币化NFT而无需浏览复杂的区块链基础设施,同时为NFT创建者、企业和用户赋权,以释放Web3市场并为该地区提供的新机会。基础设施&工具自托管加密钱包Soul Wallet完成300万美元种子轮融资自托管加密钱包 Soul Wallet 完成300万美元种子轮融资,投资者未披露。Soul Wallet 创始人 Zeng Jiajun 曾在字节跳动和美团担任产品经理。Zeng 表示,Soul Wallet 目前正在进行内部测试,并计划在经过一系列严格审核后于第三季度或第四季度推出。该团队有十几个人,遍及美国、日本、泰国和中国。基础设施平台TeleportDAO完成250万美元种子轮融资,AppWorks与DefinanceX领投加拿大区块链基础设施TeleportDAO宣布完成250万美元种子轮融资,AppWorks和DefinanceX领投,Quantstamp、Coinlist、Candaq Fintech Group、SNZ Holding Limited和Gate Labs参投。本轮融资将用于产品开发和扩大团队。TeleportDAO成立于2022年2月,是一个将区块链连接在一起的去中心化基础设施,帮助开发人员构建跨链应用程序。目前,其已经在Polygon上创建了一个完全去中心化的比特币包裹器teleBTC以及交易平台TeleSwap。区块链基础设施开发商SmoothLabs完成200万美元种子轮融资,NGC Ventures领投主打并行交易的区块链基础设施开发商SmoothLabs宣布完成200万美元种子轮融资,由NGC Ventures领投,ArkStream Capital、Cogitent Ventures、Token Metrics、Alves Ventures等参投。据悉,Smooth是首个并行交易中间件,兼容EVM,为现有的Layer2和AppChain提供高性能交易框架,并为后续的区块链开发提供通用的交易模式。Smooth表示这笔融资资金将被用来技术研发和扩大其 12 名成员的团队。该项目预计在第三季度上线测试网。Staging Labs完成110万美元Pre种子轮融资,NGC Ventures等参投加密交易安全解决方案提供商Staging Labs宣布完成110万美元Pre种子轮融资,The General Partnership、Flourish Ventures、NGC Ventures、AlphaGrep、Gaingels、Kleiner Perkins、Greylock,以及ConsensSys、Coinbase、Anchorage Digital、Chainalysis、Quicknode、Merkle Science等参投,该公司希望在加密世界中建立传统金融领域里一样的监管和系统保护以抵御欺诈和诈骗。A16z投资加密钱包基础设施初创公司Capsule加密钱包基础设施初创公司Capsule完成未知金额融资,Andreessen Horowitz(通过其加速器Crypto Startup School)和Geometry共同领投, Spice Capital、Anchorage联合创始人 Diogo Monica和Nathan McCauley、Celo联合创始人Rene Reinsberg和Marek Olszewski以及Sommelier Finance联合创始人Zaki Manian等参投。a16z的CSS加速器计划通常会向参与的初创公司投资50万美元,以换取7%的股权。其他区块链创作者互动平台GigaStar完成480万美元种子轮融资,DV Crypto VC等参投区块链创作者互动平台GigaStar宣布完成480万美元种子轮融资,DV Crypto VC、Tomsic Holdings、Nameless Ventures和Belvedere Strategic Capital参投。GigaStar通过利用区块链技术让创作者获得更具创新的互动方式,包括粉丝激励、潜在长期版税等,目前主要支持YouTube创作者并通过推出“频道收入代币 (CRT)”帮助频道获得收入,以为新一代Web3 YouTube创作者赋能。区块链保险科技初创公司Vitraya完成410万美元A轮融资,Xceedance参投区块链保险科技初创公司Vitraya宣布完成410万美元A轮融资,Xceedance和一家未透露名称的投资财团参投。Vitraya主要利用人工智能和区块链技术为保险公司实现支付完整性、医疗程序和福利管理的自动化服务,帮助医院/医疗保健服务提供商、以及为消费者和企业提供健康保险产品的保险公司实现实时支付和理赔。Web3人脉网络平台Entre完成160万美元种子轮融资,Octane Fund领投以社区为中心的Web3人脉网络平台Entre宣布完成160万美元种子轮融资,Octane Fund领投,Service Provider Capital、CreatorLed Ventures、Kube VC、Umami Capital、Dharmesh Shah(Hubspot首席技术官)和其他一些天使投资人参投。中心化金融支付巨头Stripe以500亿美元估值完成超65亿美元融资,较2021年估值下降47%支付巨头Stripe以500亿美元的估值完成超65亿美元I轮融资,这比其2021年950亿美元的估值低了约47%。主要投资者包括现有Stripe股东Andreessen Horowitz、Baillie Gifford、Founders Fund、General Catalyst、MSD Partners和Thrive Capital,以及包括GIC、高盛资产和财富管理以及淡马锡在内的新投资者。高盛担任新一轮融资的独家配售代理,摩根大通担任财务顾问。募集的资金将用于为现任和前任员工提供流动性,并解决与股权奖励相关的员工预扣税义务,导致Stripe股票的退役,这将抵消向第一轮投资者发行的新股。Stripe不需要这笔资金来运营业务。Web3数字银行及支付公司Ibanera完成1850万美元融资,Emerchantpay Limited参投专注于为Web3平台提供嵌入式支付服务的数字银行及支付公司Ibanera宣布以1.95亿美元的贴现估值完成1850万美元融资,欧洲支付公司Emerchantpay Limited参投。Ibanera的支付架构可以有效支持下一代基于分布式账本技术的金融业务,主要覆盖跨境支付、货币兑换、手机银行和商户服务,为从事数字资产和NFT业务的企业提供安全支撑,同时也消除了Web3复杂性。据悉,Ibanera于去年四季度推出了数字银行和支付平台,可用于支持账户资金、支付分配和收款等银行业务。元宇宙支付平台Tilia获J.P. Morgan Payments等的投资,其总融资额已达2200万美元元宇宙支付平台 Tilia 完成一笔战略融资,J.P. Morgan Payments、韩国加密货币交易所 Upbit 运营商 Dunamu 等参投。自 2022 年从创建者 Linden Lab 分拆以来,Tilia 的融资总额达到 2200 万美元。Tilia 并未透露此次具体融资数据。Tilia 正在与 J.P Morgan Payments 合作,以增强其整个处理平台的能力,包括提供更多的支付和支付方式、扩展支付货币和支持服务。机构基金Web3娱乐项目Hello Pets推出600万美元元宇宙基金,并购入10枚BAYCWeb3娱乐项目Hello Pets宣布推出600万美元元宇宙扩展基金,用于开发和强化元宇宙生态系统。据悉Hello Pet透露已购入10枚“无聊猿”BAYC,分别是:BAYC #6966、BAYC #6280、BAYC #5245、BAYC #4421、BAYC #5914、BAYC #7350、BAYC #2045、BAYC #9538、BAYC #1522、BAYC #6933,这些NFT未来将会融入到电影、元宇宙、游戏、AR/VR 应用程序、乐高玩具、时尚等产品和服务中。Ark Invest旗下新私人加密基金募资超过1600万美元根据周三提交给美国证券交易委员会(SEC)的文件,Cathie Wood的Ark Invest旗下一只新加密基金募资超过1600万美元。该基金分美国和开曼群岛两个版本,其中美国基金从9位投资者手中筹集了7,281,630美元,而开曼群岛基金从一位投资者手中筹集了8,993,330美元。这两只基金均于3月1日开放投资,没有明确的募资目标,属于私人基金,只对少数投资者开放。Ripple战略投资风投基金Blockchain Founders FundRipple宣布对总部位于新加坡的早期风险投资基金Blockchain Founders Fund(BFF)进行战略投资,具体金额未披露。Blockchain Founders Fund将使用这笔资金支持有潜力的早期公司。
2023年03月22日
6 阅读
0 评论
0 点赞
1
...
81
82
83
...
109