查看原文
其他

Blockstack Dev 讨论 | 帮你少走弯路的教程在这里

一块链习 一块Plus社区 2020-11-11

一块链习是首家区块链技术学习社区,提供最系统的区块链技术课程学习,定期出品有深度的技术观察 + 评论。


《 Blockstack 从开发入门到技术实战》 是一块链习联合 Blockstack 中国技术社区负责人、底层代码贡献者 Gavin 老师共同打造的全球首个 Blockstack 开发课程。



目前第一期课程已经进行到第二周,同学们会在班级群讨论学习中遇到的难题或不解。另外每周六晚 8 点,都会进行课程内容知识拓展——作业点评会和在线答疑。

现在将第一周班级群日常优质的讨论内容和冯浩松助教对第 1、2课的作业点评分享给大家。

Q&A


01

Q: 王扬:请问一个关于gaia的问题,除了每个人存储,可以有一个属于Dapp本身的存储开放给所有用户访问吗?如果没有一个公开的存储,好多功能设计起来有点困难。

 

A:Gavin 老师: 感兴趣的去访问 www.github.com/blockstack/radiks

 

02

Q:李林波:老师,我想问下区块链可不可以实现撤销付款,比如我预付款给你,但是最后因为其他原因,撤回这笔款项,或者类似的功能,但是不需要第三方介入,直接就根据某比交易的状态进行自动处理。

 

A:Gavin 老师:你这个问题看难点我认为有两个,第一个是撤回怎么实现、第二个是撤回的条件怎么确定。

 

Q:李林波:不是很懂区块链的具体作业方式,第二个的话可以生成一条交易状态信息,之后根据双方交易的操作进行状态变更,就和一般的电商订单类似。

 

A:奶哥助教 :通过智能合约应该很好解决这个问题


A:Gavin 老师:撤回其实就是把付给智能合约的钱打回给自己。但是怎么判定什么条件需要撤回,什么条件能够交易成功,就比较难了。链下的方式不安全,有一些链上的治理方案,像 ETH 的一些预测平台,大一点的像 Augur 就是一个预测平台。


比如说在 Augur 上你可以赌今年湖人队能不能夺冠,然后湖人夺冠了之后会在链上发起投票,大于一定比例通过后,交易就按照比例分配,链上投票会有一定激励。

 

03

Q: 樊金辉:老师,我想问下,如果我想做文件存储和共享类的应用,比如一个百度网盘的Blockstack版,是不是得自己搭建gaia服务器才行。如果提供一种加密数据的存储服务,用户间分享文件或资料是否可以支持STX的支付呢?

 

A:Gavin 老师:先回答第一个问题, 数据定向分享会在4、5节课讲。第二个问题需要使用到智能合约,Stacks 2.0版本完全可以支持,但是现在测试网还没有上线,相关demo还没有。用原有的Gaia不好实现的原因你可以思考一下,主要是密码学加密解密的过程的问题。


Q:樊金辉:另外DaPP在PC端是否可以脱离浏览器呢?是不是只要引入Blockstack.js就行,比如我后面使用electron做客户端应该可行吧。

 

A:Gavin老师:可以,但是有个问题是怎么让用户授权,可能就需要本地的应用传token给你的客户端,这块你需要跑一下数据流,必要的时候还需要自己看一下Blockstack.js的实现方法。

 

04

Q:学俊:老师,我有一个问题,如果一个Dapp拿到用户的数据以后,再把数据隐蔽的(类似加密和伪装)发到自己的中心化存储中进行持久化,理论上这种操作可行吗?能限制这种操作嘛?

 

A:Gavin 老师:明文数据是可行的,密文数据是不可行的。比如说动物王国,全是明文数据,可以去存啊。但是如果是密文的就不行了,今晚解锁的第三课里面有这个例子。

 

05

Q:yy:后续A用户如果想在这个应用上获取数据,就从Blockstack上的zonefile得到profile里的A用户自己登记的gaiahub的地址和授权。每个用户都不一样,如果用户没有运行自己的gaiahub,就默认存在官方提供的gaiahub?

 

A:Gavin 老师:差不多,zonefile里面存着profile,profile里面存着gaia地址的前缀,只要改了这两块就行。

 

06

Q:小丹:如果我的数据现在是放在Blockstack的gaiahub上的, 后面我搭建了自己的gaiahub, 已有的数据可以迁移过去吗?

 

A:曹帅助教:可以的。

 

07

Q:Ting A Lin:刚就改了下readme和换了图而己,本地还跑得好好的,然后netlify自动更新部署github后就又有地域问题,但我_headers/_redirects没动过还在啊。

 

A:一休一休哥:让netlify自动部署GitHub的代码的话,正确的方法应该是加一个netlify.toml文件。


Netlify应该是会自动读这个文件,来解决跨域问题。如果你是拖文件夹来部署,每次你都要手动删掉之前部署的(因为你上次部署时已经用了那个网址),然后手动修改新部署这个的网址,很麻烦。

 

Q:Ting A Lin:好建议,有没有netlify.toml文件来参考下?确实每次手动有点麻烦...

 

A:一休一休哥:# The following redirect is intended for use with most SPAs that handle

# routing internally.

[[redirects]]

  from = "/*"

  to = "/index.html"

  status = 200

 

[[headers]]

  # Define which paths this specific [[headers]] block will cover.

  for = "/*"

    [headers.values]

    Access-Control-Allow-Origin = "*"

 

其实就是把CORS文件夹里面的东西放进去了。

             

 

和package.json同级目录。

 

08

Q:键盘弹肖邦的春树:markdown怎么绘图呢,VScode插件,用什么?

 

A:冯浩松助教:

https://draw.io/https://www.lucidchart.com/

 

https://www.lucidchart.com/pages/what-is-a-flowchart-tutorial 流程图教程

 

A:小丹:

https://www.processon.com/我是用这个画的。助教推荐的也很好。

 

09

Q:KuoYeh: 奶哥-助教 感谢您昨天的分享,学习到很多,BIP44的第四层change层能否麻烦您再说明一下,谢谢。

 

A:奶哥助教:首先你要理解找零的概念,就是在你花费bitcoin的时候大概率会发生一次找零。


在现实生活中 ,你用100块钱 ,买20块钱的东西 ,然后会把89找零给你一样 。在钱包里 会管理很多地址,这时候就可以通过第四层来划分这两种场景 。

 

 

作业点评

  

第一课作业


1.作业内容

             

2.一些坑

 

2.1网络问题:

  • 打开Blockstack 浏览器速度缓慢,https://browser.blockstack.org/

              

  • nom install 出现如下错误

        解决办法:使用proxy,注意:确保你的终端也是使用了Proxy的。

 2. 2跨域资源共享 CORS

              

原因:当你打开动物王国的时候,你的Dapp去请求了Blockstack Browser的网站,就造成了“跨域”,这是一种浏览器的本地安全策略。

 

解决办法:

/animal-kindom/cors 下的两个文件

                     

拖到 /animal-kingdom / build /下,这样可以简单的解决该问题。

  

需要注意的是,我们看它的源码 Access-Control-Allow-Origin:  意味着任何网站可以请求你的Dapp,这可能会有安全隐患(CSRF)问题。


通过指定站点,或者白名单,可以提高安全性,避免跨站请求伪造的风险。(对作业来说不需要考虑,生产环境是需要考虑安全问题的)。

  

CORS详细介绍:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

 

2.3 Netlify 部署

 

手动部署 与 Github 部署:

  • 手动部署就是在本地build 之后,上传build文件夹到netlify

  • Github部署 Netlify读取你的Github repo 进行部署,比较推荐这种方式,后续更新了 repo之后,Netlify 会收到通知,站点也会自动build 并更新,这叫做持续集成 continuous integration ,比较方便。

 

持续集成详细介绍:https://juejin.im/post/ 58f9ee860ce46300611be392

               


第二课作业

 

1.需要注意的点

 

1.1 Readme  

Readme相当于是一个项目的自我介绍,好的Readme文档清晰明了,可以立刻让人对项目感兴趣。类似于人的名片。

https://github.com/matiassingers/awesome-readme

 

Readme没有严格的规定 但是有好的例子 这里的链接发给大家学习。

  

1.2 流程图

通过我对同学们作业的观察,有些同学对于流程图的规范,不是特别清晰。

 

流程图教程:

http://www.woshipm.com/pmd/2860180.html

https://www.lucidchart.com/pages/what-is-a-flowchart-tutorial

 

我本人强烈推荐第二个 Lucidchart 的教程,简单易懂。

 

同学优秀作业点评


1. Blockstack-my-vote 投票项目

             

2. Blockstack-Youtube


这位同学明显是非常用心的完成了作业 还画了原型图。

 

                           

 在 Readme 中对执行结果进行了截图,这也是一份好的Readme的要素之一(对于本次作业)。

              

3. Blockstack_fontawesome代码点评:            

UI可以使用开源的UI库,例如 material design, ANTD, Bootstrap 等等。代码中 重复的部分可以封装成组件使用。


看出一些同学对于 React 还不是特别熟悉,建议先跟着一两个教程,再进行作业,会轻松很多(也少走一些弯路)。


1.3 react

https://zh-hans.reactjs.org/tutorial/tutorial.html


https://www.html.cn/create-react-app/docs/getting-started/





更多阅读:

Blockstack Dev 周记 | “Blockstack 是基础设施最完善的平台”

Blocksatck Dev 分享 | BTC 钱包技术都在这里了

一文学会三种 Rust 设计模式


扫码关注公众号,回复“1”加入开发者社群


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存