首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

宠物商店 学习笔记

宠物商店(pet-shop) 学习笔记

truffle 可以算是一个超级强大的 Ethereum 开发工具集, 集各种的功能集一身, 今天, 照着官方的文档, 和 @Tiny熊的 教程, 完成了其中提供的一个demo.

truffle的目录结构目录树

contract 此目录就是我们的编写的智能合约所存在的目录, 使用solidity语言编写

migrations 此目录下是用于迁移部署合约的JS的脚本

test 测试合约时所用的测试脚本

src 一个前端的实现, 主要是调用 wed3 的库, 与节点服务器进行RPC

代码分析合约代码

以上是实现宠物领养的合约代码.

指定编译器版本

定义 Adoption 的合约结构

定义一个存放地址的定长数组

定义合约函数 adopt

Public类型, 可以被外部访问, uint参数 为调用时传入的要领养的宠物的ID, 返回值就是当前领养的宠物id

用于检查变量值是否满足当前条件, 不满足条件则立即抛出异常, 并且对所有的已做修改进行回滚(revert)

使用数组的对应的 ID index 来保存领养者的地址

定义合约函数

直接返回 存储领养者的定长数组

测试代码

truffle 作为一个集成的环境, 也是很好的提供了合约测试的功能

代码分析写在了注释里面 , 下面是执行结果

可见, 通过测试命令, Truffle 对每个函数进行自动的 测试, 对运行结果进行assert(断言)分析, 如果合约代码存在问题, 测试过程会把错误显示出. 这里是全部测试通过的情况.

前端应用代码

奈何 没接触过JS 所以看起来有些吃力, 也算是借这个学习一下了!

代码主体存在于 , 从功能上讲就是对 我们的合约进行调用, 把我们领养的宠物这个信息记录在区块里.

InitWeb3

这个是web3这个JS包的初始化代码,代码中优先使用Mist 或 MetaMask提供的web3实例,如果没有则从本地环境创建一个。

InitContract

这里实现了合约的初始化, 这里加载了Adoption.json,保存了Adoption的ABI(接口说明)信息及部署后的网络(地址)信息,它在编译合约的时候生成ABI,在部署的时候追加网络信息.

画外音: 这里也是展现了NodeJs的一切皆回调的 异步属性 , 中间部分的代码就是我们执行GetJson的 回调代码.(不同于同步(顺序)编程)

MarkAdopted

画外音 : then 也是一种回调用法, 在前一函数执行完之后, 才会进行 then 内的函数, 这样就确保了数据的完整获得

这里实现了 合约的部署, 和对已经领养的dog进行标记, 遍历数组得到, 这个判断方式值得学习.

绑定事件

这个地方就是通俗易懂了,把按钮点击的事件, 和它的服务函数(handle), 绑定起来.

画外音: JavaScript 是一种事件驱动的语言, 所以, 这里和QT很相似, 也是事件驱动, 用户的点击, 产生事件, 之后调用事件的处理函数,区别于 消息驱动(如MFC)

服务函数

这里就是, 鼠标点击事件的服务函数. 当鼠标点击Button的时候事件触发, 服务函数被回调. > > >

event.preventDefault()

该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。避免服务函数被中断

parseInt()

该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)

写在后面

这次是个简单的demo的实现和分析,也得上是第一个Dapp的实现

这个Demo 的实现参照博文

一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店

也感谢博主的OFS的开源精神!(保留版权声明CC BY-NC-SA 3.0)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180211G0L30F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券