一步步教你开发部署第一个去中心化应用(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.宏扬宠物合同隐瞒条款诱导消费纠纷黑猫投诉本人于2021年8月30号与重庆宏扬宠物有限公司签订猫咪领养合约,领养蓝猫一只。本人领养猫咪之后回家不到半个月猫咪出现异常去世了,给商家说清具体情况,商家拒绝赔一只猫咪,说需再自行购买一只猫咪,说7天之内只包猫瘟和猫腹水,拒绝承担责任。因是疫情期间我们那个小区并没解封我就只买了试纸,所以并没有产生多余费用。申...https://cq.tousu.sina.com.cn/complaint/view/17377518254/?sld=77700e62fadbaa1f20cd252989d2e197
2.蚌埠可达萌宠网络科技有限公司通过在闲鱼平台广撒网发布虛假领养...2024年8月5日本人在蚌埠可达萌宠网络科技有限公司销售客服的哄骗下在微信小程序扣呗上绑定银行卡即扣款300元,未收到发票,后续按月扣款300一个月的狗粮费用,签约公司销售客服宣传免费领养狗要在他们家签订买12个月狗粮的合约,签约公司销售宣传自己狗身体健康打过2针疫苗,虚假宣传自家发货选中哪只狗就发货哪只,然后说...https://scj.bengbu.gov.cn/content/article/140798008
3.#宠物免费领养背后暗藏陷阱##免费领养到...来自九派新闻#宠物免费领养背后暗藏陷阱#【#免费领养到病宠退回却需高额违约金#】8月23日,据新华网消息:今年6月,杭州消费者芳芳在某二手平台看到一则寻找宠物领养对象的帖子。确认领养一只纯白拿破仑猫后,店家与芳芳签署了纸质版《领宠用户协议》。该协议要求芳芳每月向该宠物店消费400元购买宠物用品作为“猫粮保障计划”,为期2...https://weibo.com/7516679696/OtHXIm6OA
1.封面评论宠物“免费领养”频现圈套,越是复杂的合同义务越要事前...记者近日调查发现,宠物“免费领养”套路越来越多,让不少爱宠人士深受其害:有消费者要免费领养一只宠物,却被强制绑定各种消费要求;有人签订了宠物用品购买协议,每月固定消费,结果发现宠物不停地生病、宠物用品质量低劣,自己面临一旦违约则需支付高昂违约金的限制等。(法治日报) ...https://dy.163.com/article/IVBGJA440514D3UH.html
2.支付宝签约了领养宠物的合约能不能解除。对方说可以解约但是要赔偿...合约可以解除,但需按约支付违约金。https://www.66law.cn/question/48413829.aspx
3.在开发宠物领养与查看功能程序中,adopt接口主要用于调用Adoption...在开发宠物领养与查看功能程序中,adopt接口主要用于调用Adoption智能合约中的adopt函数,实现通过账户领养宠物功能。() A. 正确 B. 错误 如何将EXCEL生成题库手机刷题 如何制作自己的在线小题库 > 手机使用 分享 反馈 收藏 举报 参考答案: A 复制 纠错https://www.shuashuati.com/ti/d1dce0ae676949cb91836e56c6befc19.html
4.Dr.cats科学喵品牌正式发布;六毛家宠物领养馆获首轮战略投资对于本次投资“六毛家”的初衷,资方代表胡雨晨表示,“本次集合了三家企业的联合投资,建立在对于宠物合约领养赛道的看好与期许之上。” 根据官方信息显示,“六毛家”的合约领养模式,主要依据宠物品种及品相确定档位。可市场价买断或宠粮月付,领宠当天付首月宠物币即可拥有心仪宠物。为防弃养,两年合约期内支付宝代扣...https://www.petdhw.com/show-44239.html
5.一步步教你开发部署第一个Dapp应用宠物商店如何通过Web3和智能合约交互 MetaMask 的使用 小专栏用户在教程结尾处可以下载完整的Dapp代码。 项目背景 Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。 在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。 https://cloud.tencent.com/developer/article/1161550
6.宠猫社区赚钱下载宠猫社区appv1.0.0安卓版1、这是一款宠物社区类软件,专为喜欢动物的人打造; 2、用户在这里可以学习到大量的养猫和养狗的知识; 3、在社区交流中,新手还能了解猫粮和狗粮的性价比。 宠猫社区软件说明: 贪吃猫级别:普通价值:100-300领养时间:11:30-11:45预约/即抢领养微分:2智能合约收益:1天/4%可挖BYC:2 ...https://www.qqtn.com/azsoft/492285.html
7.爱猫者必看!喜宠殿下·领猫馆,打造全新领养体验!喜宠殿下·领猫馆是一家专注于宠物猫领养的连锁品牌,其独特的经营模式为宠物猫的领养带来了全新的体验。相比传统的宠物店销售模式,喜宠殿下·领猫馆采用了免费领养的方式,通过信用领养代替了全款购置,为领养者提供了更为灵活的选择。 在喜宠殿下·领猫馆,领养者可以通过“数智合约”进行领养程序,为领养者提供更...https://i.ifeng.com/c/8ariXwvZhYI
8.本人2024年10月5日在光想(沈阳)宠物服务有限公司报名猫领养,共计...本人2024年 10月5日在光想(沈阳)宠物服务有限公司报名猫领养,共计花费7452元该机构虚假宣传,违规经营,还交了300定金,在他的催促下我签了合约,同时签订了合同,然后他那边还没有发货,我也还没有收到小猫,昨晚签订了合同,猫猫是300元然后这个是捆绑销售的猫粮,他那边还没有发货,我想取消,商家不同意,因此想要解除...https://m.tingsonglaw.com/ask/detail/2686834
9.湖州维宠有嘉宠物服务公司虚假宣传及合同纠纷本人2024年9月4日在湖州维宠有嘉宠物服务有限公司报名物分期共计花费 14376元 该机构虑假宣传,违规经营,超出经营范围,2024年9.4我们在湖州长兴万达逛商场的时候看到有合约领养的小猫,有一只我特别喜欢工作人员就和我说小猫不用钱,只需要每个月在他们指定的小程序里面缴费 599 元给小猫买生活用品猫粮那些,我一想反正...https://www.xfb315.com/tousu/97902039
10.petpet-shop 这是一个基于以太坊智能合约的宠物商店Dapp,使用truffle框架,Solidity编写,仅用于测试 项目背景 Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。 在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。 环境搭建 安装Node 安装 Truffle : npm ...https://download.csdn.net/download/weixin_42166626/18656457
11.很现实!你离国家级领养资格还有多远?于是就想到了在所在城市领养一只猫咪,抱着美好的幻想踏入了领养猫咪的征程,却没想到领养猫咪比工作面试的碰壁机会都频繁,究其原因就是不够资格。想必爱猫人士都有所了解,一般的动物协会领养都是需要签领养合约,领养人有领养条件,适龄绝育等等等等!话说在看过一个领养平台的个人领养信息后,真的是望而却步了!)在...https://www.22005.cn/chongwumaozixun/14283.html
12.一步步教你开发部署第一个Dapp应用:宠物商店搭建智能合约开发环境 创建Truffle项目 编写智能合约 编译和部署智能合约到区块链 如何通过Web3和智能合约交互 MetaMask 的使用 小专栏用户在教程结尾处可以下载完整的Dapp代码。 项目背景 Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。 https://xiaozhuanlan.com/topic/4875690231