一步步教你开发部署第一个去中心化应用(Dapp)宠物商店区块链技术剖析

本文通过实例教大家来开发去中心化应用,应用效果如图:

从本文,你可以学习到:

Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。在trufflebox中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。

1、建立项目目录并进入

>mkdirpet-shop-tutorial>cdpet-shop-tutorial2、使用truffleunbox创建项目

>truffleunboxpet-shopDownloading...Unpacking...Settingup...Unboxsuccessful.Sweet!Commands:Compile:trufflecompileMigrate:trufflemigrateTestcontracts:truffletestRundevserver:npmrundev这一步需要等待一会

contracts/智能合约的文件夹,所有的智能合约文件都放置在这里,里面包含一个重要的合约Migrations.sol(稍后再讲)migrations/用来处理部署(迁移)智能合约,迁移是一个额外特别的合约用来保存合约的变化。test/智能合约测试用例文件夹truffle.js/配置文件

其他代码可以暂时不用管

在contracts目录下,添加合约文件Adoption.sol

pragmasolidity^0.4.17;contractAdoption{address[16]publicadopters;//保存领养者的地址//领养宠物functionadopt(uintpetId)publicreturns(uint){require(petId>=0&&petId<=15);//确保id在数组长度内adopters[petId]=msg.sender;//保存调用这地址returnpetId;}//返回领养者functiongetAdopters()publicviewreturns(address[16]){returnadopters;}}编译部署智能合约Truffle集成了一个开发者控制台,可用来生成一个开发链用来测试和部署智能合约。

Solidity是编译型语言,需要把可读的Solidity代码编译为EVM字节码才能运行。dapp的根目录pet-shop-tutorial下,

>trufflecompile输出

Compiling./contracts/Adoption.sol...Writingartifactsto./build/contracts部署编译之后,就可以部署到区块链上。在migrations文件夹下已经有一个1_initial_migration.js部署脚本,用来部署Migrations.sol合约。Migrations.sol用来确保不会部署相同的合约。

现在我们来创建一个自己的部署脚本2_deploy_contracts.js

接下来执行部署命令:

>trufflemigrate执行后,有一下类似的输出,

Usingnetwork'develop'.Runningmigration:1_initial_migration.jsDeployingMigrations......0x3076b7dac65afc44ec51508bf6f2b6894f833f0f9560ecad2d6d41ed98a4679fMigrations:0x8cdaf0cd259887258bc13a92c0a6da92698644c0Savingsuccessfulmigrationtonetwork......0xd7bc86d31bee32fa3988f1c1eabce403a1b5d570340a3a9cdba53a472ee8c956Savingartifacts...Runningmigration:2_deploy_contracts.jsDeployingAdoption......0x2c6ab4471c225b5473f2079ee42ca1356007e51d5bb57eb80bfeb406acc35cd4Adoption:0x345ca3e014aaf5dca488057592ee47305d9b3e10Savingsuccessfulmigrationtonetwork......0xf36163615f41ef7ed8f4a8f192149a0bf633fe1a2398ce001bf44c43dc7bdda0Savingartifacts...在打开的Ganache里可以看到区块链状态的变化,现在产生了4个区块。这时说明已经智能合约已经部署好了。

现在我们来测试一下智能合约,测试用例可以用JavaScriptorSolidity来编写,这里使用Solidity。

在test目录下新建一个TestAdoption.sol,编写测试合约

pragmasolidity^0.4.17;import"truffle/Assert.sol";//引入的断言import"truffle/DeployedAddresses.sol";//用来获取被测试合约的地址import"../contracts/Adoption.sol";//被测试合约contractTestAdoption{Adoptionadoption=Adoption(DeployedAddresses.Adoption());//领养测试用例functiontestUserCanAdoptPet()public{uintreturnedId=adoption.adopt(8);uintexpected=8;Assert.equal(returnedId,expected,"AdoptionofpetID8shouldberecorded.");}//宠物所有者测试用例functiontestGetAdopterAddressByPetId()public{//期望领养者的地址就是本合约地址,因为交易是由测试合约发起交易,addressexpected=this;addressadopter=adoption.adopters(8);Assert.equal(adopter,expected,"OwnerofpetID8shouldberecorded.");}//测试所有领养者functiontestGetAdopterAddressByPetIdInArray()public{//领养者的地址就是本合约地址addressexpected=this;address[16]memoryadopters=adoption.getAdopters();Assert.equal(adopters[8],expected,"OwnerofpetID8shouldberecorded.");}}Assert.sol及DeployedAddresses.sol是Truffle框架提供,在test目录下并不提供truffle目录。

TestAdoption合约中添加adopt的测试用例

在终端中,执行

truffletest如果测试通过,则终端输出:

Usingnetwork'develop'.Compiling./contracts/Adoption.sol...Compiling./test/TestAdoption.sol...Compilingtruffle/Assert.sol...Compilingtruffle/DeployedAddresses.sol...TestAdoptiontestUserCanAdoptPet(62ms)testGetAdopterAddressByPetId(53ms)testGetAdopterAddressByPetIdInArray(73ms)3passing(554ms)创建用户接口和智能合约交互我们已经编写和部署及测试好了我们的合约,接下我们为合约编写UI,让合约真正可以用起来。

在TruffleBoxpet-shop里,已经包含了应用的前端代码,代码在src/文件夹下。

接下来,我们来编辑app.js修改initWeb3():删除注释,修改为:

使用truffle-contract会帮我们保存合约部署的信息,就不需要我们手动修改合约地址,修改initContract()代码如下:

initContract:function(){//加载Adoption.json,保存了Adoption的ABI(接口说明)信息及部署后的网络(地址)信息,它在编译合约的时候生成ABI,在部署的时候追加网络信息$.getJSON('Adoption.json',function(data){//用Adoption.json数据创建一个可交互的TruffleContract合约实例。varAdoptionArtifact=data;App.contracts.Adoption=TruffleContract(AdoptionArtifact);//SettheproviderforourcontractApp.contracts.Adoption.setProvider(App.web3Provider);//UseourcontracttoretrieveandmarktheadoptedpetsreturnApp.markAdopted();});returnApp.bindEvents();}处理领养修改markAdopted()代码:

markAdopted:function(adopters,account){varadoptionInstance;App.contracts.Adoption.deployed().then(function(instance){adoptionInstance=instance;//调用合约的getAdopters(),用call读取信息不用消耗gasreturnadoptionInstance.getAdopters.call();}).then(function(adopters){for(i=0;i

在接受隐私说明后,会出现页面如下:

这里我们通过还原一个Ganache为我们创建好的钱包,作为我们的开发测试钱包。点击页面的ImportExistingDEN,输入Ganache显示的助记词。

candymaplecakesugarpuddingcreamhoneyrichsmoothcrumblesweettreat然后自己想要的密码,点击OK。如图:

至此MetaMask的安装,配置已经完成。

接下来需要本地的web服务器提供服务的访问,TruffleBoxpet-shop里提供了一个lite-server可以直接使用,我们看看它是如何工作的。bs-config.json指示了lite-server的工作目录。

{"server":{"baseDir":["./src","./build/contracts"]}}./src是网站文件目录./build/contracts是合约输出目录

以此同时,在package.json文件的scripts中添加了dev命令:

"scripts":{"dev":"lite-server","test":"echo\"Error:notestspecified\"&&exit1"},当运行npmrundev的时候,就会启动lite-server

>npmrundev会自动打开浏览器显示我们的dapp,如本文的第一张图。现在领养一直宠物看看,当我们点击Adopt时,MetaMask会提示我们交易的确认,如图:

点击Submit确认后,就可以看到成功领养了这次宠物。

在MetaMask中,也可以看到交易的清单:

区块链技术专家,《精通以太坊智能合约开发》的作者,北京航空航天大学硕士,创新工场高级工程师,猎豹移动技术项目负责人,以太坊基金会讲师,登链科技创始人兼CTO。对底层公链技术,区块链技术落地都有深入研究。

THE END
1.全国宠物领养全国免费领养宠物北京市宠物领养 上海市宠物领养 天津市宠物领养 广州市宠物领养 深圳市宠物领养 太原市宠物领养 武汉市宠物领养热门栏目 宠物店开店指南 萌宠资讯 动物病症诊断 免费领养宠物 寻宠启示 狗狗品种大全 猫咪品种大全 宠物店收银软件 宠物店管理系统 八公收银 相关文档 宠物店管理系统操作手册 如何开通宠物店微商城? 宠物...https://www.bagong.cn/lingyang
2.宠物帮领养中心的微博4.对于领养人的要求(比如:仅限同城领养、签订领 ...展开全文c ?收藏 2 14 ?20 c +关注 宠物帮领养中心 11月11日 10:23 来自微博网页版 走失位置:上海市宝山区富锦路2号丰巢柜猫咪情况:它是一只布偶猫,一岁多,白灰相间的,鼻子有一处毛轻微未长好,已绝育,猫的名字叫...https://weibo.com/chongwubangly
1.2024美国购买及领养宠物详细流程(手续+费用+渠道+注意事项),领养...Petco的领养中心: Petco每周六、周日中午11点到下午4点,会在店内举行猫咪领养活动。很多私人宠物领养中心将在那两天带着可被领养的猫咪们到Petco店内进行展示,如果有小伙伴们准备好为自己家里添加一名新成员,可以去店内看看,说不定就遇到了你生命中的TA呢~ ...https://www.extrabux.cn/chs/guide/4123556
2.上海一“宠物救助中心”被指贩狗虐狗,屡遭举报还打伤执法者“萨摩、金毛、博美等宠物幼犬,最低领养只有几百元,收养的流浪猫狗免费赠送。”这些出现在微博、微信、贴吧等场合的宠物救助广告源于“上海宠物救助中心”——被不少动物保护公益组织称为“全上海最大的伪动保卖狗组织”。 然而,该中心却屡屡被投诉以领养宠物狗的名义,向爱狗、爱猫人士出售有瘟病的宠物,而该中心...https://www.thepaper.cn/newsDetail_forward_1498787
3.(附源码)SSM宠物领养系统毕业设计08465ssm宠物管理架构图4.2.4领养中心管理界面 4.2.5活动信息管理界面 4.2.6加入申请管理界面 5系统测试 5.1系统测试的目的 5.2系统测试用例 5.3系统测试结果 结论 参考文献 致谢 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,宠物领养系统当然也不能排除在外。宠物领...https://blog.csdn.net/VXbishe/article/details/132366835
4.宠物“免费领养”还是“强制销售”?宠物消费面临维权难“免费领养宠物”“30天内猫瘟猫传腹包治包换”“终身免费护理”“多家宠物合作医疗机构护航”……一些宠物店打出类似的宣传信息,让不少消费者颇为心动。 免费领养并不一定都是骗局。但记者调查发现,一些“免费领养”宠物的背后,往往带有各种附加条件,如签订领养协议、定期充钱到指定商城购买宠物用品。甚至有些商家...https://www.chinanews.com.cn/cj/2024/03-29/10189641.shtml
5.宠物收养网站(宠物收养网站的数据流图)1、大多数领养都是免费的。领养猫咪可以通过以下三种方法:线上领养,有些网络平台会有一些捡到的猫咪,或自家无法继续饲养的猫咪找人领养;宠物店,有些宠物店会找人领养一些收养的流浪猫;专门的领养机构,可以到当地的领养机构进行领养。 2、关于免费领养宠物狗的问题来说,一般都是在宠物狗救护中心领养、宠物领养中心或者...https://www.92kepu.com/dongwu/70137.html
6.全国十大宠物领养平台领养猫狗的平台推荐可领养宠物的app有哪些...领养宠物的意义在于,给流浪动物一个赖以生存的家,解决它们的温饱、健康、居住问题。那么,你知道全国宠物领养中心有哪些吗?下面买购网编辑就带大家看一份宠物领养平台名单,一起了解下宠安家、幸运土猫、宠物帮领养中心,以及有只宠物、宠胖胖、搜栖、宠友社等流浪猫/流浪狗领养平台。 https://m.maigoo.com/top/430609.html
7.广州爱心宠物狗领养中心温暖守护每一只可爱的朋友为什么选择广州宠物狗领养? 在这个快节奏的时代,很多人都渴望拥有一只忠实的小伙伴来陪伴左右。广州作为一个繁忙而充满活力的城市,宠物狗领养已经成为越来越多人的生活方式之一。那么,我们为什么要选择在广州进行宠物狗的领养呢? 了解广州宠物狗领养的基础知识 首先,https://www.eiopm.cn/chong-wu-zi-xun/443154.html
8.汕头爱心人士自发规范宠物领养救助流程南方plus“选择室内人流量不够大,选择室外则担心天气问题,而且一旦宠物数量太多,产生的气味、噪音以及安全问题等因素我们也得充分考虑。”“它们家”领养中心负责人林晓丹在谈及组织策划领养活动背后的难处时如是说。 “它们家”领养中心成立于2018年5月,与其他领养机构不同的是,该中心并无线下实体机构,团队成员包括医生、律...https://static.nfapp.southcn.com/content/201903/12/c1998873.html
9.广州爱心领养中心寻找永远的家园虽然寓所之内已经布置得井井有条,但对于新手或经历过宠物变动的情绪波动者来说,一旦离开了熟悉的地盘,可能还会有些许不安。因此,广州爱心领养中心始终保持开放态度,对于任何问题,无论是在日常照顾上还是情感上的困扰,都会提供及时有效的心理疏导和实用的解决方案,使您安心拥有您的宝贝犬友。 https://www.nczuvegvuw.cn/chong-wu-zi-xun/308640.html
10.20181031《儿童美术中的大话题小话题》胡晓珮然后到了班级那么不同年龄的孩子聚在一起,可以摸这个狗。在宠物员的这个监护之下,告诉他们这个狗狗阿是什么样的习性,他们可以摸可以抱,他们还可以领着这个狗在这个空间里面转悠几圈,也可以问各种各样的问题,那么问完问题。 问完问题之后呢,这个狗和这个人就都离开了现场,记住这个细节:离开,一定要离开,明白吗,狗...https://www.ruyile.com/news/r10597
11.宠物狗领养平台寻找最亲近的伴侣但记住,无论何时,只要涉及到生命安全,都必须始终保持警觉并采取必要措施保护自己及其新同伴免受伤害或欺诈行为。通过这样严谨地处理所有环节,我们才能确保我们的新朋友享受到一个幸福安康的生活,同时也为我们的家庭带来欢乐与快乐。 宠物租赁有哪几个网站宠物帮领养中心官网、宠物护理员培训学校、曼克斯猫...https://www.yztep.cn/chong-wu-zi-xun/339805.html
12.流浪猫作文(精选66篇)妈妈看到我抱了一只猫回来,感觉很奇怪,等我把经过讲了一遍,妈妈对这只流浪猫也格外同情,我们一致决定先给小猫洗个澡,再送到宠物领养中心去。好不容易给小猫洗了个暖融融的热水澡后,我又与妈妈一起给小猫消毒,包扎处理伤口。第二天才依依不舍地把它送往宠物领养中心。后来,工作人员给小猫找了一个十分负责任的...https://www.ruiwen.com/zuowen/miao/3693196.html
13.上海夜市观察:有“降”有“升”,没想到还有宠物领养和普法教育此外,位于浦东新区的华润时代集市,还出现了宠物免费领养摊位。一群猫猫狗狗乖巧地趴在笼子里等待新主人,笼子上可爱的卡通宣传画印着“领养代替购买”的标语,引来许多人围观、拍照、询问,口中啧啧称赞。路过的游客不禁感叹:“这是什么神仙夜市!” 【观点碰撞:好夜市该是什么样?】 ...https://www.jfdaily.com/news/detail?id=257762