一步步教你开发部署第一个去中心化应用(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.#快手宠物门店招募计划#机会只留给有准备的人 #宠物店 #宠物领养馆 297喜欢 副产品免费,主产品进行盈利的模式,适合各行各业!领取点这里@或课三十六计 4827喜欢 宠物赛道创业如何变现,宠物赛道低成本玩法,宠物中介变现。 #小本创业好项目 #干货 #创业 @快手平台帐号 3317喜欢 ...https://www.kuaishou.com/hashtag/%E5%BF%AB%E6%89%8B%E5%AE%A0%E7%89%A9%E9%97%A8%E5%BA%97%E6%8B%9B%E5%8B%9F%E8%AE%A1%E5%88%92
1.宠物店的赚钱方式很多,利润挺高的,你知道吗?第一、宠物买卖是宠物店最基础的盈利方式,随着人们消费能力的不断提高,很多人喜欢养名贵品种的宠物,宠物店从权威的地方购进一些名贵的宠物,这些宠物大多是来自世界各地的名贵品种,宠物店有低价进货的渠道,店主把它们放在店里卖,留足中间的差价,卖出就能获利,致富相对他们就这么简单。 https://www.jianshu.com/p/637a631f083f
2.新手赚钱指南揭秘最具收益的宠物养殖项目新手赚钱指南:揭秘最具收益的宠物养殖项目 在选择宠物养殖作为副业或兼职之前,新手需要考虑多种因素,包括成本、市场需求、技术难度以及潜在利润。以下是几个适合新手且具有较高收益的宠物养殖项目。 蛋白质饲料鱼 蛋白质饲料鱼是一种快速繁殖且对环境要求不高的水生动物https://www.pcr8nv7es.cn/yang-zhi-zi-xun/429932.html
3.开宠物店挣钱嘛(开宠物店收益怎么样)宠物店的服务项目与价格设置:了解宠物店的服务项目,如宠物美容、寄养等,并学习如何合理设置服务价格,吸引更多的顾客。 宠物店的人员培训与激励:掌握宠物店员工的培训方法,如何激励员工提高服务质量,从而提升宠物店的整体竞争力。http://www.mao4.cn/w491/92990141.html
4.从繁殖到销售商业饲养模式下宠物狗成熟后所需投入资金估算以及...在宠物市场中,宠物狗价格不仅仅是一个简单的数字,它包含了多方面的含义。除了直接的经济价值之外,还包括了养育成本、时间投入、情感投资等不可量化因素。对于商业饲养者来说,这些因素尤为重要,因为它们直接影响着业务盈亏。 一、繁殖阶段:初期资本与日常支出 1.1 初期https://www.gkklenewvt.cn/shui-zu-chong-wu/208304.html
5.揭秘宠物狗市场背后的利益链与你未知的金钱投入宠物狗价格大全:了解前所未有的真相 在我们追求那份温馨和陪伴的心愿中,宠物狗成为了许多家庭不可或缺的一员。然而,在这份温暖之外,有着一个被广泛忽视的现实——宠物狗的市场是一个充满了复杂利益链条和潜在风险的地方。 一、宠物狗价格的大幅波动 首先,我们要明确的是,不同品种的宠物狗价格差异巨大。从几千元...https://www.qqddujnzs.cn/chong-wu-zi-xun/453226.html
6.宠物变现实用性利用宠物级别的高品质肉类提升经济效益在现代社会中,养羊不仅是一种传统的农业活动,也成了一种可以带来经济收益的生意。尤其是那些以提高产品质量和服务水平为目的的小型农场,他们通过精心饲养10只羊一年,能够获得相对可观的收入。这篇文章将探讨如何通过宠物级别的高品质肉类提升经济效益,以及这种做法对于https://www.ontdhjbdb.com/nong-ye-zi-xun/341445.html
7.在追求经济效益与动物福利之间人们应该如何做出权衡和选择在高价位产品中,有时候会掺杂一些低成本材料,以确保盈利,而这对于消费者的健康安全是一个潜在威胁。此外,由于这些宠物通常需要购买昂贵的手套、食物和其他相关产品,所以消费者必须承担相应的开销。而如果没有充分考虑到长期照顾的问题,这些宠物很可能会变成负担。https://www.nssydxrcs.cn/yang-feng-bai-ke/274858.html
8.宠物店铺创业项目计划书(通用11篇)四、成本预算及盈利状况 1、成本预算 开家宠物店,首先要拿出1万元左右,参加培训一个月左右并拿到“宠物美容师”资格证。除了营养品跟上,还应该有专门的美容项目,所以,还应该拿出1万元投资宠物美容设施:洗澡池、一把电剪(2000元左右)和五个刀头(1000元)、三四把美容剪(2000元)、吹水机、电吹风、热水器等。两万...https://www.yjbys.com/chuangye/ziliao/chuangyejihuashu/631991.html
9.2022宠物店syb创业计划书(通用9篇)而在花鸟市场,经营较成气候,货源流通量很大,而且成本很低,但产品售价相对较低,竞争激烈,大学校花校草,也适合以产品销售为主,不宜做宠物美容和寄养。如果选择开在中高档的居民小区里,那么能够考虑用品销售、美容和寄养等全项目经营。 此外,鉴于宠物店的消费群体比较特殊,宠物店的选址要留意几个细节地方的问题。首先...https://www.oh100.com/kaidian/4351570.html
10.宠物店的创业计划书(通用11篇)四、成本预算及盈利状况 1、成本预算 开家宠物店,首先要拿出1万元左右,参加培训一个月左右并拿到“宠物美容师”资格证。除啦营养品跟上,还应该有专门的美容项目,所以,还应该拿出1万元投资宠物美容设施:洗澡池、一把电剪(20xx元左右)和五个刀头(1000元)、三四把美容剪(20xx元)、吹水机、电吹风、热水器等。两万...https://www.ruiwen.com/chuangyejihuashu/3067982.html
11.“免费领养”宠物的套路也太多了受访专家指出,以“免费领养”的方式进行宣传,实际让消费者支付项目类繁多的费用,或诱导消费者预付款,属于虚假广告行为。相关宠物领养信息的发布平台要把好审核关。监管部门对于这类现象应当加强监管,开展日常性抽查,发现一起查处一起,刹住宠物市场中的这股不良风气。 https://news.hangzhou.com.cn/shxw/content/2024-04/05/content_8711232.htm
12.宠物知识科普计划书.pptx01流浪宠物救助组织介绍各类流浪宠物救助组织及其工作内容,包括救援、医疗、收容和领养等。02领养代替购买倡导通过领养代替购买的方式,帮助更多的流浪宠物找到温暖的家。流浪宠物救助与领养05实施计划与资源需求CHAPTERABCD科普内容制作计划内容策划根据目标受众的需求和兴趣,制定宠物知识科普内容的大纲和主题。视觉设计为科普...https://m.renrendoc.com/paper/310426812.html
13.盘点资料报告范文8篇(全文)1、原材料盘点结果:本次清查原材料共 项,其中装备 项,散热器 项,盘点总金额 万元,盘点期间差异项,差异金额元,经核查差异项目原因为盘点期间生产急需用料领出尚未办理出库手续所致。 2、在产品及产成品盘点结果:本次按照公司生产编号全面清查在产品及产成品,其中装备盘点在产品共 台套,库存商品 台套;散热器盘点在...https://www.99xueshu.com/w/file9kpdoef9.html
14.当地政府推广爱心领养运动有何具体举措和目标在近年来,随着城市化进程的加快,以及人们生活水平的提高,宠物狗的数量也在不断增加。然而,这也带来了一个问题:宠物狗出门不拴绳的问题。这一现象在许多大城市中都有发生,其中包括合肥。在面对这一问题时,合肥市政府采取了一系列措施,以确保公众安全,同时鼓励主流社会成员参与到动物保护和爱心领养中去。 https://www.gurotsr.cn/shui-zu-chong-wu/534200.html