查看原文
其他

Sub Dev 讨论 | ink 比 Runtime 轻松太多了

冯力全 一块Plus社区 2020-11-11

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

《从0到一学会Substrate 区块链应用开发》由一块链习和Parity官方联合出品,专为区块链技术爱好者量身打造,并由 王大锤,陈锡亮,孙凯超,朱振明四位老师联合授课



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


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



Q&A
社区问答精选


01

王大锤-讲师:大家觉得ink简单吗?

 

WJY-学员:比runtime轻松太多了,作为验证节点 启动的时候是用stash账户还是contrller账户的---node-key。

 

王大锤-讲师:sessionkey,可以参考一下,这里面的几种不同的账户。

https://wiki.polkadot.network/docs/en/learn-keys#session-key

 

WJY-学员:这个部署流程是不是:先在页面bond两个账户,然后用controller账户私钥去启动节点,最后给他们设置sessionkeys?

 

王大锤-讲师:先起一个全节点,然后链上bond操作,等节点同步之后,再把节点转换为validator模式,登记sessionkey,最后申请成为验证人。


整个流程参考这篇wiki:

https://wiki.polkadot.network/docs/en/maintain-guides-how-to-validate-kusama#building-and-installing-the-polkadot-binary

 

02

rzexin-学员:Substrate链如何获取到Alice的私钥呢?

 

WJY-学员:. /subkey inspect //Alice

--Alice跟--node-key + alice私钥,这两个有什么联系吗?

 

kaichao-讲师:--alice 是 --validator + alice的authority keys,和node-key 没关系

 

WJY-学员:是这个吗?


 

kaichao-讲师:不完全是,看定义了 authority_keys_from_seed

 

WJY-学员:六合一?


 

kaichao-讲师:substrate node 是的。

 

03

WJY-学员:如果是自定义的,不是alice这些,怎么去指定账号,让启动的时候直接用自定义身份去跑呢。而不是需要去前端绑定等一系列操作?

 

因为我跑创世块如果按照polkadot教程。是跑不了的,因为去前端操作的前提的有人处理你提交的交易。


 

 

如果真的出现了网络瘫痪 有什么补救方案吗?

 

kaichao-讲师:状态备份,启动cc2。

 

程剑宇-助教:模拟当时的网络/时间环境。



作业点评

第十、十一课作业


冯力全助教:关于作业我的看法就是作业只是一个帮忙大家学习的工具,所以做作业的时候,最好配合着多查查文档,由点到面的补充相关的知识。然后编译遇到的问题也需要积极解决,这样学习效果更好。


第十课重点

主要是讲解怎么使用 ink! 编写智能合约,并且把它编译成 wasm,以及对应的 metadata.json,并且把它们部署到链上。整个步骤老师已经讲得很详细了,结合

https://substrate.dev/substrate-contracts-workshop/#/ 

这个链接里面的文档,可以有更好的学习效果。


作业要求

作业开放式的,大概是编写一个自己的智能合约,然后把编译、部署、调用这些流程都走一遍就行了。

 

常见作业问题

编译 rc4 出错


首先,我们需要 

https://substrate.dev/substrate-contracts-workshop/#/0/setup 更新一下对应的环境。

 

然后我在 Installing A Substrate Node 步骤时,也就是编译 rc4 时也同样报错了。

 

就是输入这个命令时,会出现报错:

cargo install node-cli --git https://github.com/paritytech/substrate.git --tag v2.0.0-rc4 --force


为了解决上面这个问题,我试过把系统的Rust环境切换为stable,nightly,然后也试过安装rc2,rc3等版本,均出现类似问题。我之前的 Rust 环境安装 rc2 是没问题的。

 

然后从Substrate仓库里面找到了一个 PR,里面说是因为 ed25519-dalek v1.0.0-pre.3 和 v1.0.0-pre.4彼此不兼容。Cargo认为它们是兼容的。可以通过升级到 ed25519-dalek 到 v1.0.0-pre.4 来解决。


详情见:

https://github.com/paritytech/substrate/pull/6676 

因为这个 PR 目前没有合并,所以我把代码拉到本地,参考这个,直接把代码改了,通过。

 

$ cargo build -p node-cli --release

来编译 node-cli,不过好像还是没有解决问题。

 

我觉得我还可以试试,即使 node-cli 安装不了,我们还可以直接从源代码开始编译产生一条链。所以我找了最新的一次 CI 通过的commit



然后把本地代码reset到这个commit

$ git reset --hard 4f1e38b73a1c9ea8d5b350b2a373adfd5e0df7bc

然后尝试编译。

$ cargo build --release

最后终于得到 rc4 版本的 Substrate 链:

 


然后直接通过

./target/release/substrate --dev

可以启动

那个同样遇到这个问题的同学,可以去试试。

 

然后其他的,参考文档就可以了。

 

这里有对应的 ink! 智能合约的代码,可以参考一下: 

https://github.com/flyq/erc20_ink

 

第十一课重点

以太坊的 Solidity 合约介绍,并且把 MetaMask 钱包连接到本地 Substrate 链上,通过 Remix IDE 和 Metamask 钱包,就能把对应的 Solidity 合约部署到 Substrate 链上。并且通过 nodejs 来调用智能合约。

 

整个流程老师已经一步一步讲得很详细了,但是目前官方教程里面好像没有关于这个的文档,至少我在

 https://substrate.dev/en/tutorials 里面没有找到。

 

第十一课作业

作业是开放性的,编写一个自己的 Solidity 智能合约,然后把编译、部署 Substrate 链、通过 web3.js 调用智能合约,这些流程都走一遍。


常见作业问题 

 build frontier 报错

猜测是因为 git 仓库的 submodule 没有拉取下来,根据

https://github.com/paritytech/frontier/blob/master/README.md 里面的描述,你拉取

https://github.com/paritytech/frontier/ 的代码之后,需要执行。

git submodule initgit submodule update

最后我这边编译是没有问题的。

 

第十一课补充资料:

https://github.com/paritytech/frontier

https://remix.ethereum.org/

https://solidity.readthedocs.io/en/v0.6.0/

https://web3js.readthedocs.io/en/v1.2.11/

 

第十一课的文档

https://docs.moonbeam.network/getting-started/using-remix/ 推荐把整个文档都跟着过一遍

 

第十一课 slides

https://github.com/SubstrateCourse/slides/tree/master/lesson11




更多阅读:
Sub Dev 分享 | 当Substrate遇到传统业务应用
| Subdev 周记 | 过了临界点,就是质变!
Sub Dev 讨论 | 备战 Hackusama

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



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

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