Sub Dev 讨论 | ink 比 Runtime 轻松太多了
一块链习是首家区块链技术学习社区,提供最系统的区块链技术课程学习,定期出品有深度的技术观察 + 评论。
《从0到一学会Substrate 区块链应用开发》由一块链习和Parity官方联合出品,专为区块链技术爱好者量身打造,并由 王大锤,陈锡亮,孙凯超,朱振明四位老师联合授课。
目前第一期课程已经进行到第六周,同学们会在班级群讨论学习中遇到的难题或不解。另外每周日上午 10 点,都会进行课程内容知识拓展——作业点评会和在线答疑。
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 init
git 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
扫码关注公众号,回复“1”加入开发者社群