一步步教你开发部署第一个去中心化应用(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.震惊!为什么在新加坡被狗咬了,不用打狂犬疫苗?!之前椰子盘点过领养宠物的14个地点 在新加坡想养宠物?不如来这14个地方领养吧~ 网络上,比如论坛 也有很多人会发布宠物领养信息 想要领养的椰友可以多方关注 今天我们再来说说 领养有什么条件呢? 一般来说,有三类领养方式 通过SPCA新加坡防止虐待动物协会等 https://ishare.ifeng.com/c/s/7jcpQ37Yucn
2.深圳宠物领养中心宠物领养之家是由私人创办的小范围的非营利性的组织, 目的是救助流浪猫狗,为其提供一个暂时的安身之处,关爱其生命,减少动物的无序繁殖,减少动物源疾病的传播,与人类和谐共处.http://www.szadoptpet.com/
3.曾经的李佳琦小助理,付鹏成为TNR上海推广大使!呼吁为流浪猫绝育上海小动物救助领养中心接受市民预约登记流浪猫绝育手术(全免费) 周到君在此前采访中获悉,在上海也有很多机构对流浪猫进行TNR救助。 2020年12月30日,上海小动物救助领养公益服务中心正式面向社会,接受预约流浪动物绝育(全免费)。 中心周三、周六(9:30-11:30,14:00-16:00接受全市市民预约登记流浪猫绝育手术(全免费...https://static.zhoudaosh.com/12FB443B054046427C084BD57AF0A9291520F1559C3B1A048BE2A4A140DD1682
4.宠物帮领养中心的微博宠物帮领养中心,宠物帮领养中心官方微博。宠物帮领养中心的微博主页、个人资料、相册。新浪微博,随时随地分享身边的新鲜事儿。https://weibo.com/chongwubangly
5.全国宠物领养全国免费领养宠物北京市宠物领养 上海市宠物领养 天津市宠物领养 广州市宠物领养 深圳市宠物领养 太原市宠物领养 武汉市宠物领养热门栏目 宠物店开店指南 萌宠资讯 动物病症诊断 免费领养宠物 寻宠启示 狗狗品种大全 猫咪品种大全 宠物店收银软件 宠物店管理系统 八公收银 相关文档 宠物店管理系统操作手册 如何开通宠物店微商城? 宠物...https://www.bagong.cn/lingyang
6.宠物领养是什么意思宠物领养的词语解释相关组词词语宠物领养的百科含义 宠物领养是一款安卓平台的应用,是一个宠物领养,宠物送养,寻找主人,寻找宠物的平台。 虱多不痒 债欠多了反而不忧愁。比喻困难成堆,认为反正一时解除不了,也就不去愁它了。 才疏德薄 才识疏浅,德行不高。常用作自谦之词。 敛容屏气 敛容收起笑容,态度变得严肃。屏气闭住气不敢出声。比喻有...http://xmbaoxiang.cn/n/1801010.html
7.宠物帮领养中心“宠物帮领养中心”是北京宠物帮文化传播有限公司旗下流浪动物公益领养平台(简称:宠物帮)。2014年5月成立,并与全国超过600家流浪动物救助团队合作,成功送养超过16万余只猫狗。同时平台还提供寻宠、绝育、云养、筹粮、捐步、助力等救助领域全部功能,已成为国内知名流浪动物救助平台。 http://www.mengzands.com/about.html
8.撸宠:如何提高领养成功率我们借助订单中心能力,在用户领养后,利用订单中心的多个订单节点召回用户,提升复访和复购。 3.3.4 支付宝商家粉丝群 通过在撸宠领养小程序内引导用户进群,实现用户沉淀与再运营;对于用户来说,用户与用户之间可以通过社群交流,加强双方的沟通联系,送养人通过社群内直接分享宠物送养信息,可以在社群内获取更多曝光;对于领...https://opendocs.alipay.com/b/04onuk
9.基于宠物领养网站设计:实现萌宠特色功能的源码程序开发3. 专业论坛:在宠物行业相关的论坛和社区中,也常常有开发者分享本人的插件源码。 选择合适的获取途径,可确信开发者获得高品质的萌宠插件源码,为网站添加更多有趣的互动功能。 三、萌宠插件源码是什么 萌宠插件源码是一系列编程代码,它通过特定的算法和逻辑,实现了在宠物领养网站上的各种互动效果。这些源码常常涵以下...http://www.slrbs.com/jrzg/aitong/128492.html
1.2024美国购买及领养宠物详细流程(手续+费用+渠道+注意事项),领养...Petco的领养中心: Petco每周六、周日中午11点到下午4点,会在店内举行猫咪领养活动。很多私人宠物领养中心将在那两天带着可被领养的猫咪们到Petco店内进行展示,如果有小伙伴们准备好为自己家里添加一名新成员,可以去店内看看,说不定就遇到了你生命中的TA呢~ ...https://www.extrabux.cn/chs/guide/4123556
2.萌家班MJB.Pet洗 宠物洗澡护理 为您的爱宠提供基础洗澡和整套护理服务更有使用高端洗护产品的精致服务 美 宠物美容造型 由持证宠物美容师主理根据宠宝身形和毛发情况精心修剪造型 寄 宠物寄养托管 在您不便照料宠宝时为它提供充足的寄养空间和细心照顾 领 宠物领养服务 以行动支持#领养代替购买提供押金方式的试养期和领养后续服务...http://www.mjbpet.cn/
3.重庆宠物狗领养中心地址在哪里?免费领养,宠物狗领养中心一览重庆宠物狗领养中心地址在哪里?2、你可以登陆小动物保护协会网址www cqsapa com,上面有可以领养的狗的...https://go.cqmmgo.com/forum-173-thread-47091569558017383-1-1.html
4.今天是宠物中心的爱心领养日,读一读小动物们的自我介绍,完成相应...今天是宠物中心的爱心领养日,读一读小动物们的自我介绍,完成相应的任务。 Lucky: I'm Lucky. I'm a brown dog. I'm five years old. I'm not so tall. But I'm fast. I like watermelons. Do you want to be my friend?Max: Hi, I'm Max. I'm one. I'm a little dog. I like balls...https://zujuan.21cnjy.com/question/detail/53555707
5.全国十大宠物领养平台领养猫狗的平台推荐可领养宠物的app有哪些...领养宠物的意义在于,给流浪动物一个赖以生存的家,解决它们的温饱、健康、居住问题。那么,你知道全国宠物领养中心有哪些吗?下面买购网编辑就带大家看一份宠物领养平台名单,一起了解下宠安家、幸运土猫、宠物帮领养中心,以及有只宠物、宠胖胖、搜栖、宠友社等流浪猫/流浪狗领养平台。 https://m.maigoo.com/top/430609.html
6.英国宠物狗领养条件是什么?英国宠物狗领养条件是什么? 英国宠物狗领养条件是指领养人需要满足的条件和要求。英国一直以来都有严格的宠物领养规定,这是为了确保狗狗能够找到一个安全、温暖、负责任的家庭,让它们过上幸福的生活。下面将详细介绍英国宠物狗领养的条件。 首先,领养人必须年满18岁。这是因为领养一只狗需要承担相应的责任,包括提供...https://www.chongwugo.cn/32874.html
7.汕头爱心人士自发规范宠物领养救助流程南方plus“选择室内人流量不够大,选择室外则担心天气问题,而且一旦宠物数量太多,产生的气味、噪音以及安全问题等因素我们也得充分考虑。”“它们家”领养中心负责人林晓丹在谈及组织策划领养活动背后的难处时如是说。 “它们家”领养中心成立于2018年5月,与其他领养机构不同的是,该中心并无线下实体机构,团队成员包括医生、律...https://static.nfapp.southcn.com/content/201903/12/c1998873.html
8.上海夜市观察:有“降”有“升”,没想到还有宠物领养和普法教育此外,位于浦东新区的华润时代集市,还出现了宠物免费领养摊位。一群猫猫狗狗乖巧地趴在笼子里等待新主人,笼子上可爱的卡通宣传画印着“领养代替购买”的标语,引来许多人围观、拍照、询问,口中啧啧称赞。路过的游客不禁感叹:“这是什么神仙夜市!” 【观点碰撞:好夜市该是什么样?】 ...https://export.shobserver.com/toutiao/html/257762.html