一步步教你开发部署第一个去中心化应用(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.163.com/dy/article/JH43050305387C11.html
2.基于ssm宠物商店领养管理系统毕业论文.docx本论文系统地描绘了整个网上宠物管理系统的设计与实现,主要实现的功能有以下几点:管理员;首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理,前台首页;首页、宠物用品、宠物商店、宠物...https://max.book118.com/html/2022/0613/7136142166004131.shtm
3.宠物帮领养中心宠物帮领养中心创始人,2006年毕业于华中农业大学,资深救助人和自媒体运营者。 李聃 宠物帮领养中心创始人,2010年毕业于北京工商大学,资深自媒体运营者。 谭晶莹 宠物帮领养中心主编,2017年毕业于吉林大学,资深自媒体运营者。 倪栩婕 宠物帮领养中心资深运营,2017年毕业于南京航空航天大学,资深自媒体运营者。 http://www.petbang2014.com/
4.撸宠:如何提高领养成功率广州噜宠网络科技有限公司是国内领先的宠物生活消费服务平台。我们的支付宝小程序经过一年多的发展,已经有200多万的注册用户。宠物领养是我们比较重要的业务板块,平台基于芝麻信用的账户体系,通过芝麻证展示送(领)养双方过往的信用记录,让用户领养更安心。 我们从创办之初就跟支付宝合作,打通了很多我们需要的功能。撸宠...https://opendocs.alipay.com/b/04onuk
5.宠物服务平台:宠物寄养宠物领养寻宠寻主人宠物服务平台为广大养宠用户提供宠物寄养、宠物领养、寻宠、寻主人https://www.bagong.cn/service
1.ssm爱心宠物中心管理系统uupju独家源码应对计算机毕业设计困难...本文介绍了一个基于Vue前端、Java后端、SSM框架和MySQL数据库的爱心宠物中心管理系统,旨在解决传统管理方式的低效和不透明问题。系统提供宠物信息管理、领养申请处理、医疗记录跟踪等功能,提高工作效率,提升领养服务质量,并促进宠物中心间的合作与信息共享。同时,该系统为政府和社会组织提供数据支持,助力宠物保护政策的制定。https://blog.csdn.net/sheji509/article/details/131384809
2.2022宠物店syb创业计划书(通用9篇)宠物店经营进程中要格外重视口碑效应。要想经营得好,一定要和顾客交朋友,不仅要提供好的服务,还应该留住顾客。据宠物店经营专家王蒙介绍,留住顾客的第一步那就提供好的服务,就算顾客仅仅是买一袋狗粮,也要求店员热情和耐心地接待顾客。此外,建立会员制度,针对老客户给予优惠折扣或举办几个宠物免费美容等促销活动,有利...https://www.oh100.com/kaidian/4351570.html
3....假期南京文旅活动精彩纷呈,这份指南请收好→南京文旅信息服务...·鱼龙巷的「宠物领养日」市集 将是一场充满爱意的萌宠聚会。这里的每一只流浪小动物,都怀着一颗期待的心,等待你敞开爱的温暖怀抱带它回家。选择领养,选择买不到的爱。 时间:10月5日-10月6日16:00-20:00 地点:鱼龙巷西侧广场 || 重阳主题活动 http://www.njlyw.cn/websitenew/web/detail?m=86&i=39095
4.上海流浪猫狗宠物收养救助领养中心揭露流浪猫狗救助领养组织的...想给猫狗做绝育的亲,也微信可找我们介绍兽医上门做,比宠物医院实惠多了(只有中介才介绍大家去宠物医院给猫狗做绝育看病等,我们直接介绍兽医为大家的猫狗服务,是没有私心的!不断推送哪家宠物医院好的等等,大家不要想,就知道什么意思?赚中介费喽!很多上海所谓的流浪猫狗救助站中心领养之家领养日或平台其实都是宠物...https://www.douban.com/note/866577504/
5.java宠物管理系统最简单的宠物管理系统设计本论文系统地描绘了整个网上宠物管理系统的设计与实现,主要实现的功能有以下几点:管理员;首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理,前台首页;首页、宠物用品、宠物商店、宠物领...https://blog.51cto.com/u_16099261/7443186
6.萌家班MJB.Pet洗 宠物洗澡护理 为您的爱宠提供基础洗澡和整套护理服务更有使用高端洗护产品的精致服务 美 宠物美容造型 由持证宠物美容师主理根据宠宝身形和毛发情况精心修剪造型 寄 宠物寄养托管 在您不便照料宠宝时为它提供充足的寄养空间和细心照顾 领 宠物领养服务 以行动支持#领养代替购买提供押金方式的试养期和领养后续服务...http://www.mjbpet.cn/
7.全国十大宠物领养平台领养猫狗的平台推荐可领养宠物的app有哪些...领养宠物的意义在于,给流浪动物一个赖以生存的家,解决它们的温饱、健康、居住问题。那么,你知道全国宠物领养中心有哪些吗?下面买购网编辑就带大家看一份宠物领养平台名单,一起了解下宠安家、幸运土猫、宠物帮领养中心,以及有只宠物、宠胖胖、搜栖、宠友社等流浪猫/流浪狗领养平台。 https://m.maigoo.com/top/430609.html
8.动物医学类创新创业计划书(精选5篇)服务机构包括:宠物用品、宠物美容、宠物销售、宠物医疗、宠物驯养、宠物寄养、宠物领养、宠物婚配、宠物摄影、宠物殡葬等。 我们还专门设置了宠物医生实习基地以及宠物美容师的培训机构,对本公司的后生力量重点培养。 不仅有实体店,也在各大网站开设网店。宠物用品网店:网店不需要支付店面成本,所以能够省进一大笔开支,目前...https://www.yjbys.com/chuangye/ziliao/chuangyejihuashu/633700.html
9.上海流浪猫流浪狗收养救助领养站,免费赠送宠物,还提供免费治病服务本站领养救助的数百只狗猫都是无偿赠送。如果你喜欢狗猫,不要在宠物店买,会上当受骗。病狗猫、一周大的狗猫等太多了,如果买来,可能要花几千甚至几万给宠物看病,以后可能就救不回来了。你可以来这里免费领养狗猫。市中心有专门的救助领养点,每天开放。https://xkyczp.com/detail/165704.html
10.政企携手推广文明养宠理念,上海新城商圈举行领养活动活动上,“萌宠睦邻”等奉贤本地公益救助机构在现场设置了流浪动物领养摊位,多个职能部门设摊提供办证年审咨询、宠物医疗咨询、养宠法律咨询、文明养宠宣传等服务,宠物主、宠物店设摊带来宠物文创等产品,南桥镇“文明养宠合伙人联盟”也在活动中揭牌。 据上海南方国际购物中心(集团)有限公司党委副书记吴侹茂介绍,南方国...https://www.51ldb.com/shsldb/ms/content/018eda4fd294c0010000b9ff6f110fdc.htm
11.关爱流浪动物作文(通用15篇)1.我家里养的宠物可以免费注射芯片吗? 目前免费芯片仅提供给TNR群护区的流浪动物使用,家养宠物、已领养宠物均不享受免费芯片注射。 2.猫咪在注射芯片时会不会很疼? 芯片注射过程在猫咪麻醉的状况下完成,不会使宠物疼痛。 3.芯片注射后会引起外伤么? https://www.360wenmi.com/f/filee6mg6hdj.html
12.宠物领养系统源码数据库报告文档ppt齐全系统拥有管理员和用户2个角色.用户功能如下:注册登录、个人中心、在线领养宠物、领养信息管理、浏览宠物知识、志愿者申请管理、预约服务管理、在线留言等功能管理员功能如下:用户信息管理、宠物知识管理、宠物品种管理、宠物信息管理、领养信息管理、团队活动管理、团队信息、志愿者申请管理、宠物预约服务、在线留言管理等功能...https://www.songma.com/product/view1068645.html
13.2024美国购买及领养宠物详细流程(手续+费用+渠道+注意事项),领养...Petco的领养中心: Petco每周六、周日中午11点到下午4点,会在店内举行猫咪领养活动。很多私人宠物领养中心将在那两天带着可被领养的猫咪们到Petco店内进行展示,如果有小伙伴们准备好为自己家里添加一名新成员,可以去店内看看,说不定就遇到了你生命中的TA呢~ ...https://www.extrabux.cn/chs/guide/4123556