一步步教你开发部署第一个去中心化应用(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.基于SSM的宠物领养系统的设计与实现(1)游客具有浏览网站中所有的宠物信息的权限,主要是查看宠物信息。 (2)游客具有按关键字检索宠物的权限。 (3)游客具有注册为会员的权限。 4.功能效果图 4.1 首页 4.2 领养中心 4.3 登录 4.4 注册 4.5 后台管理员登录 5.核心代码 @Controller@RequestMapping("adopt")public class AdoptAnimalController {@Autowired...https://developer.aliyun.com/article/1375390
2.狗宠物流浪狗救助北京领养日边牧无偿领养黑白边牧,男孩,无偿...#北京领养#狗##宠物##流浪狗救助##北京领养日##边牧##无偿领养# 黑白边牧,男孩,无偿领养!仅限北京本地,联系13511060830谢了各位!我家高低不能再进任何活物了!!@小虎吉 @北京领养日 @救助圈·北京宠物领养中心 @北京流浪狗领养救助公益 0条评论|0人参与网友评论 登录|注册发布 相关新闻 在沙漠找骆驼...https://cj.sina.com.cn/articles/view/7879923693/m1d5ae17ed033015ury
3.深圳宠物领养中心宠物领养之家是由私人创办的小范围的非营利性的组织, 目的是救助流浪猫狗,为其提供一个暂时的安身之处,关爱其生命,减少动物的无序繁殖,减少动物源疾病的传播,与人类和谐共处.http://www.szadoptpet.com/
4.宠物帮领养中心宠物帮领养中心创始人,2006年毕业于华中农业大学,资深救助人和自媒体运营者。 李聃 宠物帮领养中心创始人,2010年毕业于北京工商大学,资深自媒体运营者。 谭晶莹 宠物帮领养中心主编,2017年毕业于吉林大学,资深自媒体运营者。 倪栩婕 宠物帮领养中心资深运营,2017年毕业于南京航空航天大学,资深自媒体运营者。 http://www.petbang2014.com/
5.大型宠物领养活动策划方案相关7篇.docx大型宠物领养活动策划方案相关7篇.docx,WORD(可编辑版本) —— PAGE 1 — 大型宠物领养活动策划方案 随着人们对宠物的需求不断增加,越来越多的流浪宠物需要找到一个温暖的家。为了促进宠物领养,提高社会对宠物保护的意识,我们计划举办一场大型宠物领养活动。 一、活动https://max.book118.com/html/2024/0321/5310101001011130.shtm
6.济南首家宠物公益领养中心开放区县济南频道近日,济南市首家宠物公益领养中心在高新区美莲广场开放。在这里,既可以领养,又接收被救助的流浪宠物。作为公益性质的领养、救助平台,这家店的工作人员大都是兼职,同时也接受周末志愿者。“领养代替购买”,正渐渐为更多养宠人士接受,工作人员告诉山东商报·速豹新闻网记者,曾有一次,店里的七只猫咪一下午全部被领养。 http://jinan.subaoxw.com/quxian/2024/0415/160423.html
7.全国宠物领养全国免费领养宠物北京市宠物领养 上海市宠物领养 天津市宠物领养 广州市宠物领养 深圳市宠物领养 太原市宠物领养 武汉市宠物领养热门栏目 宠物店开店指南 萌宠资讯 动物病症诊断 免费领养宠物 寻宠启示 狗狗品种大全 猫咪品种大全 宠物店收银软件 宠物店管理系统 八公收银 相关文档 宠物店管理系统操作手册 如何开通宠物店微商城? 宠物...https://www.bagong.cn/lingyang
8.撸宠:如何提高领养成功率我们借助订单中心能力,在用户领养后,利用订单中心的多个订单节点召回用户,提升复访和复购。 3.3.4 支付宝商家粉丝群 通过在撸宠领养小程序内引导用户进群,实现用户沉淀与再运营;对于用户来说,用户与用户之间可以通过社群交流,加强双方的沟通联系,送养人通过社群内直接分享宠物送养信息,可以在社群内获取更多曝光;对于领...https://opendocs.alipay.com/b/04onuk
1.宠物寄养服务定价标准明确发布宠物寄养服务定价标准明确发布 为了更好地服务于广大宠物主人,提高宠物寄养的透明度和可信度,我们公司决定对所有宠物寄养服务的定价进行详细说明,并公布一份全新的“宠物寄养价目表”。 定期体检与健康监测 我们深知宠物的健康是其幸福生活的基础。因此,我们特别强调了定期体检与健康监测。每只入住的宠物都会在到达后第一...https://www.gurotsr.cn/chong-wu-gou/248903.html
2.宠物寄养标准尚未细化,春节寄养一只猫竟要上万元?天山网● 2023年我国宠物犬数量达5175万只,宠物猫数量达6980万只,已成为全球第二大宠物市场。春节期间,各地的宠物寄养市场需求快速增长 ● 宠物寄养需求火爆背后,一些寄养机构存在的收费不合理、管理不透明、操作不规范等问题被频频曝光,宠物主们对此很是头疼 ● 目前,宠物寄养服务并未存在细化的行业标准。宠物寄养服务具有...https://www.ts.cn/xwzx/gnxw/202402/t20240221_19296070.shtml
3.宠物寄养服务价格体系研究探索市场定位与消费者偏好通过实证研究,我们选取了几家知名且成功运营多年的宠物寄养机构作为案例研究对象。这些机构都采用了灵活多样的收费标准,其中有些甚至提供定制化服务以满足不同消费者的个性化需求。在实际操作中,他们结合自身优势与特色,以及针对性的市场营销策略,最终实现了良好的经营效果。 https://www.eiopm.cn/geng-duo-chong-wu/442169.html
4.Springboot+mysql宠物领养管理系统本文描述了一个使用Java语言和SpringBoot框架开发的宠物领养管理系统,系统采用B/S架构,结合MySQL数据库,实现了包括宠物信息、领养信息、用户管理等多个功能模块。系统设计注重人性化、高效性和便捷性,同时考虑了数据安全、稳定性和可靠性。系统测试确保了功能的正常运行,满足了宠物领养管理的线上需求。 https://blog.csdn.net/vx1_Biye_Design/article/details/131358801
5.2024美国购买及领养宠物详细流程(手续+费用+渠道+注意事项),领养...Petco的领养中心: Petco每周六、周日中午11点到下午4点,会在店内举行猫咪领养活动。很多私人宠物领养中心将在那两天带着可被领养的猫咪们到Petco店内进行展示,如果有小伙伴们准备好为自己家里添加一名新成员,可以去店内看看,说不定就遇到了你生命中的TA呢~ ...https://www.extrabux.cn/chs/guide/4123556
6.重庆宠物狗领养中心地址在哪里?免费领养,宠物狗领养中心一览重庆宠物狗领养中心地址在哪里?2、你可以登陆小动物保护协会网址www cqsapa com,上面有可以领养的狗的...https://go.cqmmgo.com/forum-173-thread-47091569558017383-1-1.html
7.宠物领养合同有法律效力吗宠物领养契约具备法律效应,然而需要具备特定条件。首要条件即为契约内容需遵守相关法律,不受社会公德侵犯。其次,双方签约者均应有健全的民事行为能力,且意愿表达真实且一致。若契约明晰阐述了领养人与送养人的权益及其义务,例如宠物照料和健康监护,回访制度,以及领养情况监督等须妥善安排,并且没有因欺诈或胁迫等原因导致合...https://v.66law.cn/wenda/3460205.aspx
8.上海一“宠物救助中心”被指贩狗虐狗,屡遭举报还打伤执法者“萨摩、金毛、博美等宠物幼犬,最低领养只有几百元,收养的流浪猫狗免费赠送。”这些出现在微博、微信、贴吧等场合的宠物救助广告源于“上海宠物救助中心”——被不少动物保护公益组织称为“全上海最大的伪动保卖狗组织”。 然而,该中心却屡屡被投诉以领养宠物狗的名义,向爱狗、爱猫人士出售有瘟病的宠物,而该中心...https://www.thepaper.cn/newsDetail_forward_1498787
9.宠物寄养协议书(通用11篇)宠物寄养时间:___年___月___日至___年___月___日 收费标准:___ 时间天数:___ 其他费用:___合计金额:___寄养有利于为您的宠物提供及时良好的宠物托管服务,并为您的外出或事业带来很多方便。为了进一步搞好寄养工作,请您仔细阅读本院有关规定,若同意请在寄养协议尾签字。具体规定如下: 1、凡宠物在...https://www.unjs.com/fanwenwang/shuxingeshi/xieyishu/20210530232431_3672470.html
10.广州可爱宠物狗领养中心寻找家中的新伙伴广州可爱宠物狗领养中心寻找家中的新伙伴 摘要:为什么选择广州宠物狗领养? 在这个快节奏的现代生活中,很多人开始意识到家中的宠物不仅仅是生活的一部分,它们也成为了人们情感支持和压力缓解的重要源泉。广州作为中国经济最发达的城市之一,其繁忙都市环境为那些寻找忠诚伴侣的人提供了一个理想的居住地。然而,这里也是一个...https://www.wazxzpm.cn/chong-wu-gou/493389.html
11.kns.cnki.net.frps.fangguanapi.cn/xxxr33273147.html下载APK 高速下载 下载领养风波安装你想要的应用 更方便 更快捷 发现更多 24%好评(0人) 51 详细信息 软件大小: 949.83MBMB 最后更新: 2024-11-17 17:40:08 最新版本: V2.6.9 文件格式: apk 应用分类:ios-Android 老师和女学生毛片A级 使用语言: 中文 : 需要联网 系统要求: 5.41以上 应用...http://kns.cnki.net.frps.fangguanapi.cn/xxxr33273147.html
12.德国购买&领养猫指南手把手教你如何在德意志拥有一只猫咪一...如何在德国领养一只猫? Tierheim(德国宠物收留中心) 强烈建议用领养代替购买!在Google搜索Tierheim+你所在的城市就可以找到啦~而且德国有些城市的tierheim官网是可以在线看目前可以领养的猫咪的详细资料的,里面会有猫咪的性格是否绝育等等信息。 图| tierschutz-berlin ...https://de.ecentime.com/article/ecentime-katze-kaufen-deutschland?articleid=2746