跳至主要内容

AElf的爬坑指南(科普向)~

AElf的爬坑指南(科普向)~

AElf的爬坑指南(科普向)~

笔者环境: Windows+Visual Studio 2017 + Visual Studio Code+...(一系列的shell)

Why is AElf?

AElf - A Decentralized Cloud Computing Blockchain Network

翻译一下:一个分散的 云计算 区块链网络

官方介绍: AElf是一个区块链系统,旨在通过使用侧链和灵活的设计实现可扩展性和可扩展性。为了支持多个用例,AElf通过提供易于使用的工具和框架来扩展/定制系统,以便定制链并编写智能合约,从而尽可能简化。AElf最终将支持各种语言,让开发人员选择他们最熟悉的语言。

环境介绍

AElf目前的领域语言只有一种,C#,使用的dotnet core 进行开发,项目使用gRPC进行数据通信.

如果你已经阅读了官方repo上的Readme的话,你会发现,官方在IDE的选择上面,首选推荐的是Rider,Why?

so,如果你想为官方的repo提交代码的话.你需要如下的环境来运行AElf:

  • Rider/ Visual Studio 2017+ / Visual Studio Code
  • dotnet core 2.2
  • protobuf / gRPC

Why?不推荐使用Visual Studio 2017+进行开发?

AELF的代码结构, 请你暂时按照微服务来理解.

站在工程文件的角度上来看,每一个类库 = 每一个微小的业务模块. so...如果你使用工程文件结构的Visual Studio 2017(或更高)

进行开发..其实对开发机器其实是一种巨大的挑战..

笔者这里开发机器的配置大概是512 SSD + 16GRAM + I7 8550U.vs全程半报废状态..

由于vsc使用文件结构进行开发,所以在打开工程时不会有巨大的性能开销, 如果你的机器配置不达标,但是有过使用shell的交互模式编译,执行过dotnet core的经验, 可以尝试一下使用vsc(visual studio code 以下简称为vsc)+dotnet shell 进行开发.(笔者使用的方式)

解读 ./Script/Build.sh

如果你已经阅读了官方repo的Readme,你会发现,官方推荐在build的时候,使用

sh scripts/build.sh

但很抱歉,此方式并不适用于Windows环境下..虽然windows下有一堆可以使用类似于sh,unzip之类语法的shell.比如cygwin,git bash.但都会出现莫名其妙的BUG.

其中代码包含:

#!/bin/bash dotnet restore -s "https://nuget.cdn.azure.cn/v3/index.json" -s "https://api.nuget.org/v3/index.json" "AElf.sln" dotnet build /p:GeneratePackageOnBuild=false "AElf.sln" if [[ $? -ne 0 ]] ; then echo "Build failed." exit 1 fi

此代码做了如下几个事情:

  • 还原Nuget依赖项以及项目里制定的项目特定工具
  • GeneratePackageOnBuild=FLASE的方式进行Build,并且Build主链(AElf.sln)
  • Build时,如果存在退出字符,返回Build Failed ,并退出 1

build之前,不restore的奇妙BUG

当然,你可以直接dotnet build AElf.sln. but~~~,如果直接build,如果没有对于包依赖的修改,在首次以后的build,都不会执行restore操作. 所以编译时,偶尔会出现xxx文件不存在,xxx文件被xxx线程锁定,无法修改等等一系列的问题.

关于Shell的选择以及差异问题

由于官方repo的开发团队使用的环境不是Windows..所以..在windows下会有一些奇妙BUG..

笔者这里使用过cmd,git bash尝试进行开发.

如果使用git bash运行 build.sh.会出现由于git bash 跟dotnet shell不兼容,导致无法识别GeneratePackageOnBuild的问题.

笔者这里推荐使用..号称在windows下最好的仿Unix shell Cygwin

如果你要像官方的repo提交代码,你需要怎么做?

-> 重点强调,这里只是笔者的个人习惯,绝对官方团队的要求

  1. Fork个人分支
  2. 提交PR,上面说明 你要做什么,为什么需要这么做.标题前加上[WIP]
  3. 在自己的分支上进行commit.
  4. 结束PR前,先执行 ./Script/test.sh 完成单元测试.没问题后再上传
  5. 结束PR

官方repo库中,对于Code的共识

  1. 开发方式使用TDD,So:如果你想开展一个崭新的业务,请先写好UnitTest
  2. 代码入参,请务必保证参数个数 <=4 获取更多

关于类库结构

程序入口: 继承AbpServiceConvention,重写后的CalculateRouteTemplate 在获得URL后,跳转到具体Action中

评论

此博客中的热门博文

hello word

Hello my reader friends:
首先,感谢您在互联网的茫茫链接中,点进了这里.
笔者目前是一名泛语言开发者(C#,Python,TypeScript(以下简称为ty),JavaScript(以下简称为js)/NodeJs,Go,R…).
Loaction(China Beijing).
目前主要从事于:Web Developer
Github: github:tomatopunk
Mail: lion.zhang@mail.com or lion.1997z@outlook.com
这里是我个人发布随笔,博客,译文等内容的小站.主要内容大概为.技术类的原创博客,随笔,以及个人的译文等内容.
如果您喜欢,那么请点击在首页最上方的订阅,在更新后,会收到邮件的推送.
另:如您在阅读时发现,笔者存在笔误,逻辑漏洞,不严谨等等问题.欢迎您使用上面的联系方式联系我.
Ps:本博客使用的是Google Blogger进行建设.对于国内的朋友,由于众所周知的原因可能出现无法访问的情况~~~
以上.感谢您阅读到这里.