gx-trn-beg-c_GX的先驱指南-IPFS上的分散依赖管理_dfsgwe1231的博客-程序员宅基地

技术标签: python  java  linux  编程语言  大数据  

gx-trn-beg-c

对于当今的开发人员而言,分散式软件包管理是工具开发的一个令人兴奋的领域。 分散式软件包管理器有可能从现代软件库的互连网络中消除集中式故障点。 他们为开发团队提供了一种简单明了的方法,以确保其内部代码网络始终可用,同时确保整个Internet的冗余。 分散的程序包管理器可以使我们的代码(现代社会最有价值的输出之一)更加抵制篡改,检查和操纵。

也就是说,分散式软件包管理仍不完整。 在将我们的代码发布到围绕数字信息不变性的网络中时,有许多问题需要解决,其中随时可能存在无限数量的信息副本。 没有中央机构,他们需要新的解决方案来发现,删除信息(例如,出版商不拥有的内容),纠纷和潜在的不良行为者。 这些问题不仅由分散的软件包管理者共享,而且通常由分散的网络共享,因此已经提出了一些解决方案,并且正在积极开发许多其他解决方案。 就是说,在使用任何分散式软件包管理器之前,了解您的风险和责任很重要。

我已经对去中心化源代码和网络依赖关系时所面临的承诺(以及一些陷阱)进行了更完整的讨论。 如果您不熟悉该主题,强烈建议您在阅读本教程之前先阅读它。 您可以在此处找到面向开源未来的分散式代码分发。

因此,这里简要介绍了使用分散式软件包管理器GX (特别是Golang实现, gx-go )分发代码并管理基于IPFS的代码依赖性。 开始之前的最后一件事是GX开发人员在自述文件中所说的内容,

gx是 Alpha质量 。 它还不是很完美,但是事实证明它足够可靠,可以管理 go-ipfs中的依赖关系,并为开拓性开发人员和早期用户准备尝试和探索。

GX和gx-go简介

gx-go和gx-js软件包管理器都使用了GX库的核心功能。 他们共同分享的基本原则是,

  1. 您发布的代码版本由包含的代码的不可变哈希值引用。
  2. 您链接到代码中的依赖项链接到那些不可变的哈希,以查找和检索代码,并确保您使用的是您期望的版本。
  3. 不变的哈希是IPFS上发布的代码可用的地址。

这是什么意思? 好吧,首先,它不是使用语义版本控制作为对特定代码发布的全局引用,而是使用代码本身的指纹(哈希)。 GX还实现了哈希到语义版本的辅助映射,这主要是为了改善人类与代码的交互(例如,可读性)。 这些哈希成为IPFS中使用的内容寻址系统的一部分。

如果您不熟悉IPFS,则可以通过一些很棒的概述来说明系统是什么, 系统 如何工作以及如何 GX 之外使用它 。 要了解的是,它是一组技术和协议,使任何用户都可以在分散的计算机网络上分发媒体或数据。 对于GX用户,请输入他们的代码。 只要有人分发您要查找的媒体,就可以使用IPFS通过网络检索该数据。

对于GX,此分发模型意味着,如果要在系统上发布代码,则需要首先使其在IPFS网络上可用。 尽管您可能是第一个托管该数据的人,但是一旦其他人开始使用它,则很可能很快就会从其他节点上获得这些数据。 纺织品和其他GX用户经常镜像他们使用的代码,从而增加了网络的冗余性和速度。 例如,在Textile Photos Go库中,我们有一个团队IPFS节点,我们可以在其中固定我们依赖于GX的所有依赖项。

好的,那是基本机制。 让我们尝试使用它。

安装GX和gx-go

下两个部分(分发和依赖管理)都需要此简单步骤。 让GX和gx-go在您的系统上运行,只需运行以下两个命令。

go get -u github.com/whyrusleeping/gx
go get -u github.com/whyrusleeping/gx-go

只要您将Go根目录和/bin正确地添加到path ,以上内容都应该使GX命令行工具可用。 如果上一行对您没有意义,那么在继续此处之前,有一些关于 Go 入门的教程可能会很有用。

在GX上共享代码

我们或多或少发现GX,因为它是IPFS相关项目中使用的软件包管理器。 但是使用它使我们真正考虑了上面提到的所有好处。 GX最初是为了支持gx-go而编写的,但也有gx-js ,并且原始的GX代码已准备好以任何语言分叉给程序包管理器。 它的可扩展性足以使我们思考IPFS上的移动应用程序商店的未来会是什么样子……不过我们会将其保存一天。 在下面的博客文章中,让我们逐步介绍在自己的项目中使用gx-go的基础知识。

在Go项目中设置GX

在Go项目的文件夹内,您只需在终端中运行以下命令,

gx init --lang=go

运行上述操作将向您的文件夹中添加一个package.json文件,其中包含一些与GX一起使用的必要位。 如果您的项目由于其他原因已经有了package.json文件,则会添加重要的位。 这是GX存储在package.json文件中的信息的概述。

您的package.json将列出您在此项目中使用的GX版本:

"gxVersion": "0.12.1",

同样从package.json ,GX添加导入重写路径。 这将指定如何用用户代码重写import语句(与始终显示非人类可读的哈希相反)。 这是我的样子,从我的Go路径中自动检测到。

"gx": {
    
"dvcsimport": "github.com/textileio/gx-demo"
}

接下来, package.json包含helper命令,该命令稍后将告诉GX如何为您处理新版本。

"releaseCmd": "git commit -a -m \"gx publish $VERSION\""

而已。 现在,您的代码已准备好开始在GX上发布。 让我们尝试在GX上发布代码的版本。 为此,我们可以使用GX提交代码,该代码将运行上面的releaseCmd脚本。

gx release 0.0.1-dev
Error: ipfs daemon isn't running

现在...您可能已经击中了第一个陷阱。 就像我在介绍中所说的那样,GX使用IPFS分发代码,这意味着您需要在系统上运行IPFS守护程序。 我不会在这里逐步完成安装步骤 ,也不会介绍启动和运行守护程序所需的单行代码 。 但是一旦完成,您应该可以再次运行gx release 0.0.1-dev并获得如下输出:

gx release 0.0.1-dev
package gx-demo published with hash: QmZFb51F1rJcHy9UUWWgPvwJAMorMgdzw2a52y2xgjVZJu

现在,任何人都应该能够通过GX或直接通过IPFS(甚至是网关)访问您的代码。

您可能已经注意到,当您运行gx release ,创建了一个新文件.gx/lastpubver 。 该文件包含语义版本号到IPFS哈希的映射。 您应该将此文件夹包括在git历史记录中,因为它可以在以后的任何时候将代码链接到发行版。 与哈希不同,不能保证语义版本是不可变的。 即使在GX中,您也可以使用一组全新的代码重新发布相同的语义版本,从而获得新的哈希值。

在GX上发布新版本

好的,您已经遍历并更改了代码,现在可以发布新版本了。 您现在有两个选择。 GX此处没有太多规则,因此从技术上讲,您只需运行gx release 0.0.1-dev再次重新发布相同的版本号。 但是您更有可能想要发布下一个版本,因此只需运行,

gx release 0.0.1
package gx-demo published with hash: QmcUaXVES69qZEhV8tdUbhYtVBkbGU7b9h7bpvAo6xnvC9
[master 6f1a98f] gx publish 0.0.1
2 files changed, 2 insertions(+), 2 deletions(-)

您会注意到您的.gx/lastpubver已更新,现在可以与网络共享新的哈希值。

从GX安装依赖项

如果要编写可抵抗集中式服务脱机,更改路线图或被阻止的源代码,则可能要使用GX来管理依赖项。 您不必一定要在GX上发布项目才能以这种方式使用GX,并且IPFS上不是每个库都可用,但是希望在未来的几个月中会有越来越多的库。

因此,让我们来看看。

您可以做的第一件事是导入新的依赖项。 您需要具有GX的目标哈希才能执行任何操作。 好的,这是一个开源项目,我们可以使用https://github.com/mr-tron/base58 。 这是一个简单base58库,可以在Go base58 strings转换进出base58 。 因此,如果您知道要查找的内容,则会注意到该存储库不包含任何.gx/pubver文件。 因此,我们有两种选择:

  • 我们可以使用上一节中的步骤将GX添加到项目中,并以这种方式获取哈希。 之后,我们可以使用并共享这种依赖性,并且可以通过将源固定在IPFS节点上来帮助网络。
  • 我们可以说服所有者自己做。

让我们轻松起来,已经有人在这个项目上走了第一步。 分叉原始的base58项目,并在此处发布带有GX版本的fork, https://github.com/gxed/base58 。 因此,现在我们可以使用发布的哈希值尝试并安装导入。

gx import QmWFAMPqsEyUX7gDUsRVmMWz59FxSpJ1b2v6bJ1yYzo7jY
update imports of github.com/mr-tron/base58 to the newly imported package? [y/N]

通过 对提示 回答“ yes ,您将提示GX重写该库的导入,以使用GX提供的库。 因此在这种情况下import github.com/mr-tron/base58看起来更像是import gx/ipfs/QmWFAMPqsEyUX7gDUsRVmMWz59FxSpJ1b2v6bJ1yYzo7jY/go-base58-fast/base58 ,建议您不要 其导入内容重写后发布到GX。 相反,让它由GX下游处理。

GX将使用您的package.json文件来跟踪这些依赖关系,并处理将来的重写/取消重写。 您可以在gxDependencies部分中找到GX托管依赖项的列表,该列表如下所示:

"gxDependencies": [
{
"author": "mr-tron",
"hash": "QmWFAMPqsEyUX7gDUsRVmMWz59FxSpJ1b2v6bJ1yYzo7jY",
"name": "go-base58-fast",
"version": "0.1.1"
}
]

立即开始使用GX!

就是这样,只需执行几个命令,您就可以启动并运行...但是...哦,等等。 您可能会遇到一些有关项目可用性的障碍。 在Textile ,我们在代码上进行协作,并且每个人都可以更新依赖关系。 这意味着,如果我添加一个依赖项,并且是第一个固定源代码的IPFS对等设备,那么我的任何协作者在尝试安装它时都可能遇到障碍,并且代码不可用。 GX尽力而为,但有时仍然存在问题。 为了解决我们团队中的这一问题,我们一直将所有GX依赖项固定到共享IPFS服务器上。

通过固定代码,我们的工作将取决于我们,同时也使网络的冗余性和可用性更好。 您应该努力:)

如果您对我们的更多开发工作感兴趣,请查看我们的Textile-go库或GitHub上的Textile -mobile库。 如果您对IPFS网络上的其他想法感兴趣,请查看我们的计划,以将下一个1,000,000个对等方添加到网络中 。 当然,如果您只是想在手机上运行IPFS,存储和保存照片或启用对等共享,请上清单试试我们的移动应用程序

翻译自: https://hackernoon.com/the-pioneers-guide-to-gx-decentralized-dependency-management-on-ipfs-90064858f4c2

gx-trn-beg-c

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dfsgwe1231/article/details/107269017

智能推荐

综合布线_weixin_33686714的博客-程序员宅基地

水平线缆长度的计算按如下公式:c=[0.55(f+n)+6]*n(m)式中:c―每个楼层的用线量 f-最远的信息插座(io)离配线间的距离 n-最近的信息插座(io)离配线间的距离 n-为每层楼的信息插座(io)的数量(f+n)也可称为平均距离不是这行的,知道的不多,和楼主一起了解下了。综合布线...

Vmware workstation虚拟机软件中安装优麒麟系统全过程记录_vmware添加麒麟ios镜像-程序员宅基地

工具:Vmware Workstation 15主机操作系统:win10 intel芯片准备文件:优麒麟系统iso文件 从优麒麟官方地址https://www.ubuntukylin.com/下载到 适用于对应环境的镜像文件:ubuntukylin-20.04-pro-amd64.iso步骤1:创建新的虚拟机,选择典型,然后点击下一步:步骤2:在新建虚拟机向导里,选择【稍后安装操作系统】,点击下一步:步骤3:选择客户机操作系统时选【Linux】,因为优麒麟是Ubuntu..._vmware添加麒麟ios镜像

windows系统下编写的sh脚本在linux上运行报错解决_shuimuwenwen的博客-程序员宅基地

windows系统下编写的sh脚本在linux上运行报错解决问题描述:Windows系统下编写的.sh文件在上传到linux服务器上运行时,出现如下错误:问题原因:doc下的文本格式和unix格式有所不同。window文本文件在linux系统下每一行后都有’^M’字符。问题解决:1、 vim xxxx.sh2、:set fileformat=unix3、:wq...

PHP打印log日志文件,存储数据到指定文件中_php打印日志到指定文件_star_xing123的博客-程序员宅基地

在项目开发中,作为一个后端开发人员肯定是要经常观察日志等记录来查找开发或上线的各种bug分享一个打印日志记录的方法/** * [errorLog 打印错误日志记录] * @param [type] $message [打印日志记录] * @param [type] $file [日志文件名] * @return [type] [description]..._php打印日志到指定文件

spring动态数据源实现读写分离_动态数据源读写分离_一个写bug的程序员的博客-程序员宅基地

一、实现方式方式读写分离要做的事情就是对于一条Sql语句,该去那个数据库执行;至于谁来做这件时间,无非有两种方式中间件:我们可以使用中间来帮助我们路由这些SQL语句,你如说使用MyCat,MyCat启动以后就好像启动可以一个数据库一样,但是他不做数据库的的事情,他负责将不同的SQL语句发送到不同的数据库去执行;程序自己做:就是在程序执行某个方法的时候,通过切面的方式,进行修改这个方法所需要..._动态数据源读写分离

东华复试OJ- 42 小数第n位_东华oj 小数第n位_Coder_Haduo丶的博客-程序员宅基地

作者: Turbo时间限制: 1S章节: 基本练习(循环)问题描述 :我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。输入说明 :一行,三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<..._东华oj 小数第n位

随便推点

Android 高德的路线规划一个小坑_androidzmm的博客-程序员宅基地

最近用到了高德地图的路线规划。。这个时候。。发现了个小问题。就是,起点和终点之间的距离过长时,骑行的路线规划,,就会很长时间,甚至规划不出来。。。造成这个问题的原因就是之间的距离过长了,,用骑行的路线规划不合适,我也没仔细找这个距离具体是多少。。。如果遇到这个问题,你可以先计算下两点之间的距离。,然后如果大于一个距离,就把路线规划换成驾车的路线规划。 LatLng latLng=new LatLng

Spark—三大数据结构之广播变量_这事儿就很秃然的博客-程序员宅基地

Spark—三大数据结构之广播变量本文记录了Spark三大数据结构中广播变量的相关知识文章目录Spark—三大数据结构之广播变量前言1、实现原理2、广播变量的使用3. 为什么使用广播变量总结前言Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于处理不同的应用场景。三大数据结构分别是:RDD : 弹性分布式数据集累加器:分布式共享只写变量广播变量:分布式共享只读变量提示:以下是本篇文章正文内容1、实现原理广播变量用来高效分发较大的对象。向所有工

Cocos2d-x Bitmap Font generator位图字体工具_cocos2dx bitfont convert_wkyb608的博客-程序员宅基地

前面都用到了".fnt"文件,但是没讲述".fnt"是怎么产生的怎么用的...今天就将这个非常有用的位图处理工具,来回答上面的问题...1、下载地址:http://www.angelcode.com/products/bmfont/2、创建一个txt文件,然后输入你用到的文字这是我输入的内容(注意:保存的是有移动要用utf-8,可能这软件不支持别编码)_cocos2dx bitfont convert

3D深度摄像头_深度摄像头 设计_专注人脸识别oo的博客-程序员宅基地

3D深度摄像头(RGBD Sensor)产品应用范围(Application):Ø 智能电视、游戏机(Smart TV and PlayStation)Ø 3D扫描仪(3D Scanner)Ø 智能家电(Intelligence Appliance)Ø 智能安防(Intelligent Security)Ø 无人机/机器人(UAV/Rob_深度摄像头 设计

iOS 高级开发技巧 2.对象、消息、运行期 (一) 理解属性这一概念_KralLee的博客-程序员宅基地

iOS 高级开发技巧 2.对象、消息、运行期 (一) 理解属性这一概念属性 (property)是Objective-c中的一项特征,用于封装对象中的数据。一般我们通过“存取方法”(access method)来访问。其中:获取方法(getter)用来读取变量的值;设置方法(setter)用来写入变量的值属性属于每个iOS开发人员时时刻刻都在使用的东西,但是大部分人最不理解的就

被8家企业拒绝 —— 研二女生半年写6万字面试宝典(转给我奋斗在jobbing路上的朋友们,祝好)_lengyuhong的博客-程序员宅基地

从去年11月的面试宝洁开始,美孚、施耐德、雀巢、招行总行……一连八家企业的大门都未向她敞开,但她并未气馁,还在校内博客上重现了全部面试细节。这份长达数万字《我的曲折求职路》系列日记,引来数百名网友点击,也被称为最全“面试宝典”。而日记的作者,华中科技大学管理学院2007级研究生陈维维,也最终圆梦强生。 第一次打击:梦断宝洁“那次经历,是我求职过程中,投入最多,历时最久,痛苦最深的。但我

推荐文章

热门文章

相关标签